我正在尝试处理一堆csv文件并使用mclapply()并行返回R中的数据帧。我有一台64核的机器,而现在使用mclapply()似乎无法再利用1核了。实际上,当前运行lapply()而不是mclapply()更快。这是一个示例,显示mclapply()并未利用更多可用的内核:

library(parallel)

test <- lapply(1:100,function(x) rnorm(10000))
system.time(x <- lapply(test,function(x) loess.smooth(x,x)))
system.time(x <- mclapply(test,function(x) loess.smooth(x,x), mc.cores=32))

user  system elapsed
  0.000   0.000   7.234
user  system elapsed
  0.000   0.000   8.612

有一些技巧可以使它正常工作吗?我必须从这台计算机(v3.0.1)上的源代码编译R,是否缺少一些允许 fork 的编译标志? detectCores()告诉我,我确实有64个核心可以玩...
任何提示表示赞赏!

最佳答案

我得到的结果与您相似,但是如果将rnorm(10000)更改为rnorm(100000),则可以显着提高速度。我猜想,额外的开销会抵消这种小规模问题带来的任何性能优势。

关于r - mclapply不使用多核,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18476414/

10-12 16:33