我正在使用Snow包開發並行R代碼,但使用Rcpp包調用C++代碼時,程序只是掛起並且沒有響應。無法在並行代碼中調用C++代碼中的參數Snow
作爲一個例子... 我有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 = [一定數量的線程]運行它,程序運行非常漂亮但是如果我用mpi = true運行它,因此使用雪,程序只是掛在int =int >(n)????? 在另一方面,如果我定義的C++函數作爲...
RcppExport SEXP CppFunction(SEXP n) {
CharacterVector nn(n);
int n=boost::lexical_cast<int>(nn[0]);
}
該程序完全運行在每個MPI螺紋??問題是,它適用於整數加倍等,但不是矩陣 此外,我必須使用boost包中的lexical_cast使其起作用,因爲<>不。
有人知道這是爲什麼,我在這裏失蹤,所以我可以加載我的矩陣?
可能的重複http://stackoverflow.com/questions/6074310/snow-inline-rcpp?rq=1 –