如何并行生成随机布尔值的Rcpp代码

时间:2015-08-29 11:09:26

标签: r random rcpp

作为这个问题的后续内容: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:但是,我不认为那里的答案是充分的,因为它依赖于具有很多具体知识的提问者而我无法遵循它。

0 个答案:

没有答案