Bonjour,
Je souhaite paralléliser un programme Monte Carlo.
J'ai un fichier MC.c qui contient le code Monte Carlo.
Je suis sous windows avec octave installé directement sous windows et fonctionnant via MinGW et codeblock pour faire du C.
J'ai tenté deux méthodes:
1) Dans Octave, je lance MC.exe (la compilation de MC.c) en lui envoyant des paramètres.
Je pensais utiliser parcellfun, mais la fonction ne marche pas à cause des "pipe" selon l'erreur que je reçois. J'ai essayé pour un simple sinus pour voir.
2) J'utilise openMP. Voici le code:
Là, je remarque que la vitesse ne change pas, mais que la boucle s'exécute en parallèle.
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 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #include <omp.h> int main(int argc, char **argv) { int N =10,num; // Nombre de simulations parallèles char root[] = "..\\Config_prog\\data\\"; char main[] = "save_4x4x4_"; char simulation[128], load[128], launch[128]; double T_ini=1, T_fin = 10, dT = 1, ra, T; FILE* FID=NULL; sprintf(load, "..\\Config_prog\\config_4x4x4c.txt"); sprintf(launch, "cube3D.exe"); // programme <=> MC.exe #pragma omp parallel #pragma omp for for (num=0;num<N;num++) { sprintf(simulation, "%s%s%d_T",root, main, num); FID = popen(launch, "w"); ra = num+1; fprintf(FID, "%f %f %f %s %s %f", T_ini, dT, T_fin, simulation, load, ra); pclose(FID); } return 0; }
Dans tous les cas, quand je regarde les performances dans le gestionnaire des tâches, je vois que tous les processeurs fonctionnent (4 processeurs mono thread), le tout à 25-30%.
Avez-vous une idée pour que je puisse gagner du temps en parallélisant (ou autrement)?
Merci
Partager