gpt4 book ai didi

r - 在 Windows 上的 parLapply 中使用 Rcpp 函数

转载 作者:行者123 更新时间:2023-12-03 15:59:18 24 4
gpt4 key购买 nike

我正在使用 Rcpp 和 Windows 上的并行计算进行 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 机器。

任何想法如何解决它?

最佳答案

您需要运行 sourceCpp()调用每个生成的进程,或者让他们获取你的代码。现在主进程有这个功能,生成的 worker 没有。

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

关于r - 在 Windows 上的 parLapply 中使用 Rcpp 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25606733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com