如何使用Rmpi远程执行myfun和分散向量

如何使用Rmpi远程执行myfun和分散向量,r,parallel-processing,mpi,R,Parallel Processing,Mpi,例如,myfun是一个用户定义的函数, myfun=函数(x){x^3}。 现在我想用3个从机并行运行向量的myfun,比如t=1: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.Robj

例如,myfun是一个用户定义的函数, myfun=函数(x){x^3}。 现在我想用3个从机并行运行向量的myfun,比如t=1: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从机的值,即如果将在R上执行“myfun(x)” 将“x”作为主变量的从属变量,使用mpi.remote.exec(cmd=myfun,x)

既然“x”是主变量,这是否意味着不可能对从机上分散的x执行myfun?如果不是,使用Rmpi并行计算上述示例的正确方法是什么?

在myfun中,使用

i <- mpi.comm.rank()
i在myfun中,使用

i <- mpi.comm.rank()

i我认为您的问题在于使用

mpi.bcast.cmd(myfun) #broadcast myfun to slaves
我想这应该是

mpi.bcast.Robj2slave(myfun)
请注意中的描述


@zmirlig详细介绍了您的
myfun
可能存在第二个问题,但如果不查看函数的代码,很难说。

我认为您的问题在于使用

mpi.bcast.cmd(myfun) #broadcast myfun to slaves
我想这应该是

mpi.bcast.Robj2slave(myfun)
请注意中的描述

@zmirlig详细介绍了您的
myfun
可能存在第二个问题,但如果不看到函数的代码,很难说