我使用R开发的代码,使用DEoptim(一种旨在最小化目标函数的函数)校准具有8个参数的水文模型。 DEoptim代码使用'parallel'包来检测可用的内核数量,使用'DetectCores()'。在我的PC上,我有4个核心,每个核心有2个线程,因此它可以检测到8个核心,然后将水文模型发送到具有不同参数值的核心,并将结果返回到中心。它完成了数百次或数千次并迭代参数以尝试找到最佳集合。因此,可用的内核越多,它的工作速度就越快。
我在大学,可以访问Linux计算群集。它们的服务器最多有12个核心(即不是线程),如果我使用它,它的工作速度比我的PC快两到三倍。大。但是,理想情况下,我会将代码分布在其他服务器上,这样我就可以访问更多内核,并将所有信息发送回主服务器。
因此,我的问题是如何在我的代码中包含Rmpi以有效地增加可用内核。你可能会说,我对使用集群很新。
非常感谢,Antony
答案 0 :(得分:1)
如果要在Linux群集的多个节点上执行DEoptim
,我相信您需要在foreach
参数中指定parallelType=2
来使用control
。您可以将doMPI
并行后端或doParallel
后端与MPI群集对象一起使用。例如:
library(doParallel)
library(Rmpi)
cl <- makeCluster(mpi.universe.size()-1, type='MPI')
registerDoParallel(cl)
# and eventually...
DEoptim(fn=Genrose, lower=rep(-25, n), upper=rep(25, n),
control=list(NP=10*n, itermax=maxIt, parallelType=2))
除了其他软件包之外,您还需要安装snow
软件包。另外,请确保使用-np 1
选项使用mpirun执行脚本。如果你不使用mpirun,工作人员将全部在本地机器上生成。