我想知道我的 CUDA 内核在内存带宽利用率方面有多好。我在开启 ECC 的 Tesla K40c 上运行它们。实用程序给出的结果是否bandwidthTest
很好地近似于可达到的峰值?否则,如何编写类似的测试来找到峰值带宽?
我的意思是设备内存带宽。
我想知道我的 CUDA 内核在内存带宽利用率方面有多好。我在开启 ECC 的 Tesla K40c 上运行它们。实用程序给出的结果是否bandwidthTest
很好地近似于可达到的峰值?否则,如何编写类似的测试来找到峰值带宽?
我的意思是设备内存带宽。
带宽测试的源代码包含在 CUDA SDK 中,因此您可以直接查看它。bandwidthTest 示例对设备与主机、主机与设备、设备与设备之间的传输时间进行测试(传输卡上的内存)。
这是内存传输的真实执行,但它利用了几件事:
在执行内存传输的同时使用内核进行实际工作可能会导致性能下降。但是,您可以参考带宽测试代码并将其用作改进传输的指南。考虑固定内存、异步传输或不需要显式传输数据的较新的共享内存方法。还要记住,bandwidthTest 仅计算内存周围的批量传输,并没有真正衡量共享内存之类的东西。
最终性能很大程度上取决于内核以及您正在执行的内存传输的数量和大小。