我正在尝试处理一堆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/