CUDA Profiler:计算内存和计算利用率

CUDA Profiler: Calculate memory and compute utilization

我正在尝试在 ubuntu 上使用 CUDA nsight 分析器为我的 GPU 加速应用程序的内存带宽利用率和计算吞吐量利用率建立两个总体测量值。该应用程序在 Tesla K20c GPU 上运行。

我想要的两个测量值在某种程度上与此图中给出的测量值相当:

问题是这里没有给出确切的数字,更重要的是我不知道这些百分比是如何计算的。

内存带宽利用率

探查器告诉我我的 GPU 的最大全局内存带宽为 208 GB/s。

这是指 Device Memory BW 还是 Global Memory BW?它说的是全球,但第一个对我来说更有意义。

对于我的内核,分析器告诉我设备内存带宽为 98.069 GB/s。

假设最大值 208 GB/s 指的是设备内存,那么我可以简单地将内存带宽利用率计算为 90.069/208 = 43% 吗?请注意,此内核在没有额外的 CPU-GPU 数据传输的情况下执行了多次。因此系统带宽并不重要。

计算吞吐量利用率

我不确定将计算吞吐量利用率放入数字的最佳方法是什么。我最好的猜测是使用每周期指令与最大每周期指令的比率。探查器告诉我最大 IPC 是 7(见上图)。

首先,这到底是什么意思?每个多处理器有 192 个内核,因此最多有 6 个活动 warp。那不是说最大 IPC 应该是 6 吗?

探查器告诉我,我的内核发出了 IPC = 1.144 并执行了 IPC = 0.907。我应该将计算利用率计算为 1.144/7 = 16% 或 0.907/7 = 13% 还是其中的 none?

这两个测量值(内存和计算利用率)是否给出了关于我的内核使用资源的效率的充分第一印象?还是应该包括其他重要指标?

附加图表

注意:我将尝试更新此答案以获取更多详细信息。我不认为在 Visual Profiler 报告中很容易看到计算的所有单独组件。

计算利用率

这是逻辑管道的管道利用率:内存、控制流和算术。 SM 有许多未记录的执行管道。如果您查看指令吞吐量图表,您可以在较高水平上确定如何计算利用率。您可以阅读 kepler 或 maxwell 架构文档以获取有关管道的更多信息。 CUDA 核心是 integer/single 精密浮点数学管道的营销术语。

此计算不是基于 IPC。它基于管道利用率和发布周期。例如,如果您发出 1 instruction/cycle(从不双重发出),您可以达到 100% 的利用率。如果您以最大速率发出双精度指令(取决于 GPU),您也可以达到 100%。

内存带宽利用率

探查器计算 L1、TEX、L2 和设备内存的利用率。显示最高值。很有可能数据路径利用率很高,但带宽利用率很低。

还应计算内存延迟限制原因。程序很容易受内存延迟限制但不受计算利用率或内存带宽限制。