我有一个类似下面的功能:
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组合,从而加快计算速度?
谢谢!