问题描述
我一直在学习使用 parallel
包在 R 中并行化代码,特别是具有 14 个内核的 mclapply()
函数。
我注意到,仅从几次代码运行中,mclapply()
的重复调用(使用相同的参数和相同数量的内核)所花费的时间长度明显不同。例如,第一次运行需要 18 秒,下一次运行需要 23 秒,而当我背靠背(在相同的输入上)执行它们时,下一次运行需要 34 秒。所以我等了一会儿,再次运行代码,结果又回到了 18 秒。
在运行代码后是否有一些等效的“计算机需要一秒钟冷却”,这意味着运行 mclapply()
背靠背的单独调用可能需要越来越长的时间,但等待一分钟左右,然后再次运行 mclapply()
让它恢复正常?
我对 R 中的并行化没有太多经验,但这是我能想到的唯一临时解释。知道我的推理是否得到验证,并详细了解为什么会发生这种情况,这将非常有帮助。谢谢!
澄清一下,我的电话是这样的:
RNGkind("L'Ecuyer-CMRG")
set.seed(1)
x <- mclapply(training_data,simulation,testing_data,mc.cores=14,mc.set.seed = TRUE)
连续运行两次对我来说第二次需要更长的时间。等一分钟再运行,又变快了。
解决方法
我没有用过 mcapply 但我用过 parallel、foreach 和 pbapply 包。我认为不一致的地方在于解雇工人和就并行运行任务的进度进行沟通涉及的开销很小。