2014-05-14 34 views
1

我从来没有使用CUDA或C++之前,但我试图从(http://www.maisondelasimulation.fr/projects/RAMSES-GPU/html/download.html运行。 由于在我使用的autogen.sh错误./。配置和得到这个一个工作 因此产生的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错误编译程序:CUDA 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_10,sm_11和sm_13通过sm_20,(我在这里看到了这个修复:Entry function uses too much shared data (0x8020 bytes + 0x10 bytes system, 0x4000 max) - CUDA error)但这并没有解决我的问题。 你有什么建议吗?如果你需要的话,我可以上传Makefile以及其他所有东西。 谢谢你的帮助!

+1

也许错误信息是正确的,并且您正在尝试为已安装的GPU卡使用太多共享内存? –

回答

5

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

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