Warum tritt in diesem OpenMP-Code ein Segmentierungsfehler auf?
Hauptprogramm:
program main
use omp_lib
use my_module
implicit none
integer, parameter :: nmax = 202000
real(8) :: e_in(nmax) = 0.D0
integer i
call omp_set_num_threads(2)
!$omp parallel default(firstprivate)
!$omp do
do i=1,2
print *, e_in(i)
print *, eTDSE(i)
end do
!$omp end do
!$omp end parallel
end program main
Modul:
module my_module
implicit none
integer, parameter, private :: ntmax = 202000
double complex :: eTDSE(ntmax) = (0.D0,0.D0)
!$omp threadprivate(eTDSE)
end module my_module
kompiliert mit:
ifort -openmp main.f90 my_module.f90
Es gibt den Segmentierungsfehler bei der Ausführung. Wenn Sie einen der Druckbefehle im Hauptprogramm entfernen, wird er ordnungsgemäß ausgeführt. Auch wenn Sie die Funktion omp entfernen und ohne die Option -openmp kompilieren, funktioniert sie einwandfrei.