2013-05-10 86 views
7

我正在尋找一種可靠的方法來確定當前的GPU內存使用情況,最好在C++/C中。我已經找到了獲得使用類似下面的方法很多:獲取GPU內存使用情況

  • 直接繪製
  • 輸入dxdiag
  • WMI
  • DXGI
  • D3D9

這些方法都不夠準確(最重要的是一百兆字節)。我嘗試了nvapi.h,但我沒有看到任何可以用來查詢內存的東西。我在想只有上面列出的方法是唯一的選擇,但後來我遇到了一個名爲GPU-Z的工具,即使OpenCL在我的580GTX上運行幾乎滿負荷時,也可以給我精確的內存讀數,以達到最接近的兆字節。我可以通過在OpenCL返回Object_Allocation fail返回碼之前分配幾兆字節來驗證我處於內存使用的高峯期。

看着從GPU-Z進口,我看不是什麼有趣的其他:

KERNEL32.DLL

:LoadLibraryA,GetProcAddress的,的VirtualAlloc,VirtualFree

我的猜測是,必須使用LoadLibraryA加載一個DLL來查詢GPU內存和傳感器。如果這個DLL存在,它住在哪裏?如果可能的話,我正在尋找適用於AMD和NVidia的解決方案(使用不同的API即可)。

+1

「最關我一百兆字節」 - 那是什麼您使用的是已知良好的參考? – 2013-05-10 13:47:28

+0

我使用GPU-Z作爲我的參考,因爲它給了我需要的準確性。 – roboto1986 2013-05-10 14:04:54

+0

什麼讓你相信GPU-Z在其他人錯誤的地方? – 2013-05-10 14:33:29

回答

9

cudaMemGetInfo(記錄here)只需要cuda運行時API就可以獲得當前設備上的可用內存和總內存。如Erik指出的那樣,NVML中也有類似的功能。

+0

謝謝!我會試試這個。我會很快標出正確的答案。 – roboto1986 2013-05-10 14:39:06

+0

我試了一下,這種方法給了我我想要的精度,而不必安裝其他sdks :)現在,我對ATI卡仍然運氣不佳。如果你有一個想法,請讓我知道。否則,我可能只用DX方法。 – roboto1986 2013-05-27 17:22:25

1

退房功能nvmlDeviceGetMemoryInfo在NVIDIA管理庫https://developer.nvidia.com/nvidia-management-library-nvml

「檢索使用,自由和總的可用內存量在設備上,以字節爲單位。」

不知道AMD是否有相同的東西。

+0

感謝您的信息。但是,我無法使用返回0個設備的nvmlUnitGetCount()來獲得適當的設備數量。我調用了nvmlInit(),返回狀態成功,然後我跟進了nvmlUnitGetCount(),它的返回狀態也成功了,但它返回了0個設備。有任何想法嗎? – roboto1986 2013-05-27 17:00:42

+0

當OpenCL給我0個設備/平臺時,我重新安裝通常有效的顯示驅動程序。除此之外,我沒有任何建議。抱歉。 – 2013-05-28 13:38:10