NVAPIを使ったVRAMの取得
NVAPIって知っていますか? NVAPIとはNVIDIA社が提供しているAPIです。 NVIDIA社が提供している有名なAPIとしてはCUDAが存在しますが、CUDAとは違いNVAPIは搭載されているハードウェアの情報を取得することが主な使用用途だと思われます。 さて、私はGPUを酷使する機会が多少ながらもあり、その時にVRAMがどの程度使用されているかどうかを取得するためのNVAPIのコードを紹介します。 NVAPIをダウンロード まずは、NVAPIを以下のリンクからダウンロードしてきます。 今回この記事で利用しているNVAPIのバージョンは「R450」です。 Developer Tools Download Center - NVIDIA Developer ダウンロードが終えたファイルの中には nvapi.h などのヘッタファイルがあり、ライブラリが入っているファイルが確認できます。 NVAPIファイルを、プログラムを作成する作業フォルダー内に配置してください。 VRAMの取得を行うコード C言語 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <stdio.h> #include "NVAPI/nvapi.h" #if _M_AMD64 #pragma comment(lib, "NVAPI/amd64/nvapi64.lib") #else #pragma comment(lib, "NVAPI/x86/nvapi.lib") #endif int main() { NvAPI_Status nStatus = NvAPI_Initialize(); if (nStatus == NVAPI_OK) { NvPhysicalGpuHandle hGPUHandles[NVAPI_MAX_PHYSICAL_GPUS] = {0}; NvU32 count = 0; nStatus = NvAPI_EnumPhysicalGPUs(hGPUHandles, &count); if (nStatus == NVAPI_OK) { printf("GPUS:%d\n", count); } else { printf("ErrorCode:%d\n", nStatus); } NvPhysicalGpuHandle hGPUHandle = hGPUHandles[0]; NV_DISPLAY_DRIVER_MEMORY_INFO_V1 MemoryInfo; MemoryInfo.version = NV_DISPLAY_DRIVER_MEMORY_INFO_VER_1; nStatus = NvAPI_GPU_GetMemoryInfo(hGPUHandle, &MemoryInfo); if (nStatus == NVAPI_OK) { printf("VRAM Total:%.5lf[GB]\n", (double)MemoryInfo.dedicatedVideoMemory / 1048576); printf("VRAM Can Use:%.5lf[GB]\n", (double)MemoryInfo.availableDedicatedVideoMemory / 1048576); } else { printf("ErrorCode:%d\n", nStatus); } } return 0; } 今回使用するコンパイラはMSVC(cl.exe)を使用します。clangコンパイラでもコンパイル可能です。 ...