Як я можу визначити, скільки пам'яті відеокарти я використовую?


15

Я хочу програмно визначити під час виконання, скільки пам’яті відеокарт використовується моєю програмою. Конкретно мені цікаво, як це зробити на машині Windows за допомогою OpenGL, але мені цікаво, як це зробити і на інших платформах.

Я знаю, що там є утиліти, які покажуть мені використання пам'яті під час роботи моєї програми, але я хочу мати можливість запитувати цю інформацію з мого коду.


PS Я вже відповів на ваше запитання, але це було б краще підходить для stackoverflow.com, оскільки це просто загальне питання програмування. Якщо моя відповідь недостатньо ґрунтовна, можна запросити її на місце і подивитися, які відповіді вони дають.
Ricket

Я також на stackoverflow, але я все ще вивчаю суміш питань, які тут варті.
Хітеш

3
Це питання тут здається ідеальним. Зрештою, він, мабуть, отримав необхідний абсурд. Дивіться це: meta.gamedev.stackexchange.com/questions/3 / ...
тетради

Відповіді:


14

Ви можете знайти відеопам'ять карти Nvidia за допомогою розширення NVX_gpu_memory_info або ATI-картки за допомогою ATI_meminfo . Ось фрагмент коду, який я знайшов, який може вас почати.


Однак Пол Неттл на фліпкоді дивується, чому б хотілося знайти наявну відеопам'ять, кажучи :

Причина, по якій важко (а іноді і неможливо) визначити об'єм відеопам'яті, дуже схожа на причини, через які OpenGL не дозволить вам заблокувати буфер кадру та отримати доступ до нього безпосередньо.

І далі, по суті, пояснює, що "кількість відеопам'яті" насправді нічого не може означати . Я погоджуюся з ним з приводу того, що, наприклад, кількість "вільної" пам'яті на машині Windows Vista / 7 не має значення; сподіваємось, вільної пам’яті немає, бо вільна пам’ять витрачається на марну пам’ять. Але завжди є деякі області пам'яті, присвячені кешам, які очищаються Windows, якщо програма потребує них.


Деякі чудові ресурси. Я повинен отримати можливість спробувати це за пару днів.
Хітеш

+1, фрагменти чудові. Однак я не повністю згоден з тим, що нічого не означаю - завжди краще перевірити об'єм пам'яті, ніж не допускати виходу з ладу програми.
Kornel Kisielewicz

Ну, але я думаю, справа не в тому, що ви не повинні перевіряти об'єм пам'яті, а те, що об'єм пам'яті не є чітким показником нічого. Коли на картці не вистачить пам’яті, це може означати, що вона вийде з ладу, або це може означати, що ваші текстурні дані будуть автоматично замінені та видалені за необхідності. Пам'ять 0 може насправді не означає фатальну помилку поза пам'яттю.
Ricket

1
Особисто я планую використовувати це як просте керівництво для відстеження витоків та спостереження за сумісністю обладнання. Використовуючи "20mb"? Так, це, мабуть, сьогодні буде працювати на чомусь на ринку. Використовуючи "500mb" у простій грі з півдюжиною динамічно виділених текстур з великим розміром? На жаль, щось, можливо, пішло не так з моїм сміттям.
ZorbaTHut

1
На жаль, специфікація GL говорить про те, що коли драйвер повертає GL_OUT_OF_MEMORY, він зараз невизначений, тож як тільки ви вийдете з пам’яті, ви в основному SOL Для гри це не так вже й погано, але для програми, наприклад, скажімо, Photoshop, що це неприпустимо.
gman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.