2013-03-26 2 views
1

я пытаюсь установить вычислительные возможности флаг nvcc в стадии CMake путем компиляции и выполнения простого теста:Как запустить nvcc в try_run cmake?

#include <cuda.h> 
#include <cuda_runtime.h> 
#include <stdio.h> 

int main(int argc, char **argv){ 
    cudaDeviceProp dP; 
    if(cudaSuccess != cudaGetDeviceProperties(&dP, 0)) return 0; 
    printf("-arch=sm_%d%d\n", dP.major, dP.minor); 
    return 0; 
} 

Я прочитал here, как это сделать, но try_run позвольте мне скомпилировать цели только НКОЙ. Если я добавлю cuda_compile, я тоже не получаю двоичный файл.

Как я могу скомпилировать .cu -файл на этапе cmake и запустить его execute_process для установки правильных флагов компиляции?

ответ

2

Ну, я не знаю, как это сделать правильно, поэтому я сделал просто. В начале моего CUDA_FOUND раздела добавляет:

if(CUDA_FOUND) 
    set(TEST ${CMAKE_BINARY_DIR}/test) 
    set(TESTSRC ${CMAKE_CURRENT_SOURCE_DIR}/test/capability.cu) 
    execute_process(COMMAND nvcc -lcuda ${TESTSRC} -o ${TEST}) 
    execute_process(COMMAND ${TEST} OUTPUT_VARIABLE CUDA_ARCH) 
    message("Cuda architecture: ${CUDA_ARCH}") 
    list(APPEND CUDA_NVCC_FLAGS --use_fast_math ${CUDA_ARCH}) 

Это просто компилирует мой источник тестирования и запуск в заполнении CUDA_ARCH переменных.