https://blog.csdn.net/bruce_0712/article/details/65444997
CUDA的合并内存访问:coalesced memory
misaligned read/write;减少latency
- GPU的计算单元等待计算结果时,切换到下一个thread,读取下一个内存地址,以隐藏latency
- 连续存取减少latency
(1 word = 2 byte) (1 byte = 8bit)
char 16 bit; int 32 bit; float 32bit; double 64 bit;
coalesced: 开始的地址,必须是每个 thread 所存取的大小的 16 倍。例如,如果每个thread 都读取 32 bits 的数据,那么第一个 thread 读取的地址,必须是 16*4 = 64 bytes 的倍数。
每个 thread 一次读取的内存数据量,可以是 32 bits、64 bits、或 128 bits。不过,32 bits 的效率是最好的。64 bits 的效率会稍差,而一次读取 128 bits 的效率则比一次读取 32 bits 要显著来得低(但仍比 non-coalesced 的存取要好)。
如果每个 thread 一次存取的数据并不是 32 bits、64 bits、或 128 bits,那就无法符合 coalesced 的条件.