假设我想构建一个并行编译Ocaml源代码的程序。我实际上想了解如何使用Ocaml实现这一目标。因此,鉴于今天Ocaml的当前状态,我如何并行化我的程序的一部分?
我是否应该使用Unix
模块生成新进程?
在并行编译的情况下,这是否会产生任何开销/性能影响?
答案 0 :(得分:0)
要编译文件,您必须运行ocaml编译器,每个文件一个。所以,是的,您必须启动新进程,并且Unix模块具有必要的功能。
关于间接费用或性能影响,请考虑以下事项:
1)您需要为每个编译的文件启动一个进程。按顺序执行的天气或平行启动的进程数保持不变。
2)编译文件需要很长时间,因为与开始每次编译所需的簿记相比,即使您考虑并行编译也是如此。
您是否担心并行启动和跟踪多个编译器进程的开销?不要。那不到0.1%的时间。另一方面,通过运行2个编译器来使用2个cpu核心,基本上会使你的速度加倍。
或者您是否担心并行运行多个编译器?你需要两倍的内存,并且大多数现代的cpus缓存都是共享的,因此缓存性能也会受到一定程度的影响。但除非你正在研究一些绝对缺乏内存的嵌入式系统,否则不会出现问题。因此,使用多核的好处远远超过了缺点。
只需遵循并行运行的简单规则:每个CPU核心运行一个作业,可能需要一个额外的工作来平滑IO等待。更多的工作将使他们争取CPU时间而没有任何好处。