如何通过使用RMPI远程执行myfun和分散矢量

问题描述 投票:1回答:1

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到并行计算上面的例子中的正确方法?

r parallel-processing mpi
1个回答
0
投票

里面myfun,使用

i <- mpi.comm.rank()

摘下SX的组分

myfun<-
function(x)
{
     i <- mpi.comm.rank()
     x[[i]]^3
}
© www.soinside.com 2019 - 2024. All rights reserved.