2
编译器
新人贴
使用DTK运行MPI+openACC程序出现问题
2025-11-02 13:57:07
153

操作系统版本: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]

(这个报错似乎是部分进程中止导致的,似乎不是程序错误的直接原因)

全部评论(1)
只看楼主
网
网友4Hzeqe
1楼
核函数崩溃,一般是核函数中找不到对应地址导致的。方便的话发一下你的小测试我调试一下
2025/11/3
没有更多内容了
--
楼主
Level.2
0 帖子
楼主热帖
暂无数据