我以前从未使用过CUDA或C++,但我正在尝试从http://www.maisondelasimulation.fr/projects/RAMSES-GPU/html/download.html运行Ramses GPU。
由于www.example.com中的一个错误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编译这段代码(我在大学里试着做这件事,他们没有定期升级东西。我尝试用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条答案
按热度按时间ljsrvy3e1#
您正在编译的代码需要为每个块静态分配28880字节(0x70d0)的共享内存。对于计算能力2.x和更新的GPU,这是没有问题的,因为它们支持高达48kb的共享内存。但是,对于计算能力为1.x的设备,共享内存限制为16kb(内核参数最多可以占用其中的256个字节)。因此,无法为compute 1.x设备编译代码,并且编译器会生成一个错误来告诉您这一点。因此,错误来自将
sm_13/compute_13
指定给编译器。你可以删除它,构建应该可以工作。然而,情况变得更糟。Tesla C1060是一款计算能力1.3的设备。因此,您将无法在GPU上编译和运行这些内核。除了从构建中省略这些内核(如果您不需要它们),或者将代码向后移植到compute 1.x架构之外,没有其他解决方案。我不知道这是否可行。或者找到更现代的硬件来运行代码。