R参考类与双平行
最近,我正在尝试将引用类与R参考类与双平行,r,parallel-processing,reference-class,R,Parallel Processing,Reference Class,最近,我正在尝试将引用类与并行一起使用。我尝试了4种不同的方案,多核、MPI、套接字和分叉。然而,只有多核才能产生正确的结果。MPI、PSOCK和Forking都会产生错误 PS:我在一个支持MPI的计算机集群上运行这个脚本 library(doParallel) np = 4L # cl <- makeCluster(np, type="MPI", outfile = "") # cl <- makeCluster(np, type="PSOCK", outfile = "")
并行
一起使用。我尝试了4种不同的方案,多核、MPI、套接字和分叉。然而,只有多核才能产生正确的结果。MPI、PSOCK和Forking都会产生错误
PS:我在一个支持MPI的计算机集群上运行这个脚本
library(doParallel)
np = 4L
# cl <- makeCluster(np, type="MPI", outfile = "")
# cl <- makeCluster(np, type="PSOCK", outfile = "")
# cl <- makeCluster(np, type="FORK", outfile = "")
cl <- np # multicore
registerDoParallel(cl)
myClass = setRefClass("myClass",
fields = c("a"),
methods = list(
hello = function(){cat("hello\n")},
show = function(){cat("show\n")}
)
)
objs = foreach(i = 1:4) %dopar% {
obj = new("myClass")
obj$a=i
obj
}
库(双并行)
np=4L
#cl问题是集群工作程序需要初始化。对于这种情况,我将使用clusterEvalQ
或clusterCall
:
clusterEvalQ(cl, {
myClass <- setRefClass("myClass",
fields = c("a"),
methods = list(
hello = function(){cat("hello\n")},
show = function(){cat("show\n")}
))
NULL
})
clusterEvalQ(cl{
myClass谢谢,有趣的是,我在自己的计算机上使用“FORK”群集没有问题,在我的学校群集上也有问题(与MPI和PSOCK相同)。但无论如何,我不会在我的学校群集上使用“FORK”。我注意到引用类“实例”由new
创建的,将克隆到辅助对象,另一方面,引用类
定义不会“克隆”到辅助对象。
clusterEvalQ(cl, {
myClass <- setRefClass("myClass",
fields = c("a"),
methods = list(
hello = function(){cat("hello\n")},
show = function(){cat("show\n")}
))
NULL
})