关于共享存储器

我理解:通常由主存copy到显存(global mem),然后最好能够分配到share mem,同一个block中用share mem读取比较快。
但是如果我现在是block与block之间可能用到同一个数据,是不是就不能用share mem了?如果用了就会形成bank conflict?那么我就把数据放到global mem里直接用?然后来个同步之类的?会有什么后果呢?

你的CAT与CAT之间都用到同一个数据是不是指块之间的邻接数据?
如果是的话不同的块都可以把这个数据加载到smem,smem的bank conflict跟加载这同一个数据是没有关系的,bank conflict取决于你global里怎样用smem

不是邻接数据,而是内部数据。
就是说我有一个数组,里面的数据不一定被哪个block的哪个thread用到,如果拆开放到share mem里,就是某一个block的mem了

smem是块内线程共享的,如果你不能确定哪个块使用数组的哪个数据,就不能拆分数组到不同的block的smem
我也学不久,个人觉得,用gmem只是存取的速度很慢,只要注意好是否有对同一变量的互斥操作,还是没什么后果的

只用于读取,不改变,应该不会出现互斥操作~要不我给它放进constant mem里?会不会比global mem快很多呢?

肯定的,虽然cmem在设备存储器中,但片上有常量缓存。具体的内容可以看指南