我運行以下示例代碼以模擬值,下面是4個內核的使用情況快照。需要一段時間才能全部使用所有核心,我想了解正在發生的事情,最終如何使其更快。r doParallel qbeta vs RcppParallel - 如何在滿容量時使用內核
library(doParallel)
library(data.table)
data<-data.table(a=runif(10000000),b=runif(10000000),quantile=runif(10000000))
e <- nrow(data)%/%1000000+1
dataSplit<-split(data[],seq_len(nrow(data))%/%1000000)
qbetaVec<-function(lossvalues) qbeta(lossvalues$quantile,lossvalues$a,lossvalues$b)
cl <- makeCluster(4)
registerDoParallel(cl)
res2<-foreach(i=1:e) %dopar% qbetaVec(dataSplit[[i]])
res3<-unlist(res2)
在我的機器上完成大約需要67秒。在res2運行時,我看了一下性能監視器,看起來需要一段時間才能全部使用全部4個內核。我想了解這是什麼原因。這是不可避免的嗎?在所有內核全部使用之前發生了什麼?用RcppParallel試試這個會更快嗎?
這是一個玩具的例子嗎?因爲無需並行化就可以使其更快。 – Roland
@Roland我自己使用qbeta,因爲它是矢量化的,速度更快(大約2倍)。編號喜歡看看並行化是否可以進一步改善它。 – charliealpha