OCaml';什么是并行能力?

OCaml';什么是并行能力?,ocaml,parallel-processing,Ocaml,Parallel Processing,我对在项目中使用OCaml感兴趣,但是我不确定它的并行化功能在哪里。OCaml中是否有消息传递功能?OCaml是否能够有效地使用1个以上的CPU 我读到的关于这个主题的大部分内容都是在2002-2006年写的,我没有看到比这更近的东西 谢谢 目前,OCaml运行时不支持并行跨多个核心运行,因此单个OCaml进程无法利用多个核心。这不太可能直接改变;OCaml开发人员对提高并行性最感兴趣的方向似乎是允许多个OCaml运行时在单个进程中并行运行;这将允许非常快速的消息传递,但不允许多个线程在共享内存

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

我读到的关于这个主题的大部分内容都是在2002-2006年写的,我没有看到比这更近的东西


谢谢

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

有两个项目,即和,它们通过使用多个进程提供多核并行

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

的(“CWN”,来自的有趣消息摘要)显示:

  • 情况没有改变。值得注意的一句话:

    (…)一般来说,整个标准库不是线程安全的。也许应该在报告中说明这一点 线程库的文档,但按照标准库模块对其进行文档化并没有多大意义莱罗伊

    (有关Ocaml线程如何仍然有用,请参阅)

  • 最常采用的并行范例是消息传递,值得注意的是X.Leroy的,它为编程提供了针对消息传递的绑定。提供对示例和许多其他相关项目的参考

  • 另一个消息传递解决方案是,开创了新的并发通信方式,称为。请注意,它与OCaml编译器是二进制兼容的

  • 不过,这并没有阻止GC可以并行的运行时的添加:请参阅中的OCAML4MC讨论

还有:

  • -多处理通过映射共享内存共享ocaml值

  • -Caml并行程序的编译器

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



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

BSMLlib为OCaml中的数据并行编程提供了一个简化的编程接口。 它的执行相当于BSP风格的消息传递,但对于OCaml的子集来说,它是确定性的,甚至是声明性的。 关键概念是“PAR类型,它对应于一个向量的值,每个进程一个。”/P>

盖坦海恩斯酒店
巴黎大学Est

关于并行GC实验:是否可能有不同的GC可以“插入”?因此,开箱即用的OCaml将与非并发GC一起提供(就像现在一样),如果您需要,可以选择使用并发GC—这种情况可能吗?@anecodeal如果不同的GC是二进制兼容的,那么可能是这样。已经讨论过了;我不完全清楚为什么没有完成,除了没有人完成这项工作和/或他们不想维护多个运行时。@MichaelEkstrand OC4MC项目已经清理了OCaml的GC接口,以便创建更多的GC。问题是OCaml的数据表示给GC带来了巨大的压力,因此需要大量的工作才能从新GC中获得可比的性能,这让每个人都不敢尝试。很高兴知道,但是如果我需要将OCaml用于共享内存应用程序,该怎么办?是否有我可以使用的库/模块?社区wiki中提到的Netmulticore据说是非常新的,肯定既没有完全优化,甚至没有bug。根据这篇文章:,但那已经是4年多以前的事了,我想知道事情是否变得更好了?另请看这张图片中的哪些内容?跟踪多核OCaml的状态及其在reddit线程中的主流化