Je le sais nvidia-smi -l 1
donnera l'utilisation du processeur graphique toutes les secondes (comme dans la suivante). Cependant, j'aimerais une explication sur ce que Volatile GPU-Util
signifie vraiment. S'agit-il du nombre de MS utilisés par rapport au total, ou de l'occupation, ou autre chose?
+-----------------------------------------------------------------------------+
| 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 |
+-----------------------------------------------------------------------------+
C'est ne mesure échantillonnée sur une période de temps . Pour une période donnée, il indique le pourcentage de temps pendant lequel un ou plusieurs noyaux GPU étaient actifs (c'est-à-dire en cours d'exécution).
Cela ne vous dit rien sur le nombre de MS utilisés, ni sur le niveau "occupé" du code, ni sur ce qu'il faisait exactement, ni sur la manière dont il utilisait la mémoire.
Les affirmations ci-dessus peuvent être vérifiées sans trop de difficulté en utilisant un exercice de type microbenchmarking (voir ci-dessous).
Je ne sais pas comment définir exactement la période, mais comme il s’agit également d’une mesure échantillonnée (c.-à-d. nvidia-smi
rapporte une mesure échantillonnée aussi souvent que vous l'interrogez) Je ne pense pas que cela soit si important pour l'utilisation générale ou la compréhension de l'outil. La période est évidemment courte et n'est pas nécessairement liée à l'intervalle d'interrogation, le cas échéant, pour nvidia-smi
. Il pourrait être possible de découvrir la période d'échantillonnage en utilisant également des techniques de microbenchmarking.
De plus, le mot "Volatile" ne se rapporte pas à cet élément de données dans nvidia-smi
. Vous avez mal interprété le format de sortie.
Voici un code trivial qui prend en charge ma revendication:
#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;
}
Sur mon système, lorsque je lance le code ci-dessus avec un paramètre de ligne de commande de 100, nvidia-smi signalera une utilisation de 99%. Lorsque je lance avec un paramètre de ligne de commande de 1000, nvidia-smi signalera une utilisation de ~ 83%. Lorsque je l'exécute avec un paramètre de ligne de commande de 10 000, nvidia-smi signalera une utilisation d'environ 9%.