R中的并行计算:多核的“分叉”与雪的“分叉”之间有什么区别?

时间:2019-07-07 16:48:00

标签: r foreach multicore doparallel snow

我一直在使用doParallel包在R中进行并行计算的实验。据我了解,取决于如何调用registerDoParallel,您可能会使用multicore API或snow API。

例如,要利用multicore进行分叉,您需要执行以下操作:

registerDoParallel(4)

并利用snow进行分叉,您需要执行以下操作:

cl <- makeCluster(4, type="FORK")
registerDoParallel(cl)

我有一个相当简单的工作*,它正在计算矩阵对象的汇总统计信息。但是,尽管这两种方法表面上都使用了派生(因此所有子作业都应该访问相同的地址空间才能使用此矩阵),但性能/内存使用却截然不同。 (特别是multicore的效果要好得多。)

在尝试进一步诊断之前,我想过要问:是否有人对发生这种情况的原因有一个直观的解释,这是否正常?我一直在到处寻找可以分解两者之间差异的资源,但是我一直找不到能详细分解两者的内容。 (由于内存问题)是否存在multicore版本可以运行而snow版本不能运行的情况?

(注意:这全部是在具有16 GB RAM的Mac上。我确实读过这些线程-Does multicore computing using R's doParallel package use more memory?reading global variables using foreach in R –几乎可以解决我的问题,但不能完全解决。)

*我很乐意提供我的代码,但它似乎与本示例无关。我希望对这两种方法之间的差异进行更一般的分类。

0 个答案:

没有答案