r - mclapply 与 parLapply 速度

标签 r parallel-processing mclapply

我在 Linux 上运行并且很容易使用 mclapply。我在使用 parlapply 时遇到了一些错误,即使在使用 clusterEvalQ 之后也是如此。

在我进一步解决这个问题之前,有什么要点吗,即两者之间是否存在显着的速度差异,或者人们只是在 Windows 上使用 parLapply

我已经阅读了有关 parLapplyLB 的内容并且可以看到这种方法的用途,但是如果我严格查看 mclapplyparlapply FORK 方法和 PSOCK 方法在速度上有很大差异吗?

我的职能性质可能会决定答案;它正在使用 stri_extract

最佳答案

一些快速基准测试表明 mclapply 可能会稍微快一些,但这可能取决于特定的系统和问题。工作越平衡,实际任务越慢,您使用哪个功能就越不重要。

library(parallel)
library(microbenchmark)

microbenchmark(
  parLapply = {cl <- makeCluster(2)
  parLapply(cl, rep(1:7, 3), function(x) {set.seed(1); rnorm(10^x)})
  stopCluster(cl)},
  mclapply = {mclapply(rep(1:7 , 3), function(x) {set.seed(1); rnorm(10^x)}, mc.cores = 2)},
  times = 10
)

#Unit: seconds
#     expr     min      lq     mean   median       uq      max neval
#parLapply 1.85548 2.04397 3.332970 3.071284 4.323514 6.294364    10
#mclapply  1.62610 1.65288 2.217407 1.849594 2.243418 5.435189    10


microbenchmark(
  parLapply = {cl <- makeCluster(2)
  parLapply(cl, rep(6, 20), function(x) {set.seed(1); rnorm(10^x)})
  stopCluster(cl)},
  mclapply = {mclapply(rep(6, 20), function(x) {set.seed(1); rnorm(10^x)}, mc.cores = 2)},
  times = 10
)

#Unit: milliseconds
#     expr      min        lq      mean   median       uq      max neval
#parLapply 1150.657 1188.9750 1705.1364 1242.739 2071.276 3785.516    10
# mclapply  820.692  932.2262  994.4404 1000.402 1079.930 1117.863    10

sessionInfo()
#R version 3.3.1 (2016-06-21)
#Platform: x86_64-pc-linux-gnu (64-bit)
#Running under: Ubuntu 14.04.5 LTS
#
#locale:
# [1] LC_CTYPE=de_DE.UTF-8       LC_NUMERIC=C               LC_TIME=de_DE.UTF-8        LC_COLLATE=de_DE.UTF-8    
# [5] LC_MONETARY=de_DE.UTF-8    LC_MESSAGES=de_DE.UTF-8    LC_PAPER=de_DE.UTF-8       LC_NAME=C                 
# [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C       
#
#attached base packages:
#[1] parallel  stats     graphics  grDevices utils     datasets  methods   base     
#
#other attached packages:
#[1] microbenchmark_1.4-2.1 doParallel_1.0.10      iterators_1.0.8        foreach_1.4.3         
#
#loaded via a namespace (and not attached):
# [1] colorspace_1.2-6 scales_0.4.0     plyr_1.8.4       tools_3.3.1      gtable_0.2.0     Rcpp_0.12.4     
# [7] ggplot2_2.1.0    codetools_0.2-14 grid_3.3.1       munsell_0.4.3   

关于r - mclapply 与 parLapply 速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38957807/

相关文章:

r - 取消引用 R dplyr 函数内的函数列表

r - R 在复制对象时是否总是复制数据?

c++ - 使用 std::async 控制并行度

c# - 使用 TPL 时如何确定方法将在哪个线程上执行?

r - 在R Studio中从mclapply打印

r - 将函数变量插入R中的图形标题

R anesrake 包在汇总统计表中生成 NA

multithreading - 在 Julia 中优化并行 for 循环返回数组

reshape lapply 创建的列表

r - mclapply 与 lme4 和长向量