我正在尝试处理一堆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,有没有一些我遗漏的编译标志来允许forking?detectCores()告诉我我确实有64个内核可以使用……任何建议都很感谢!
发布于 2014-04-12 03:34:40
我得到了与您类似的结果,但是如果我将rnorm(10000)更改为rnorm(100000),我将获得显著的速度提升。我猜想,额外的开销抵消了这样一个小规模问题的性能优势。
https://stackoverflow.com/questions/18476414
复制相似问题