【问题标题】:What is the state of OCaml's parallelization abilities?OCaml 的并行化能力状态如何?
【发布时间】:2011-09-29 03:09:18
【问题描述】:

我对在项目中使用 OCaml 很感兴趣,但是我不确定它的并行化功能在哪里。 OCaml 中是否有消息传递能力? OCaml 是否能够有效地使用超过 1 个 CPU?

我读到的关于这个主题的大部分内容都是在 2002 年至 2006 年写的,我没有看到任何更新的内容。

谢谢!

【问题讨论】:

标签: ocaml parallel-processing


【解决方案1】:

Caml weekly news(“CWN”,来自caml list 的有趣消息摘要)中的This 2009 issue 表明:

还有:

  • Netmulticore - 多进程通过映射共享内存共享 ocaml 值。

  • CamlP3l - Caml 并行程序的编译器。

  • OCaml-Java - 发出 Java 字节码的 OCaml 编译器


不过,我没有关注最近关于 Ocaml 和并行编程的讨论。 我将留下这个CW,以便其他人可以更新我提到的内容。如果这个问题能够达到与the analogous one for Haskell 相同的完整性水平,那就太好了。

【讨论】:

【解决方案2】:

目前,OCaml 运行时不支持跨多核并行运行,因此单个 OCaml 进程无法利用多核。这不太可能直接改变; OCaml 开发人员对提高并行性最感兴趣的方向似乎是允许多个 OCaml 运行时在单个进程中并行运行;这将允许非常快速的消息传递,但不允许多个线程在共享内存配置中并行运行。主要的问题是垃圾收集器;几年前,该团队尝试了并发 GC,但它在单线程情况下引入了无法接受的减速。

有几个项目,即FunctoryOCamlnet,它们通过使用多个进程来提供多核并行性。

一般来说,OCaml 社区倾向于支持消息传递方法,这种方法可以跨进程边界完成(就像 OCamlnet 一样),而不是单进程共享内存多线程。如果您的程序可以拆分为多个进程(很多都可以!),那么是的,您可以有效地使用多个 CPU。

【讨论】:

  • 关于并发 GC 实验:是否有可能有不同的 GC 可以“插入”?因此,开箱即用的 OCaml 将附带非并发 GC(就像现在一样),如果您需要,可以选择使用并发 GC - 这种情况可能吗?
  • @aneccodeal 如果不同的 GC 是二进制兼容的,这可能是可能的。已经讨论过了;我不完全确定为什么它没有完成,除了没有人完成这项工作和/或他们不想维护多个运行时。
  • @MichaelEkstrand OC4MC 项目已经清理了 OCaml 的 GC 接口,以便于创建更多的 GC。问题是 OCaml 的数据表示对 GC 施加了巨大压力,因此需要大量工作才能从新的 GC 中获得相当的性能,这让每个人都不敢尝试。
  • 很高兴知道,但如果我需要将 OCaml 用于共享内存应用程序怎么办?我可以使用任何库/模块吗?社区 wiki 中提到的 Netmulticore 据说是非常新的,而且肯定既不是完全优化的,也不是没有错误的。根据这篇帖子:blog.camlcity.org/blog/multicore3.html ,但那是 4 年前的事了,我想知道情况是否有所好转?
【解决方案3】:

BSMLlib 为 OCaml 中的数据并行编程提供了一个简化的编程接口。 它的执行相当于 BSP 样式的消息传递,但它是确定性的,甚至对于 OCaml 的子集是声明性的。 关键概念是'a par type,它对应于一个值向量,每个进程一个。

http://traclifo.univ-orleans.fr/BSML/ http://fr.wikipedia.org/wiki/Bulk_Synchronous_Parallel_ML

盖坦·海恩斯 巴黎东大学

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多