win10下cmake编译cuda程序

尝试把一个linux下的cuda+python项目移植到windows下,接触到了windows下利用cmake编译基于cuda的dll的问题,记录如下

  • CMake版本
    直接升级到最新,网上很多是利用findCUDA.cmake的方法,但是这种方法已经deperated了

  • 如何创建CUDA工程

    project(gpu_demo LANGUAGES CXX CUDA)
    这两句都需要,缺少第一句,vs2015创建似乎不是cuda工程(没有cuda相关配置选项)
  • 配置nvcc编译选项

    set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-extended-lambda -gencode arch=compute_50,code=sm_50")

    使用CMAKE_CUDA_FLAGS可以体现到vs2015的配置选项中,但使用CUDA_NVCC_FLAGS不行
    –expt-extended-lambda: 支持lambda函数
    -gencode arch=compute_50,code=sm_50: 配置机器GPU计算能力,可以通过CUDA SDK里的deviceQuery.exe查询机器上GPU计算能力

  • 生成动态库

    add_library(gpu_demo SHARED ${SRC_LIST})
  • Generate Relocatable Device Code

    set_target_properties(gpu_demo PROPERTIES CUDA_SEPARABLE_COMPILATION ON)

    这个如果不设置,编译时会出现”ptxas fatal”的错误,似乎和linux下fPIC的目的一样,不过这个是针对CUDA的

  • cpp文件修改成cu文件
    直接对cpp文件重命名,如果工程中只有cpp文件,没有cu文件,似乎这宏__CUDACC__不会启动,而影响到原子操作相关函数的使用(比如提示atomicAdd函数找不到). 计算能力低于2似乎也会触发这个问题

  • link.exe /dump /exports test.dll
    和cuda没关系,vs2015的link.exe利用上述参数可以查看test.dll导出的函数名,用过depends的应该知道其好处

你可能感兴趣的:(backup)