1
CUDA / Re: 使用了共享内存最终时间没有没有减少
« 于: 十一月 01, 2022, 09:15:40 pm »并不存在真正"全局可见"的shared memory的,例如以下代码,会给你造成幻觉:那意思就是如果想要借助共享内存来减少存取延时,必须要在一个核函数范围内了吗?
__shared__ int fake_global_visible_shared_array[100];
__global__ void your_kernel()
{
....//use fake_global_visible_shared_array[] here
}
这种依然等效于在your_kernel的内部,定义一个shared memory的数组的。虽然它看起来像是"全局的shared memory", 然而它不是。
所以并不能跨kernel多次使用(例如你的一个kernel写入,另外一个kernel读取的)。
其次,因为每次kernel启动前, shared memory中的数据并不清零,你存在概率会读到之前的某kernel的某个block的残留内容的,但这种并不可靠(你也可以读不到,或者读到错误的内容)。
所以综合这两点,这种写法不可取。
假设想要把这3个kernel合并在一个kernel中,因为寄存器的原因导致launch失败【寄存器数量超出硬件限制】,即不能合并成一个kernel,那这种情况下只能把 U数组 存在global memory了吗?