我试图谷歌"r包并行"但我还没有在CRAN上找到它.我也尝试了以下链接,但它们不起作用:
http://cran.r-project.org/web/packages/parallel/index.html
http://cran.r-project.org/web/packages/parallel
http://cran.r-project.org/package=parallel
它也没有列入available.packages().
但显然包裹parallel 确实存在!:-)我把它放在我的包列表中,它甚至在这里有自己的标签:-)
我正在测试该parLapplyLB()功能,以了解它如何平衡负载.但我没有看到任何平衡发生.例如,
cl <- parallel::makeCluster(2)
system.time(
  parallel::parLapplyLB(cl, 1:4, function(y) {
    if (y == 1) {
      Sys.sleep(3)
    } else {
      Sys.sleep(0.5)
    }}))
##   user  system elapsed 
##  0.004   0.009   3.511 
parallel::stopCluster(cl)
如果它真正平衡了负载,则休眠3秒的第一个作业(作业1)将在第一个节点上,而其他三个作业(作业2:4)将在另一个节点上休眠总共1.5秒.总的来说,系统时间应该只有3秒.
相反,我认为作业1和2被赋予节点1,作业3和4被赋予节点2.这导致总时间为3 + 0.5 = 3.5秒.如果我们运行相同的代码parLapply()代替parLapplyLB(),我们得到相同的系统时间约3.5秒.
我不理解或做错了什么?
registerDoParallel使用doParallel软件包时集群和核心有什么区别?
我的理解是正确的,在单机上这些是可以互换的,我会得到相同的结果:
cl <- makeCluster(4)
registerDoParallel(cl)    
和
registerDoParallel(cores = 4)
我看到的唯一区别makeCluster()是必须明确停止使用stopCluster().
以下代码在Windows和Ubuntu平台上产生不同的结果.据我所知,这是因为处理并行处理的方法不同.
总结:
我不能insert/ rbind数据在Linux上平行(mclapply,mcmapply),而我能做到这一点在Windows上.  
感谢@Hong Ooi指出这
mclapply在Windows上不起作用,但问题仍然有效.
当然,没有多个插入相同data.frame,每个插入都执行到单独的data.frame中.
library(R6)
library(parallel)
# storage objects generator
cl <- R6Class(
    classname = "cl",
    public = list(
        data = data.frame(NULL),
        initialize = function() invisible(self),
        insert = function(x) self$data <- rbind(self$data, x)
    )
)
N <- 4L # number of entities
i <- setNames(seq_len(N),paste0("n",seq_len(N)))
# random data.frames
set.seed(1)
ldt <- lapply(i, function(i) data.frame(replicate(sample(3:10,1),sample(letters,1e5,rep=TRUE))))
# entity storage
lcl1 <- lapply(i, function(i) cl$new())
lcl2 <- …我用R做并行计算.每当我想杀死并行程序时,我总是使用kill 2130 2131 6456(PID).有没有办法杀死R的所有程序?
我正在开发的 R 包中的某些函数(如function1)依赖于我的包中的辅助函数(如h_function1和h_function2)。我正在并行化以function1在包中的另一个函数中重复调用。
目前,在我的包中我正在使用代码
parallel::clusterExport(cl, varlist=c("h_function1", "h_function2"), envir=environment())
parallel::parSapply(X=1:100, FUN=function1, cl=cl)
其中cl是来自传递到函数的并行包的 cluster。然而,这假设帮助程序起作用h_function1并h_function2从我的包加载到本地环境中,这对于某些用户来说可能并非如此。
有什么办法可以灵活地将功能导出到集群中呢?是否可以通过包名导出包的所有函数?