Я строю проект с кодом CUDA, используя последний CMake, который имеет встроенную поддержку CUDA (версия> = 3.8 или более поздняя версия, если необходимо).
Как я могу сказать CMake (также) генерировать файлы PTX для моих различных ядер?
Что-то, что я пробовал, что не работает (?):
Начиная с CMake 3.9, мы можем определить библиотеку объектов, которая будет иметь PTX, а не виды объектов, используя свойство CUDA_PTX_COMPILATION
:
add_library(myptx OBJECT a.cu b.cu)
set_property(TARGET myptx PROPERTY CUDA_PTX_COMPILATION ON)
Однако это не правильное решение проблемы - чего-то не хватает. Предположим, мы имеем в a.cu
:
__global__ void foo() { return; }
и b.cu
:
__global__ void bar(int* a) { *a = 5; }
и мы запускаем cmake
и make
со следующим CMakeLists.txt
:
cmake_minimum_required(VERSION 3.9)
add_library(myptx OBJECT a.cu b.cu)
set_property(TARGET myptx PROPERTY CUDA_PTX_COMPILATION ON)
файлы PTX не генерируются и nvcc не запускается. Не знаю почему.