Dlaczego błąd segmentacji występuje w tym kodzie openmp?
główny program:
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
moduł:
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
skompilowane przy użyciu:
ifort -openmp main.f90 my_module.f90
Daje błąd segmentacji podczas wykonywania. Jeśli usuniesz jedno z poleceń drukowania w programie głównym, działa poprawnie. Również, jeśli usuniesz funkcję omp i skompilujesz bez opcji -openmp, to też działa dobrze.