Bonjour à tous,
c'est mon premier message sur ce forum donc si je ne fais pas les choses correctement, n'hésitez pas à me le dire que je corrige !
Alors voici mon problème : à la fin d'un de mes programmes R, j'effectue une boucle toute simple en utilisant "repeat". Cette boucle va effectuer une série de calcul pour chaque mois de l'année 137 fois, ce qui fait un total de 1 646 fois. Cela prend du temps, environ 50 minutes.
Je souhaiterais optimiser le code et j'en ai donc parlé à un ami développeur calculatoire (qui ne "connait" pas R) qui m'a conseillé entre autres choses de paralléliser les calculs. Mon nouvel ordinateur de boulot possède 4 cœurs (R détecte les 8 cœurs logiques) donc je peux gagner pas mal de temps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 numero_profil_automatisation = read.csv2("./import_csv/numero_profil_automatisation.csv", header=TRUE, sep=";") n=1 repeat { annee="2020" annee_profil="2020" mois_de_debut="1" mois_de_fin="12" operateur=numero_profil_automatisation[n,1] profil_choisi=numero_profil_automatisation[n,3] couplage=numero_profil_automatisation[n,4] subvention=numero_profil_automatisation[n,5] type=numero_profil_automatisation[n,6] seuil=0.05 graine=4356 resultat=calcul_depense(annee,annee_profil,mois_de_debut,mois_de_fin,operateur, profil_choisi,couplage,subvention,type,graine,seuil) nom=paste("./resultat_csv/",operateur,an,type,couplage,subvention, profil,".csv",sep="_") write.csv2(resultat,nom) n<-n+1 if (n == 138) break }
Etant économiste-statisticien et non développeur, je tâtonne complétement sur le sujet. J'ai regardé quelques forums et articles et j'ai trouvé un code qui marchait sur mon précédent ordinateur qui ne possédait que 2 cœurs (R détectait les 4 cœurs logiques), cela divisait le temps de calcul par près de 2, de 2h à 1h. Sur mon nouvel ordinateur, ce bout de code ne change absolument pas le temps de calcul, avec ou sans ce bout de code cela tourne en 50 minutes (meilleur processeur plus récent, plus de ram)
Ci-dessous les deux lignes de code que j'ai rajouté juste au-dessus du code que j'ai mis ci-dessus. Avec bien entendu les package en début de code que je peux vous donner
Avez-vous une idée de pourquoi cela semblait fonctionner sur mon précédent ordinateur et pas sur le nouveau alors que rien n'a changé mis à part l'ordinateur ? Ou d'un correctif à apporter ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 no_cores <- availableCores() - 1 plan(multicore, workers = no_cores)
Merci d'avance pour votre aide,
Victor
Partager