Pourquoi OpenMP programme ne fonctionne que dans un seul thread

J'ai juste essayé OpenMP avec un simple programme c

test() {
   for(int i=0;i<100000000;i++);
}
main() {
    printf("Num of CPU: %d\n", omp_get_num_procs());
    #pragma omp parallel for num_threads(4)
    for(int i=0;i<100;i++) test();
}

Compilé avec g++ -fopenmp. Il peut correctement impression que j'ai 4 Processeurs, mais toutes les fonctions de test sont en cours d'exécution à thread 0.

J'ai essayé de modifier le OMP_NUM_THREADS. Mais il n'a pas d'effet aussi.

J'avais tout de même que les exemples en ligne mais pourquoi n'aurais-je pas le faire fonctionner?

Comment savez-vous qu'il ne s'exécute qu'un thread?
Oui j'ai vérifié dans le test() par l'impression de l'omp_get_thread_num().
Avez-vous vérifier omp_get_max_threads() pour voir si openmp choses qu'il ne peut utiliser qu'un seul thread pour une raison quelconque?
Merci, j'ai vérifié omp_get_max_threads() dans le test() et il est à 4. Mais encore chaque test() s'exécute sur le nombre de thread 0.
Est-il possible que le compilateur optimise toutes les boucles qu'ils ne font rien, et puis chaque thread termine plus vite que la boucle de la création d'eux peut exécuter en tant qu'ils ne font rien... donc il n'y a qu'un seul thread en cours d'exécution. Juste une théorie, probablement mal 🙂

OriginalL'auteur Eines He | 2012-04-18