我在两个不同的集群中使用完全相同的代码。一个集群使用 mpi intel fortran 运行,另一个集群使用 Cray Fortran 运行。前者是旧集群,后者是我们学校最新的集群。该实现在旧集群 (MPI INTEL FORTRAN) 上运行良好,但该实现在 Cray Fortran 集群中不起作用。给出错误的输出子程序部分是这样的:
Subroutine Output
use Variables
implicit none
! Formating section
398 format(6(e22.15,2x))
399 format(7(e22.15,2x))
39 format(5(e22.15,2x))
!!! Computing Cp for postprocessing purposes
Cp = gamma*R_gas/(gamma-1)
! Creating the Global mesh
If(MyRank ==0) Call GridGlobal
If(MyRank==0) then
open(330, file = 'Primitive_Variables.dat')
write(330,*) 'TITLE = "Primitive Variables Contours"'
write(330,*) 'VARIABLES = "X"'
write(330,*) '"Y"'
write(330,*) '"U Velocity"'
write(330,*) '"V Velocity"'
write(330,*) '"Density"'
write(330,*) '"Temperature"'
write(330,*)' zone T = "zone1", I = ',ImaxGlobal,' J= ',JmaxGlobal,' F = point'
do j = 1,JmaxGlobal
do i = 1,ImaxGlobal
write(330,398) xGlobal(i,j),yGlobal(i,j),u_oldGlobal(i,j),v_oldGlobal(i,j),r_oldGlobal(i,j),T_oldGlobal(i,j)
enddo
enddo
close(330)
End If
当我运行我的实现时,我得到的错误如下:
Application 135822 exit codes: 134
Application 135822 exit signals: Killed
Application 135822 resources: utime ~185s, stime ~1s, Rss ~1444696, inblocks ~1023410, outblocks ~5529676
pwd
setenv OMP_NUM_THREADS 1
if ( -e IDS ) then
aprun -j 1 -n 32 ./IDS
sys-38 : UNRECOVERABLE error on system request
Function not implemented
Encountered during a CLOSE of unit 330
Fortran unit 330 is not connected
_pmiu_daemon(SIGCHLD): [NID 00018] [c0-0c0s4n2] [Wed Aug 2 16:57:32 2017] PE RANK 0 exit signal Aborted
[NID 00018] 2017-08-02 17:53:44 Apid 135820: initiated application termination
else
exit
有了这个,输出子程序停止打印结果,我的计算也没用了。
提前致谢
记录:这只发生在大阵列上。大我的意思是大于 2001x2001。我知道这一点都不大,但是对于较小的数组,错误不会弹出。子程序分配打印所需的数组,它开始打印文件,但没有完成整个文件的打印。在几个元素之后,该过程停止并弹出错误。程序创建文件并开始在文件中写入解决方案,然后停止打印解决方案。我试过用不同数量的PE运行它,问题总是弹出来。
变量的声明方式如下:
integer, parameter :: dp = 8
real(kind=dp),dimension(:,:),allocatable::r_old,u_old,v_old,T_old,a_old
代码如下所示:
DO kk=1, 2001
! This section calls different subroutine
! They are not relevant for the discussion
Call MPI_BARRIER(MPI_COMM_WORLD,ierr) ! Barrier in MPI
Enddo
! Postprocessing tasks and restart file
Call MPI_BARRIER(MPI_COMM_WORLD,ierr) ! Barrier in MPI
Call KillArrays ! Deallocating the arrays not needed for writing output
Call Write_SolutionRestart
Call Output
Call MPI_BARRIER(MPI_COMM_WORLD,ierr)
Call MPI_FINALIZE(ierr)
给我带来问题的子程序是“输出”。
根据错误文件,问题始终为 0 级。