为什么使用并行计算包会使我的R代码运行得更慢

时间:2018-05-02 17:02:54

标签: r performance time parallel-processing

我正在使用并行程序包来获得更好的CPU利用率,我认为这会显着缩短计算时间。但是我得到了相反的结果,而我得到的4个核心的CPU利用率几乎达到了100%,时间结果表明使用并行产生的最坏结果是不使用它。怎么会这样?这是包裹的问题吗?我错过了别的什么吗?我的代码很大,所以我不能在这里介绍..

time without parallel   45 sec  1.04 min 1.5 min 6.14 min
time with parallel      1.3 min 1.7 min  2.3 min 14.5 min
number of variables      78     78       78      870
number of rows          30k     50k      70k    70k

1 个答案:

答案 0 :(得分:2)

在进行并行处理之前,您应该尝试提高单核性能。如果没有看到您的代码,我们就无法给出任何具体的建议,但第一步应该是分析您的代码。有用的资源是 http://adv-r.had.co.nz/Performance.htmlhttps://csgillespie.github.io/efficientR/

一旦获得了良好的单核性能,就可以尝试并行处理。正如评论中暗示的那样,保持低通信开销至关重要。再说一次,如果没有看到你的代码,我们就无法给出任何具体的建议,但这里有一些一般的建议:

  • 不要使用多个并行步骤的序列。按顺序完成所有工作的单个并行步骤将降低通信开销。
  • 使用合理的块大小。如果您有10.000个任务,则不要单独发送,而是在合适的组中发送。只要您不使用“负载平衡”,parallel包就会默认执行此操作。如果由于某种原因需要负载平衡,那么您应该将任务分组到较少数量的块中,以便由负载平衡算法处理。