web-dev-qa-db-fra.com

nvidia-smi Explication volatile de l'utilisation du GPU?

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 |
+-----------------------------------------------------------------------------+
52
user3813674

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%.

55
Robert Crovella