298
Le logiciel R - Maˆ ıtriser le langage
> system.time({
+ M <- 60000
+ decision <- myfunc(M)
+ print(decision/M)
+ })
[1] 0.04893333
user system elapsed
16.839
0.000 16.843
Voyons maintenant comment il est possible de parall´ eliser l’ex´ ecution de ce
code en utilisant le package parallel, ainsi que le gain r´ esultant en termes de
temps de calcul. Nous avons utilis´ e 6 processeurs (6 cœurs en fait).
Astuce
Pour connaˆ ıtre le nombre de cœurs sur votre ordinateur, tapez l’instruction devmgmt.msc dans le menu D´ emarer/Ex´ ecuter. Regardez ensuite le nombre de lignes dans l’entr´ ee intitul´ ee Processeurs. Sous Linux, tapez top dans une fenˆ etre de terminal, puis 1. Vous pourrez voir le
nombre de cœurs. Une autre possibilit´ e est d’utiliser, depuis R, la fonction
detectCores() du package parallel.
> require("parallel")
> system.time({
+ nbcores <- 6 # Ne devrait pas dépasser detectCores()-1.
+ M <- 60000
+ cl <- makeCluster(nbcores, type = "PSOCK")
+ out <- clusterCall(cl, myfunc, round(M/nbcores))
+ stopCluster(cl)
+ decision <- 0
+ for (clus in 1:nbcores) {
+
decision <- decision + out[[clus]]
+ }
+ print(decision/(round(M/nbcores) * nbcores))
+ })
[1] 0.04803333
user system elapsed
0.006
0.011
5.808
Astuce
Il est possible de connaˆ ıtre le num´ ero de processus (PID) de chaque
nœud (node) de la grappe de calcul (cluster ) :
> require("parallel")
> Sys.getpid() # PID du Master.
[1] 7994
Le logiciel R - Maˆ ıtriser le langage
> system.time({
+ M <- 60000
+ decision <- myfunc(M)
+ print(decision/M)
+ })
[1] 0.04893333
user system elapsed
16.839
0.000 16.843
Voyons maintenant comment il est possible de parall´ eliser l’ex´ ecution de ce
code en utilisant le package parallel, ainsi que le gain r´ esultant en termes de
temps de calcul. Nous avons utilis´ e 6 processeurs (6 cœurs en fait).
Astuce
Pour connaˆ ıtre le nombre de cœurs sur votre ordinateur, tapez l’instruction devmgmt.msc dans le menu D´ emarer/Ex´ ecuter. Regardez ensuite le nombre de lignes dans l’entr´ ee intitul´ ee Processeurs. Sous Linux, tapez top dans une fenˆ etre de terminal, puis 1. Vous pourrez voir le
nombre de cœurs. Une autre possibilit´ e est d’utiliser, depuis R, la fonction
detectCores() du package parallel.
> require("parallel")
> system.time({
+ nbcores <- 6 # Ne devrait pas dépasser detectCores()-1.
+ M <- 60000
+ cl <- makeCluster(nbcores, type = "PSOCK")
+ out <- clusterCall(cl, myfunc, round(M/nbcores))
+ stopCluster(cl)
+ decision <- 0
+ for (clus in 1:nbcores) {
+
decision <- decision + out[[clus]]
+ }
+ print(decision/(round(M/nbcores) * nbcores))
+ })
[1] 0.04803333
user system elapsed
0.006
0.011
5.808
Astuce
Il est possible de connaˆ ıtre le num´ ero de processus (PID) de chaque
nœud (node) de la grappe de calcul (cluster ) :
> require("parallel")
> Sys.getpid() # PID du Master.
[1] 7994
