And*_*ott 40 parallel-processing ocaml
我有兴趣将OCaml用于项目,但是我不确定它的并行化功能在哪里.OCaml中是否有消息传递功能?OCaml能否有效地使用1个以上的CPU?
我读到的关于这个主题的大部分内容是在2002 - 2006年写的,我最近没有看到任何东西.
谢谢!
hui*_*ker 23
2009年发行的Caml每周新闻("CWN",来自caml列表的有趣消息的摘要)表明:
线程上的官方派对和Ocaml没有改变.值得注意的一句话:
(...)一般来说,整个标准库不是线程安全的.可能应该在线程库的文档中说明,但是按照标准库模块记录它并没有多大意义. - X. Leroy
(关于Ocaml线程如何仍然有用,请查看罪犯本人在另一个问题上的评论)
并行性最常用的范例是消息传递,值得注意的是X. Leroy的OcamlMPI,它提供了针对MPI标准的SPMD风格编程绑定.我在上面指出的同一个CWN问题提供了对示例和许多其他相关项目的引用.
另一个消息传递解决方案是JoCaml,它是一种新的并发通信方式,称为连接计算.请注意,它与OCaml编译器是二进制兼容的.
但是,这并没有阻止其GC并行性的运行时的完美结合:请参阅CWN的另一个问题中对OCAML4MC的讨论.
还有:
Netmulticore - 通过映射共享内存共享ocaml值的多处理.
CamlP3l - Caml并行程序的编译器.
OCaml-Java - 一个发出Java字节码的OCaml编译器
不过,我没有关注Ocaml和并行编程的最新讨论.我要离开这个CW,以便其他人可以更新我提到的内容.如果这个问题可以达到与Haskell类似的完整性,那将是很好的.
目前,OCaml运行时不支持并行运行多个内核,因此单个OCaml进程无法利用多个内核.这不太可能直接改变; OCaml开发人员最感兴趣的方向是增加并行性,这似乎允许多个OCaml运行时在一个进程中并行运行; 这将允许非常快速的消息传递,但不允许多个线程在共享内存配置中并行运行.主要的垃圾是垃圾收集器; 几年前,该团队尝试了并发GC,但它在单线程案例中引入了不可接受的减速.
有几个项目,即Functory和OCamlnet,它们通过使用多个进程提供多核幸福的并行性.
通常,OCaml社区倾向于支持消息传递方法,这可以通过单进程共享内存多线程跨进程边界(如OCamlnet)来完成.如果您的程序可以分成多个进程(很多可以!),那么是的,您可以有效地使用多个CPU.