Ответ 1
Это выборочное измерение за период времени. В течение заданного периода времени он сообщает, в каком проценте времени было задействовано одно или несколько ядер ядра (ядро) (т.е. Работа).
Это ничего не говорит о том, сколько SM было использовано или как "занят" код, или что он делает точно, или каким образом он мог использовать память.
Вышеуказанное утверждение может быть проверено без особых трудностей с помощью упражнения типа microbenchmarking (см. ниже).
Я не знаю, как точно определить период времени, но поскольку это также общее просто выборочное измерение (т.е. nvidia-smi
сообщает одно выборочное измерение так часто, как вы его опросили), я не думаю, что это должно быть что важно для общего использования или понимания инструмента. Период времени явно короткий и не обязательно связан с интервалом опроса, если он указан, для 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%.