OpenMP in FORTRAN läuft nicht die erwartete Anzahl von threads
Ich bin neu in der parallelen Programmierung, und habe Probleme damit, eine einfache parallele Fortran-Programm für die Verwendung von mehreren threads bei OpenMP. Das folgende Programm:
Program Hello
Use omp_lib
Implicit None
INTEGER nthreads
nthreads = 4
CALL OMP_SET_NUM_THREADS(nthreads)
write(*,*) omp_get_num_procs()
write(*,*) omp_get_max_threads()
write(*,*) omp_get_num_threads()
!$OMP PARALLEL
Write(*,*) 'Hello'
Write(*,*) omp_get_num_threads()
!%OMP END PARALLEL
End Program Hello
Erzeugt das Ergebnis:
32
4
1
Hello
1
Was ist der Grund dafür, dass die Anzahl der threads, die innerhalb der parallelen region ist nicht das gleiche wie nthreads, die ich oben gesetzt? Ich bin kompilieren Sie das Programm mit gfortran -f openmp Hallo.f auf einem Windows Rechner mit cygwin.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich versuche es zu kompilieren unter Linux mit gfortran. Und ich bekomme Fehler, da die OMP-Direktiven. Ich geändert es zu:
(Hinweis
!$OMP
). Und jetzt funktioniert es. Die Ausgabe:Den sentinel, d.h.
!$omp
oder*$omp
oderc$omp
muss erscheinen am Anfang der Zeile von selbst.Es startet einfach einen einzigen thread und sonst nicht beschweren.
Ich weiß nicht, ob es geht oder nicht, aber die Letzte Richtlinie in der OP-code hat ein % anstelle von $. Vielleicht nur ein Tippfehler, aber ich hatte vor kurzem gepostet code, der einen dummen Tippfehler mag, verursacht mir Probleme.