操作系统版本:CentOS 8
DTK 版本:DTK24.04.2
驱动版本:rock-5.7.1-6.2.18-1.x86_64
DCU 版类型:K100
问题描述:编译 CUDA 代码时,在链接时报错,报错如下
...
Linking GPU codes
Linking CPU codes
Object/__gpu__CUAPI_SetConstMemory.o:(.hipFatBinSegment+0x8):对‘__hip_fatbin’未定义的引用
Object/__gpu__CUFLU_dtSolver_HydroCFL.o:(.hipFatBinSegment+0x8):对‘__hip_fatbin’未定义的引用
Object/__gpu__CUFLU_FluidSolver_CTU.o:(.hipFatBinSegment+0x8):对‘__hip_fatbin’未定义的引用
Object/__gpu__GPU_EoS_Gamma.o:(.hipFatBinSegment+0x8):对‘__hip_fatbin’未定义的引用
Object/__gpu__GPU_EoS_User_Template.o:(.hipFatBinSegment+0x8):对‘__hip_fatbin’未定义的引用
Object/__gpu__GPU_EoS_Isothermal.o:(.hipFatBinSegment+0x8): 跟着更多未定义的参考到 __hip_fatbin
collect2: 错误:ld 返回 1
Makefile文件附上。

暂无数据
新版本DTK对齐了CUDA(-dc、-dlink)的分离编译功能,仅需要最终链接的时候指定链接器为nvcc。
根据您的Makefile文件,需要指定616和620行的$(CXX)为nvcc,其它$(CXX)不需要改动,像“-fgpu-rdc --hip-link”等新版本也不再需要。
但您的$(CXX)为mpicxx,指定为nvcc,会使最后链接的时候缺少部分mpi的默认依赖库,可能需要手动追加下。
您makefile中应该是老版本分离编译的用法,dtk-24.04之前老版本的分离编译功能有时也能通过“-fgpu-rdc --hip-link”的方式使用,但是会导致额外生成一个动态库的链接。
如果您不想按照上面说的,手动追加mpi依赖库的话,您也可以仍按照这个逻辑来处理,只需要把“-dlink”修改为“-shared”,$(OBJ_GPU_LINK)这个当成动态库进行链接即可。