1

我尝试nvcc通过编译和运行简单的测试来设置 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;
}

在这里阅读了如何做到这一点,但try_run让我只通过 gcc 编译目标。如果我添加cuda_compile,我也不会得到二进制文件。

如何.cu在阶段编译 -filecmake并运行它execute_process以设置正确的编译标志?

4

1 回答 1

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变量中运行。

于 2013-03-26T10:42:50.360 回答