0

假设int主机内存中有一个大数组,内核的线程读取或写入该数组,并且不能保存在 GPU 全局内存中。当对阵列元素的访问被合并时,我们可以预期从主机内存/向主机内存进行突发读/写,这接近 PCI-Express 通道的理论带宽。但是当读取或写入完全是零星的(非合并)时,带宽与理论最大带宽相比会是多少?

根据下图对于每个写入事务,都应该有一个 128 位长的数据包。但它假定 32 位寻址(考虑到 UVA 需要 64 位机器)和 4 字节作为数据大小。如果这些假设成立,则可以预期大约四分之一的最大带宽用于写入,七分之一用于读取。我对么?这些假设是真的吗?

在此处输入图像描述

编辑

uint我用数组设计并执行了上述问题的测试。对于带宽约为 6.6 GB/s 的 PCI-Express 链路上的大量零星读取和大量零星写入,我获得的带宽约为 480 MB/s,显示速度降低了 13 到 14 倍。怎么解释?

4

1 回答 1

1

只有 NVIDIA 肯定知道——它可能与只能从内存分区之一访问的主机内存有关——但这是映射固定内存的已知性能限制。来自The CUDA Handbook 的p127-128 :“使用合并的内存事务访问映射的固定内存很重要(第 5.2.9 节)。未合并的内存事务的性能损失从 6 倍到 2 倍不等。但即使在 SM 2.x 上以及后来的 GPU,其缓存本应使合并成为过时的考虑因素,其代价是显着的。”

听起来,在更新的硬件上,惩罚甚至更高。

于 2014-08-13T15:07:55.000 回答