最近,我正在尝试将引用类与parallel
. 我尝试了 4 种不同的方案,多核、MPI、Socket 和 Forking。但是,只有多核才能产生正确的结果。而 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
}
它可能与参考类的并行计算有关
更新:
更多调查表明,引用类实例是克隆的,但不是引用类定义。
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")}
)
)
obj = new("myClass")
obj$a = 0
results = foreach(i = 1:4) %dopar% {
obj$a # no error
newobj = new("myClass") # error
}