2016-06-30 8 views
2

Um CUFFT callbacks zu verwenden, besteht eine der Einschränkungen darin, dass der Code mit verschiebbarem relocatable device code kompiliert werden muss.Wie kann ich feststellen, ob Cuda-Code mit verschiebbarem Gerätecode kompiliert wird?

Wenn diese Bedingung nicht erfüllt wird, passieren schlimme Dinge; Stille Ausfälle, falsche Antworten usw.

Ich habe meine aktuelle Build funktioniert, aber ich möchte diesen Code robuster gegen Mis-Compilation in zukünftigen Projekten machen.

Gibt es eine Möglichkeit, dies in der Compilierungseinheit zu erkennen? z.B. Präprozessor Flags

Antwort

1

Das Makro zu verwenden, um festzustellen, wann -rdc=true angegeben ist:

__CUDACC_RDC__ 

here veröffentlicht

Als einfacher Test Fall könnten Sie tun:

$ cat t1.cu 
#ifndef __CUDACC_RDC__ 
#error THIS CODE REQUIRES CUDA RELOCATABLE DEVICE CODE COMPILATION 
#endif 

int main(){} 
$ nvcc -c t1.cu 
t1.cu:2:2: error: #error THIS CODE REQUIRES CUDA RELOCATABLE DEVICE CODE COMPILATION 
#error THIS CODE REQUIRES CUDA RELOCATABLE DEVICE CODE COMPILATION 
^
$ nvcc -rdc=true -c t1.cu 
$ 
Verwandte Themen