Рендеринг 1,2 ГБ текстур плавно, как это делает 1 ГБ GPU? - PullRequest
3 голосов
/ 05 сентября 2011

Моя цель - увидеть, что произойдет, если использовать больше текстурных данных, чем то, что поместится в физической памяти графического процессора.Моя первая попытка состояла в том, чтобы загрузить до 40 текстур DDS, в результате чего объем памяти оказался намного выше, чем у графического процессора.Тем не менее, моя сцена все равно будет отображаться со скоростью 200+ кадров в секунду на 9500 GT.

Мой вывод: GPU / OpenGL умный и сохраняет в памяти только некоторые части mipmaps.Я думал, что это не должно быть возможно в стандартной конфигурации, но что бы то ни было.

Вторая попытка: отключить MIP-сопоставление, чтобы GPU всегда приходилось выбирать из текстур с высоким разрешением.Я снова загрузил около 40 DDS-текстур в память.Я проверил использование памяти текстур с помощью gDEBugger: 1,2 ГБ.Тем не менее, моя сцена рендерилась со скоростью 200+ кадров в секунду.

Единственное, что я заметил, было то, что, если отвести взгляд от камеры и затем снова центрировать ее на сцене, произойдет серьезное отставание.Как будто только тогда он будет передавать текстуры из основной памяти в графический процессор.(У меня включена некоторая базовая выборка усеченного конуса)

Мой вопрос: что происходит?Как этому 1 ГБ GPU удается сэмплировать данные с 1,2 ГБ текстурных данных со скоростью 200+ кадров в секунду?

Ответы [ 2 ]

4 голосов
/ 05 сентября 2011

OpenGL может выкладывать полные текстуры в память текстур и из нее между вызовами отрисовки (а не только между кадрами).В графической памяти фактически должны быть только те, которые необходимы для текущего вызова, остальные могут просто находиться в системной памяти.Скорее всего, это делается только с очень небольшим подмножеством ваших текстурных данных.Он почти такой же, как и любой кеш - как вы можете запускать алгоритмы на ГБ данных, когда на вашем ЦП есть только МБ кеша?

Также шины PCI-E имеют очень высокую пропускную способность, поэтомудействительно замечает, что драйвер выполняет пейджинг.

Если вы хотите это проверить, glAreTexturesResident может или не может помочь, в зависимости от того, насколько хорошо реализован драйвер.

2 голосов
/ 05 сентября 2011

Даже если в своем тесте вы заставляли трепетать текстуры (отбрасывать и выгружать некоторые текстуры из системной памяти в память GPU каждый кадр), что я не уверен, современные графические процессоры и PCI-E имеют такую ​​огромную пропускную способность что некоторые побои так сильно влияют на производительность. Одна из моделей 9500GT имеет пропускную способность 25,6 ГБ / с, а 16 слотов PCI-E (500 МБ / с x 16 = 8 ГБ / с) являются нормой.

Что касается задержки, я бы предположил, что процессор GPU + сокращает их энергопотребление, когда вы не рисуете видимые текстуры, а когда вы внезапно перегружаете их, им нужно короткое мгновение для включения. В реальных приложениях и играх такие внезапные изменения рабочей нагрузки на 0% -100% никогда не происходят, поэтому, я думаю, небольшое отставание вполне понятно и ожидаемо.

...