CUDA带宽测试以获得可达到的峰值



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

我指的是设备内存带宽

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

这是一个真正的内存传输执行,但是它利用了一些东西:

  1. 中到大内存传输。如果你在做很多微小的转账你将支付高额的管理费,这将降低你的转移率。
  2. 固定内存。bandwidthTest使用固定内存,以便传输尽可能快。您可能有也可能没有这个选项。
  3. 内存持续读写。我记得,bandwidthTest执行了许多可以排队的传输。任何启动延迟或异常都将被平滑处理,并且它具有将队列中的大量传输串在一起的优点。你可能不得不进行transfer-work-work-transfer,所以你可能会有额外的延迟。CUDA 5在内存传输方面的改进可能有助于缓解这种情况。

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

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

相关内容

  • 没有找到相关文章

最新更新