我一直在使用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 –几乎可以解决我的问题,但不能完全解决。)>
*我很乐意提供我的代码,但它似乎与本示例无关。我希望对这两种方法之间的差异进行更一般的分类。