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

Flo*_*ane 3 c++ size pointers cuda

我正在尝试实现这个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缓存的内存,这应该更慢.

Rob*_*lla 6

所以我在共享内存中有额外的0x18(24)字节.它们来自哪里,是否可以将它们删除?

参考编程指南:

块所需的共享内存总量等于静态分配的共享内存量,动态分配的共享内存量和计算能力1.x的设备之和,用于传递的共享内存量内核的参数(参见__noinline____forceinline__).

只要编译cc1.x体系结构,就无法使用共享内存来传递内核参数.

我认为您已经指出的解决方案是编译cc2.0或cc3.0架构.目前尚不清楚为什么你不想这样做.