Search
Duplicate

CUDA/ C++에서 GPU Usage 확인

간단한 것 같은데, 막상 찾으면 방법이 잘 안 나와서 정리. 예전에는 cudaMemGetInfo 를 이용해서 GPU 사용량을 확인했는데, 이걸로는 4gb 이상인 GPU에서는 제대로 안 된다는 것 같다. 실제로 3090에서 값이 제대로 안나와서 찾아보니 nmvl 을 이용해야 한다고 나옴.

nvml.lib 참조 추가

CUDA를 이용해서 GPU 사용량을 측정하기 위해 nvml.lib 파일을 프로젝트 참조에 추가해야 한다. CUDA를 프로젝트에 참조하는 방법은 아래 링크 글 참조.
5번 항목에서 lib 파일을 추가할 때 ‘nvml.lib’ 파일을 추가해 주면 된다. 추가한 lib 파일을 사용하려면 #include <nvml.h> 를 하면 된다.

GPU Usage 측정

GPU 사용량을 측정하는 코드는 아래와 같다.
// GpuUsage는 total, free, used를 멤버로 갖는 클래스이다. GpuUsage GetGpuUsage() { // 우선 nvmlInit을 한다. if (nvmlInit() == NVML_SUCCESS) { unsigned int nDev; // 현재 컴퓨터에 달린 그래픽카드의 개수를 가져온다. if (nvmlDeviceGetCount(&nDev) == NVML_SUCCESS) { size_t total = 0; size_t free = 0; size_t used = 0; // 그래픽카드 개수만큼 반복 for (int i = 0; i < nDev; i++) { nvmlDevice_t device; // index를 이용해서 우선 device를 가져온다. if (nvmlDeviceGetHandleByIndex_v2(i, &device) == NVML_SUCCESS) { nvmlMemory_t memInfo; // device의 memory usage를 가져온다. memInfo에는 total, free, used가 담겨 있다. if (nvmlDeviceGetMemoryInfo(device, &memInfo) == NVML_SUCCESS) { total += memInfo.total; free += memInfo.free; used += memInfo.used; } } } return GpuUsage(total, free, used); } return GpuUsage(); } }
C++
복사