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

时间:2014-05-14 07:45:11

标签: c++ cuda ptxas

我之前从未使用过CUDA或C ++,但我正试图让(http://www.maisondelasimulation.fr/projects/RAMSES-GPU/html/download.html}运行Ramses GPU。 由于autogen.sh中的错误,我使用./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) 我试图在Linux上使用Kernel 2.6和CUDA 4.2编译这段代码(我试图在我的大学里进行,并且他们不会定期升级内容。)在两台NVIDIDA C1060上。我尝试用sm_20替换sm_10,sm_11和sm_13,(我在这里看到了这个修复:Entry function uses too much shared data (0x8020 bytes + 0x10 bytes system, 0x4000 max) - CUDA error)但这并没有解决我的问题。 你有什么建议吗?如果需要,我可以上传Makefile以及其他所有内容。 谢谢您的帮助!

1 个答案:

答案 0 :(得分:5)

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

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