我尝试通过编译和运行简单测试在cmake阶段设置nvcc
的计算能力标志:
#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
让我只用gcc编译目标。如果我添加cuda_compile
,我也不会得到二进制文件。
如何在.cu
阶段编译cmake
- 文件并通过execute_process
运行以设置正确的编译标志?
答案 0 :(得分: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
变量。