[OpenMP] ne fonctionne pas...
Résolu
Char Snipeur
Messages postés
10112
Statut
Contributeur
-
Char Snipeur Messages postés 10112 Statut Contributeur -
Char Snipeur Messages postés 10112 Statut Contributeur -
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;
}