Je voudrais tester openMP avec C sur Windows 7 avec l'IDE Eclipse. Je ne trouve nulle part des étapes spécifiques à suivre pour configurer openMP. Pouvez-vous m'aider ?
Réponses
Trop de publicités?Je n'ai pas beaucoup travaillé avec OpenMP mais voici ce que j'ai trouvé en l'essayant moi-même.
OpenMP vous permet d'indiquer au compilateur que les choses doivent être exécutées en parallèle. Voici un exemple qui compte jusqu'à 10000000000 :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
long result = 0;
long i;
#pragma omp parallel for reduction(+: result)
for (i = 0; i < 10000000000; i++) {
result++;
}
printf("%li\n", result);
return EXIT_SUCCESS;
}
Ce programme sera compilé comme un programme C normal :
$ gcc -o OpenMPTest main.c
Il s'exécute en 30 secondes sur ma machine :
$ time ./OpenMPTest
10000000000
real 0m30.674s
user 0m30.628s
sys 0m0.014s
Ajout de la -fopenmp
à gcc active le support OpenMP. C'est tout ce dont vous avez besoin pour que la boucle s'exécute dans plusieurs threads.
$ gcc -o OpenMPTest main.c -fopenmp
Cela réduit de moitié le temps d'exécution à 15 secondes sur un système à double cœur :
$ time ./OpenMPTest
10000000000
real 0m15.840s
user 0m30.123s
sys 0m0.037s
Voici une brève description de ce que c'est #pragma
La ligne le fait :
#pragma omp
C'est un préfixe pour les commandes openmp.
parallel
Indique au compilateur que l'instruction suivante doit être exécutée en parallèle.
for reduction(+: result)
Combine toutes les valeurs de result
variable des boucles parallèles en une seule valeur par addition. En supprimant cette opération, le nombre final imprimé est incorrect.
Je sais que vous utilisez eclipse, mais les documents MSDN sont assez bons pour décrire OpenMP : OpenMP dans Visual C++