我正在使用 Snow 包开发并行 R 代码,但是当使用 Rcpp 包调用 C++ 代码时,程序只是挂起并且没有响应。
作为一个例子......我在R中有以下代码,它使用雪分割成一定数量的进程
MyRFunction<-function(i) {
n=i
.Call("CppFunction",n,PACKAGE="MyPackage")
}
if (mpi) {
cl<-getMPIcluster()
clusterExport(cl, list("set.user.Random.seed"))
clusterEvalQ(cl, {library(Rcpp); NULL})
out<-clusterApply(cl,1:mc.cores,MyRFunction)
stopCluster(cl)
}
else
out <- parallel::mclapply(1:mc.cores,MyRFunction)
而我的 C++ 函数看起来像......
RcppExport SEXP CppFunction(SEXP n) {
int n=as<int>(n);
}
如果我用 mpi=false 和 mc.cores=[some number of threads] 运行它,程序运行得很好但是如果我用 mpi=true 运行它,因此使用雪,程序只是挂在 int=as<int>(n )??????另一方面,如果我将 C++ 函数定义为...
RcppExport SEXP CppFunction(SEXP n) {
CharacterVector nn(n);
int n=boost::lexical_cast<int>(nn[0]);
}
该程序在每个 mpi 线程上完美运行??问题是它适用于整数双精度等,但不适用于矩阵 另外,我必须使用 boost 包中的 lexical_cast 才能使其工作,因为 as<> 不能。
有谁知道这是为什么,以及我在这里缺少什么,所以我也可以加载我的矩阵?