Карточный "ликбез": как работают современные видеоускорители.
Часть I: Из каких компонентов состоит видеокарта
Автор: Олег Нечай
Опубликовано в журнале "Компьютерра" 10 ноября 2004 года
Практически во всех популярных компьютерных изданиях большая часть статей об аппаратном обеспечении, или попросту о "железе ", пестрит специальными терминами. Авторы с ловкостью жонглируют этими "умными" словами, видимо, подразумевая, что любой читатель чуть ли не с раннего детства знаком со всей обширной специфической компьютерной терминологией. Разумеется, это далеко не так, поэтому тем, кто действительно не проштудировал многочисленные тома документации, зачастую просто непонятно, о чем идет речь, а все усилия авторов идут насмарку.
В значительной степени это касается видеокарт - чуть ли не самых интересных массовому потребителю и одновременно стремительно совершенствующихся изделий. Естественно, все подробно объяснить в короткой статье невозможно, поэтому давайте условимся об определенной степени упрощения, которая, впрочем, не пойдет в ущерб пониманию общих принципов работы современных графических ускорителей.
Что же представляет собой типичная современная видеокарта? Это многослойная печатная плата, на которой смонтированы микросхемы, конденсаторы и некоторые другие радиодетали, а также разъемы для подключения монитора (одного или двух), и, во многих случаях, телевизора. Отдельные модели имеют видеовход, выполненный в виде разъема RCA, а иногда он совмещается с видеовыходом.
Функционально видеоускоритель состоит из нескольких обязательных блоков: прежде всего, это графический процессор, который также иногда называют графическим чипсетом (от английского chip set - "набор микросхем"), микросхема BIOS (от английского Basic Input/Output System - "базовая система ввода-вывода", несколько микросхем видеопамяти , один или, как в большинстве современных карт, два цифро-аналоговых преобразователя (RAMDAC) и различные разъемы.
За что отвечает каждый из перечисленных структурных блоков? Первые компьютерные видеокарты были построены по принципу кадрового буфера, согласно которому собственно изображение формировалось центральным процессором компьютера и программным обеспечением, а карта отвечала лишь за хранение (в буфере памяти) и вывод с определенной частотой отдельных кадров на монитор. Однако радикальное повышение требований к качеству изображения, связанное, во многом, с появлением сложных трехмерных компьютерных игр и профессиональных конструкторских систем, привело к необходимости создания специализированного процессора, который бы занимался исключительно формированием (точнее, расчетом) "картинки". При этом центральный процессор компьютера освободился практически от всех функций, связанных с построением изображения. Современные графические процессоры по сложности не уступают центральным процессорам, и более того, во многих популярных моделях используются технологии, еще не нашедшие применения в центральных процессорах.
Помимо внутренней архитектуры, которая у разных видеопроцессоров может существенно отличаться, они характеризуются такими параметрами, как тактовая частота работы графического ядра (у современных чипов она составляет от 300 до 500 МГц, в зависимости от класса) и технологический процесс, по которому изготовлен чип. Основная масса графических процессоров в настоящее время выпускается или по 0,13-, или по 0,11-микронной технологии. Чем совершеннее (миниатюрней) технология, тем больше микроскопических транзисторов можно уместить на кристалле одних и тех же размеров, что означает более высокую производительность и одновременно меньшую себестоимость производства.
Второй по важности компонент графического ускорителя - это видеопамять, которая как раз и выполняет роль кадрового буфера, о котором мы говорили выше. Центральный процессор компьютера направляет видеоданные в эту специализированную память, а затем графический процессор видеокарты считывает оттуда полученную информацию. Естественно, для обеспечения эффективной передачи данных важна пропускная способность видеопамяти. Здесь нас должны интересовать две характеристики: разрядность и эффективная частота работы шины, по которой передаются данные из видеопамяти к графическому процессору, а также так называемая латентность (от английского latency - время задержки при передаче данных) самих микросхем памяти.
Такие ультрасовременные карты высшего класса, как Radeon X800 XT , имеют шину разрядностью в 256 бит, работающую на частоте 1 ГГц и выше, а массовые модели обходятся 128-битной или даже 64-разрядной шиной, работающей на частотах от 400 до порядка 700 МГц. С латентностью памяти все куда сложнее: как правило, многие производители видеокарт самостоятельно определяют, какую память установить на ту или иную карту, поэтому на дорогих вариантах карт может использоваться более "быстрая" память, чем на дешевых модификациях карточек на основе того же самого графического процессора. К тому же многие высокопроизводительные чипы используют видеопамять нового поколения GDDR3. Средние значения латентности видеопамяти DDR на массовых видеокарта составляют менее 4 нс, а у лучших образцов они достигают почти 2 нс. Практически невозможно обнаружить память GDDR3 c латентностью менее 2 нс, а на лучшие карты устанавливаются чипы с латентностью 1,6 нс, что полностью перекрывает возможности шины и современных видеопроцессоров.
Объем видеопамяти, установленной на карте, важен не столько для ускорения скорости работы самой карты (она определяется, в значительной степени, пропускной способностью всей видеосистемы), сколько для работы с трехмерными изображениями с высокими разрешениями и большой глубиной цвета. Теоретически даже видеокарта с 32 Мбайтами памяти, что сегодня уже большая редкость, позволяет работать на 21-дюймовом мониторе с разрешением 1600 х 1200 пикселей при 32-битном цвете. Однако тех же 32 Мбайт будет явно недостаточно для вывода трехмерных изображений с тем же самым качеством и разрешением, поскольку в видеопамять при этом загружается множество различной дополнительной информации, о которой мы поговорим чуть ниже.
Итак, графический процессор получает информацию об изображении из памяти видеокарты, после чего данные передаются в цифро-аналоговый преобразователь (RAMDAC), который непосредственно отвечает за конвертацию цифровых данных об изображении в аналоговый сигнал, "понятный " любому монитору. Уже достаточно давно существуют жидкокристаллические мониторы, способные работать и с цифровым сигналом, однако пока большого распространения цифровой интерфейс не получил, хотя каждая уважающая себя видеокарта имеет цифровой видеовыход DVI. Преимущество цифрового интерфейса в одном: при выводе изображения не осуществляются преобразования изначально цифрового сигнала в аналоговый, а затем, в ЖК-мониторе, - обратно в цифровой, что теоретически ухудшает качество изображения. На практике разница в изображении очень редко бывает заметной, именно поэтому переход на цифровой интерфейс так затянулся.
Главные характеристики RAMDAC - это тактовая частота и разрядность. Многие современные видеокарты поддерживают одновременную работу с двумя мониторами, поэтому в такие карты устанавливаются по два RAMDAC и, соответственно по два разъема для подключения монитора. В подавляющем большинстве видеокарт имеется также выход на телевизор, позволяющий просматривать, скажем, мультимедийные программы или фильмы, на большом экране. Работать с компьютерными программами на экране телевизора невозможно не только из за скромного разрешения телеприемника, но и из-за низкой частоты развертки, поэтому высокого качества изображения на ТВ-выходе ожидать не стоит. Впрочем, для просмотра фильмов в "народном" формате MPEG-4 качества видеовыхода вполне достаточно даже для 29-дюймового телевизора.
Необходимо упомянуть и об интерфейсе видеокарты, через который она связывается с другими компонентами компьютера. На смену универсальной шине PCI пришел специализированный интерфейс AGP (от английского Accelerated Graphic Port - "ускоренный (по сравнению с PCI) графический порт"), который полностью освободил шину PCI от передачи больших объемов видеоданных и обеспечил приоритетный, а значит, максимально быстрый доступ к системной памяти, необходимый для работы современных видеокарт. Массовые карты подключаются сегодня по интерфейсу AGP 4х с пропускной способностью 1,06 Гбайт/с, а самые мощные модели - по интерфейсу AGP 8x с пропускной способностью 2,1 Гбайт/с.
Отдельно следует сказать о перспективном интерфейсе PCI Express, который уже в самом ближайшем будущем может заменить не только "старичка" PCI, но и AGP. Налицо уже не раз отмечавшая тенденция перехода от параллельных шин к последовательным. Напомним, что на смену параллельному ATA (E-IDE) идет последовательная шина Serial ATA (SATA), рассчитанная на подключение жестких дисков и прочих накопителей. Вкратце достоинства последовательных шин - лучшая, по сравнению с параллельными, масштабируемость, способность работать на куда более высоких эффективных частотах, а также большая компактность.
Для подключения графических карт используется версия PCI Express x16. Теоретическая пропускная способность такой шины составляет до 4000 Мбайт/с независимо в обеих направлениях. Сравните с максимальной пропускной способностью AGP 8x, достигающей 2133 Мбайт/с, причем, лишь в одном направлении. Вполне очевидно, что новая шина с большим запасом перекрывает возможности современных графических процессоров и в перспективе может послужить дополнительным стимулом к их совершенствованию.
В настоящее время шину PCI Express x16 поддерживают такие новейшие наборы системной логики как i925X и i915G корпорации Intel, но, похоже, в ближайшее время к ним присоединятся и модели других производителей. Крупнейшие фирмы-разработчики графических процессоров, ATI Technologies и nVidia, разумеется, выпускают чипы с поддержкой новой шины. Однако, если в распоряжении nVidia имеется запатентованная микросхема-"мост" AGP-PCI Express, обеспечивающая возможность работы всех производимых ею графических процессоров как с шиной AGP, так и с шиной PCI Express, то компания ATI выпускает отдельные модификации чипов с "родной" (native) или встроенной поддержкой той или иной шины. Так, в настоящее время производятся модификации процессоров Radeon X600 и X800 как для шины AGP 8x, так и для шины PCI Express x16. Интересно, что новейшие чипы среднего класса Radeon X700 пока выпускаются только в варианте для шины PCI Express, что свидетельствует о том, что в ATI делают ставку именно на этот перспективный интерфейс.
Карточный "ликбез" как работают современные видеоускорители.
Часть II: Принципы ускорения трехмерной графики
В первой части статьи мы рассмотрели основные компоненты современной видеокарты, а теперь мы можем поподробней разобраться в принципах ускорения трехмерной графики. Наверняка вы обращали внимание на массу всевозможных настроек в панели управления драйвера своей видеокарты, а сейчас постараемся понять, что они означают.
Каким образом видеокарта, а точнее, графический процессор, формирует трехмерное изображение? Здесь нужно назвать три основных понятия: текстура, вершина и полигон. Поскольку мы имеем дело с трехмерными объектами, то их положение в пространстве описывается координатами X, Y и Z. Точка, заданная этими координатами, называется вершиной. В графических процессорах, предназначенных для персональных компьютеров, используется технология полигонального создания трехмерных объектов, которая примечательна тем, что любые такие объекты состоят из простейших полигонов (т.е. многоугольников), а именно, треугольников. Положение этих полигонов и задается вершинами.
Текстура - это, в сущности, двухмерное, плоское изображение, которое может накладываться на трехмерные объекты с учетом их формы и положения. Объективности ради, нужно оговориться, что в некоторых случаях текстуры могут быть и трехмерными, например, воксельные текстуры, состоящие из множества одноцветных кубов. Для того, чтобы картинка выглядела реалистичной и объемной для сидящего за плоским экраном монитора, необходимо рассчитать, какие объекты должны выводиться на дисплей, а какие не должны попасть в поле зрения (к примеру, стол, стоящий у стены, будет закрывать собой часть стены, а человек, сидящий за столом, будет закрывать часть стола и часть стены). Информация о таких объектах помещается в специально выделяемый раздел видеопамяти - Z-буфер, или буфер глубины (Z в системе трехмерных координат обозначает глубину). Затем графический процессор извлекает из Z-буфера поступившие туда данные, обрабатывает их и в цифровом виде передает в кадровый буфер данные об изображении, которое должно быть выведено на экран. Процесс обработки текстур и информации кадрового буфера называется рендерингом (или процессом закраски). Сильно упрощая, можно сказать, что число конвейеров рендеринга, которым часто хвастаются разработчики, - это просто количество специализированных блоков наложения текстур, работающих параллельно.
Для повышения реалистичности отображения наложенных на полигоны текстур используются самые различные технологии. Одна из самых распространенных - это MIP mapping (от лат. multum in parvo - "множество в малом" и англ. map - "текстура"), основную функцию которой можно свести к созданию набора текстур с различной степенью детализации. При этом, как и в реальном мире, по мере удаления от точки наблюдения текстура будет выглядеть все более "размыто". Так как текстуры хранятся в видеопамяти и могут оперативно динамически "подгружаться", технология MIP mapping позволяет одновременно снизить нагрузку на графический процессор, что, разумеется, положительно сказывается на общей производительности видеосистемы.
Как правило, MIP mapping используется в сочетании с технологиями фильтрации (точнее было бы сказать, интерполяции), призванными исправить чрезмерную "размытость" изображения, возникающую из-за того, что при некоторых углах обзора текстура на полигоне слишком "растягивается" или "сжимается". Смысл фильтрации состоит в том, что цвет пикселей растянутого или сжатого объекта рассчитывается по соседним точкам текстуры (текселам), поэтому у изображения исчезает чрезмерная зернистость. Самая прогрессивная на сегодняшний день технология фильтрации - анизотропная, при использовании которой один-единственный пиксель может рассчитываться по 8-32 текселам. Для сравнения, в простейшем варианте фильтрации, билинейной, для расчета цвета пикселя используется всего четыре ближайших тексела. Как можно было догадаться, анизотропная фильтрация предъявляет повышенные требования к ресурсам всей графической системы, именно поэтому для определения реальной производительности той или иной новинки специалисты любят оценивать скорость работы карты с включенной анизотропной фильтрацией.
Еще один способ повышения качества изображения - это сглаживание (нередко в русскоязычных публикациях пишут по-английски: anti-aliasing), которое, прежде всего, устраняет эффект "лестницы", проявляющийся при отображении ровных краев объектов, а также позволяет избавиться от прочих искажений и повысить детальность картинки в целом. Первоначально технологии сглаживания применялись лишь к отдельным объектам, однако с повышением производительности графических процессоров получила широкое распространение технология полноэкранного сглаживания или FSAA (от англ. Full Screen Anti-Aliasing - "полноэкранное сглаживание").
Смысл полноэкранного сглаживания довольно прост: графический процессор рассчитывает изображение с большим разрешением, чем установленное разрешение выводимой картинки. Например, при использовании FSAA расчет картинки для вывода на монитор с разрешением 800 х 600 пикселей может производиться с разрешением 1600 х 1200 точек. Затем полученное изображение уменьшается на строго установленное число пикселей, при этом в соответствии с используемым алгоритмом окончательные цвета "сглаженных" пикселей рассчитываются по значениям нескольких соседних пикселей. В результате мы получаем на экране более плавные цветовые переходы, поэтому "лесенки" и другие нежелательные эффекты становятся малозаметными.
Существуют и прочие технологии улучшения изображения, среди которых стоит назвать затуманивание (имитация газа или тумана), затенение Гуро (сглаживание при отображении окружностей и сфер) и альфа-смешивание (имитация прозрачности объектов, например, стекла или воды). В действительности таких технологий очень много, причем большая часть из них представляет собой фирменные разработки, подробная информация о которых держится в секрете.
Для реализации различных возможностей, заложенных в графические процессоры, используются прикладные программные библиотеки или программные интерфейсы (API - от англ. Application Programming Interface - буквально "интерфейс для программирования приложений"). Программный интерфейс - это как бы промежуточная ступенька между прикладными программами и низкоуровневыми командами драйвера видеокарты. API позволяет не только повысить эффективность использования аппаратного потенциала графического ускорителя, но и дает возможность программно эмулировать некоторые функции, не поддерживаемые видеокартой аппаратно.
Помимо всего прочего, именно благодаря API обеспечивается максимальная совместимость программных продуктов и систем команд графических процессоров. Различные чипы поддерживают разные API, причем по поддерживаемой версии программного интерфейса можно в подавляющем большинстве случаев определить класс и поколение видеокарты, если, конечно, она не представляет собой узкоспециализированный продукт.
К примеру, в популярных в свое время видеокартах серии Voodoo поддерживался API Glide, разработанный компанией 3Dfx. По различным причинам прочие производители видеокарт практически проигнорировали эту библиотеку, поэтому с исчезновением с рынка Voodoo можно считать, что этого API больше не существует. Двум другим массовым программным интерфейсам повезло гораздо больше. Созданный компанией Silicon Graphips (ныне - SGI) интерфейс OpenGL был первоначально предназначен для профессиональных видеокарт, используемых в рабочих станциях, однако упрощенная версия этого API использовалась при написании культовой игры Quake, благодаря чему все современные графические процессоры в той или иной степени поддерживают OpenGL.
API Direct 3D - творение программистов вездесущей Microsoft - входит в состав мультимедийного API DirectX. Первоначально Direct 3D уступал по своим возможностям OpenGL, однако ныне это самая развитая технология, которая поддерживается всеми графическими процессорами для настольных компьютеров, а практически все компьютерные игры ориентированы именно на эту технологию. Последняя версия Direct X - это 9.0c, правда, до сих пор далеко не во всех популярных компьютерных играх реализованы возможности Direct X 8.0, которая поставлялась вместе с операционной системой Windows XP. Среди таких невостребованных, но, безусловно, перспективных возможностей можно назвать вершинные и пиксельные шейдеры - специализированные программы, позволяющие эффективно изменять геометрию и изображение формируемой трехмерной сцены. К сожалению, создатели программного обеспечения пока не уделяют достаточного внимания вершинным и пиксельным шейдерам, в то время как спецификации этих программ постоянно совершенствуются.
При тестировании видеокарт эксперты часто пользуются таким термином, как FPS (от английского Frames Per Second - "число кадров в секунду"). Это грозная аббревиатура означает просто-напросто частоту смены кадров в секунду, которая определяется специально написанными программами, такими как 3DMark от Futuremark. Подобные программные пакеты состоят из целой серии сложных графических тестов и включают в себя фрагменты из самых современных и особенно требовательных к "железу" компьютерных игр. Основная цель такого тестирования - создать наиболее тяжелые условия работы графической подсистемы, что позволяет достаточно объективно оценить потенциальные возможности того или иного графического чипа. Тем не менее, стоит помнить о том, что все эти тесты синтетические, поэтому реальная производительность видеокарты в реальных приложениях может заметно отличаться от результатов тестирования.
Надеюсь, что после прочтения этой статьи вы получили общее представление о том, из каких блоков состоит современная видеокарта, как формируется трехмерное изображение, и какие основные технологии при этом используются. Думаю, что этих данных вполне достаточно для того, чтобы читать различные обзоры видеокарт и ориентироваться в настройках драйвера собственной карточки. Конечно, существует множество нюансов, а набор настроек драйверов различных карт могут существенно отличаться друг от друга.
