我遇到了并行处理和R中的foreach函数的问题。我在运行我的foreach代码并监视进度之前立即注册了6个集群。我看到我的CPU几乎达到了70%(自从注册了所有6个内核以来,预计会达到100%),但是几秒钟后它就会下降,似乎正在完成单个内核的其余工作。我使用doMC软件包在我的linux机器上运行了相同的代码,在那里我获得了100%的CPU大约10秒,然后它在一个核心上减少并完成。这导致我相信问题是我写了我的代码。R并行处理过早结束
我有一个开始和结束纬度/经度列的位置数据集。我正在使用geophere包来计算每行的开始到结束的大圆路径,每行将数据集中的每个原始行扩展为12行,之后我将结果重新绑定到绘图的数据框中。
完成后,我的整个数据集应该大约为35M行,所以我真的想要利用多个内核。
library(foreach)
library(doParallel)
cl = makeCluster(6)
registerDoParallel(cl)
arc = foreach (i = temp$id, .combine = rbind, .packages = "geosphere") %dopar% {
data.frame(
id = rep(temp[i, 9], 12),
supplier = rep(temp[i, 1], 12),
receiving_facility = rep(temp[i, 2], 12),
commodity = rep(temp[i, 3], 12),
weight = rep(temp[i, 4], 12),
time_period = rep(temp[i, 5], 12),
lat = gcIntermediate(p1 = c(temp$supp_lon[i], temp$supp_lat[i]),
p2 = c(temp$rec_lon[i], temp$rec_lat[i]), n = 10,
addStartEnd = TRUE)[,2],
lon = gcIntermediate(p1 = c(temp$supp_lon[i], temp$supp_lat[i]),
p2 = c(temp$rec_lon[i], temp$rec_lat[i]), n = 10,
addStartEnd = TRUE)[,1])
}
stopCluster(cl)
这可能是因为我们只是遵循不同的教程,但我使用doMC pakage中的'registerDoMC(numberOfCores)'来注册所需数量的教程。可能可以帮助 – OganM 2014-11-20 20:35:10
doMC在Windows中不起作用,但是我在我的linux上使用并设置了相同的结果 – JestonBlu 2014-11-20 21:57:02