我已经编写了一个函数,Rcpp并使用进行了编译inline。现在,我想在不同的内核上并行运行它,但是遇到一个奇怪的错误。这是一个最小的示例,该函数funCPP1可以编译并运行良好,但不能由snow的clusterCall函数调用。该函数可以作为单个进程很好地运行,但是在并行运行时会出现以下错误:
Error in checkForRemoteErrors(lapply(cl, recvResult)) :
2 nodes produced errors; first error: NULL value passed as symbol address
这是一些代码:
## Load and compile
library(inline)
library(Rcpp)
library(snow)
src1 <- '
Rcpp::NumericMatrix xbem(xbe);
int nrows = xbem.nrow();
Rcpp::NumericVector gv(g);
for (int i = 1; i < nrows; i++) {
xbem(i,_) = xbem(i-1,_) * gv[0] + xbem(i,_);
}
return xbem;
'
funCPP1 <- cxxfunction(signature(xbe = "numeric", g="numeric"),body = src1, plugin="Rcpp")
## Single process
A <- matrix(rnorm(400), 20,20)
funCPP1(A, 0.5)
## Parallel
cl <- makeCluster(2, type = "SOCK")
clusterExport(cl, 'funCPP1')
clusterCall(cl, funCPP1, A, 0.5)
慕工程0101907
慕虎7371278