nvidia-smi易失性GPU使用说明?


71

我知道这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 |
+-----------------------------------------------------------------------------+

20
对于那些想知道的人,SM表示流式多处理器,在此
Davidmh '17

Volatile位于第一行,如Volatile Uncorr. ECC-中所示,这听起来像是严重的内存错误。您在上面的输出中有0个。
Tomasz Gandor

Answers:


70

它是一段时间内的抽样测量。在给定的时间段内,它报告一个或多个GPU内核处于活动状态(即运行)的时间百分比。

它并没有告诉您有关使用了多少SM或代码有多“忙”,代码究竟在做什么,或者它以何种方式使用内存的任何信息。

使用微基准测试类型的练习可以轻松验证上述权利要求(见下文)。

根据Nvidia文档,根据产品的不同,采样时间可能在1秒到1/6秒之间。但是,这段时间对您解释结果的方式没有太大影响。

同样,单词“ 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%的利用率。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.