在多个核心上分配函数计算 - R.

时间:2018-01-17 18:42:13

标签: r foreach parallel-processing

我有一个类似下面的功能:

FXN <- function(a, b, c, d, e, f, g){
value <- (a*b/c+d^e)-f+g
write.table(value, paste(a, b, c, d, e, f, g, ".txt", sep = "")}

(但它的计算量更大,这只是演示了基本思想 - 在单个核心上进行一些计算;将其写入文件。)

如果我想在64核上并行评估此功能以获得

的所有组合
a = c(1, 2, 3, 4, 5)
b = c(5, 6, 7, 8, 9)
c = c(11, 12, 13, 14, 15)
d = c(3, 4)
e = c(5, 7, 8)
f = c(4, 5, 6)
g = c(2, 4, 6)

我该怎么做?这些值有6750种组合,因此该功能需要运行6750次。

我正在尝试以下方法,但我不确定foreach如何处理函数计算。理想情况下,对于我的实际功能,它只是在每个核心上运行函数,写入表格,然后移动到尚未运行的下一个组合。

library(foreach)
n_cores = 64
registerDoMC(n_cores)
foreach (a = c(1, 2, 3, 4, 5)) %dopar% {
  foreach (b = c(5, 6, 7, 8, 9)) %dopar%  {
    foreach (c = c(11, 12, 13, 14, 15)) %dopar%  {
      foreach (d = c(3, 4)) %dopar%  {
        foreach (e = c(5, 7, 8)) %dopar%  {
          foreach (f = c(4, 5, 6)) %dopar%  {
            foreach (g = c(2, 4, 6)) %dopar%  {
              FXN(
                a=a,
                b=b,
                c=c,
                d=d,
                e=e,
                f=f,
                g=g
              )
            }
          }
        }
      }
    }
  }
}

理论上这会起作用吗?还有什么其他方法可以在64个核心上分配6750组合,从而加快计算速度?

谢谢!

0 个答案:

没有答案