知识库

记录点点滴滴

CUDA在VS上的开发过程-一些小错误点

最近在VS2015上折腾CUDA和opencv+GPU 记录一些小坑

在VS的CUDA环境中,默认没有打开nvcc的-rdc=true选项,导致每个.cu分文件都是整体编译的。这样会使得一些本打算全局使用的数组和数据传输不能传递到正确的位置。笔者最近的情况是:有两个.cu文件一个.cuh文件,在两个.cu文件中包含了.cuh文件。.cuh文件中定义了一个常量数组用于设备端进行一维卷积。本打算主机端计算出来数组值,用cudaMemcpyToSymbol传输过去,结果传进去怎么检查都是零。一开始以为是设备端和主机端没有同步,导致显示的值(用的最简单的printf。。。hhh)不对,但同步了后发现没有用。后来在《CUDAC编程权威指南》中看到,在CUDA的编译过程中分为代码整体编译和独立编译的,而默认下代码都是整体编译,会导致每个.cu文件各立山头。。。好吧,打开-rdc选项启动独立编译。该选项在  cuda项目——属性——配置属性——CUDA C/C++——COMMON——Generate Relocatable Device Code  选择-rdc=true 即可打开独立编译。对于.cu文件仅有一个或者非常集中的程序,这个问题可能不会很明显。有多个.cu文件时候会暴露出来。

 

之后的下次再说

点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注