Modification du nom du noyau PTX
Oct 03 2020
Je ne peux pas lier mon programme Cuda lorsqu'un noyau est compilé à partir d'un ptxfichier.
main.cu:
extern
__global__ void kernel(int, float*);
int main()
{
...
kernel<<<...>>>(...);
...
}
kernel.cu
__global__
void kernel(int n, float* p)
{
...
}
Si je compile comme ci-dessous, je n'ai aucun problème et j'obtiens un exécutable:
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
Si je compile comme ci-dessous (en générant ptx), j'obtiens des erreurs:
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
Erreur:
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
Je suis un exemple de CUDA_Compiler_Driver_NVCC.pdf.
Que dois-je faire pour corriger l'erreur?
(Ceci est CUDA 10.2).
Réponses
2 RobertCrovella Oct 02 2020 at 23:46
Si vous souhaitez écrire votre propre PTX (ou modifier PTX), la méthodologie CUDA appropriée à utiliser est l'API du pilote CUDA et le flux de compilation associé.
L' vectorAddDrv exemple de code CUDA contient toute la plomberie et le flux de travail dont vous avez besoin.