※ 引述《b10009047 (Nicklee)》之铭言:
: [问题叙述]:
: 大家好,最近接触到'snow'这个用于平行运算的package后觉得十分有趣,刚好目前在做
: 的事情十分需要加快计算速度,因此尝试使用parRapply, parSapply这些function
: 突然发现,若是我在parRapply当中在包一个apply,或是parRapply function都会产生
: 问题,例如 :
: library(snow)
: library(Rmpi)
: data <- matrix(1:6, ncol = 2)
: target <- 11:16
: cl <- makeCluster(2, type = 'MPI')
: parRapply(cl = cl, data, function(x) {
: x <- t(as.matrix(x))
: parRapply(cl = cl, x, function(x){
: target[x]
: })
: })
: stopCluster(cl)
: 会回报错误讯息:
: Error in checkForRemoteErrors(val) :
: 2 nodes produced errors; first error: 找不到物件 'cl'
: 唯一能想像的到的可能为,cl可能是在某个cpu下被定义的,但其他cpu并不知道cl的定义
: 因此产生以下错误讯息,此外也想不到其他可能的原因,想请教是否有人有碰过相同的
: 问题呢?
: 谢谢各位!
: [软件熟悉度]:
: 使用者(对R的基本使用还算熟悉)
大家好,最近也遇到相同的问题。
主要是想了解一个概念性的问题:平行运算究竟能否包两层以上。
我用的套件是parallel
函数也是parlapply
在实作时有一个四层循环的程式
最内层用平行运算处理速度确实快很多。
但当我想将第二层(最内层算第一层最外层算第四层)也化成平行运算时就会遇到跟上面一样的问题。
尝试过各种方法
例如每一层的CPU重新定义(第一层指派为cl第二层指派为dl)
或是不同层用不同的套件执行平行运算。
但都会发生上述的错误讯息。
因此猜测平行运算本来就不能像循环一样包好几层。
请问是否有高手熟悉这方面的实作呢?