CPU 在 R 中使用 foreach 时的用法

CPU usage when using foreach in R

我在 R 中使用 foreach 进行并行计算,

no_cores <- detectCores() 
registerDoParallel(no_cores)

    temp <- foreach(i=320:530,
                              .combine = rbind) %dopar% {
                                track(data = data[i,], para = currenttime)
                              }

但我意识到一些 CPU 核心没有被使用,更不用说完全使用了。

我是不是漏掉了什么设置? 有没有一些我认为可以提高使用率以加快 运行?

的解决方案

对此的一些想法:

  • 您可能只有 4 个物理内核,但有 8 个逻辑内核,因为您的计算机上启用了超线程。你的问题可能只能用好4核。如果是这样,启动 8 个 worker 可能会使性能变差。在那种情况下,最好使用:

    no_cores <- detectCores(logical=FALSE)

  • track 可能不是计算密集型,可能是由于过多的 I/O 或内存操作,导致它没有使用太多 CPU 时间。

  • 如果 track 是 CPU 密集型但执行时间不长(例如少于一毫秒),主进程可能成为瓶颈,特别是如果 track returns 大量数据。

可能的解决方案:

  • 使用计算机的进程监控工具验证您的计算机是否有足够的内存来支持您启动的工作程序。如有必要,减少工人数量以保持在您的资源范围内。

  • 您可能会通过使用分块技术获得更好的结果,因此每个工作人员只有一项任务。这使工作人员更有效率并减少了 master 完成的 post 处理。

  • 尝试使用 foreach 选项进行试验,例如 .maxcombine。将其设置为大于任务数可能会有所帮助。

  • 按行合并结果不如按列合并有效,但如果您正在分块,这可能不是问题。