繁体   English   中英

R - 有没有办法创建嵌套的 %dopar% foreach 循环?

[英]R - is there a way to create a nested %dopar% foreach loop?

我在一个有 64 个核心的工作站上处理日常系列的卫星图像。

对于每个图像,我使用foreach循环对所有像素执行一些代数运算。 一些测试表明,这个foreach循环的最佳核心数是 20。

这大致就是我现在正在做的事情:

for (i in length(number_of_daily_images){

  # perform some pre-processing on each image

  # register cluster to loop over pixels
  registerDoParallel(20)

  out <- foreach(j=1:length(number_of_pixels_in_each_image)) %dopar% {

    # perform some calculations

  } # end inner loop
} # end outer loop

我只需要加载一次卫星图像,因此此代码中涉及的 I/O 处理非常少。 所以肯定有进一步加速这个代码的空间。 由于我只使用计算机上可用内核的三分之一,我想同时运行三天以节省我工作流程中的一些宝贵时间。

因此,我也在考虑并行化我的外循环。 它会是这样的:

# register cluster to loop over images
registerDoParallel(3)

out2 <- foreach (i = length(number_of_daily_images) %dopar% {

  # perform some pre-processing on each image

  # register cluster to loop over pixels
  registerDoParallel(20)

  out1 <- foreach(j = 1:length(number_of_pixels_in_each_image)) %dopar% {

    # perform some calculations

  } # end inner loop
} # end outer loop

但是,当我运行此代码时,我收到一条错误消息,指出内部循环中的处理所涉及的变量之一不存在。 但它适用于“常规”外部for循环。

因此,我的问题是:我可以像我计划的那样在 foreach 中使用两个嵌套的%dopar%循环吗? 如果没有,是否还有其他替代方法也可以并行化我的外循环?

Foreach 维护者在这里。

使用%:%运算符:

registerDoParallel(60)

out2 <- foreach(i = 1:length(number_of_daily_images)) %:% 
  foreach(j = 1:length(number_of_pixels_in_each_image)) %dopar% {

    # perform some calculations
    something(i, j)

  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM