myfun是一个用户定义的功能,例如,myfun =函数(X){X ^ 3}。现在我想用于向量运行myfun,说T = 1:通过使用3个从站10中,在平行。我的代码如下,
mpi.spawn.Rslaves(nslaves=3)
source("myfun.R")
mpi.bcast.cmd(myfun) #broadcast myfun to slaves
x=1:10
grp=ceiling(seq_along(x)/3)
grp[10]=3
sx=split(x,grp)
mpi.scatter.Robj2slave(sx) #scatter x into 3 groups to slaves
y=mpi.remote.exec(cmd=myfun,sx) #this does not work!
print(y)
mpi.close.Rslaves()
mpi.quit()
问题是,RMPI将不会散落SX正确执行myfun。在手册中,关于命令mpi.remote.exec它说
...用作参数到CMD(功能命令),用于使它们的(主)值至R从站,即,如果“myfun(X)”将R上从站的“x”作为主变量,使用mpi.remote被执行.exec(CMD = myfun,X)。
由于“X”是一个主变量,这是否意味着它不可能执行myfun对奴隶散射的x?如果不是,有什么用RMPI到并行计算上面的例子中的正确方法?
里面myfun,使用
i <- mpi.comm.rank()
摘下SX的组分
myfun<-
function(x)
{
i <- mpi.comm.rank()
x[[i]]^3
}