假设我想构建一个并行编译Ocaml源代码的程序。实际上,我现在想知道如何使用Ocaml来实现这一点。那么,考虑到目前Ocaml的现状,我该如何并行化我的程序部分呢?
我应该只使用Unix模块生成新的进程吗?在并行编译的情况下,这是否有任何开销/性能影响?
发布于 2018-04-17 18:42:46
要编译文件,必须运行ocaml编译器,每个文件一个。因此,是的,您必须启动新的进程,而Unix模块具有实现这一点的必要功能。
至于开销或性能影响,请考虑以下内容:
1)您需要为每个编译的文件启动一个进程。无论是顺序执行还是并行执行,启动的进程数都保持不变。
2)即使考虑并行编译,编译一个文件也要比启动每次编译所需的记账时间长。
因此,您是否担心并行启动和跟踪多个编译器进程的开销?不要这样。这还不到你时间的0.1%。另一方面,通过运行2个编译器来使用2个cpu核心,基本上会使您的速度翻倍。
或者,您是否担心多个编译器并行运行?您需要两倍的ram,并且在大多数现代cpus上,缓存是共享的,因此缓存性能在一定程度上也会受到影响。但是,除非您使用的是完全内存不足的嵌入式系统,否则这不会成为问题。因此,使用多核的好处远远大于缺点。
只需遵循并行运行的简单规则:在每个CPU核心上运行一个作业,并可能额外运行一个作业来平滑IO等待。更多的工作将使他们在没有好处的情况下争夺CPU时间。
https://stackoverflow.com/questions/40945738
复制相似问题