1
1
1
编译器
标题
2024-10-08 09:57:14
69

在 DCU 上编译 CUDA 代码,使用 DTK-23.04的 CUDA 库,编译没问题但链接时报错,如下图

attachmentId-image.png

感谢解答:guzhang:。

全部评论(4)
只看楼主
A
ANYA
1楼
您可以按照这里的写法,详细说明一下问题:https://forum.sourcefind.cn/thread/599
2024/10/8
网
网友Uy6CNy
回复 @ANYA

操作系统版本:Red Hat 4.8.5-39

DTK 版本:DTK-23.04

驱动版本:rock-4.5.2-0-5.11.36-1.x86_64

DCU类型:Z100

异常描述:Makefile 编译包含 .cu 文件的程序时,链接时出现问题。输出:

Linking GPU codes

Warning: nvcc current only support gfx906 and gfx926 arch. All architecture parameters will be replaced by gfx906 arch.

/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/../../../../bin/ld: /tmp/__gpu__CUAPI_Asyn_FluidSolver-bde963.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/../../../../bin/ld: /tmp/__gpu__CUAPI_DiagnoseDevice-71fbb4.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/../../../../bin/ld: /tmp/__gpu__CUAPI_MemAllocate_Fluid-54bd42.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

......

/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/../../../../bin/ld: /tmp/__gpu__CUSRC_Src_Deleptonization-914447.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/../../../../bin/ld: /tmp/__gpu__CUSRC_Src_User_Template-4fc3d0.o: relocation R_X86_64_32 against `.bss' can not be used when making a shared object; recompile with -fPIC

/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/../../../../bin/ld: final link failed: Nonrepresentable section on output

clang-14: error: linker command failed with exit code 1 (use -v to see invocation)

2024/10/9
网
网友Uy6CNy
回复 @ANYA

附Makefile文件(省略 CPU 相关部分):

EXECUTABLE := gamer

# output detailed compilation commands (0/1 = off/on)

#######################################################################################################

COMPILE_VERBOSE := 0

# simulation options

#######################################################################################################

SIMU_OPTION = -DLR_SCHEME=PPM -DFLU_SCHEME=CTU -DNLEVEL=10 -DNCOMP_PASSIVE_USER=0 -DGPU -DPATCH_SIZE=8 -DMAX_PATCH=1000000 -DRANDOM_NUMBER=RNG_GNU_EXT -DLOAD_BALANCE=HILBERT -DTIMING -DOPENMP -DSUPPORT_HDF5 -DSUPPORT_FFTW=FFTW3 -DEOS=EOS_GAMMA -DRSOLVER=HLLC -DMODEL=HYDRO

SIMU_OPTION += -DGPU_COMPUTE_CAPABILITY=800

# compilers and flags

#######################################################################################################

CXX = /public/software/mpi/intelmpi/2021.3.0/bin/mpicxx

CXXFLAG = -g -O3 -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -Wno-maybe-uninitialized -Wno-unused-but-set-variable -Wno-unused-result -Wno-unused-function -Wno-implicit-fallthrough -Wno-parentheses -Wno-unknown-pragmas

LIB =

OPENMPFLAG = -fopenmp

NVCC = $(CUDA_PATH)/bin/nvcc

# library paths

#######################################################################################################

CUDA_PATH := /opt/dtk-23.04/cuda

FFTW2_PATH :=

FFTW3_PATH := /soft/apps.pmo/packages/linux-centos7-x86_64/gcc-9.3.0/fftw-3.3.8-mosgli37r7oqrqsjpdf5gjtdj5rjbcfg

MPI_PATH := /public/software/mpi/intelmpi/2021.3.0

HDF5_PATH := /soft/apps.pmo/packages/linux-centos7-x86_64/oneapi-2021.3.0/hdf5-1.8.21-syuaiykalyazeh55qdginycovv7ncyno

GRACKLE_PATH := /home/songliuyang/grackle

GSL_PATH :=

LIBYT_PATH :=

# CUDA source files (compiled with nvcc)

GPU_FILE := CUAPI_Asyn_FluidSolver.cu CUAPI_DiagnoseDevice.cu CUAPI_MemAllocate_Fluid.cu \

CUAPI_MemFree_Fluid.cu CUAPI_SetMemSize.cu CUAPI_SetCache.cu CUAPI_SetDevice.cu \

CUAPI_Synchronize.cu CUAPI_Asyn_dtSolver.cu CUAPI_SetConstMemory.cu CUAPI_SetConstMemory_EoS.cu \

CUAPI_MemAllocate.cu

vpath %.cu GPU_API

# hydrodynamic source files (included only if "MODEL=HYDRO")

# ------------------------------------------------------------------------------------

ifeq "$(filter -DMODEL=HYDRO, $(SIMU_OPTION))" "-DMODEL=HYDRO"

GPU_FILE += CUFLU_dtSolver_HydroCFL.cu CUFLU_FluidSolver_RTVD.cu CUFLU_FluidSolver_MHM.cu CUFLU_FluidSolver_CTU.cu \

GPU_EoS_Gamma.cu GPU_EoS_User_Template.cu GPU_EoS_Isothermal.cu GPU_EoS_GammaCR.cu GPU_EoS_TaubMathews.cu

vpath %.cu Model_Hydro/GPU_Hydro EoS EoS/Gamma EoS/User_Template EoS/Isothermal EoS/GammaCR EoS/TaubMathews

# rules and targets

#######################################################################################################

# object files

# -------------------------------------------------------------------------------

# add filename prefixes to distinguish CPU and GPU object files

PREFIX_CPU := __cpu__

PREFIX_GPU := __gpu__

OBJ_PATH := Object

OBJ_CPU := $(patsubst %.cpp, $(OBJ_PATH)/$(PREFIX_CPU)%.o, $(CPU_FILE))

ifeq "$(filter -DGPU, $(SIMU_OPTION))" "-DGPU"

OBJ_GPU := $(patsubst %.cu, $(OBJ_PATH)/$(PREFIX_GPU)%.o, $(GPU_FILE))

OBJ_GPU_LINK := $(OBJ_PATH)/gpu_link.o

endif

# libraries

# -------------------------------------------------------------------------------

ifeq "$(filter -DGPU, $(SIMU_OPTION))" "-DGPU"

LIB += -L$(CUDA_PATH)/lib64

LIB += -Wl,-rpath=$(CUDA_PATH)/lib64

LIB += -lcudart

endif

# NVCC flags

# -------------------------------------------------------------------------------

# common flags

NVCCFLAG_COM := $(COMMONFLAG) -O3

CFLAGS = -fPIC

NVCCFLAGS = -Xcompiler -fPIC

NVCCFLAG_ARCH += -gencode arch=compute_80,code=\"compute_80,sm_80\"

NVCCFLAG_COM += $(NVCCFLAG_ARCH)

# fluid solver flags

NVCCFLAG_FLU += -Xptxas -dlcm=ca -prec-div=false -ftz=true --maxrregcount=128

# Poisson/gravity solvers flags

NVCCFLAG_POT += -Xptxas -dlcm=ca

# implicit rules (do NOT modify the order of the following rules)

# -------------------------------------------------------------------------------

# output detailed compilation commands or not

ifeq "$(COMPILE_VERBOSE)" "0"

ECHO = @

else

ECHO =

endif

# GPU codes

ifeq "$(filter -DGPU, $(SIMU_OPTION))" "-DGPU"

$(OBJ_PATH)/$(PREFIX_GPU)CUFLU_%.o : CUFLU_%.cu

@echo "Compiling $<"

$(ECHO)$(NVCC) $(NVCCFLAG_COM) $(NVCCFLAG_FLU) -o $@ -dc $<

$(OBJ_PATH)/$(PREFIX_GPU)CUPOT_%.o : CUPOT_%.cu

@echo "Compiling $<"

$(ECHO)$(NVCC) $(NVCCFLAG_COM) $(NVCCFLAG_POT) -o $@ -dc $<

$(OBJ_PATH)/$(PREFIX_GPU)CUSRC_%.o : CUSRC_%.cu

@echo "Compiling $<"

$(ECHO)$(NVCC) $(NVCCFLAG_COM) -o $@ -dc $<

$(OBJ_PATH)/$(PREFIX_GPU)CUAPI_%.o : CUAPI_%.cu

@echo "Compiling $<"

$(ECHO)$(NVCC) $(NVCCFLAG_COM) -o $@ -dc $<

$(OBJ_PATH)/$(PREFIX_GPU)%.o : %.cu

@echo "Compiling $<"

$(ECHO)$(NVCC) $(NVCCFLAG_COM) -o $@ -dc $<

endif # GPU

2024/10/9
网
网友Uy6CNy
回复 @ANYA

Makefile文件续:

# linking

# -------------------------------------------------------------------------------

$(EXECUTABLE) : $(OBJ_CPU) $(OBJ_GPU)

# GPU linker

ifeq "$(filter -DGPU, $(SIMU_OPTION))" "-DGPU"

@echo "Linking GPU codes"

$(ECHO)$(NVCC) -o $(OBJ_GPU_LINK) $(OBJ_GPU) $(NVCCFLAG_ARCH) -dlink

endif
2024/10/9
没有更多内容了
--
楼主
Level.4
0 帖子
楼主热帖
暂无数据