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=[いくつかのスレッド] で実行すると、プログラムは美しく実行されますが、mpi=true で実行すると、したがって Snow を使用すると、プログラムは int=as<int>(n )????? 一方、C++ 関数を次のように定義すると...
RcppExport SEXP CppFunction(SEXP n) {
CharacterVector nn(n);
int n=boost::lexical_cast<int>(nn[0]);
}
プログラムは各 mpi スレッドで完全に実行されますか?? 問題は、整数倍精度などでは機能しますが、行列では機能しないことです。
これがなぜなのか、そして私がここで何が欠けているのか知っている人はいますか?