Hello,
J'ai fait un programme graphique que je souhaite optimiser. Je me suis donc intéresse à OpenMP (pour dire que j'y connais pas grand chose).
Voila la partie du code que j'ai parallélisé:
Le problème c'est que au final à part avoir monté le pourcentage du processus utilisé de 25% à 96% (mon processeur a 4 coeur) la parallélisation n'a eut aucun effet sur la vitesse d’exécution du programme. Ça la même ralenti: j'ai une baisse de 3 ou 4 FPS par rapport au même code sans les : #pragma omp parallel for . De plus il y a aussi plus d'erreur de calcul( c'est moins stable).
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 void incrementation(Planete* A, int nmb) { int i; int l; float truc1; float truc2; float truc3; float distance; for(l=0;l<=nmb-1;l++) { truc1=0; truc2=0; truc3=0; distance=0; #pragma omp parallel for for(i=0;i<=nmb-1;i++) { if(!(i==l)) { distance=(A[i].x_now-A[l].x_now)*(A[i].x_now-A[l].x_now)+(A[i].y_now-A[l].y_now)*(A[i].y_now-A[l].y_now)+(A[i].z_now-A[l].z_now)*(A[i].z_now-A[l].z_now); truc1=truc1+(G*A[i].masse*(A[i].x_now-A[l].x_now))/((distance+1)*sqrt(distance)); truc2=truc2+(G*A[i].masse*(A[i].y_now-A[l].y_now))/((distance+1)*sqrt(distance)); truc3=truc3+(G*A[i].masse*(A[i].z_now-A[l].z_now))/((distance+1)*sqrt(distance)); } } A[l].x_after= truc1*PAS*PAS - A[l].x_past + 2*A[l].x_now; A[l].y_after= truc2*PAS*PAS - A[l].y_past + 2*A[l].y_now; A[l].z_after= truc3*PAS*PAS - A[l].z_past + 2*A[l].z_now; } #pragma omp parallel for for(l=0;l<=nmb-1;l++) { A[l].x_past=A[l].x_now; A[l].y_past=A[l].y_now; A[l].z_past=A[l].z_now; A[l].x_now=A[l].x_after; A[l].y_now=A[l].y_after; A[l].z_now=A[l].z_after; A[l].x_after=0; A[l].y_after=0; A[l].z_after=0; } }
Donc ma question c'est est ce que OpenMP est vraiment utile ou est ce que c'est moi qui ne sais pas l'utilisé?
Merci d'avance.
Partager