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
但是,当我 运行 这段代码时,我收到一条错误消息,指出参与内部循环处理的变量之一不存在。但它在 "regular" outter 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)
}
我正在 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
但是,当我 运行 这段代码时,我收到一条错误消息,指出参与内部循环处理的变量之一不存在。但它在 "regular" outter 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)
}