我有一个代码,我正在尝试使用 foreach 包并行处理。代码可以运行,但是当我在 4 核的计算机上运行它时,大约需要 26 分钟,当我切换到 32 核的计算机时,仍然需要 13 分钟才能完成。我想知道我是否做错了什么,因为我使用了 8 倍的内核,但只减少了一半的时间。我的代码如下所示:
no_cores <- detectCores()
cl <- makeCluster(no_cores)
registerDoParallel(cl)
Xenopus_Data <- foreach(b=1:length(newly_populated_vec),.packages = c("raster", "gdistance", "rgdal","sp")) %dopar% { Xenopus_Walk(altdata=altdata,water=water,habitat_suitability=habitat_suitability,max_range_without_water=max_range_without_water,max_range=max_range,slope=slope,Start_Pt=newly_populated_vec[b]) }
stopCluster(cl)
对于具有 4 核的计算机,我得到以下时间:
Time_of_Start
[1] "2016-07-12 13:07:23 CEST"
Time_of_end
[1] "2016-07-12 13:33:10 CEST"
And for the one with 32 cores:
Time_of_Start
[1] "2016-07-12 14:35:48 CEST"
Time_of_end
[1] "2016-07-12 14:48:08 CEST"
这是正常的吗?如果是这样,有没有人知道如何加速它,也许使用不同的包?非常感谢任何类型的帮助!
编辑:这些是我按照建议应用更正后得到的时间。对于 32 核:
User System elapsed
5.99 40.78 243.97
对于 4 核:
user system elapsed
1.91 0.94 991.71
请注意,之前,我通过一些循环进行了多次计算,这就是计算时间大幅减少的原因,但我相信仍然可以看出两台计算机之间的差异有所增加。