Cuda “关于错误代码”;无效的设备功能“;通过nvcc和compute_uu和sm_uuu编译选项

Cuda “关于错误代码”;无效的设备功能“;通过nvcc和compute_uu和sm_uuu编译选项,cuda,Cuda,我希望您能帮助我找出以下卡所需的正确编译器选项: > ./deviceQuery Starting... > > CUDA Device Query (Runtime API) version (CUDART static linking) > > Detected 1 CUDA Capable device(s) > > Device 0: "GeForce GTX 780 Ti" > CUDA Driver Version / R

我希望您能帮助我找出以下卡所需的正确编译器选项:

> ./deviceQuery Starting...
> 
>  CUDA Device Query (Runtime API) version (CUDART static linking)
> 
> Detected 1 CUDA Capable device(s)
> 
> Device 0: "GeForce GTX 780 Ti"   
> CUDA Driver Version / Runtime Version 7.0 / 6.5
> CUDA Capability Major/Minor version number:    3.5  
> Total amount of global memory:                 3072 MBytes (3220897792
> bytes)
> (15) Multiprocessors, (192) CUDA Cores/MP:
>     2880 CUDA Cores   
> GPU Clock rate:                                1020 MHz (1.02GHz)
> Memory Clock rate:                             3500 Mhz  
> Memory Bus Width:                              384-bit
> L2 Cache Size:                                 1572864 bytes
...
  Maximum Texture
> Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536),
> 3D=(4096, 4096, 4096)   Maximum Layered 1D Texture Size, (num) layers 
> 1D=(16384), 2048 layers   Maximum Layered 2D Texture Size, (num)
> layers  2D=(16384, 16384), 2048 layers   Total amount of constant
> memory:               65536 bytes   Total amount of shared memory per
> block:       49152 bytes   Total number of registers available per
> block: 65536   Warp size:                                     32  
> Maximum number of threads per multiprocessor:  2048   Maximum number
> of threads per block:           1024   Max dimension size of a thread
> block (x,y,z): (1024, 1024, 64)   Max dimension size of a grid size   
> (x,y,z): (2147483647, 65535, 65535)   Maximum memory pitch:           
> 2147483647 bytes   Texture alignment:                             512
> bytes   Concurrent copy and kernel execution:          Yes with 1 copy
> engine(s)   Run time limit on kernels:                     Yes  
> Integrated GPU sharing Host Memory:            No   Support host
> page-locked memory mapping:       Yes   Alignment requirement for
> Surfaces:            Yes   Device has ECC support:                    
> Disabled   Device supports Unified Addressing (UVA):      Yes   Device
> PCI Bus ID / PCI location ID:           3 / 0   Compute Mode:
>      < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
> 
> deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.0, CUDA
> Runtime Version = 6.5, NumDevs = 1, Device0 = GeForce GTX 780 Ti
> Result = PASS
./deviceQuery正在启动。。。
> 
>CUDA设备查询(运行时API)版本(CUDART静态链接)
> 
>检测到1个支持CUDA的设备
> 
>装置0:“GeForce GTX 780 Ti”
>CUDA驱动程序版本/运行时版本7.0/6.5
>CUDA能力主要/次要版本号:3.5
>全局内存总量:3072 MB(3220897792
>字节)
>(15)多处理器,(192)CUDA内核/MP:
>2880个CUDA芯
>GPU时钟频率:1020 MHz(1.02GHz)
>内存时钟频率:3500 Mhz
>内存总线宽度:384位
>二级缓存大小:1572864字节
...
最大纹理
>尺寸大小(x,y,z)1D=(65536),2D=(655366556),
>3D=(409640964096)最大分层1D纹理大小(num)层
>1D=(16384),2048层最大分层2D纹理大小(num)
>层2D=(1638416384),2048层常量总量
>内存:65536字节每个字节的共享内存总量
>块:49152字节每个可用的寄存器总数
>块:65536经纱尺寸:32
>每个多处理器的最大线程数:2048最大线程数
>每个块的线程数:1024个线程的最大尺寸
>块(x,y,z):(1024,1024,64)网格大小的最大维度大小
>(x,y,z):(21474836476553565535)最大存储间距:
>2147483647字节纹理对齐:512
>字节并发拷贝和内核执行:有1个拷贝
>内核上的引擎运行时间限制:是
>集成GPU共享主机内存:不支持主机
>页锁定内存映射:是的对齐要求
>表面:是设备具有ECC支持:
>禁用的设备支持统一寻址(UVA):是设备
>PCI总线ID/PCI位置ID:3/0计算模式:
>
> 
>deviceQuery,CUDA驱动程序=CUDART,CUDA驱动程序版本=7.0,CUDA
>运行时版本=6.5,NumDevs=1,设备0=GeForce GTX 780 Ti
>结果=通过
我有一段cuda代码,并使用nvcc(cuda 6.5)进行调试。当我添加这些选项时:

-arch compute_20-代码sm_20

然后程序给了我这个错误:

错误代码无效设备功能

如果我删除这些选项(nvcc source-o exe),程序运行正常。 有人能通过查看./deviceQuery的输出来帮助我找出哪个compute_uuu和sm_uuu适合我的卡吗? 我从英伟达手册中看到,使用卡的正确选择和Smik的结果会大大加快速度。有人观察到这种加速吗

谢谢

CUDA中的“设备功能无效”错误通常意味着您使用与正在运行的GPU不匹配或不兼容的GPU体系结构设置进行编译

解决此问题的一般过程是在GPU上运行
deviceQuery
示例代码,从输出中确定主要和次要版本的计算能力,并使用该功能为GPU选择编译架构设置

如果您的GPU是架构计算能力X.Y,那么一个非常简单的选择是:

-arch=sm_XY
有人能通过查看./deviceQuery的输出来帮助我找出哪个compute_uuu和sm_uuu适合我的卡吗

按照您的示例,GTX 780 Ti的正确设置为:

-arch compute_35 -code sm_35
以上将生成将在cc3.5设备上运行的代码(仅限)。我认为最好只是具体说明:

-arch=sm_35
这是略为复杂的版本的简写:

-gencode arch=compute_35,code=sm_35 -gencode arch=compute_35,code=compute_35
这将生成将在cc3.5或更新的设备上运行的代码。3.5/35数字来自deviceQuery输出中的这一行:

Capability Major/Minor version number: 3.5 
如果您想更好地了解开关选项/差异,我建议您查看和


有关
-arch
开关行为的详细说明,请参阅。

谢谢。只是一个小问题:“CUDA能力主要/次要版本号:3.5”=>这是否意味着_35用于compute_35,sm_35用于此卡?是的,3.5告诉我们要使用
compute_35
sm_35
来瞄准此卡。