我使用cmake gui工具在vs2013中配置我的cuda项目。
CMakeLists.txt如下:
project(CUDA_PART)
# required cmake version
cmake_minimum_required(VERSION 3.0)
include_directories(${CUDA_PART_SOURCE_DIR}/common)
# packages
find_package(CUDA REQUIRED)
# nvcc flags
set(CUDA_NVCC_FLAGS -gencode arch=compute_20,code=sm_20;-G;-g)
set(CUDA_VERBOSE_BUILD ON)
#FILE(GLOB SOURCES "*.cu" "*.cpp" "*.c" "*.h")
CUDA_ADD_EXECUTABLE(CUDA_PART hist_gpu_shmem_atomics.cu)
.cu 文件来自CUDA 举例源代码hist_gpu_shmem_atomics.cu
有两个问题:
行后histo_kernel <<<blocks * 2, 256 >>>(dev_buffer, SIZE, dev_histo);
出现“无效设备功能”错误。
当我使用CUDA调试工具进行调试时,它无法触发设备代码中的断点。
但是当我在 Visual Studio 2013 中通过 cuda 项目寺庙创建具有相同代码的项目时,它工作正常!
那么,CMakeLists.txt 有问题吗?
OS:Win7 64位;GPU:GTX960;CUDA:CUDA 7.5;VS:2013 年(以及 2010 年)
When I use set the "Code Generation" in vs2013 as follow :
CUDA_NVCC_FLAGS 原来是-gencode=arch=compute_20,code=\"sm_20,compute_20\"
它等于:
-gencode=arch=compute_20,code=sm_20 \
-gencode=arch=compute_20,code=compute_20
所以,我猜它将生成 2 个版本的机器代码:第一个(SASS)具有虚拟和真实架构,第二个(PTX)仅具有虚拟架构。由于我的 GTX960 是 cc5.2 设备,因此它选择第二个(PTX)并将其转换为合适的 SASS。