Warum OpenMP-Programm läuft nur in einem thread

Habe ich gerade versucht, die OpenMP mit einem einfachen c-Programm

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();
}

Zusammengestellt g++ -fopenmp. Es kann richtig Druck heraus, dass ich 4 CPUs, aber alle test-Funktionen laufen auf thread 0.

Habe ich versucht zu ändern, der OMP_NUM_THREADS. Aber es hat keine Wirkung auch.

Hatte ich alles die gleiche wie die online-Beispiele, aber warum sollte ich nicht, dass es funktioniert?

Woher weißt du, dass es läuft nur ein thread?
Ich habe ja in der test () - durch den Druck aus der omp_get_thread_num().
Haben Sie omp_get_max_threads() um zu sehen, ob openmp Dinge, es kann nur ein thread aus irgendeinem Grund?
Danke, das habe ich überprüft omp_get_max_threads() in der test() und es ist 4. Aber immer noch jeden test() läuft auf thread Nummer 0.
Ist es möglich, dass der compiler optimiert Sie alle die Schleifen, Sie tun nichts, und dann wird jeder thread endet schneller als die Schleife schaffen Sie ausführen können, da Sie nicht alles tun... es gibt also immer nur ein thread läuft. Nur eine Theorie, wohl falsch 🙂

InformationsquelleAutor Eines He | 2012-04-18

Schreibe einen Kommentar