我遇到了並行處理和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