【问题标题】:mclapply not using multiple coresmclapply 不使用多核
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    相关资源
    最近更新 更多