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
模块:
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
使用编译:
ifort -openmp main.f90 my_module.f90
它使分段故障时执行。如果删除主程序中的一个打印命令,它运行良好。另外,如果删除omp函数并且在没有-openmp选项的情况下编译,它也可以正常运行。
我错过了,以为这些阵列都只是2个元素。无论如何,我经常使用数组大一些的-fstack-arrays。但不是与Ifort。 –
使用'gfortran''和'ifort'有点让人困惑,静态数组的私有副本总是自动的,并且在线程堆栈上分配,尽管任何编译器选项可能会影响常规数组的放置。 –