Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CUDA错误:共享数据太多(0x4018字节,最大0x4000):额外的0x18字节来自哪里?_C++_Pointers_Cuda_Size - Fatal编程技术网

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

C++ CUDA错误:共享数据太多(0x4018字节,最大0x4000):额外的0x18字节来自哪里?,c++,pointers,cuda,size,C++,Pointers,Cuda,Size,我正在尝试实现这个CUDA示例: 因为我有0x4000字节可用,所以我尝试使用TILE\u DIM=128,以便 共享无符号字符平铺[tile\u DIM][tile\u DIM] 大小为0x4000字节=16384字节=128*128字节 但是,这给了我以下错误: CUDACOMPILE:ptxas错误:输入函数“\u Z18transposeCoalescedPh”使用了过多的共享数据(0x4018字节,最大0x4000) 所以我在共享内存中有0x18(24)个额外字节。它们来自何处,有可能

我正在尝试实现这个CUDA示例: 因为我有0x4000字节可用,所以我尝试使用
TILE\u DIM=128
,以便

共享无符号字符平铺[tile\u DIM][tile\u DIM]

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

但是,这给了我以下错误:

CUDACOMPILE:ptxas错误:输入函数“\u Z18transposeCoalescedPh”使用了过多的共享数据(0x4018字节,最大0x4000)

所以我在共享内存中有0x18(24)个额外字节。它们来自何处,有可能移除它们吗

我可以编译ComputeVersion2.0+更高版本来消除错误(我的硬件是Version3.0),但这将使用一级缓存中的内存,而一级缓存的速度应该较慢

所以我在共享内存中有0x18(24)个额外字节。它们从哪里来,可以移除它们吗

关于:

块所需的共享内存总量等于静态分配的共享内存总量、动态分配的共享内存总量,对于计算能力为1.x的设备,等于用于传递内核参数的共享内存总量(请参见
\uuuuu noinline\uuuu
\uu forceinline\uuuu

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


我认为,正如您已经指出的,解决方案是针对cc2.0或cc3.0体系结构进行编译。不清楚您为什么不想这样做。

这只是在为sm_1x体系结构进行编译时发生的吗?不确定您的意思:“我可以针对Compute 2.0+更高版本进行编译以消除错误(我的硬件是3.0版),但这将使用一级缓存中的内存。“谢谢。在我的例子中,我必须看看允许一级缓存大小减小如何影响性能。如果您为cc2.0或更高版本编译,参数应通过常量内存系统传递,并且不应影响共享内存使用。只需在nVidia OpenCL上遇到类似的行为,只是缺少4个字节。