Видеоадаптеры.
Немного истории.
На самом деле, видеоадаптер, как часть компьютера появился
относительно недавно - практически одновременно с появлением персонального
компьютера. Но тогда видеоадаптеры просто приводили готовое изображение
к какому-либо стандарту, например, RGB. На заре компьютерной эры, когда
самого термина "персональный компьютер" просто не существовало,
вся необходимая информация отображалась с помощью индикаторов и обычного
печатающего устройства, которое и принтером можно было назвать с большой
натяжкой.
рис.1. MDA-адаптер Hercules Graphics Controller длиной 33,5
см
В IBM совместимых компьютерах, первые видеокарты появились,
в том виде, в котором мы привыкли их видеть, с выходом первого IBM XT.
Самый первый адаптер - это MDA. Он был разработан фирмой IBM и являлся
монохромным алфавитно-цифровым адаптером. На рисунке 1 можно увидеть MDA-видеоадаптер
от фирмы Hercules 1982 года выпуска.
рис.2. Видеоадаптер CGA и EGA. 1988 год. Переключение
между выходами осуществляется перемычками.
И только с выходом видеоадаптера CGA (Color Graphics
Adapter), который стал основой для последующих стандартов, появилась возможность
работать с цветной графической информацией в разрешении 320х200 (16 цветов)
и 640х200 (монохромный режим - то есть чёрно-белый), при этом объём памяти
видеокарты уже равнялся 16 Кбайт. Следующий стандарт для видеокарт (Enhanced
Graphics Adapter (EGA), разработанный в 1984 году, позволял при разрешении
640x350 работать с 16 цветами из 64-цветной палитры одновременно. Ёмкость
видеопамяти составляла всё те же 16 Кбайт, а также была заявлена совместимость
с CGA и MDA.
Все описанные выше видеокарты подключались к монитору
через 9-контактный разъём(такой можно увидеть в COM-порту) и передавали
информацию в цифровом виде. Только с выходом адаптера стандарта MCGA (Multicolor
Graphics Adapter - многоцветный графический адаптер) произошёл переход
на аналоговый сигнал, так как палитра была увеличена до 262144 цветов
(по 64 оттенка на каждый из базовых цветов Red/Green/Blue). Разрешение
экрана, выдаваемое MCGA при работе с текстом, было 640х400 с 256 одновременно
отображаемыми цветами, для графических приложений - 320х200 точек. Разъём
для подключения к монитору приобретает привычный для нас вид - 15-контактный
D-Sub.
Следующим витком эволюции компьютерной видеоподсистемы
является VGA (Video Graphics Array - графический видеомассив), который
появился в 1987 году. Адаптеры VGA уже поддерживали разрешение 640х480
и 256 цветов (из палитры в 262144 цвета), объём памяти составлял 256 Кбайт,
а соотношение сторон экрана равнялось привычным сейчас 4:3. Именно с этого
стандарта пошло множество знакомых сейчас простонародных названий: VGA'шный
монитор, VGA'шный разъём и так далее. Более того, именно из этой аббревиатуры
развились сокращённые названия разрешений (например, теперь считается,
что VGA - это 640х480 точек, SVGA - 800х600, XGA - 1024х768 и так далее).
И наконец, в 1991 году появляются первые адаптеры SVGA
(Super VGA), позволяющие работать при разрешении 800х600 и 1024х768 точек,
количество отображаемых цветов увеличилось до 65536 (High Color) и 16,7
млн (True Color). Также появляется возможность пользователю задать частоту
обновления экрана монитора - до этого момента она была жёстко привязана
к определённому значению. Память видеоадаптеров SVGA была уже более 1
Мбайт.
Для связи с видеокартой и передачи необходимых данных
в самом начале эры IBM PC использовался интерфейс XT-Bus, потом на смену
ему пришла шина ISA (Industry Standard Architecture - архитектура промышленного
стандарта). Но и ISA уже не хватало для относительно большого потока данных.
Тогда она была дополнена интерфейсом VLB (или VESA), который в итоге был
заменён шиной PCI (Periferal Component Interconnect - объединение внешних
компонентов). PCI является более универсальной шиной, через которую можно
было подключать множество других контроллеров, не только видеоадаптеры,
к тому же она способна работать и на других платформах.
рис. 2. Видеокарта Quantum3D Obsidian X-24 на базе двух
Voodoo2 в режиме SLI
С развитием графических оболочек операционных систем
(например, Windows) видеокарты взяли на себя часть вычислений по окончательному
выводу изображения на экран, которые обычно производил центральный процессор:
перемещение окон, рисование линий, шрифтов и другие. С появлением трёхмерных
игр видеокарты обзавелись 3D-акселератором, который сперва имел вид отдельной
платы, вставляемой в свободный разъём на материнской плате, а позже уже
был интегрирован дополнительным чипом на видеокарту - до этого момента
видеоадаптер позволял работать только с двухмерной графикой (2D). Далее,
с развитием технологий производства полупроводников, графический чип стал
содержать в себе все необходимые блоки, отвечающие как за 2D-, так и 3D-графику.
Для максимальной универсальности и совместимости видеокарт с программным
обеспечением компания Microsoft создаёт API DirectX (API - интерфейс программирования
приложений), работающий в среде Windows. Так как мир не однополярный и
кроме Windows существуют и другие операционные системы, был разработан
альтернативный API - мультиплатформенный OpenGL, а также его дополнение
для звука - OpenAL.
Именно в те времена доминирующая на тот момент компания
3dfx (все активы 3dfx после банкротства перешли к NVIDIA) представляет
технологию SLI (Scan Line Interleave - чередование строчек), благодаря
которой появилась возможность объединить две подобные видеокарты с шиной
PCI для формирования изображения методом чередования строк, что увеличивало
быстродействие графической подсистемы и разрешение экрана. Действительно,
всё новое - это хорошо (в данном случае - очень хорошо) забытое старое:
спустя почти 15 лет NVIDIA возродила SLI, а компания ATI разработала технологию
CrossFire, так же позволяющую объединять несколько видеокарт.
рис. 3. Видеокарта на базе SiS315 с шиной AGP.
Ближе к концу 90-х прошлого века видеоадаптеры получают
собственную шину - AGP (Accelerated Graphics Port - ускоренный графический
порт) и приобретают черты современных видеокарт: объём локальной видеопамяти
достиг десятков мегабайт, появилась возможность выводить видеоизображение
на ещё один приёмник, например, телевизор. Из-за ограничений шины PCI,
а именно её разновидностью является AGP, производителям графических процессоров
пришлось в итоге отказаться от технологий, подобных SLI
рис. 4. Видеокарта Chaintech GeForce 7600GT.
И только в начале 2000 годов происходит революционный
скачок, благодаря которому мы теперь можем наслаждаться реалистичной графикой
в играх последних лет. Появился более скоростной интерфейс - PCI Express
(PCI-E), появилась возможность подключать два монитора, причём информация
опять выводится в цифровом виде (в более расширенном виде, чем в первых
поколениях видеокарт), объём памяти в некоторых случаях достигает 1 Гбайт
(1024 Мбайт). Рассказывать об эволюции видеокарт, экзотических решениях
и выдумках инженеров можно бесконечно.
Устройство и принцип работы.
Видеокарта представляет собой очень сложное устройство.
Печатная плата видеоадаптера состоит из нескольких слоев, каждый из которых
содержит тонкие токопроводящие дорожки, компоненты видеокарты устанавливаются
только на верхних слоях: лицевой и обратной.
Все дорожки на плате объединяют между собой графическое
ядро (GPU - графический процессор, видеоядро), видеопамять, раздельные
подсистемы питания ядра и памяти (иногда и разъём для дополнительного
питания - в случае мощной видеокарты), интерфейсный разъём для подключения
к материнской плате, а также разъёмы для подключения мониторов и телевизора.
рис. 5. Основные компоненты видеокарты ядро (1), память (2), подсистема
питания (3), интерфейс PCI-E (4), разъёмы DVI (5) и ТВ-выход (6)
Ключевым компонентом любой современной видеокарты является
графический процессор, который занимается расчётами выводимой на экран
информации и трёхмерных сцен. На данный момент разработкой графических
процессоров занимаются в основном компании NVIDIA, продвигающая серию
GeForce, и AMD, купившая канадскую компанию ATI с её линейкой Radeon.
Остальные игроки графического рынка, увы, не выдержали конкуренции и той
скорости, с которой разрабатываются очередные поколения видеокарт, и если
и выпускают свою продукцию, то отличной производительностью и массовостью
похвастаться не могут. В зависимости от того, какой GPU положен в основу
видеокарты, определяются её характеристики: поддержка тех или иных технологий
визуализации и рендеринга, тип памяти и ширина её шины.
рис. 6. Печатная плата Chaintech 7600GT: тыльная сторона
Графическое ядро представляет собой припаянный к плате
чип, в большинстве случаев без защитной крышки, кристалл которого содержит
сотни миллионов транзисторов (даже в несколько раз больше, чем у центральных
процессоров). Каждый такой чип состоит из вычислительных блоков, контроллеров
шины и памяти, блоков для вывода видеоинформации (RAMDAC). Вся эта структура
определяется архитектурой ядра, которая сперва разрабатывается для самого
мощного видеоадаптера в семействе-поколении, например: G70, G80 - NVIDIA,
R580, R600 -AMD. Затем "топовое" ядро упрощается для менее производительных
решений методом исключения определённых блоков. Случаи разработки принципиально
новых ядер для среднего и нижнего уровня рынка довольно редки.
Для того чтобы удалось разместить всё больше и больше
транзисторов в кристалле ядра, используются новые, более тонкие техпроцессы,
благодаря которым уменьшаются размеры элементов и повышается рабочая частота
чипа. На данный момент графические процессоры производятся по 90, 80 и
65 нм технологическим нормам. В сравнении с концом 90-х годов и началом
2000-х, когда доминировал техпроцесс 250-220 нм, современное производство
без каких-либо оговорок можно считать настоящим прорывом, тем более что
на носу уже техпроцесс 45 нм. Общее правило "тоньше техпроцесс -выше
частота - меньше тепла" объясняется следующим образом: транзистор,
мельчайшая единица, из которого состоят все блоки GPU, представляет собой
своеобразные ворота для электронов. Стенки и "створка ворот"
- затвор транзистора - изготавливаются из диэлектрика, не пропускающего
ток, а передаются электроны по стоку. Но так как идеального диэлектрика
нет, существуют токи утечки - некоторое количество электронов всё же пробивается
через закрытый затвор, вызывая тот самый нагрев. Для того чтобы заставить
транзисторы переключаться быстрее (повысить частоту), нужно подать на
них больший ток, а это приведёт к большему нагреву. Более мелкие транзисторы,
произведённые по более тонкому техпроцессу, требуют для своей работы меньшие
токи, а следовательно, и токи утечки у них меньше. Вот потому-то более
"тонкие" чипы, как правило, работают на более высокой частоте
и греются меньше. Кроме того, производители полупроводников и занимающиеся
собственно производством чипов неустанно изыскивают новые способы уменьшить
токи утечек: новые диэлектрические сплавы и вещества с низкой проницаемостью.
Вот уже мы дожили до того, что, например, ядро G86 (GeForce 8600) при
хорошем охлаждении достигает и перешагивает через порог 1 ГГц.
рис. 3. Классический конвейер.
В данный момент времени происходит переход от архитектуры
традиционной конвейерной обработки данных графическим процессором к унифицированной
и более гибкой благодаря новому API DirectX 10. В предыдущем поколении
видеокарт данные, полученные от центрального процессора, сперва обрабатываются
вершинным блоком (также называется процессором, конвейером): создаются
вершины, над которыми производятся преобразования, дополненные вершинными
шейдерами (программы, добавляющие некоторые эффекты объектам, например
? мех, волосы, водная гладь, блеск и так далее). Далее вершины собираются
в примитивы - треугольники, линии, точки, после чего переходят в пиксельный
блок. Здесь определяются конечные пиксели, которые будут выведены на экран,
и над ними проводятся операции освещения или затенения, текстурирования
(этим занимается блок TMU - Texture Mapping Unit, который связан с пиксельным
конвейером), присвоения цвета, добавляются эффекты от пиксельных шейдеров.
Далее вычисляются координаты конкретного пикселя, чтобы
отбросить те, которые будут скрыты другими объектами и не видны пользователю.
В следующем блоке фрагменты собираются в полигоны, состоящие из отдельных
пикселей, и уже готовая картинка передаётся в память для последующей выборки
и вывода на экран. В характеристиках видеокарт, поддерживающих DirectX
9, всегда упоминается количество пиксельных, вершинных процессоров и текстурных
блоков. Например, в видеоадаптере GeForce 7600 GT есть 12 пиксельных и
5 вершинных процессора (ввиду меньшей нагрузки на вершинные конвейеры
их количество ? в пределах 2-8 шт. в зависимости от уровня графического
процессора) и 12 TMU - по одному на пиксельный конвейер. Естественно,
чем больше текстурных блоков, тем больше будет производительность видеокарты.
Но компания ATI, начиная с серии Radeon X1000, отошла от привычной формулы
"один TMU на один пиксельный конвейер", уменьшив общее количество
"текстурников", которые теперь не связаны напрямую с пиксельными
процессорами благодаря оптимизации архитектуры видеоядра. При этом количество
пиксельных конвейеров в самой старшей модели видеокарты было увеличено
до 48, а количество TMU осталось на уровне 16 шт. Такое решение - своего
рода задел на будущее, так как в последние годы всё более заметно, что
разработчики игр ориентируются не на грубую силу в виде огромного числа
полигонов, а на тонкий расчёт, то есть использование сложных шейдеров,
требующих математической вычислительной мощи.
Недостаток процесса формирования 3D-сцены при классическом
рендеринге состоит в том, что, если уже обработанные данные нужно снова
запросить и изменить, приходится дожидаться завершения всего конвейера
и заново вычитывать их из памяти или вообще снова получать данные от центрального
процессора. Также разделение ядра на отдельные вершинные и пиксельные
процессоры сильно ограничивает разработчиков графических приложений, ведь
необходимо предусмотреть все варианты геометрии и эффектов в будущих играх,
учитывая особенности решений обоих ведущих производителей видеокарт.