web-dev-qa-db-ja.com

nvidia-smi揮発性GPU使用率の説明?

nvidia-smi -l 1がGPU使用率を1秒ごとに提供することを知っています(次と同様)。ただし、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 |
+-----------------------------------------------------------------------------+
52
user3813674

一定期間のサンプリングされた測定値 です。特定の期間について、1つ以上のGPUカーネルがアクティブであった(つまり実行されていた)時間の割合を報告します。

使用されたSMの数、コードの「ビジー状態」、コードの正確な動作、メモリの使用方法については何もわかりません。

上記の主張は、マイクロベンチマーク型のエクササイズを使用して、それほど困難なく検証できます(以下を参照)。

期間を正確に定義する方法はわかりませんが、全体としては単にサンプリングされた測定値であるため(つまり、nvidia-smiは1つのサンプリングされた測定値をポーリングするたびに報告します)、ツールの一般的な使用法または理解にとって重要です。期間は明らかに短いため、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%と報告されます。

55
Robert Crovella