[OpenMP] ne fonctionne pas...

Résolu
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)




--
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur

3 réponses

  1. Contributeur
    personne ne connait OpenMP ?
    0
    1. Contributeur
      une idée où chercher ?
      0
      1. Contributeur
        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