積読日記
Tue, 09 SapTimber 2008 [長年日記]
tDiary 1392日目
■ [programming] NVAPI で遊ぶ
NVIDIA の GPU や driver へ直にアクセスできる API が公開されている. 細かい所まで手を出せるので差別化になるのはわかるが, Microsoft が取りまとめている DirectX のような一般的な API で共通に扱えるほうが開発コストが低くて便利でもあるので, このあたりの API の選択は悩ましいところだろう. Video Control のような実用的な機能は NDA で制限されているので, public な部分だけで少し遊んでみた.#include <cstdio> #include "nvapi.h" bool Succeeded(NvAPI_Status status) { return NVAPI_OK == status; } void Log(const char* funcName, NvAPI_Status status) { NvAPI_ShortString msg; NvAPI_GetErrorMessage(status, msg); fprintf(stderr, "Failed to %s: %s (0x%08X).\n", funcName, msg, status); } int main() { NvAPI_Status status = NvAPI_Initialize(); NvAPI_ShortString version; status = NvAPI_GetInterfaceVersionString(version); if (Succeeded(status)) { fprintf(stdout, "%s\n", version); } NvPhysicalGpuHandle physicalGpuHandles[NVAPI_MAX_PHYSICAL_GPUS]; NvU32 numGpus = 0; status = NvAPI_EnumPhysicalGPUs(physicalGpuHandles, &numGpus); if (Succeeded(status)) { for (NvU32 i = 0; i < numGpus; ++ i) { NvPhysicalGpuHandle handle = physicalGpuHandles[i]; NV_GPU_TYPE gpuType = NV_SYSTEM_TYPE_GPU_UNKNOWN; status = NvAPI_GPU_GetGPUType(handle, &gpuType); if (Succeeded(status)) { fprintf(stdout, "GPU type: %d\n", gpuType); } else { Log("NvAPI_GPU_GetGPUType", status); } NV_GPU_BUS_TYPE busType = NVAPI_GPU_BUS_TYPE_UNDEFINED; status = NvAPI_GPU_GetBusType(handle, &busType); if (Succeeded(status)) { fprintf(stdout, "BUS type: %d\n", busType); } else { Log("NvAPI_GPU_GetBusType", status); } } } return 0; }
投稿日時 : 2008年09月10日 00:11