7

可能重复:
R 中的并行处理受限

我已经用 R 多核编写了一些代码,并且在 24 核机器上运行它。实际上只有 12 个核心,但它们是超线程的,所以看起来有 24 个。

奇怪的是:所有线程都运行在同一个单核上!所以他们每个人都只使用少量的 cpu,而不是每个人都在一个核心上运行,并咀嚼所有可用的核心。

为简单起见,我只运行 4 个线程:

mclapply( 1:30, function(size) {
    # time consuming stuff that is cpu bound (think "forecast.ets" et al)
}, mc.cores = 4, mc.preschedule = F )

在运行此之前,已经有一个 R 进程在一个核心上运行,使用该核心 100% 的容量:

在此处输入图像描述

接下来,我启动“多核进程”,4个额外的线程争夺同一个核心!:

在此处输入图像描述

...因此,他们每个人都获得了一个核心的 12%,或大约 1% 的可用处理能力,而他们每个人都应该能够获得一个核心的 100%。此外,其他 R 进程现在只能获得 50% 的核心。

操作系统是 Ubuntu 12.04 64 位。硬件是英特尔。R 是 2.15.2 版“不给糖就捣蛋”

想法?(我知道我可以只使用降雪,但我有很多变量,我真的不想sfExport全部使用它们!)

编辑:哦,我猜某处有一些全局锁?但是,为什么两个完全独立的 R 进程之间会发生冲突?我可以很好地并行运行两个 R 进程,每个进程都占用一个内核的 100% 的 CPU。

Edit2:感谢 Dirk 的指点,我重建了 openblas,现在看起来更健康了!:

在此处输入图像描述

4

1 回答 1

8

一个可能的问题是 OpenBLAS 包的一个可能的副作用,它设置了 CPU 亲和性,使得进程粘在一个内核上。有关讨论,请参阅R 中的并行处理限制,并链接到有关 r-sig-hpc 列表的更多讨论,该列表具有修复。

于 2012-10-29T17:58:47.197 回答