Bonjour,
j'essaye de me mettre a openmp pour accelerer mon programme et j'ai l'impression que j'ai mal configure quelque chose sur code::blocks.
j'essaye pour le moment une parrallelisation "toute bete".
j' ai cette grosse boucle dans mon programme:
et j'ai voulu faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for(count=0;count<dim;count++) { if(denom[count]>0) { f3d[count]=f3d[count]+wth*ftemp[count]/denom[count]; } } // end for count
pour faire un test tout bete.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #pragma omp parallel for num_threads(6) for(count=0;count<dim;count++) { if(denom[count]>0) { int rang = OMP_GET_THREAD_NUM(); cout << "rang: " << rang; f3d[count]=f3d[count]+wth*ftemp[count]/denom[count]; } } // end for count
a la compilation ca me dit:
je trouve ca bizarre deja vu que omp_get_thread_num existe sur les cours openmp que j'ai lu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 g++ -Wall -fexceptions -g -march=corei7-avx -O3 -fopenmp -Iinclude -c /path/test_class.cpp -o obj/Debug/src/test_class.o /path/test_class.cpp: In member function void Images::SART_reconstruction(int, std::string): /path/test_class.cpp:1037:39: error: OMP_GET_THREAD_NUM was not declared in this scope
et si j'enleve le omp_get_thread_num (et cout << rang du coup) j'ai cette erreure a la compilation:
ca me donne l'impression que openmp est mal configure sur mon pc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 g++ -Wall -fexceptions -g -march=corei7-avx -O3 -fopenmp -Iinclude -c /path/test_class.cpp -o obj/Debug/src/test_class.o /path/test_class.cpp: In member function void Images::SART_reconstruction(int, std::string): /path/test_class.cpp:574:5: warning: variable m set but not used [-Wunused-but-set-variable] g++ -o bin/Debug/SART obj/Debug/main.o obj/Debug/src/test_class.o obj/Debug/src/test_class.o: In function `Images::SART_reconstruction(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >) [clone ._omp_fn.0]': /path/test_class.cpp:1032: undefined reference to `omp_get_num_threads' /path/test_class.cpp:1032: undefined reference to `omp_get_thread_num' obj/Debug/src/test_class.o: In function `Images::SART_reconstruction(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': /path/test_class.cpp:1031: undefined reference to `GOMP_parallel_start' /path/test_class.cpp:1031: undefined reference to `GOMP_parallel_end'
pourtant a priori il est pas defaut sur le compilateur avec ubuntu 12.04.
et dans code::blocks, dans settings->compiler -> other options, j'ai ajoute -fopenmp comme j'avais vu sur le net.
est-ce que quelques a une idee ?
Partager