rsm*_*rsm 4 profiling cuda utilization nvml
我想在一段时间内获得有关GPU(我的是NVIDIA Tesla K20,在Linux上运行)的整体利用率的信息."整体"我的意思是,计划运行多少流多处理器,以及计划运行多少GPU核心(我想如果核心正在运行,它将以全速/频率运行?).如果我可以通过触发器测量整体利用率也会很好.
当然在问这里之前,我已经搜索并调查了几个现有的工具/库,包括NVML(和建立在它之上的nvidia-smi),CUPTI(和nvprof),PAPI,TAU和Vampir.但是,似乎(但我还不确定)他们都没有能够提供所需的信息.例如,NVML可以按百分比报告"GPU利用率",但根据其文档/评论,此利用率是"在GPU上执行一个或多个内核的过去一秒的时间百分比",这显然不够准确.对于nvprof,它可以报告单个内核的触发器(具有非常高的开销),但我仍然不知道GPU的使用情况.
PAPI似乎能够获得指令计数,但它不能与其他浮点运算不同.我还没有尝试过其他两种工具(TAU和Vampir),但我怀疑他们能满足我的需求.
所以我想知道甚至可以获得GPU的整体利用率信息吗?如果没有,估计它的最佳选择是什么?我这样做的目的是为在GPU上运行的多个作业找到更好的计划.
我不确定我是否已经清楚地描述了我的问题,所以如果有什么我可以添加以便更好地描述,请告诉我.
非常感谢你!
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 metric(每个周期的指令).如果您的程序是DP且IPC为2,则您具有100%的利用率(对于整个工作负载执行).这意味着2个warp预定指令,因此所有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工具不能提供更多,那么其他工具不太可能提供更多.但我认为正确组合指标可以告诉您有关应用运行的所有信息.
归档时间: |
|
查看次数: |
1681 次 |
最近记录: |