加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

在Windows上的parLapply中使用Rcpp函数

发布时间:2020-12-14 05:44:30 所属栏目:Windows 来源:网络整理
导读:我正在使用Rcpp和 Windows上的并行计算进行R代码优化.我在parLapply中调用Rcpp函数时遇到问题.这个例子如下 Rcpp代码(test.cpp) #include Rcpp.husing namespace Rcpp;// [[Rcpp::export]]NumericVector payoff( double strike,NumericVector data) { return
我正在使用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,data)

并行版本出错

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

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

任何想法如何解决它?

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读