Voila donc suite à mon autre sujet sur GCC, j'ai un problème de parallélisme sur ma machine (OS X Lion).
En effet ce qui m'avait amené à me demander si je devais pas passer de gcc 4.2 à gcc 4.7, c'est le fait qu'à chaque fois que j'exécuter un code avec openMP pour qu'il soit lancé en parallèle, celui ci avec une exécution beaucoup plus lente que lors de son exécution en séquentiel.
Voici mon code :
Code c : 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 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <omp.h> void carre (int tab[], int *n); int main (int argc, const char * argv[]) { int size, i; int* tab = NULL; const int MAX = 30000; const int MIN = 100; srand(time(NULL)); printf("Choisissez la taille de votre tableau "); scanf("%d", &size); tab = malloc(size * sizeof(int)); if (tab == NULL) { exit(0); } printf("\n\nVotre tableau est le suivant :\n"); #pragma omp parallel for for (i = 0 ; i < size ; i++) { tab[i] = (rand() % (MAX - MIN + 1)) + MIN; printf("t[%d] = %d \n", i, tab[i]); } printf("\n\n"); carre(tab, &size); free(tab); return 0; } void carre (int* tab, int*n){ int j; #pragma omp parallel for for (j = 0 ; j < *n ; j++){ tab[j] = tab[j] * tab[j]; printf("carre [%d] : %d\n", j, tab[j]); } }
Puis dans le terminal, lorsque je veux exécuter ce code en parallèle, je tape "gcc main.c -fopenmp" puis "time ./a.out" avec une taille de tableau de 10 000 000 pour vraiment voir si le parallélisme est plus rapide. Or c'est tout le contraire il mettra beaucoup plus de temps que lorsque je lance en séquentiel avec simplement "gcc main.c" et "time ./a.out". Pour un tableau de cette taille je vais même 2 fois plus vite en sequentiel qu'en parallèle.
D'où pourrais venir ce problème?
Ce qui m'embête c'est que par la suite je vais devoir travailler en // très souvent, et si déja lors des premiers TP ma machine ne tourne pas en // c'est assez contraignant.
Partager