用foreach实现R中嵌套并行计算的策略考虑

用foreach实现R中嵌套并行计算的策略考虑,r,foreach,parallel-processing,nested-loops,R,Foreach,Parallel Processing,Nested Loops,我使用R中的foreach-包并行运行一些代码 从技术上讲,这对我来说是可行的,但老实说,计算上的改进是相当温和的 由于我在并行计算方面的经验有限,在网上只能找到相当过时(或有问题)的文章,我希望我能从你的经验中总结出提高效率的策略 情况如下,我有一个外循环(数千次迭代,因此核心数少于迭代数)和多个较小的内循环(迭代数少于可用核心数)。需要计算的部分出现在较小的内部循环中 到目前为止,我一直在使用foreach和%dopar%运行外部循环;以及内部带有标准的循环 其原因是,如果我并行运行内部内核

我使用R中的
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的问题,阻碍了并行计算的性能。是的,我已经检查了任务管理器。所有内核都按预期运行。