Bonjour,
ci dessous un code très bête qui consiste à appeler 10000000 fois la fonction rand() dans 1 thread (pas de seed, le code est stupide mais c'est pour illustrer...)
je lance ce code depuis mon shell, avec la fonction time (qui permet de mesurer le temps d'exécution):
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 /* to compile: gcc -Wall -fopenmp -o dummy dummy.c */ #include <stdio.h> #include <stdlib.h> #include <omp.h> int main() { int numTH = 1; int k,l; /* Begin parallel region */ #pragma omp parallel private(k,l) num_threads(numTH) { for(k=0;k<10000000;k++) l=rand(); } return EXIT_SUCCESS; }
Faisons la même chose avec 2 threads (dans chaque thread on appelle 10000000 la fonction rand())time ./dummy
real 0m0.099s
user 0m0.096s
sys 0m0.000s
je lance ce code depuis mon shell, avec la fonction time:
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 /* to compile: gcc -Wall -fopenmp -o dummy dummy.c */ #include <stdio.h> #include <stdlib.h> #include <omp.h> int main() { int numTH = 2; int k,l; /* Begin parallel region */ #pragma omp parallel private(k,l) num_threads(numTH) { for(k=0;k<10000000;k++) l=rand(); } return EXIT_SUCCESS; }
Comme indiqué dans l'en-tête de mes codes, dans les deux cas le code est compilé avec la commande:time ./dummy
real 0m4.753s
user 0m4.080s
sys 0m5.392s
Quelqu'un saurait expliquer cette explosion du temps de calcul?gcc -Wall -fopenmp -o dummy dummy.c
Et surtout comment résoudre ce problème??
Merci d'avance pour vos réponses.
RémyA
Partager