首页 文章

nvidia-smi易失性GPU利用率解释?

提问于
浏览
43

我知道 nvidia-smi -l 1 将每秒钟提供一次GPU使用(类似于以下内容) . 但是,我很感激 Volatile GPU-Util 的真正含义 . 这是使用的SM数量超过总SM数,占用数量还是其他数量?

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.48                 Driver Version: 367.48                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K20c          Off  | 0000:03:00.0     Off |                    0 |
| 30%   41C    P0    53W / 225W |      0MiB /  4742MiB |     96%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla K20c          Off  | 0000:43:00.0     Off |                    0 |
| 36%   49C    P0    95W / 225W |   4516MiB /  4742MiB |     63%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    1      5193    C   python                                        4514MiB |
+-----------------------------------------------------------------------------+

1 回答

  • 45

    这是a sampled measurement over a time period . 对于给定的时间段,它报告一个或多个GPU内核活动(即运行)的时间百分比 .

    它没有告诉你任何关于使用了多少SM的信息,或者代码是如何“繁忙”,或者它正在做什么,或者它以何种方式使用内存 .

    使用微基准标记型练习可以毫不费力地验证上述权利要求(见下文) .

    我不知道如何准确定义时间段,但由于它总体上只是一个采样测量(即 nvidia-smi 报告一个采样测量,因为你经常轮询它)我不认为它对于一般用法应该是那么重要或理解该工具 . 对于 nvidia-smi ,时间段显然很短,并且不一定与轮询间隔相关(如果指定了一个) . 也可以使用微基准测试技术揭示采样时间段 .

    此外,"Volatile"一词与 nvidia-smi 中的此数据项无关 . 您误读了输出格式 .

    这是一个支持我声明的简单代码:

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    const long long tdelay=1000000LL;
    const int loops = 10000;
    const int hdelay = 1;
    
    __global__ void dkern(){
    
      long long start = clock64();
      while(clock64() < start+tdelay);
    }
    
    int main(int argc, char *argv[]){
    
      int my_delay = hdelay;
      if (argc > 1) my_delay = atoi(argv[1]);
      for (int i = 0; i<loops; i++){
        dkern<<<1,1>>>();
        usleep(my_delay);}
    
      return 0;
    }
    

    在我的系统上,当我使用命令行参数100运行上述代码时,nvidia-smi将报告99%的利用率 . 当我使用命令行参数1000运行时,nvidia-smi将报告~83%的利用率 . 当我使用命令行参数10000运行它时,nvidia-smi将报告约9%的利用率 .

相关问题