Как преобразовать значение __CUDACC_VER__ в триплет MAJOR, MINOR, BUILD? - PullRequest
0 голосов
/ 01 июня 2018

Когда более новая (CUDA 9) версия nvcc встречает __CUDACC_VER__, она сдается и говорит вам что-то вроде:

/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."

Итак, как мне преобразовать использование __CUDACC_VER__ в нечто, чтобудет работать как для старых, так и для новых версий NVCC?

1 Ответ

0 голосов
/ 01 июня 2018

Частичный ответ:

По крайней мере, для более новых версий документация NVCC сообщает нам (на странице 3), что такое формула:

__CUDACC_VER__ = 
     __CUDACC_VER_MAJOR__ * 10000 +
     __CUDACC_VER_MINOR__ * 100 +
     __CUDACC_VER_BUILD__

Таким образом, например, проверка nvcc из CUDA 7.5 или более поздней версии означает проверку

(__CUDACC_VER__ > 70500)

, и с альтернативным триплетом вы бы сделали

(__CUDACC_VER_MAJOR__ > 7) or ((__CUDACC_VER_MAJOR__ == 7) and (__CUDACC_VER_MINOR__ >= 5))
...