在Windows上的parLapply中使用Rcpp函数

时间:2014-09-01 13:14:59

标签: r parallel-processing rcpp

我在Windows上使用Rcpp和并行计算进行R代码优化。我在parLapply中调用Rcpp函数时遇到问题。以下是

的例子

Rcpp代码(test.cpp)

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector payoff( double strike, NumericVector data) {
    return pmax(data - strike, 0);
}

R代码

library(parallel)
library(Rcpp)

sourceCpp("test.cpp")

strike_list <- as.list(seq(10, 100, by = 5))

data <- runif(10000) * 50

# One core version
strike_payoff <- lapply(strike_list, payoff, data)

# Multiple cores version
numWorkers <- detectCores()
cl <- makeCluster(numWorkers, type = "PSOCK")
clusterExport(cl = cl,varlist = "payoff")
strike_payoff <- parLapply(cl, strike_list, payoff, data)

并行版本的错误

Error in checkForRemoteErrors(val) : 
  8 nodes produced errors; first error: NULL value passed as symbol address   

我知道这是一个Windows问题,因为mclapply在Linux上运行良好,但我没有像Windows一样强大的Linux机器。

任何想法如何解决?

1 个答案:

答案 0 :(得分:7)

您需要在每个衍生进程中运行sourceCpp()调用,否则请获取您的代码。现在主要过程有功能,产生的工人没有。

最简单的方法是构建一个包并让每个工作进程加载它。