二 共享内存的数据布局
从硬件角度看,被一个SM共享,从软件角度看,则是被一个block共享
1 方形共享内存
CPU的内存是线性存储的,但是GPU的共享内存并不是线性的,而是二维的
说白了就是不要一个线程束中访问一列共享内存,而是要访问一行
最好就是同步线程,不同bank(同一个线程束中)
2 行主序访问和列主序访问
核函数只完成简单的两个操作:
- 将全局线程索引值存入二维共享内存
- 从共享内存中按照行主序读取这些值并存到全局内存中
项目完整的代码在24_shared_memory_read_data这个文件夹下,下文我们只贴部分代码。
核函数如下
1 2 3 4 5 6 7 8 9 |
__global__ void setRowReadRow(int * out) { __shared__ int tile[BDIMY][BDIMX]; unsigned int idx=thre |