假设主机内存中有一个大型int数组,内核的线程对其进行读取或写入,并且不能保存在GPU全局内存中。当对数组元素的访问合并在一起时,我们可以期望从/写到主机内存的突发读/写,它接近于PCI通道的理论带宽。但是,当读写完全是零星的(非合并)时,带宽将与理论上的最大带宽相比多少?
根据来自这里的图片,对于每个写事务,应该有一个128位长的数据包.但它假定32位寻址(考虑到UVA需要64位机器)和4字节作为数据大小。如果这些假设是正确的,那么我们可以预期写入的最大带宽的四分之一和读带宽的七分之一左右。我说的对吗?这些假设是真的吗?

编辑
我用uint数组设计并执行了上述问题的测试。我获得的带宽大约为480 MB/s,用于PCI链路上的大量零星读取和大量零星写入,带宽约为6.6GB/s,显示13至14倍的速度减慢。怎么解释呢?
发布于 2014-08-13 15:07:55
只有NVIDIA知道--这可能与主机内存只能从其中一个内存分区访问有关--但这是已知的与映射固定内存有关的性能限制。在数据自动化系统手册的p 127-128中:“使用合并内存事务访问映射固定内存是很重要的(第5.2.9节)。非合并内存事务的性能损失从6x到2x不等。但即使在SM 2.x和以后的GPU上,其缓存也应该使合并成为一个过时的考虑因素,这种惩罚是非常严重的。”
听起来,在最近的硬件上,这种惩罚甚至更高。
https://stackoverflow.com/questions/25270390
复制相似问题