全局存储器优化

3.3 全局存储器优化
在CUDA的存储器结构中,全局存储器是最慢的,其延迟在几百个时钟,但是其容量是最大的,我们使用cudaMalloc函数分配的指针都是指向全局存储器空间的,我们不可能避开它们的使用。这两个因素使得全局存储器的使用对CUDA 程序的性能至关重要。

3.3.1 合并访问
为了提高访问全局存储器的效率,CUDA 提供了一种称为合并访问的机制来加速全局存储器的访问。在计算能力1.0和1.1的设备上,合并访问能够在一次存储器访问中访问最多达16个数据;在计算能力1.2和1.3的设备上,合并访问一次最多能够访问32个数据。另外线程间的切换也能够隐藏全局存储器的访问延迟。
所谓合并访问就是尽量要求相邻的线程访问相邻的地址空间,当然在不同计算能力的设备上,其具体要求有所差别,在1.0和1.1的设备上,合并访问要求第k个线程访问对齐的第k个存储地址,必须对齐,不能交叉,而1.2以上的设备没有此要求。
对于不同的数据类型,合并访问的带宽不相同,一般而言使用四字节的数据类型比较好,但是并不绝对,在某些情况下,使用8字节或16字节的数据性能可能会更好,尤其是在满足1.0和1.1设备的合并访问条件下。
在设计的时候要考虑到全局存储器的合并访问,并以此为要求来设计,比如在必要的时候对矩阵进行转置。对数据的组织方式加以改变。

:right: 就是太短了点

这个看明白了,就是内容太少了;还是没搞明白合并访问还有内存啥时候4B,8B,16B对齐,还有half-warp的问题。。。。。。。。。。。。。。
继续找资料

在某些情况下,对全局存储的访问是程序执行效率的最大瓶颈!

是啊

嘿嘿,这确实是个优化的重点:)

现在比较清楚bank冲突和合并访问了:D