集群上的Rcpp编译问题

时间:2015-04-01 09:00:28

标签: c++ r compilation parallel-processing rcpp

我最近将一些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进程中加载​​的包。不幸的是,错误仍然存​​在。

知道如何解决这个问题吗?

非常感谢你!

0 个答案:

没有答案