为了达到最大的速度,能做到这一点不是很重要吗?
编辑:
例如,Clojure有pmap,它使用多个核心。
Harrop博士写道(2011年1月9日):
添加到语言中的新特性,如OCaml 3.12中的一流模块,远不及多核功能所具有的价值。
发布于 2013-01-26 23:27:58
是的,它可以;为此,您应该使用一个多处理模型,在该模型中,您编程生成多个进程来独立地进行计算,然后合并结果。
最简单的方法是使用Unix.fork系统调用将程序分成两个进程。例如,在线书OCaml中的Unix系统编程中对此进行了描述。如果您想要跨核拆分的计算有一个简单的结构(迭代,在输入池上映射),那么帕图是一个库,它可以让您很容易地从并行性中受益,只需更改应用程序中的一些函数调用(如果它已经具有良好的结构)。如果您想做更复杂的事情(直接访问共享内存结构、消息框.),Ocaml项目通过网多核库支持许多方便的特性。
如果您想要进行分布式编程(运行在多台计算机集群上的程序),OcamlMPI库提供了对众所周知的分布式消息传递框架MPI的支持。还有一个更实验性和更高级的JoCaml扩展,它使用了一种有趣的、研究更多的并发通信方法。
请注意,如果您没有特定的性能约束,或者如果您的应用程序本身是顺序的,那么就没有必要费心地并行化一些计算(代价是同步的较高的簿记开销),在后一种情况下是因为Amdahl定律。
发布于 2015-01-23 13:43:48
如果您的并行代码生成了大量的数据,那么在OCaml中高效地获取它是不容易的。传统的解决方法是将进程和封送结果分送回父进程,但父进程随后反序列化单个核心上的所有数据,重新分配其自身堆上的所有数据。这在多核上效率很低,这意味着OCaml不能表示大多数并行算法(包括pmap )的有效实现。
https://stackoverflow.com/questions/14540660
复制相似问题