CUDA错误:共享数据太多(0x4018字节,最大0x4000):额外的0x18字节从哪里来

CUDA error: too much shared data (0x4018 bytes, 0x4000 max): where do the extra 0x18bytes come from?

本文关键字:字节 0x18 最大 数据 共享 错误 太多 CUDA 0x4018 0x4000      更新时间:2023-10-16

我正在尝试实现这个CUDA示例:
http://devblogs.nvidia.com/parallelforall/efficient-matrix-transpose-cuda-cc/
因为我有0x4000字节可用,所以我尝试使用TILE_DIM = 128,这样

__shared__ unsigned char tile[TILE_DIM][TILE_DIM];

大小为0x4000字节=16384字节=128*128字节。

然而,这给了我以下错误:

CUDACOMPILE : ptxas error : Entry function '_Z18transposeCoalescedPh' uses too much shared data (0x4018 bytes, 0x4000 max)

因此,我在共享内存中有0x18(24)个额外的字节。它们从哪里来,有可能把它们移走吗?

我可以为Compute 2.0+更高版本编译以消除错误(我的硬件是3.0版本),但这将使用L1缓存中的内存,这可能会更慢。

因此,我在共享内存中有0x18(24)个额外的字节。它们从哪里来,有可能把它们移走吗?

参考编程指南:

一个块所需的共享内存总量等于静态分配的共享内存量、动态分配的共享存储器量之和,对于计算能力为1.x的设备,等于用于传递内核参数的共享内存的量(请参阅__noinline____forceinline__)。

只要您为cc1.x体系结构进行编译,就无法使用共享内存来携带内核参数。

我认为,正如您已经指出的,解决方案是为cc2.0或cc3.0架构进行编译。目前还不清楚你为什么不想这么做。