mclapply未使用多个核心

5
我正在尝试处理一堆csv文件并在R中使用mclapply()并行返回数据框。我有一台64核的机器,但目前似乎只能利用1个核心,使用mclapply()。实际上,目前运行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

有没有什么诀窍让这个工作起来?我不得不在这台机器上从源代码编译R(v3.0.1),是否有一些编译标志我错过了,以允许分叉?detectCores()告诉我我确实有64个核心可以使用...任何提示都将感激不尽!


2
你使用的是哪个操作系统?虽然这似乎与你的情况无关,但值得注意的是,在Windows上,mclapply只是lapply的一个包装器。 - Frank
Linux。确切地说是Redhat。 - reptilicus
1
如果有人能够验证上述示例确实可以通过mclapply()加速,那也会有所帮助。 - reptilicus
在我的 Mac OS X 上运行得更快。在终端会话中运行 ulimit -n 命令会告诉你什么?你的操作系统/会话中是否有限制你可以使用的核心数量?你是从 GUI 运行 R,还是从终端运行? - Kevin Ushey
我刚在OsX上尝试了一下,也获得了加速。 - reptilicus
显示剩余3条评论
1个回答

6
我得到的结果与你相似,但如果我将rnorm(10000)更改为rnorm(100000),我就能获得明显的加速。 我猜额外的开销正在抵消任何小规模问题的性能优势。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接