Bonjour a tous,
J'aurais vraiment besoin de vos lumières![]()
J'ai un code assez long a exécuter, j'ai donc décidé de me pencher sur la parallélisation avec openMP
J'ai reproduit un code jouet reprenant ce que je souhaiterais paralléliser dans mon vrai code: deux calculs de la même fonction (avec paramètres différents) sur deux cœurs en même temps.
Voila mon code:
Sans utiliser openMP mon code tourne en 4.22 secondes alors qu'en utilisant le code décrit ci-dessus il met 5.70 s !!!
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 #include <iostream> #include <iomanip> using namespace std; #include <boost/progress.hpp> #include<omp.h> double fct_test1(int r, int t) { double temp=0; temp = (2*r + 3*t + 200)/12; return temp; } double fct_test(int a , int b, int c, int r, int t) { double temp = 0; for (int i = 0; i < 2100000000; i++) { temp += ((a + 30*b + c*5)/(fct_test1(r,t)*100000000)); } return temp; } int main() { boost::progress_timer time; double test = 0. ; double test_prop = 0. ; #pragma omp parallel { #pragma omp sections nowait { #pragma omp section { cout << omp_get_thread_num() << endl; test = fct_test(2,2,2,2,2) ; } #pragma omp section { cout << omp_get_thread_num() << endl; test_prop = fct_test(3,3,3,3,3) ; } } } cout << "test" << test << endl; cout << "test_prop" << test_prop << endl; return 0.; }![]()
J'ai lu sur ce forum que l'appel des fonctions openMP est coutêux en temps, j'ai donc tenté ce type de code sur mon vrai programme (où la fonction demandée va mettre environ 20 secondes/ par réalisation) mais il se passe la même chose: les temps de calculs sont plus long...
Peut-être n'ai-je pas bien utilisée la bibliothèque, peut être que c'est inutile de paralléliser ce type de code... je ne sais plus trop quoi faire
Une idée ??
Merci beaucoup,
Nane
Partager