[OpenMP] ne fonctionne pas...
Résolu
Char Snipeur
Messages postés
9813
Date d'inscription
Statut
Contributeur
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je suis actuellement en train de tester OpenMP, et je n'y comprend pas grand chose. ça a l'air simple, mais rien à faire. Mon but est de faire une boucle en parallèle. Voici le code source que j'utilise :
son but est juste de tester la parallélisation.
je compile avec la commande :
je suis actuellement en train de tester OpenMP, et je n'y comprend pas grand chose. ça a l'air simple, mais rien à faire. Mon but est de faire une boucle en parallèle. Voici le code source que j'utilise :
#include <cmath> #include <omp.h> #include <iostream> const int Nb=500; int main() { double a,b[Nb][Nb],c[Nb][Nb],d[Nb][Nb],e[Nb][Nb],f[Nb][Nb],g[Nb][Nb]; omp_set_num_threads(2); std::cout<<omp_get_num_threads()<<std::endl; #pragma omp for for(unsigned long i=0;i<Nb;++i) for(unsigned long j=0;j<Nb;++j) { a=0.1574143*i+0.654*j; b[i][j]=cos(a); c[i][j]=sin(a); d[i][j]=tan(a); e[i][j]=asin(a-int(a)); f[i][j]=acos(a-int(a)); g[i][j]=atan2(b[i][j],c[i][j]); if(omp_get_num_threads()>1)std::cout<<"OK !"; } return 0; }
son but est juste de tester la parallélisation.
je compile avec la commande :
g++ test.cc -o run -lgomp -g -fopenmp&& ./runma version de gcc 4.3.0 :
Utilisation des specs internes. Target: x86_64-unknown-linux-gnu Configuré avec: /tmp/gcc-4.3.0/configure --prefix=/.../gcc-4.3.0 --enable-languages=c,c++,java,fortran --enable-threads --enable-shared --with-mpfr=/.../mpfr-2.3.1 Modèle de thread: posix gcc version 4.3.0 (GCC)
3 réponses
J'ai trouvé, mais ce fut dur, il faut spécifier une portion de code en parallele :
#include <cmath> #include <omp.h> #include <iostream> const int Nb=500; int main() { double a,b[Nb][Nb],c[Nb][Nb],d[Nb][Nb],e[Nb][Nb],f[Nb][Nb],g[Nb][Nb]; #pragma omp parallel shared(default) { omp_set_num_threads(2); std::cout<<omp_get_num_threads()<<std::endl; #pragma omp for for(unsigned long i=0;i<Nb;++i) for(unsigned long j=0;j<Nb;++j) { a=0.1574143*i+0.654*j; b[i][j]=cos(a); c[i][j]=sin(a); d[i][j]=tan(a); e[i][j]=asin(a-int(a)); f[i][j]=acos(a-int(a)); g[i][j]=atan2(b[i][j],c[i][j]); if(omp_get_num_threads()>1)std::cout<<"OK !"; } } return 0; }