7

我正在尝试使用 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% 或都不计算?

这两个测量值(内存和计算利用率)是否对我的内核使用资源的效率有足够的第一印象?还是应该包括其他重要指标?

附加图

在此处输入图像描述

4

1 回答 1

3

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

计算利用率

这是逻辑管道的管道利用率:内存、控制流和算术。SM 有许多非文档的执行管道。如果您查看指令吞吐量图表,您可以大致确定如何计算利用率。您可以阅读开普勒或麦克斯韦架构文档以获取有关管道的更多信息。CUDA 核心是整数/单精度浮点数学管道的营销术语。

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

内存带宽利用率

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

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

于 2015-01-25T21:06:09.957 回答