r - R 中的并行处理受限

标签 r ubuntu parallel-processing

我正在使用 parallel 和 doParallel 包运行 ubuntu 12.04 和 R 2.15.1。当我并行运行任何东西时,我被限制在一个核心的 100%,而我应该有 800%,因为我用 8 个核心运行它。系统监视器上显示的是每个子进程只获得 12%。

是什么限制了我的执行速度?

最佳答案

问题可能是 R 进程仅限于一个核心(并且子进程继承了它)。

试试这个:

> system(sprintf("taskset -p 0xffffffff %d", Sys.getpid()))
pid 3064's current affinity mask: fff
pid 3064's new affinity mask: fff

现在,如果在您的机器上,当前亲和掩码报告为 1,那么这就是问题所在。上面的行应该解决它(即第二行应该报告 fff (或类似的)。

Simon Urbanek 编写了一个函数 mcaffinity,允许对多核进行这种控制。据我所知,它仍在 R-devel 中。

有关详细信息,请参见例如这个discussion on R-sig-hpc .

更新和补充 Xin Guo 的回答:

如果您同时使用通过 openblas 的隐式并行化和显式并行化(通过 parallel/snow/multicore),您可能需要根据您是否在显式并行部分中来更改 openblas 使用的线程数。
这是可能的(使用 Linux 下的 openblas,我不知道任何其他提供线程数函数的常用优化 BLAS),参见 Simon Fuller's blog post了解详情。

关于r - R 中的并行处理受限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924698/

相关文章:

r - 禁用小标题打印的柱格式

ubuntu - 由于 sstable 损坏,无法启动 Cassandra

c - 如何通过数组使用 MPI 分散和聚集

Markdown /咕噜声 : remove list indices between plots

r - 2d 密度面尺度

r - 如何使用同样漂亮的小标题打印来漂亮地打印数据表?

python - 从终端返回输出

phpmyadmin 2002 错误

c++ - 可以分发或并行处理顺序程序吗?

python - 进程卡在 PyInstaller 可执行文件的循环中