感谢回复!
但是代码中我是把共享内存U声明为了全局可见, kernel 1中用计算结果初始化共享数组U,kernel2和kernel3 从共享内存U中取数据来完成自己的计算,结果表示确实正确得到并使用了kernel 1的计算结果。相较于之前数组U是存放在global memory,现在存到了shared memory,这难道不能起到加速作用吗?【另外这是不是也说明了全局可见的共享内存可以跨kernel生效呀?】
并不存在真正"全局可见"的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的残留内容的,但这种并不可靠(你也可以读不到,或者读到错误的内容)。
所以综合这两点,这种写法不可取。