Je lance l'exemple de code suivant pour simuler des valeurs et ci-dessous est l'instantané de l'utilisation de 4 cœurs. Il faut un certain temps pour utiliser tous les cœurs à pleine capacité, je voudrais comprendre ce qui se passe et, finalement, comment le rendre plus rapide.r doParallel qbeta vs RcppParallel - comment utiliser les cœurs à pleine capacité
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)
Il faut environ 67 secondes pour terminer sur ma machine. J'ai regardé le moniteur de performances pendant que res2 était en cours d'exécution et il semble que cela prenne un certain temps pour utiliser les 4 coeurs à pleine capacité. Je voudrais comprendre quelle est la raison de cela. Est-ce inévitable? Que se passe-t-il avant que tous les cœurs soient utilisés à pleine capacité? Serait-il plus rapide d'essayer cela avec RcppParallel?
Est-ce un exemple de jouet? Parce que vous pourriez le rendre plus rapide sans parallélisation. – Roland
@Roland j'ai utilisé qbeta seul car il est vectorisé et il est plus rapide (environ 2x). Je voudrais voir si la parallélisation peut l'améliorer encore. – charliealpha