OCaml 的并行化能力怎么样?

问题描述 投票:0回答:4

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

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

谢谢!

ocaml parallel-processing
4个回答
23
投票

2009 年Caml 每周新闻(“CWN”,来自 caml 列表的有趣消息摘要)显示:

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

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

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

  • 不过,我还没有关注最近有关 Ocaml 和并行编程的讨论。
我要留下这个
CW

,以便其他人可以更新我提到的内容。如果这个问题能够达到与 Haskell 的类似问题相同的完整性水平,那就太好了。 目前 OCaml 运行时不支持跨多个核心并行运行,因此单个 OCaml 进程无法利用多核的优势。这不太可能直接改变; OCaml 开发人员最感兴趣的提高并行性的方向似乎是允许多个 OCaml 运行时在单个进程中并行运行;这将允许非常快速的消息传递,但不允许多个线程在共享内存配置中并行运行。主要的问题是垃圾收集器;几年前,该团队尝试了并发 GC,但它在单线程情况下带来了不可接受的减速。


8
投票
Functory

OCamlnet

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

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


1
投票
http://traclifo.univ-orleans.fr/BSML/

http://fr.wikipedia.org/wiki/Bulk_Synchronous_Parallel_ML

盖坦·海恩斯 巴黎东大学

Ocaml 5.0(2022 年 12 月 16 日)

1
投票

另请参阅 OCaml 5.0 手册中的相关文档。使用domainslib,支持异步/等待风格的并行任务和用于直接并行执行的

parallel_for

- 使用共享内存并行性。 从 OCaml 5.0 开始,它仍然有一些限制,仅支持 ARM64 和 x86-64 架构(请在更改时编辑此答案),并且最多仅支持 128 个域(对应于 128 个操作系统线程)。

    

© www.soinside.com 2019 - 2024. All rights reserved.