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

fslejnso  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(185)

我以前从未使用过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_10sm_11sm_13,(我在这里看到了这个修复:Entry function uses too much shared data (0x8020 bytes + 0x10 bytes system, 0x4000 max) - CUDA error)但这并没有解决我的问题。
你有什么建议吗?我可以上传Makefile以及其他一切,如果你需要它。
谢谢你的帮助!

ljsrvy3e

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架构之外,没有其他解决方案。我不知道这是否可行。或者找到更现代的硬件来运行代码。

相关问题