使用OpenMP在Fortran中出现Stackoverflow错误

时间:2017-07-27 21:08:13

标签: windows fortran openmp stack-overflow intel-fortran

我正在尝试使用英特尔Fortran运行OpenMP Fortran代码。

在我的代码开头,我分配了7个非常大的矩阵:

! Allocate 
REAL, ALLOCATABLE :: m1(:,:,:,:,:,:,:,:,:)
REAL, ALLOCATABLE :: m2(:,:,:,:,:,:,:,:,:)
REAL, ALLOCATABLE :: m3(:,:,:,:,:,:,:,:,:)
REAL, ALLOCATABLE :: m4(:,:,:,:,:,:,:,:,:)
REAL, ALLOCATABLE :: m5(:,:,:,:,:,:,:,:,:)
REAL, ALLOCATABLE :: m6(:,:,:,:,:,:,:,:,:)
REAL, ALLOCATABLE :: m7(:,:,:,:,:,:,:,:,:)

ALLOCATE(m1(2,161,20,2,2,21,30,2,2))   
ALLOCATE(m2(2,161,20,2,2,21,30,2,2))   
ALLOCATE(m3(2,161,20,2,2,21,30,2,2))   
ALLOCATE(m4(2,161,20,2,2,21,30,2,2))   
ALLOCATE(m5(2,161,20,2,2,21,30,2,2))   
ALLOCATE(m6(1,161,20,2,2,21,30,2,2))          
ALLOCATE(m7(1,161,20,2,2,21,30,2,2))   

然后我运行一个带有大型并行循环的代码。

!$omp parallel do default(private) shared(m1, m2, m3, m4, m5, m7,  someothervariables)

某些矩阵m1m7确实在子例程中使用,这可能会导致创建临时数组。 在任何情况下,如果串行完成,代码运行正常。但是如果使用openMP运行它会崩溃并出现以下错误,无论我使用的核心数是多少:

enter image description here

我使用的机器有128GB个ram。不确定这是否是限制因素。如果我将每个矩阵的最后一个索引减少到1,则代码在24个核心中运行良好。鉴于我正在增加2使用的内存大小,它应该运行12个内核,至少没有?

也许我正在做一些大错误,或者只是一些需要更改的Fortran选项...

0 个答案:

没有答案