在翻阅Nicholas Wilt的 CUDA 手册时,我注意到 1 字节和 2 字节的内存事务显然没有合并。但是,据我了解,Fermi 和 Kepler (SM2+) 架构获取了满足内存所需的高速缓存行数。对我来说,这听起来像是合并。
为了节省空间,我的应用程序大量使用了 1 字节和 2 字节数据字段(在大型 2D 间距线性数组中)并锤击全局内存。
我继续对我的应用程序进行了更改,通过简单地将一个无符号整数与四个无符号字符联合并获取联合,让一个线程一次获取 4 个条目。
在我的一些测试数据上运行它,我看到 Kepler 笔记本电脑卡(750M,SM3.5)和 Tesla C2075(SM2.0)的改进了 ~32% 和 ~45%
这种改进的更可能原因是什么?增加了每个线程的工作,减少了整体内存获取请求,或者我对合并如何处理小数据类型的理解不正确?