1

我想知道我的 CUDA 内核在内存带宽利用率方面有多好。我在开启 ECC 的 Tesla K40c 上运行它们。实用程序给出的结果是否bandwidthTest很好地近似于可达到的峰值?否则,如何编写类似的测试来找到峰值带宽?

我的意思是设备内存带宽。

4

1 回答 1

1

带宽测试的源代码包含在 CUDA SDK 中,因此您可以直接查看它。bandwidthTest 示例对设备与主机、主机与设备、设备与设备之间的传输时间进行测试(传输卡上的内存)。

这是内存传输的真实执行,但它利用了几件事:

  1. 中到大内存传输。如果您正在进行大量的小额转账,您将支付高昂的开销罚款,这将降低您的转账率。
  2. 固定记忆。bandwidthTest 使用固定内存,以便尽可能快地传输。您可能有也可能没有此选项。
  3. 持续读/写内存。我记得, bandwidthTest 进行了许多可以排队的传输。任何启动延迟或异常都将被消除,它的优点是可以将队列中的大量传输串在一起。您可能必须进行转移工作工作转移,因此您最终可能会遇到额外的延误。CUDA 5 对内存传输的改进可能有助于缓解这种情况。

在执行内存传输的同时使用内核进行实际工作可能会导致性能下降。但是,您可以参考带宽测试代码并将其用作改进传输的指南。考虑固定内存、异步传输或不需要显式传输数据的较新的共享内存方法。还要记住,bandwidthTest 仅计算内存周围的批量传输,并没有真正衡量共享内存之类的东西。

最终性能很大程度上取决于内核以及您正在执行的内存传输的数量和大小。

于 2014-06-05T16:12:29.857 回答