Mangling nama kernel PTX

Oct 03 2020

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

2 RobertCrovella Oct 02 2020 at 23:46

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.