我试图在一段时间内获得有关GPU(我的是NVIDIA Tesla K20,在Linux上运行)的整体利用率的信息。 通过"整体"我的意思是,计划运行多少流多处理器,以及计划运行多少GPU核心(我想如果核心正在运行,它将以全速/频率运行?)。如果我可以通过翻牌来衡量整体利用率,那也很好。
当然,在此问这个问题之前,我已经搜索并调查了几个现有的工具/库,包括NVML(和基于它构建的nvidia-smi),CUPTI(和nvprof),PAPI,TAU和VAMPIR。但是,似乎(但我还不确定)他们都没有能够提供所需的信息。例如,NVML可以报告" GPU利用率"百分比,但根据其文档/评论,这种利用率是过去一秒钟内在GPU上执行一个或多个内核的时间百分比,这显然不够准确。对于nvprof,它可以报告单个内核的触发器(具有非常高的开销),但我仍然不知道GPU的使用情况。
PAPI似乎能够获得指令计数,但它不能与其他浮点运算不同。我还没有尝试过其他两种工具(TAU和Vampir),但我怀疑它们能满足我的需求。
所以我想知道甚至可以获得GPU的整体利用率信息吗?如果没有,估计它的最佳选择是什么?我这样做的目的是为在GPU上运行的多个作业找到更好的计划。
我不确定我是否已经清楚地描述了我的问题,所以如果有什么我可以添加以便更好地描述,请告诉我。
非常感谢!
答案 0 :(得分:5)
nVidia Nsight 插件具有非常好的图形功能,可提供您想要的统计信息。但我觉得你有一台Linux机器,所以Nsight不会工作。
我建议使用 nVidia Visual Profiler 。
指标参考相当完整,可以找到 here 。这就是我收集您感兴趣的数据的方式:
Active 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也支持多个进程。检查here。您还可以按进程ID进行筛选。因此,您可以收集这些指标“多上下文”或“单一上下文”。在度量参考表中,您有一个列,指出是否可以在两种情况下收集它们。
注意:使用硬件性能计数器和驱动程序级别分析计算指标。如果nvidia工具不能提供更多,那么其他工具不太可能提供更多。但我认为正确组合指标可以告诉您有关应用运行的所有信息。