我正在尝试使用CUDA nsight profiler在Ubuntu上为我的GPU加速应用程序建立两个整体测量值,以衡量内存带宽利用率和计算吞吐量利用率。该应用程序运行在Tesla K20c GPU上。
我想要的两个测量值在某种程度上可与此图中给出的测量值进行比较: 问题在于这里没有给出确切的数字,更重要的是我不知道这些百分比是如何计算的。
内存带宽利用率
Profiler告诉我,我的GPU具有208 GB/s的最大全局内存带宽。 这是指设备内存BW还是全局内存BW?它说Global,但我认为第一个更有意义。
对于我的内核,Profiler告诉我设备内存带宽为98.069 GB/s。 假设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%或者两者都不是?
这两个测量值(内存和计算利用率)是否给出了内核有效使用资源的充分印象?还是应该包括其他重要指标?
附加图表
我想要的两个测量值在某种程度上可与此图中给出的测量值进行比较: 问题在于这里没有给出确切的数字,更重要的是我不知道这些百分比是如何计算的。
内存带宽利用率
Profiler告诉我,我的GPU具有208 GB/s的最大全局内存带宽。 这是指设备内存BW还是全局内存BW?它说Global,但我认为第一个更有意义。
对于我的内核,Profiler告诉我设备内存带宽为98.069 GB/s。 假设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%或者两者都不是?
这两个测量值(内存和计算利用率)是否给出了内核有效使用资源的充分印象?还是应该包括其他重要指标?
附加图表