为什么R multicore只使用一个核心?

Hug*_*ins 7 multicore r

可能重复:
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 )
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

接下来,我启动"多核过程",另外4个线程争夺同一个核心!:

在此输入图像描述

......所以,当他们每个人能够获得100%的核心时,他们每人获得一个核心的12%,或大约1%的可用处理能力.此外,另一个R进程现在只获得50%的核心.

操作系统是64位的Ubuntu 12.04.硬件是英特尔.R是版本2.15.2"捣蛋"

思考?(我知道我可以使用降雪,但我有很多变数,而且我真的不想拥有sfExport所有这些!)

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

编辑2:感谢Dirk的指针,我重建了openblas,现在看起来更健康了!:

在此输入图像描述

Dir*_*tel 8

可能的问题是OpenBLAS程序包可能产生的副作用,它会设置CPU亲和力,使进程粘在一个核心上.有关讨论,请参阅R limited中的并行处理,并链接到有关修复的r-sig-hpc列表的更多讨论.

  • 你有"libopenblas-base"安装吗?CPU亲和性存在问题.请参阅Claudia Beleites的回答:http://stackoverflow.com/questions/12924698/parallel-processing-in-r-limited (3认同)