5

我试图在一段时间内获取有关 GPU 整体利用率的信息(我的是 NVIDIA Tesla K20,在 Linux 上运行)。“整体”是指计划运行多少个流式多处理器,以及计划运行多少个 GPU 内核(我想如果一个内核正在运行,它将以其全速/频率运行?)。如果我能得到以 flops 衡量的整体利用率,那就太好了。

当然,在这里提出问题之前,我已经搜索和调查了几个现有的工具/库,包括 NVML(以及基于它构建的 nvidia-smi)、CUPTI(和 nvprof)、PAPI、TAU 和 Vampir。但是,似乎(但我还不确定)他们都无法为我提供所需的信息。例如,NVML 可以按百分比报告“GPU 利用率”,但根据其文档/评论,此利用率是“过去一秒内一个或多个内核在 GPU 上执行的时间百分比”,这显然不够准确. 对于 nvprof,它可以报告单个内核的失败(开销非常高),但我仍然不知道 GPU 的利用率如何。

PAPI 似乎能够获得指令计数,但它不能与其他浮点运算不同。我还没有尝试过其他两种工具(TAU 和 Vampir),但我怀疑它们能否满足我的需求。

所以我想知道是否有可能获得 GPU 的整体利用率信息?如果不是,估计它的最佳选择是什么?我这样做的目的是为在 GPU 上运行的多个作业找到更好的时间表。

我不确定我是否已经足够清楚地描述了我的问题,所以请让我知道是否可以添加任何内容以获得更好的描述。

非常感谢!

4

1 回答 1

5

Visual Studio 的nVidia Nsight插件具有非常好的图形功能,可以提供您想要的统计信息。但我感觉你有一台 Linux 机器,所以 Nsight 无法工作。

我建议使用nVidia Visual Profiler

指标参考相当完整,可以在这里找到。这就是我收集您感兴趣的数据的方式:

  • 有源 SMX 单元- 查看sm_efficiency。它应该接近 100%。如果它较低,则某些 SMX 单元未激活。

  • 活动核心/SMX -这取决于。K20 有一个带有双指令问题的 Quad-warp 调度程序。经线发射 32 个 SM 核心。K20 有 192 个 SP 核心和 64 个 DP 核心。您需要查看ipc指标(每周期指令)。如果您的程序是 DP 并且 IPC 是 2,那么您有 100% 的利用率(对于整个工作负载执行)。这意味着 2 个经编计划指令,因此所有 64 个 DP 内核在所有周期中都处于活动状态。如果你的程序是 SP,理论上你的 IPC 应该是 6。但实际上这很难得到。IPC 为 6,意味着 3 个调度程序每个启动 2 个 warp,并将工作分配给 3 x 2 x 32 = 192 个 SP 内核。

  • FLOPS - 好吧,如果您的程序使用浮点运算,那么我会查看flop_count_sp并将其除以经过的秒数。

关于频率,我不担心,但检查 nvidia-smi 并没有什么坏处。如果您的卡有足够的冷却,那么它将在运行时保持在峰值频率。

检查指标参考,因为它将为您提供更多有用的信息。

我认为 NVprof 也支持多个进程。在这里检查。您还可以按进程 ID 过滤。因此,您可以“多上下文”或“单上下文”收集这些指标。在指标参考表中,您有一列说明是否可以在这两种情况下收集它们。

注意:这些指标是使用硬件性能计数器和驱动程序级别分析计算的。如果 nvidia 工具不能提供更多,那么其他工具不太可能提供更多。但我认为正确组合这些指标可以告诉您有关应用运行的所有信息。

于 2014-11-06T19:36:02.250 回答