Существуют ли способы преодоления узких мест, связанных с использованием графических API, на ПК? - PullRequest
3 голосов
/ 04 декабря 2011

В последнее время я потратил много времени на изучение темы графических процессоров и натолкнулся на несколько статей, в которых рассказывается о том, как ПК-играм трудно оставаться на шаг впереди по сравнению с консольными играми из-за ограничений с API-интерфейсы. Например, на Xbox 360 я понимаю, что игры работают в режиме ядра, и, поскольку аппаратное обеспечение всегда будет одинаковым, игры можно программировать «ближе к металлу», а API Directx имеет меньшую абстракцию. Однако на ПК выполнение одного и того же количества вызовов отрисовки с Direct-X или Opengl может занять в 2 раза больше времени, чем на консоли, из-за переключения в режим ядра и большего количества уровней абстракции. Мне интересно услышать возможные решения этой проблемы.

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

Будет ли лучше программирование всего решения «рендеринга программного обеспечения» в Opencl и запуск его на GPU? Насколько я понимаю, игры с большим количеством вызовов отрисовки связаны с процессором, а вызовы однопоточные (на ПК), поэтому Opencl - жизнеспособный вариант?

Так что вопрос: Каковы возможные методы повышения эффективности или даже устранения необходимости в графических API, таких как Opengl и Directx?

Ответы [ 3 ]

3 голосов
/ 04 декабря 2011

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

Или просто использовать тот факт, что современные компьютеры имеют гораздо большую производительность ЦП, чем консоли.Или даже лучше, сделайте себя привязанным к GPU.В конце концов, если ваш процессор является вашим узким местом, то это означает, что у вас есть запасная мощность графического процессора.Используйте его.

OpenCL не является «решением» всего, что связано с этим.OpenCL не имеет доступа ни к одной из многих вещей, которые нужно было бы сделать, чтобы фактически использовать GPU для рендеринга.Чтобы использовать OpenCL для графики, вам не нужно использовать растеризатор / клипер графического процессора, это специализированные буферы для передачи информации от этапа к этапу, кэш после T & L или аппаратное обеспечение смешивания / сравнения глубины / трафарета / и т.д.Все это - фиксированная функция, чрезвычайно быстрая и специализированная.И полностью недоступен для OpenCL.

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

Или, другими словами, это «проблема», которая нене нужно решать.

0 голосов
/ 04 декабря 2011

APIs. Например, на Xbox 360 я понимаю, что игры работают в режиме ядра, и, поскольку аппаратное обеспечение всегда будет одинаковым, игры можно программировать «ближе к металлу», а API Directx имеет меньшую абстракцию. Однако на ПК выполнение одного и того же количества вызовов отрисовки с Direct-X или Opengl может занять в 2 раза больше времени, чем на консоли, из-за переключения в режим ядра и большего количества уровней абстракции.

Преимущества работы с консолью на железных консолях в значительной степени компенсируются на ПК их гораздо большей производительностью процессора и доступной памятью. Добавьте к этому, что жесткие диски консолей работают не так быстро, как современные ПК (SATA-1 против SATA-3 или даже просто PATA), и многие игры получают свое содержимое с оптического привода, который даже медленнее.

Например, PS3 360 предлагает только 256 МБ памяти для игровой логики и еще 256 МБ ОЗУ для графики, а также многое другое, с чем вы не можете работать. X-Box 360 предлагает 512 МБ объединенной оперативной памяти, так что вам придется в нее втиснуться. Теперь сравните это с младшим ПК, который легко поставляется с 2 ГБ ОЗУ для одной программы. И даже самые дешевые видеокарты предлагают не менее 512 МБ ОЗУ. Игровой автомат будет иметь несколько гигабайт оперативной памяти, а графический процессор будет предлагать что-то между 1 ГБ и 2 ГБ.

Это крайне ограничивает возможности разработчика игр, и многие геймеры на ПК скорбят о том, что так много игр являются "консольными", но их ПК могут сделать гораздо больше.

0 голосов
/ 04 декабря 2011

Если вы попытаетесь написать рендерер в OpenCL, у вас получится нечто, похожее на OpenGL и DirectX. Скорее всего, у вас получится нечто гораздо более медленное, чем эти API, которые были разработаны многими экспертами на протяжении многих лет. Они специализированы для эффективной растеризации и использования внутренних хуков, недоступных для OpenCL. Это может быть веселый проект, но определенно не полезный.

Николь Болас уже дал вам несколько хороших приемов для увеличения загрузки графического процессора относительно центрального процессора. Окончательный ответ, конечно, заключается в том, что лучший метод будет зависеть от вашей конкретной области и ограничений. Например, если ваш рендеринг требует большого количества пиксельных оверлеев со сложными шейдерами и множеством текстур, центральным процессором не будет узкого места. Тем не менее, наиболее важное общее правило современных аппаратных средств заключается в ограничении числа вызовов OpenGL, совершаемых путем лучшей пакетной обработки.

...