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 |
+-----------------------------------------------------------------------------+
一定期間のサンプリングされた測定値 です。特定の期間について、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%と報告されます。