2016-12-02 9 views
17

나는 nvidia-smi -l 1이 매초마다 GPU 사용법을 알려줄 것이라는 것을 안다. 그러나, 나는 Volatile GPU-Util이 실제로 의미하는 것에 대한 설명을 감사하게 생각합니다. 총 SM보다 사용 된 SM의 수 또는 점유율입니까?nvidia-smi 휘발성 GPU 사용률 설명?

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

SM은 스트리밍 멀티 프로세서를 의미하며 [여기에 설명되어 있습니다.] (https://stackoverflow.com/questions/3519598/streaming-multiprocessors-blocks-and-threads-cuda) – Davidmh

답변

21

a sampled measurement over a time period입니다. 주어진 시간 동안, 하나 이상의 GPU 커널이 ​​활성 (즉, 실행 중) 인 시간 비율을보고합니다.

얼마나 많은 SM이 사용되었는지, 코드가 얼마나 바쁜지, 정확하게 무엇을했는지, 어떤 식으로 메모리를 사용했는지에 대해서는 알려주지 않습니다.

위의 주장은 마이크로 벤치 마크 형 운동 (아래 참조)을 사용하는 데 너무 어려움없이 입증 될 수 있습니다.

시간주기를 정확하게 정의하는 방법을 모르지만 전반적으로 샘플링 된 측정 값이기 때문에 (즉, 은 설문 조사와 같이 한 번 샘플링 된 측정 값을보고합니다) 나는 그렇게 생각하지 않습니다. 도구의 일반적인 사용이나 이해에 중요합니다. 기간은 분명히 짧으며 폴링 간격이 지정된 경우 nvidia-smi과 반드시 ​​관련이있는 것은 아닙니다. 마이크로 벤치 마크 기술을 사용하여 샘플링 시간을 밝힐 수도 있습니다.

또한 "휘발성"이라는 단어는 nvidia-smi에있는이 데이터 항목과 관련이 없습니다. 출력 형식을 잘못 읽었습니다.

가 여기 내 주장을 뒷받침 사소한 코드입니다 : 나는 100의 명령 줄 매개 변수를 사용하여 위의 코드를 실행하면, 내 시스템에

#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; 
} 

, 엔비디아-SMI는 99 %의 사용률을보고합니다. 명령 줄 매개 변수를 1000으로 실행하면 nvidia-smi가 ~ 83 %의 사용률을보고합니다. 명령 줄 매개 변수를 10000으로 실행하면 nvidia-smi가 ~ 9 % 사용률을보고합니다.