【问题标题】:CUDA Profiler: Calculate memory and compute utilizationCUDA Profiler:计算内存和计算利用率
【发布时间】:2015-03-24 04:18:47
【问题描述】:

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

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

附加图表

【问题讨论】:

  • 全局内存带宽是设备内存(GPU 板上的内存)的理论带宽。

标签: c++ ubuntu cuda profiling utilization


【解决方案1】:

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

计算利用率

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

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

内存带宽利用率

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

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

【讨论】:

  • 开普勒架构文件基本上是指这个:Kepler Compute Architecture White Paper ?
  • 您所说的指令吞吐量图表是指我在最后发布的那个(已编辑)吗?
  • 在图四中,加载/存储单元的利用率最高,但在图一中,内存操作的份额比算术操作小。这是为什么呢?
  • 在上图中,我相信该值是由问题槽或周期标准化的,而在底部它是由执行路径的吞吐量标准化的。例如,Kepler SM 每个周期只能发出 1 个 LSU warp 指令,但每个周期最多可以发出 6 个 ALU warp 指令(使用所有 4 个 warp 调度程序)。
  • 那么计算利用率是由利用率最高的计算子系统(加载/存储、算术和逻辑)的利用率给出的?
猜你喜欢
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多