我使用foreach在R中进行并行计算,
no_cores <- detectCores()
registerDoParallel(no_cores)
temp <- foreach(i=320:530,
.combine = rbind) %dopar% {
track(data = data[i,], para = currenttime)
}
但我意识到有些CPU内核没有被使用,更不用说完全使用了。
我错过了一些设置吗? 我是否考虑过提高使用率以加快运行速度?
答案 0 :(得分:1)
对此的一些想法:
您可能只有4个物理内核但只有8个逻辑内核,因为您的计算机上启用了超线程。您的问题可能只能充分利用4核心。如果是这样,你可能会通过启动8名工人来改善表现。在这种情况下,最好使用:
no_cores <- detectCores(logical=FALSE)
track
可能不是非常计算密集型的,可能是由于过多的I / O或内存操作,导致它不会占用太多CPU时间。
如果track
是CPU密集型但没有花费太多时间来执行(例如,不到一毫秒),则主进程可能会成为瓶颈,尤其是{{1} }返回大量数据。
可能的解决方案:
验证您的计算机是否有足够的内存来支持您使用计算机的进程监视工具启动的工作程序。如有必要,减少留在您资源范围内的工人数量。
使用分块技术可能会获得更好的结果,因此每个工作者只有一个任务。这使工作人员更有效率并减少了主人完成的后处理。
尝试使用track
等foreach
选项进行试验。将其设置为大于任务数可能会有所帮助。
按行合并结果并不像按列合并一样有效,但如果您正在进行分块,这可能不是问题。