【发布时间】:2016-01-12 14:21:42
【问题描述】:
我使用 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 by example 源代码hist_gpu_shmem_atomics.cu
有两个问题:
histo_kernel <<<blocks * 2, 256 >>>(dev_buffer, SIZE, dev_histo);行之后出现“无效设备功能”错误。使用CUDA调试工具调试时,无法触发设备代码中的断点。
但是当我在 Visual Studio 2013 的 cuda 项目 Temple 中创建一个具有相同代码的项目时,它可以正常工作!
那么,CMakeLists.txt 有什么问题吗?
操作系统:Win7 64bit;GPU:GTX960;CUDA:CUDA 7.5;VS:2013(和也是 2010 年)
CUDA_NVCC_FLAGES 结果是-gencode=arch=compute_20,code=\"sm_20,compute_20\"
等于:
-gencode=arch=compute_20,code=sm_20 \
-gencode=arch=compute_20,code=compute_20
所以,我猜它会生成两个版本的机器代码:第一个(SASS)具有虚拟和真实架构,第二个(PTX)只有虚拟架构。由于我的 GTX960 是 cc5.2 设备,所以它选择了第二个(PTX)并将其转换为合适的 SASS。
【问题讨论】:
-
什么是“CUDA调试工具”?
-
在VS2013中使用CUDA项目模板编译时使用了哪些
nvcc标志? -
@Drop 我在vs2013中使用Nsight作为cuda调试工具。
-
@m.s. nvcc 标志与 CMakeLists.txt 中的相同
标签: c++ visual-studio-2010 visual-studio-2013 cuda cmake