【发布时间】:2013-08-27 22:18:34
【问题描述】:
我正在尝试使用mclapply() 并行处理一堆 csv 文件并在 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,是否有一些我错过了允许分叉的编译标志? detectCores() 告诉我,我确实有 64 个内核可以玩......
任何提示表示赞赏!
【问题讨论】:
-
您使用的是什么操作系统?它似乎与您的情况无关,但值得注意的是,Windows 上的
mclapply只是lapply的包装器。 -
Linux。确切地说是 Redhat。
-
如果有人可以验证上述示例确实可以使用 mclapply() 加速,那也会有所帮助。
-
在 Mac OS X 上为我工作(更快)。在终端会话中运行
ulimit -n会告诉你什么?您的操作系统/会话中的某些东西是否限制了您可以使用的内核数量?您是在 GUI 中还是从终端运行 R? -
我自己在 OsX 上试了一下,速度也加快了。
标签: r