我有兴趣在项目中使用 OCaml,但是我不确定它的并行化功能在哪里。 OCaml中有消息传递能力吗? OCaml 是否能够有效地使用 1 个以上的 CPU?
我读到的有关该主题的大部分内容都是在 2002-2006 年写的,我没有看到任何更新的内容。
谢谢!
2009 年的Caml 每周新闻(“CWN”,来自 caml 列表的有趣消息摘要)显示:
线程和 Ocaml 上的官方路线没有改变。值得注意的引用:
(...) 一般来说,整个标准库都不是线程安全的。也许应该在 线程库的文档,但是按标准库模块记录它并没有多大意义。 ——X.勒罗伊
(关于 Ocaml 线程如何仍然有用,请参阅 罪魁祸首本人在关于 SO 的另一个问题中的评论)
OcamlMPI,它提供了针对 MPI 标准的 SPMD 风格的编程绑定。 我在上面提到的同一 CWN 问题 提供了示例参考以及许多其他相关项目。
,以便其他人可以更新我提到的内容。如果这个问题能够达到与 Haskell 的类似问题相同的完整性水平,那就太好了。 目前 OCaml 运行时不支持跨多个核心并行运行,因此单个 OCaml 进程无法利用多核的优势。这不太可能直接改变; OCaml 开发人员最感兴趣的提高并行性的方向似乎是允许多个 OCaml 运行时在单个进程中并行运行;这将允许非常快速的消息传递,但不允许多个线程在共享内存配置中并行运行。主要的问题是垃圾收集器;几年前,该团队尝试了并发 GC,但它在单线程情况下带来了不可接受的减速。
另请参阅 OCaml 5.0 手册中的相关文档。使用domainslib,支持异步/等待风格的并行任务和用于直接并行执行的
parallel_for
- 使用共享内存并行性。 从 OCaml 5.0 开始,它仍然有一些限制,仅支持 ARM64 和 x86-64 架构(请在更改时编辑此答案),并且最多仅支持 128 个域(对应于 128 个操作系统线程)。