用foreach实现R中嵌套并行计算的策略考虑
我使用R中的用foreach实现R中嵌套并行计算的策略考虑,r,foreach,parallel-processing,nested-loops,R,Foreach,Parallel Processing,Nested Loops,我使用R中的foreach-包并行运行一些代码 从技术上讲,这对我来说是可行的,但老实说,计算上的改进是相当温和的 由于我在并行计算方面的经验有限,在网上只能找到相当过时(或有问题)的文章,我希望我能从你的经验中总结出提高效率的策略 情况如下,我有一个外循环(数千次迭代,因此核心数少于迭代数)和多个较小的内循环(迭代数少于可用核心数)。需要计算的部分出现在较小的内部循环中 到目前为止,我一直在使用foreach和%dopar%运行外部循环;以及内部带有标准的循环 其原因是,如果我并行运行内部内核
foreach
-包并行运行一些代码
从技术上讲,这对我来说是可行的,但老实说,计算上的改进是相当温和的
由于我在并行计算方面的经验有限,在网上只能找到相当过时(或有问题)的文章,我希望我能从你的经验中总结出提高效率的策略
情况如下,我有一个外循环(数千次迭代,因此核心数少于迭代数)和多个较小的内循环(迭代数少于可用核心数)。需要计算的部分出现在较小的内部循环中
到目前为止,我一直在使用foreach
和%dopar%
运行外部循环;以及内部带有标准的循环
其原因是,如果我并行运行内部内核,大多数内核将保持未使用状态,因为循环本身的迭代次数少于可用的内核
请参见一些伪代码进行说明:
foreach(it = 1:10000, .inorder = FALSE) %dopar% {
Some simple computations
for(i in 1:10){
Some demanding computation
}
Some more simple computations
for(i in 1:10){
And some more demanding computation
}
}
我的问题是,根据您的经验,并行运行内部或外部循环或两者都运行是否更有效?如果并行运行内部循环,我关于不使用内核的推理是否正确
仅供参考,我目前正在开发一台8核、16 GB RAM的机器,但最终将使用16核和50 GB RAM将其带到云端
希望你能分享你的经验,因为我相信这是其他人偶尔也会面临的决定
最好的,
奥利弗完整的内部计算需要多少时间?并行计算有设置工作人员的开销,如果计算时间太短,当前在开发阶段大约30分钟,开销将超过收益。之后,大约四个小时。在这种情况下,改善应该是工人数量:你能详细说明一下“相当适度”吗?您是否在任务管理器中验证了所有处理器都在工作?相当温和的意思是,运行一次外循环迭代(显然是“顺序地”)需要35分钟。五次迭代(七个核心)需要四小时六分钟。我相信这可能是可用RAM的问题,阻碍了并行计算的性能。是的,我已经检查了任务管理器。所有内核都按预期运行。