У меня проблемы с некоторым кодом OpenMP:
------------------------------------------
kgalg.f90
------------------------------------------
program kgalg
use potential
use omp_lib
implicit none
...
call iteratekg(1.0D0 , 0.0D0)
...
contains
subroutine iteratekg(alpha , beta)
...
!$OMP PARALLEL DEFAULT(SHARED) PRIVATE(ii,iikkkmag,iixxx,iiphiphiphi,ind,newvalue,updatedind,interp,kk,weight,&
!$OMP interyyy,interval,mult)
!$OMP DO
do ii = 1 , pot%product_size
...
interp = new_product_interpolate(pot , updatedind) !!! <- line 160
...
end do
!$OMP END DO
!$OMP BARRIER
!$OMP END PARALLEL
end subroutine iteratekg
end program kgalg
------------------------------------------
potential.f90
------------------------------------------
module potential
use vecFunTools
implicit none
...
contains
...
end module potential
------------------------------------------
vecFunTools.f90
------------------------------------------
module vecFunTools
implicit none
type domain_type
...
end type domain_type
type product_type
...
type(domain_type) , allocatable :: domains(:)
...
end type product_type
type prod_inter_type
type(product_type) :: my_product
...
end type prod_inter_type
...
contains
type(prod_inter_type) function new_product_interpolate(prod , ind)
type(product_type) :: prod
integer , dimension(prod%nof_domains) :: ind
...
end function new_product_interpolate
end module vecFunTools
При компиляции кода с помощью gfortran 7.4.0 все работает нормально, но при компиляции с помощью gfortran 4.8.4 я получаю следующую ошибку сегментации:
...
#4 0x4034C0 in iteratekg.1882._omp_fn.0 at kgalg.f90:160 (discriminator 17)
#5 0x401EAB in iteratekg at kgalg.f90:148
#7 0x4034AC in iteratekg.1882._omp_fn.0 at kgalg.f90:160 (discriminator 19)
#6 0x4016B1#8 in 0xkgalg7F4B75E8E349 at
kgalg.f90:33 (discriminator 1)
...
Я всегда могу перейти на более новую версию gfortran, но было бы неплохо узнать, почему происходит сбой. Кстати, если я удаляю все из тела new_product_interpolate , чтобы эта функция ничего не делала и возвращала неинициализированный тип (prod_inter_type) Я все еще получаю проблемы, связанные с очисткой памяти.
Идеи или комментарии будут с благодарностью.