OCaml程序可以使用多个处理器核心吗?

to_*_*rux 4 ocaml

能够达到最大速度是不是很重要?

编辑:

例如,Clojure有pmap,它使用多个核心.

Harrop博士写道(2011年1月9日):
语言中添加的新功能,例如OCaml 3.12中的一流模块,远没有多核能力那么有价值.

gas*_*che 6

是的,它可以; 为此,您应该使用多处理模型,您可以在其中编程生成多个进程以独立进行计算,然后合并结果.

最简单的方法是使用Unix.fork系统调用将程序分成两个进程.这例如在OCaml的在线书籍Unix系统编程中描述.如果要在核心之间拆分的计算具有简单的结构(迭代,在输入池上进行映射),Parmap是一个可以让您轻松地从并行性中受益的库,只需更改应用程序中的某些函数调用(如果它已经结构良好).如果你想做更复杂的事情(直接访问共享内存结构,消息框......),Ocaml-net项目通过Netmulticore库支持许多方便的功能.

如果您想进行分布式编程(在多台机器的集群上运行的程序),OcamlMPI库为众所周知的分布式消息传递框架MPI提供支持.还有更多的实验性和高级JoCaml扩展,它使用了一种有趣的,更具研究性的并发通信方法.

请注意,如果您没有特定的性能限制,或者您的应用程序本质上是顺序的,那么尝试并行化某些计算(以同步的更高的簿记开销为代价)是没有意义的,在后一种情况下,因为的Amdahl定律.