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

CUDA带宽测试以获得可达到的峰值,cuda,profiling,memory-bandwidth,Cuda,Profiling,Memory Bandwidth,我想知道我的CUDA内核在内存带宽利用率方面有多好。我在特斯拉K40c上运行它们,ECC打开。带宽测试实用程序给出的结果是否很好地近似于可达到的峰值?否则,如何编写类似的测试来找到峰值带宽 我指的是设备内存带宽。CUDA SDK中包含了带宽测试的源代码,因此您可以直接查看它。带宽测试示例执行设备与主机、主机与设备以及设备与设备之间的传输时间测试(传输卡上的内存) 这是内存传输的实际执行,但它利用了以下几点: 中到大内存传输。如果你正在做大量的小事情 你将支付高昂的管理费用,这将 降低你的换乘率

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


我指的是设备内存带宽。

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

这是内存传输的实际执行,但它利用了以下几点:

  • 中到大内存传输。如果你正在做大量的小事情 你将支付高昂的管理费用,这将 降低你的换乘率
  • 固定内存。带宽测试使用固定内存,以便传输速度尽可能快。您可能有也可能没有此选项
  • 存储器的持续读/写。我记得,bandwidthTest进行了大量可以排队的传输。任何启动延迟或异常都将被消除,它的优点是将队列中的大量传输串连在一起。你可能需要转岗,这样你可能会有更多的延误。CUDA 5内存传输的改进可能有助于缓解这一问题
  • 在执行内存传输时使用内核进行实际工作可能会导致性能降低。但是,您可以参考带宽测试代码,并将其用作改进传输的指南。考虑固定内存、异步传输或不需要显式数据传输的较新共享内存方法。还要记住,带宽测试只是计算内存周围的批量传输,而不是真正衡量共享内存之类的东西


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

    带宽测试已经足够好了,您不能对带宽提高太多。等价物是一个简单的复制内核。您要做的是确保在内核中复制多个数据值。例如,如果处理三维数据集,则使用二维线程块平铺空间,内核在z维度上有一个For循环。