Как узнать, компилируется ли код cuda с кодом перемещаемого устройства?

Чтобы использовать обратные вызовы CUFFT, одно из ограничений заключается в том, что код должен быть скомпилирован с перемещаемым перемещаемый код устройства.

Когда это условие не выполняется, случаются плохие вещи; молчаливые отказы, неправильные ответы и т. д.

Моя текущая сборка работает, но я хотел бы сделать этот код более устойчивым к неправильной компиляции в будущих проектах.

Есть ли способ обнаружить это внутри модуля компиляции? например флаги препроцессора


person Mark Borgerding    schedule 30.06.2016    source источник


Ответы (1)


Макрос, используемый для обнаружения, когда указан -rdc=true:

__CUDACC_RDC__

опубликовано здесь

В качестве простого тестового примера вы можете сделать:

$ 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
$
person Robert Crovella    schedule 20.07.2016