2

我以前从未使用过 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)

我正在尝试在两个 NVIDIDA C1060 上使用内核 2.6 和 CUDA 4.2 在 Linux 上编译此代码(我尝试在我的大学中进行此操作,但他们没有定期升级东西。)。我尝试用 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 以及其他所有内容。谢谢您的帮助!

4

1 回答 1

7

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

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

于 2014-05-14T08:14:45.727 回答