CUDA分析器:计算内存和计算利用率

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

全局内存带宽是指设备内存(GPU板上的内存)的理论带宽。 - Greg Smith
1个回答

3

注意:我将尝试在未来更新此答案以获得更多细节。我认为在Visual Profiler报告中,并非所有计算的单个组件都很容易看到。

计算利用率

这是逻辑管道(内存、控制流和算术)的管道利用率。SM具有许多未记录的执行管道。如果您查看指令吞吐量图表,可以高度确定如何计算利用率。您可以阅读Kepler或Maxwell架构文档以获取有关管道的更多信息。CUDA核心是整数/单精度浮点数运算管道的市场术语。

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

内存带宽利用率

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

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


通过 Kepler 架构文档,您基本上是指这个:Kepler 计算架构白皮书 - Clood
你所说的指令吞吐量图表是指我在上面发布的那个(已编辑过)吗? - Clood
在第四张图中,Load/Store单元的利用率最高,但在第一张图中,内存操作的份额比算术操作要小。为什么会这样呢? - Clood
在顶部的图表中,我认为该值是通过问题插槽或周期进行归一化的,在底部则是通过执行路径的吞吐量进行归一化。例如,Kepler SM每个周期只能发出1个LSU warp指令,但最多可以发出6个ALU warp指令(使用所有4个warp调度器)。 - Greg Smith
那么计算利用率是由具有最高利用率的计算子系统(负载/存储、算术和逻辑)的利用率来确定的吗? - Clood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接