在阅读完该主题后,我有2个与全局内存合并访问相关的问题:
1-我读到内存合并的一个要求是线程访问的字必须是4,8或16字节,但显然这仅对计算能力小于1.3的设备有效。是对的吗?对于后一个设备(> = 1.3),一个线程甚至可以访问一个或两个字节并具有成功的合并内存访问
2-是否重要(主要是时间)如果(一半)warp全局内存访问由于字未对齐而产生128字节而不是64字节的内存事务,以及传输的额外数据怎么样,它会被丢弃系统?
谢谢
答案 0 :(得分:1)
1)您可以在以后的设备上以任何方式访问数据,但如果您请求的数据段很窄,那么性能仍然会很差,即您无法获得GPU的全部内存带宽。
2)这又取决于你代码的整体方案。通常,后来版本的CUDA的改进是非对齐读/写不会导致糟糕的性能,但是导致例如2写命令是问题,而不是一个。
想想把人放在公共汽车上。如果你可以将你的整个人群填充到一个目的地的单一公交车上,那么效率要高于使用两辆只有一半的公交车。
所以是的,这很重要,但是根据你是记忆还是计算界限,它会有所不同。
安排您的读/写模式以利用全部带宽,这使我在许多应用程序中的性能提升了20-30%。
/亨里克