Mangling nama kernel PTX
Saya tidak dapat menautkan program Cuda saya ketika kernel dikompilasi dari ptxfile.
main.cu:
extern
__global__ void kernel(int, float*);
int main()
{
...
kernel<<<...>>>(...);
...
}
kernel.cu
__global__
void kernel(int n, float* p)
{
...
}
Jika saya mengkompilasi seperti di bawah ini, saya tidak memiliki masalah dan saya mendapatkan file yang dapat dieksekusi:
nvcc -dc main.cu kernel.cu --gpu-architecture=sm_70
nvcc -dlink main.o kernel.o --gpu-architecture=sm_70 -o dlink.o
g++ dlink.o main.o kernel.o -lcudart
Jika saya mengkompilasi seperti di bawah ini (dengan menghasilkan ptx), saya mendapatkan kesalahan:
nvcc -ptx kernel.cu --gpu-architecture=sm_70
nvcc -dc main.cu kernel.ptx --gpu-architecture=sm_70
nvcc -dlink main.o kernel.o --gpu-architecture=sm_70 -o dlink.o
g++ dlink.o main.o kernel.o -lcudart
Kesalahan:
main.o: In function `main':
tmpxft_0000b5ce_00000000-5_main.cudafe1.cpp:(.text+0x4789): undefined reference to `kernel(int, float*)'
tmpxft_0000b5ce_00000000-5_main.cudafe1.cpp:(.text+0x497e): undefined reference to `kernel(int, float*)'
collect2: error: ld returned 1 exit status
Saya mengikuti contoh dari CUDA_Compiler_Driver_NVCC.pdf.
Apa yang harus saya lakukan untuk memperbaiki kesalahan tersebut?
(Ini CUDA 10.2).
Jawaban
Jika Anda ingin menulis PTX Anda sendiri (atau memodifikasi PTX), metodologi CUDA yang tepat untuk digunakan adalah CUDA driver API dan alur kompilasi terkait.
vectorAddDrv Kode sampel CUDA memiliki semua pipa dan alur kerja yang Anda butuhkan.