我正在尝试使用 ubuntu 上的 CUDA nsight 分析器为我的 GPU 加速应用程序建立内存带宽利用率和计算吞吐量利用率的两个总体测量值。该应用程序在 Tesla K20c GPU 上运行。
我想要的两个测量值在某种程度上与此图中给出的测量值相当:
问题是这里没有给出确切的数字,更重要的是我不知道这些百分比是如何计算的。
内存带宽利用率
Profiler 告诉我,我的 GPU 的最大全局内存带宽为 208 GB/s。
这是指设备内存带宽还是全局内存带宽?它是全球性的,但第一个对我来说更有意义。
对于我的内核,分析器告诉我设备内存带宽为 98.069 GB/s。
假设最大 208 GB/s 指的是设备内存,那么我可以简单地将内存 BW 利用率计算为 90.069/208 = 43%?请注意,此内核会多次执行,无需额外的 CPU-GPU 数据传输。因此,系统 BW 并不重要。
计算吞吐量利用率
我不确定将 Compute Throughput Utilization 放入一个数字的最佳方法是什么。我最好的猜测是使用每个周期的指令与每个周期的最大指令比率。分析器告诉我最大 IPC 是 7(见上图)。
首先,这实际上意味着什么?每个多处理器有 192 个内核,因此最多有 6 个活动 warp。这是否意味着最大 IPC 应该是 6?
分析器告诉我,我的内核已发出 IPC = 1.144 并执行 IPC = 0.907。我应该将计算利用率计算为 1.144/7 = 16% 还是 0.907/7 = 13% 或都不计算?
这两个测量值(内存和计算利用率)是否对我的内核使用资源的效率有足够的第一印象?还是应该包括其他重要指标?
附加图