Как узнать, сколько памяти на видеокарте я использую?

15

Я хочу программно определить во время выполнения, сколько памяти видеокарты используется моей программой. В частности, мне интересно, как это сделать на компьютере под управлением Windows с использованием OpenGL, но меня интересуют способы сделать это и на других платформах.

Я знаю, что есть утилиты, которые будут показывать использование памяти во время работы моей программы, но я хочу иметь возможность запрашивать эту информацию из моего кода.

Hitesh
источник
PS Я уже ответил на ваш вопрос, но он лучше подошел бы для stackoverflow.com, так как это всего лишь общий вопрос программирования. Если мой ответ недостаточно подробен, вы можете опубликовать его там и посмотреть, какие ответы они дают.
Рикет
Я также работаю над stackoverflow, но я все еще изучаю смесь вопросов, для которых они действительны.
Hitesh
3
Этот вопрос, кажется, прекрасно здесь. В конце концов, он, вероятно, получил тот факт, что ему был нужен. Смотрите это: meta.gamedev.stackexchange.com/questions/3/...
тетрады

Ответы:

14

Вы можете найти видеопамять карты Nvidia с помощью расширения NVX_gpu_memory_info или карты ATI с помощью ATI_meminfo . Вот фрагмент кода, который я нашел, чтобы вы могли начать.


Однако Пол Неттл из Flipcode задается вопросом, почему нужно искать доступную видеопамять, говоря :

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

И продолжает объяснять, по сути, что «объем видеопамяти» на самом деле ничего не может значить . Я согласен с ним в том, что, например, объем «свободной» памяти на компьютере с Windows Vista / 7 не имеет значения; надеюсь, свободной памяти нет, потому что свободная память тратится впустую. Но всегда есть области памяти, предназначенные для кэшей, которые очищаются Windows, если они нужны приложению.

Ricket
источник
Некоторые большие ресурсы. Я должен получить шанс попробовать это через пару дней.
Hitesh
+1, фрагменты отличные. Тем не менее, я не совсем согласен с тем, что ничего не имею в виду - всегда лучше проверить объем памяти, чем позволить вашей программе зрелищно провалиться.
Корнел Киселевич
Ну, но я думаю, что дело не в том, что вы не должны проверять объем памяти, а в том, что объем памяти не является явным индикатором чего-либо. Когда у карты заканчивается память, это может означать, что она выйдет из строя, или это может означать, что ваши данные текстуры будут просто автоматически выгружаться и извлекаться по мере необходимости. 0 памяти может не означать фатальную ошибку нехватки памяти.
Рикет
1
Лично я планирую использовать это как простое руководство для отслеживания утечек и наблюдения за совместимостью моего оборудования. Используете "20mb"? Да, это, вероятно, будет работать на что-нибудь на рынке сегодня. Использование "500 МБ" в простой игре с полудюжиной динамически распределенных текстур с большим отрывом? К сожалению, что-то пошло не так с моей сборкой мусора.
ZorbaTHut
1
К сожалению, спецификация GL гласит, что когда драйвер возвращает GL_OUT_OF_MEMORY, он становится неопределенным, поэтому, как только вам не хватает памяти, вы в основном SOL. Для игры это не так уж плохо, но для такого приложения, как, например, Photoshop, это неприемлемо.
Ган