可能重复:
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,现在看起来更健康了!: