nvidia-smi Explicação de utilização de GPU volátil?

Eu sei que nvidia-smi -l 1 dará o uso da GPU a cada um segundo (similar ao seguinte). No entanto, gostaria de receber uma explicação sobre o que o Volatile GPU-Util realmente significa. Esse é o número de SMs usados ​​em relação ao total de SMs, à ocupação ou a alguma outra coisa?

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

É uma medida amostrada ao longo de um período de tempo . Por um determinado período de tempo, ele informa a porcentagem de tempo em que um ou mais kernel (s) da GPU estava ativo (ou seja, executando).

Ele não diz nada sobre quantos SMs foram usados, ou quão “ocupado” era o código, ou o que ele estava fazendo exatamente, ou de que maneira ele poderia estar usando a memory.

A (s) alegação (ões) acima pode (m) ser verificada sem muita dificuldade usando um exercício tipo microbenchmarking (veja abaixo).

Eu não sei como definir o período de tempo exatamente, mas como também é, em geral, apenas uma medição amostrada (isto é, nvidia-smi reporta uma medição amostrada com a mesma freqüência que você faz a pesquisa) Eu não acho que deveria ser tão importante uso geral ou compreensão da ferramenta. O período de tempo é obviamente curto e não está necessariamente relacionado ao intervalo de sondagem, se um for especificado, para nvidia-smi . Pode ser possível descobrir o período de amostragem usando técnicas de microbenchmark também.

Além disso, a palavra “Volátil” não pertence a este item de dados em nvidia-smi . Você está interpretando mal o formato de saída.

Aqui está um código trivial que suporta minha afirmação:

 #include  #include  #include  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>>(); usleep(my_delay);} return 0; } 

No meu sistema, quando eu executo o código acima com um parâmetro de linha de comando de 100, o nvidia-smi reportará 99% de utilização. Quando eu executo com um parâmetro de linha de comando 1000, o nvidia-smi reportará ~ 83% de utilização. Quando eu executo com um parâmetro de linha de comando de 10000, o nvidia-smi reportará ~ 9% de utilização.