我最近将一些R代码转换为C ++,用于使用Rcpp包进行多元正态累积分布函数估计。我需要密集使用这个功能,我可以并行使用它。这就是为什么我想要很好地利用并行计算。为此,我使用了包parallel
。以下代码是我想要做的一个很好的例子:
library(inline)
library(Rcpp)
library(parallel)
#Compile the estimation routine
source("cppCode.R")
#Location parameters
nx <- 5
ny <- 5
points <- expand.grid(1:nx,1:ny)
#Correlation matrix
dist <- sqrt(outer(points[,1],points[,1], "-")^2 + outer(points[,2],points[,2], "-")^2)
sigma <- outer(dist[-1,1],dist[1,-1], "+") - dist[-1,-1]
test <- function(i){
mvnCpp(sigma, runif(nx * ny) * 10)[[1]]
}
#Parallel C++ code
out <- mclapply(1:1000, test, mc.cores = 2)
这段代码在OSX 10.9.5
clang-600.0.57
的个人计算机上编译并正常工作。我还使用Ubuntu 12.4
在Linux发行版(g++ 4.6.3
)上对其进行了测试,结果非常好。但是,当我切换到具有Debian 6.0.10
的Linux发行版(g++ 4.4.5
)的群集时,我有时会收到错误
*** caught segfault ***
address 0x6830000, cause 'memory not mapped'
此错误不是系统性的,但对于100次通话至少发生一次。我有可能找到g++ 4.8.1
,但是当我这样做时,代码不再编译错误
Error in compileCode(f, code, language = language, verbose = verbose) :
Compilation ERROR, function(s)/method(s) not created! g++: error: Rscript: No such file or directory
make: *** [file341c6e85284f.o] Error 1
我使用inline
编译了代码,并创建了一个我在每个snow进程中加载的包。不幸的是,错误仍然存在。
知道如何解决这个问题吗?
非常感谢你!