操作系统版本:CentOS Linux release 7.6.1810
DTK版本:DTK25.04.1
DCU类型:ZIFANG(Z100L)
MPI:mpich-4.1.2
编译器:dtk-25.04.1/llvm/bin/clang,dtk-25.04.1/llvm/bin/flang
编译选项:-Duse_libMPI -Duse_netCDF -DSPMD -DUSE_LOG_DIAG_FIELD_INFO -Duse_LARGEFILE -DMOIST_CAPPA -DUSE_COND -DUSE_GFSL63 -DGFS_PHYS -DINTERNAL_FILE_NML -Duse_WRTCOMP -DHAVE_GETTID -D_GNU_SOURCE -I/opt/netcdf/include -I/opt/netcdf/include -fcray-pointer -fdefault-double-8 -fdefault-real-8 -Waliasing -ffree-line-length-none -fno-range-check -Wno-redefinition -O3 -fopenacc --offload-arch=gfx906 -Minfo=all -I/public/home/lizhiyuan/work_dir/openACC_single_test/build/../src/FMS/include(编译选项中与openACC相关的选项为:-fopenacc --offload-arch=gfx906 -Minfo=all)
代码描述: 我的程序是fortran代码,部分库使用C语言,使用dtk工具包中的clang,flang编译。程序的主要结构是一个循环,重复进行迭代求解的函数,这个求解函数用openACC加速。
问题描述:程序用1个进程或4个进程时都能够正常运行,但是当进程数更多时,程序会在循环中几次运行迭代求解函数后返回报错信息但是并不中止,而是一直运行但没有返回信息。有点像MPI死锁的现象。但是当取消openACC编译选项,纯用CPU运行时程序多进程运行良好。我又进行了多次尝试,发现在极少数情况下多进程也可以运行,这似乎是一个概率出现的问题。应该与MPI与openACC并用时的通信冲突有关。
报错内容:Invalid address access: 0x2af4436a5000, Error code: 1.
[GPU Memory Error] Addr: 0x2af4436a5000 Reason: Page not present or supervisor privilege.
ac_prod.64bit.x:18748 terminated with signal 6 at PC=2af4359fd9fc SP=2af4440097c0. Backtrace:
/lib/x86_64-linux-gnu/libc.so.6(pthread_kill+0x12c)[0x2af4359fd9fc]
/lib/x86_64-linux-gnu/libc.so.6(raise+0x16)[0x2af4359a9476]
/lib/x86_64-linux-gnu/libc.so.6(abort+0xd3)[0x2af43598f7f3]
/opt/dtk-25.04.1/lib/libhsa-runtime64.so.1(+0x56463)[0x2af442e56463]
/opt/dtk-25.04.1/lib/libhsa-runtime64.so.1(+0x54dee)[0x2af442e54dee]
/opt/dtk-25.04.1/lib/libhsa-runtime64.so.1(+0x180c6)[0x2af442e180c6]
/lib/x86_64-linux-gnu/libc.so.6(+0x94ac3)[0x2af4359fbac3]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x44)[0x2af435a8ca74]
(这个报错似乎是部分进程中止导致的,似乎不是程序错误的直接原因)

暂无数据