CUDA ptxas错误"函数使用太多共享数据"

Ger*_*eru 1 c++ cuda ptxas

我之前从未使用过CUDA或C++,但我正试图从(http://www.maisondelasimulation.fr/projects/RAMSES-GPU/html/download.html运行中获取Ramses GPU .由于autogen中的错误.我使用./configure并使这个工作.所以生成的makefile包含以下NVCC标志 NVCCFLAGS = -gencode=arch=compute_10,code=sm_10 -gencode=arch=compute_11,code=sm_11 -gencode=arch=compute_13,code=sm_13 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_20,code=compute_20 -use_fast_math -O3 但是当我尝试使用make编译程序时,我得到多个ptxas错误:

Entry function '_Z30kernel_viscosity_forces_3d_oldPfS_S_S_iiiiiffff' uses too much shared data (0x70d0 bytes + 0x10 bytes system, 0x4000 max) Entry function '_Z26kernel_viscosity_forces_3dPfS_S_S_iiiiiffff' uses too much shared data (0x70d0 bytes + 0x10 bytes system, 0x4000 max) Entry function '_Z32kernel_viscosity_forces_3d_zslabPfS_S_S_iiiiiffff9ZslabInfo' uses too much shared data (0x70e0 bytes + 0x10 bytes system, 0x4000 max) 我正在尝试使用Kernel 2.6和CUDA 4.2在Linux上编译此代码(我尝试在我的大学中进行,并且他们不会定期升级内容.)在两个NVIDIDA C1060上.我尝试用sm_20替换sm_10,sm_11和sm_13,(我在这里看到了这个修复:Entry函数使用了太多共享数据(0x8020字节+ 0x10字节系统,最大0x4000) - CUDA错误)但这并没有解决我的问题.你有什么建议吗?如果需要,我可以上传Makefile以及其他所有内容.谢谢您的帮助!

tal*_*ies 6

您正在编译的代码需要每个块静态分配28880字节(0x70d0)的共享内存.对于计算能力2.x和更新的GPU,这没有问题,因为它们支持高达48kb的共享内存.但是,对于计算能力1.x设备,共享内存限制为16kb(内核参数可以使用多达256字节).因此,无法为计算1.x设备编译代码,并且编译器正在生成错误告诉您.所以错误来自于指定sm_13/compute_13编译器.你可以删除它,构建应该工作.

然而,它变得更糟.Tesla C1060是一款计算能力1.3设备.因此,您将无法在GPU上编译和运行这些内核.没有解决方案,不能从构建中省略这些内核(如果您不需要它们),或者将代码移植到compute 1.x体系结构中.我不知道这是否可行.或者找到更多现代硬件来运行代码.