[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   -
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 :
#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&& ./run
ma 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

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
personne ne connait OpenMP ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
une idée où chercher ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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;
}
0