CUDA错误:共享数据太多(0x4018字节,最大0x4000):额外的0x18字节从哪里来
CUDA error: too much shared data (0x4018 bytes, 0x4000 max): where do the extra 0x18bytes come from?
我正在尝试实现这个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架构进行编译。目前还不清楚你为什么不想这么做。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在UNIX系统中使用DIR查找文件的字节大小
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- std::当在256字节边界上写入整数时,流的奇怪行为
- 当比特(而不是字节)的顺序至关重要时的持久性
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 字节到位运算符重载C++
- 在java中读取c++字节的位字段
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- 字节真的是最小可寻址单元吗
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 如何将原始字节附加到 std::vector?
- CUDA错误:共享数据太多(0x4018字节,最大0x4000):额外的0x18字节从哪里来