作为这个问题的后续内容:Vectorised Rcpp random binomial draws - 我想尝试并行化Rcpp代码 - 但是它给了我错误。例如:
library(Rcpp)
library(parallel)
library(microbenchmark)
cppFunction(plugins=c("cpp11"), "NumericVector cpprbinom(int n, double size, NumericVector prob) {
NumericVector v = no_init(n);
std::transform( prob.begin(), prob.end(), v.begin(), [=](double p){ return R::rbinom(size, p); });
return(v);}")
a <- runif(1e6)
b <- runif(1e6)
z <- list(a,b)
res1 <- lapply(z, function(z) rbinom(length(z), 1 , z ))
res2 <- lapply(z, function(z) cpprbinom(length(z), 1 , z ))
microbenchmark(rbinom(length(a), 1, a), cpprbinom(length(a), 1, a))
cores<-2
cl <- makeCluster(cores)
clusterExport(cl, c("cpprbinom"))
clusterSetRNGStream(cl=cl, 5)
res3 <- parLapply(cl=cl, z, function(z) cpprbinom(length(z), 1 , z ))
stopCluster(cl)
并行版本会引发错误:Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: NULL value passed as symbol address
任何人都可以帮我并行化Rcpp代码吗? (或者这很复杂吗?)
我也很好奇我是否可以使用我的GPU来生成随机布尔值,但我对R-GPU编程知之甚少,所以不知道如何正确地构建这样的问题。
编辑:这已被标记为此问题的副本:snow, inline & Rcpp:但是,我不认为那里的答案是充分的,因为它依赖于具有很多具体知识的提问者而我无法遵循它。