【问题标题】:Why using parallel computing package makes my R code run slower为什么使用并行计算包会使我的 R 代码运行速度变慢
【发布时间】:2018-10-12 21:04:40
【问题描述】:

我正在使用并行包来获得更好的 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

【问题讨论】:

  • 你的代码是什么?使用并行处理有很大的开销,因此如果您尝试并行化许多短操作,那么设置并行处理所花费的时间将超过您节省的时间,并且您的代码会变慢。
  • 嗨@divibisan,我的代码包含很多小组件,所以如果我对每个组件的理解正确,是否有单独的并行处理设置?如果是这样,您是否熟悉另一种方法来减少一个大脚本文件中大量小组件的时间?
  • 我不是真正的专家,但还有很多其他问题,由更有知识的人回答可能会有所帮助:stackoverflow.com/questions/24633605/…stackoverflow.com/questions/6036120/…
  • @migdalmenora 没有代码很难说。
  • 阅读 cmets,我的代码有几个随机启动,还有很多小代码组件,所以我知道使用并行将无济于事。那么我可以使用什么其他方式来获得更快的计算?

标签: r performance time parallel-processing


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多