Архитектура видеокарты что это
Архитектура современных графических процессоров
Предисловие
Появление видеокарт на основе графических процессоров NVIDIA G80 и ATI R600 обозначило начало нового этапа развития индустрии компьютерных игр: появилась поддержка нового интерфейса прикладного программирования (API, Application Programming Interface) от Microsoft — DirectX 10.
Ключевым условием поддержки DirectX 10 является унифицированная шейдерная архитектура графического процессора. Первой видеокартой, соответствовавшей данному требованию, была GeForce 8800 GTX на основе графического процессора G80 с его 128-ю унифицированными шейдерными конвейерами. Ответом компании ATI стал продукт под названием Radeon HD 2900 XT на основе графического процессора R600, обладающего 320-ю шейдерными конвейерами.
Исходя из характеристик вышеупомянутых видеокарт, несложно определить их теоретическую пиковую шейдерную производительность. Шейдерная подсистема R600 работает с той же тактовой частотой, что и остальная логика (740 МГц), в то время как у G80 частота этой подсистемы значительно выше (1,35 ГГц). Теоретическая пиковая шейдерная производительность Radeon HD 2900 XT равна 236,8 млрд. условных скалярных операций в секунду, а GeForce 8800 GTX — только 172,8 млрд. операций в секунду. Однако по результатам первых тестов, несмотря на преимущество в шейдерной производительности, видеокарта на основе R600 проиграла конкуренту от NVIDIA.
Многие пользователи, не ориентирующиеся в особенностях архитектуры современных графических процессоров, озадачены одним и тем же вопросом: почему видеокарта, обладающая в 2,5 раза большим количеством шейдерных конвейеров, проигрывает своему конкуренту? Ответом на данный вопрос послужит эта небольшая статья.
Архитектура графического процессора NVIDIA G80
Cвой новый графический процессор под кодовым названием G80 компания NVIDIA спроектировала на основе принципов скалярной унифицированной шейдерной архитектуры. Что характерно, каждый из его 128-и потоковых скалярных конвейеров (процессоров; см. справочник) может обрабатывать всего лишь по одной операции (команде) за такт. Несмотря на то, что ещё несколько лет назад казалось, что и 20-и конвейеров вполне достаточно, но необходимость в столь большом количестве всё же возникла. Особенность скалярных конвейеров состоит в том, что они могут производить вычисления лишь над одним операндом в некоторый момент времени, а традиционные конвейеры проектируются для одновременной параллельной (векторизированной) обработки 4 операндов.
Собственно, архитектура на основе унифицированных (универсальных) шейдерных конвейеров уже сама по себе способствует увеличению реальной производительности графического процессора. При использовании специализированных конвейеров, то есть когда одни предназначены исключительно для обработки вершинных (геометрических) шейдеров, а другие — пиксельных (см. справочник), часто возникают ситуации, когда при расчёте сцены основная нагрузка ложится на пиксельные конвейеры, а вершинные частично простаивают. Или наоборот. Унифицированная архитектура избавлена от этих недостатков, так как каждый шейдерный конвейер может обрабатывать как вершинные, так и пиксельные команды.
Блок-схема графического процессора NVIDIA G80 выглядит следующим образом:
Как уже было сказано выше, G80 — это первый графический процессор с поддержкой DirectX 10. Вслед за ним NVIDIA выпустила графические процессоры под кодовыми названиями G86, G84, а также серии G9x и GT200. Все они обладают унифицированной скалярной шейдерной архитектурой.
Сравнительная таблица видеокарт GeForce 8 Series:
Видеокарта | Чип | Тех- про- цесс | Кон- вейеры | Частота | Память | Fill Rate | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
нм | ядра | шейдер. блоков | Объем | Тип | Частота (эфф.) | Ширина шины | ПСП | Mtex/s | Mpix/s | |||
МГц | МГц | МБ | МГц | бит | ГБ/c | |||||||
8800 Ultra | G80 | 90 | 128 | 612 | 1512 | 768 | GDDR3 | 2160 | 384 | 103,6 | 19584 | 14688 |
8800 GTX | G80 | 90 | 128 | 575 | 1350 | 768 | GDDR3 | 1800 | 384 | 86,4 | 18400 | 13800 |
8800 GTS | G80 | 90 | 96 | 500 | 1200 | 320 / 640 | GDDR3 | 1600 | 320 | 64,0 | 12000 | 10000 |
8800 GTS | G92 | 65 | 128 | 650 | 1625 | 512 / 1024 | GDDR3 | 2000 | 256 | 64,0 | 41600 | 10400 |
8800 GT | G92 | 65 | 112 | 600 | 1500 | 256 / 512 / 1024 | GDDR3 | 1800 | 256 | 57,6 | 33600 | 9600 |
8800 GS | G92 | 65 | 96 | 550 | 1375 | 384 / 768 | GDDR3 | 1600 | 192 | 38,4 | 26400 | 8800 |
8600 GTS | G84 | 80 | 32 | 675 | 1450 | 256 / 512 | GDDR3 | 2000 | 128 | 32,0 | 10800 | 5400 |
8600 GT | G84 | 80 | 32 | 540 | 1180 | 256 / 512 | GDDR3 | 1400 | 128 | 22,4 | 8640 | 4320 |
8500 GT | G86 | 80 | 16 | 450 | 900 | 256 / 512 | DDR2 | 800 | 128 | 12,8 | 3600 | 3600 |
8400 GS | G86 | 80 | 16 | 450 | 900 | 128 / 256 / 512 | DDR2 | 800 | 64 | 6,4 | 3600 | 3600 |
8300 GS | G86 | 80 | 8 | 450 | 900 | 128 / 256 / 512 | DDR2 | 800 | 64 | 6,4 | 1800 | 3600 |
Сравнительная таблица видеокарт GeForce 9 Series:
Видеокарта | Чип | Тех- про- цесс | Кон- вейеры | Частота | Память | Fill Rate | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
нм | ядра | шейдер. блоков | Объем | Тип | Частота (эфф.) | Ширина шины | ПСП | Mtex/s | Mpix/s | |||
МГц | МГц | МБ | МГц | бит | ГБ/c | |||||||
9800 GX2 | 2x G92 | 65 | 2x 128 | 600 | 1512 | 2x 512 | GDDR3 | 2000 | 2x 256 | 2x 64,0 | 2x 38400 | 2x 9600 |
9800 GTX+ | G92b | 55 | 128 | 738 | 1836 | 512 / 1024 | GDDR3 | 2200 | 256 | 70,4 | 47232 | 11808 |
9800 GTX | G92 | 65 | 128 | 675 | 1688 | 512 / 1024 | GDDR3 | 2200 | 256 | 70,4 | 43200 | 10800 |
9800 GT | G92 G92b | 65 55 | 112 | 600 | 1500 | 512 / 1024 | GDDR3 | 1800 | 256 | 57,6 | 33600 | 9600 |
9600 GT | G94 | 65 / 55 | 64 | 600 650 | 1500 1635 | 256 / 512 / 1024 | GDDR3 | 1800 | 256 | 57,6 | 19200 20800 | 9600 10400 |
9600 GSO | G92 | 65 | 96 | 550 | 1375 | 384 / 768 | GDDR3 | 1600 | 192 | 38,4 | 26400 | 8800 |
9500 GT | G96 | 65 / 55 | 32 | 550 | 1400 | 256 / 512 / 1024 | DDR2 GDDR3 | 1000 1600 | 128 | 16,0 25,6 | 8800 | 4400 |
9400 GT | G96 | 65 / 55 | 16 | 550 | 1400 | 256 / 512 / 1024 | DDR2 | 800 | 128 | 12,8 | 4400 | 4400 |
Сравнительная таблица видеокарт GeForce 200 Series:
Видеокарта | Чип | Тех- про- цесс | Кон- вейеры | Частота | Память | Fill Rate | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
нм | ядра | шейдер. блоков | Объем | Тип | Частота (эфф.) | Ширина шины | ПСП | Mtex/s | Mpix/s | |||
МГц | МГц | МБ | МГц | бит | ГБ/c | |||||||
GTX 295 | 2x GT200b | 55 | 2x 240 | 576 | 1242 | 2x 896 | GDDR3 | 2000 | 2x 448 | 2x 111,9 | 2x 46080 | 2x 16128 |
GTX 285 | GT200b | 55 | 240 | 648 | 1476 | 1024 / 2048 | GDDR3 | 2484 | 512 | 159,0 | 51840 | 20736 |
GTX 280 | GT200 | 65 | 240 | 602 | 1296 | 1024 | GDDR3 | 2214 | 512 | 141,7 | 48160 | 19264 |
GTX 275 | GT200b | 55 | 240 | 633 | 1404 | 896 / 1792 | GDDR3 | 2268 | 448 | 127,0 | 50640 | 17724 |
GTX 260 | GT200 GT200 GT200b | 65 65 55 | 192 216 216 | 576 | 1242 | 896 / 1792 | GDDR3 | 2000 | 448 | 111,9 | 36864 41472 41472 | 16128 |
GTS 250 | G92b | 55 | 128 | 738 | 1836 | 512 / 1024 / 2048 | GDDR3 | 2200 | 256 | 70,4 | 47232 | 11808 |
Архитектура графического процессора ATI R600
Компания ATI выпустила свой ответ с запозданием примерно на полгода. За это время NVIDIA успела выпустить на рынок несколько видеокарт на основе G80.
Как уже было упомянуто, новый продукт под названием Radeon HD 2900 XT основан на графическом процессоре с кодовым названием R600, который обладает 320-ю унифицированными шейдерными конвейерами. Стоит отметить, что нельзя непосредственно сравнивать эти 320 конвейеров R600 со 128-ю конвейерами G80, поскольку отличия в их архитектуре более чем существенны. Об этом и в подробностях.
Как и в случае G80, каждый из шейдерных конвейеров R600 может выполнять одну операцию за такт. Дело в том, что конвейеры R600 не являются скалярными в широком смысле этого слова, так как они группируются в блоки по 5 штук. Каждый из этих 64 суперскалярных блоков может выполнять за такт одну скалярную операцию и одну векторизированную на 4-х конвейерах сразу. Теоретически одна такая векторизированная команда эквивалентна 4-м скалярным, но не всегда. Говоря простым языком, 4 одинаковые скалярные операции можно преобразовать в 1 векторизированную. Если же эти 4 скалярные операции отличаются по характеру, то такое преобразование невозможно. Это не имело бы никакого значения, если бы все операции с шейдерами были векторизированными, но на деле всё обстоит иначе, и прямая аналогия между 5-ю конвейерами ATI типа Vec 4+1 и 5-ю скалярными конвейерами NVIDIA просматривается далеко не всегда, поскольку в реальных приложениях доля независимых скалярных расчётов довольно значительна. Очевидно, что это негативно отражается на реальной производительности R600.
Какова же теоретическая производительность R600 с 64-ю шейдерными блоками Vec 4+1? Получается, что 47,3 млрд. векторных и столько же скалярных операций в секунду. В таком случае, в зависимости от соотношения количества скалярных и векторных операций в программе, превосходство R600 над G80 с его 43,2 млрд. векторных операций в секунду составит 9-19% при полной векторной нагрузке, а при полностью скалярной примерно двукратное превосходство получит G80. Как показывает практика, в общем случае суперскалярная архитектура R600 не имеет явного преимущества над скалярной архитектурой G80.
Блок-схема графического процессора ATI R600:
Суперскалярную архитектуру R600 унаследовали и новые графические процессоры, которые принадлежат к следующим поколениям видеокарт ATI, то есть HD 3xxx и HD 4xxx.
Сравнительная характеристика видеокарт HD 2xxx:
Видеокарта | Чип | Тех- про- цесс | Кон- вейеры | Частота ядра | Память | Fill Rate | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
нм | МГц | Объем | Тип | Частота (эфф.) | Ширина шины | ПСП | Mtex/s | Mpix/s | |||
МБ | МГц | бит | ГБ/c | ||||||||
HD 2900 XT | R600 | 80 | 320 | 740 740 825 | 512 1024 1024 | GDDR3 GDDR4 GDDR4 | 1650 2000 2100 | 512 | 105,6 128,0 134,4 | 11800 11800 13200 | 11800 11800 13200 |
HD 2900 Pro | R600 | 80 | 320 | 600 | 512 512 1024 | GDDR3 GDDR3 GDDR4 | 1600 1600 1850 | 512 256 512 | 102,4 51,2 118,4 | 9600 | 9600 |
HD 2900 GT | R600 | 80 | 240 | 600 | 256 | GDDR3 | 1600 | 256 | 51,2 | 9600 | 9600 |
HD 2600 XT | RV630 | 65 | 120 | 800 | 256 / 512 | GDDR4 GDDR3 | 2200 1400 | 128 | 35,2 22,4 | 6400 | 3200 |
HD 2600 Pro | RV630 | 65 | 120 | 700 600 | 256 / 512 | GDDR3 DDR2 | 1400 800 | 128 | 22,4 12,8 | 5600 4800 | 2800 2400 |
HD 2400 XT | RV610 | 65 | 40 | 700 | 256 / 512 | GDDR3 | 1400 | 64 | 11,2 | 2800 | 2800 |
HD 2400 Pro | RV610 | 65 | 40 | 525 | 256 / 512 | DDR2 | 800 | 64 | 6,4 | 2100 | 2100 |
Сравнительная характеристика видеокарт HD 3xxx:
Видеокарта | Чип | Тех- про- цесс | Кон- вейеры | Частота ядра | Память | Fill Rate | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
нм | МГц | Объем | Тип | Частота (эфф.) | Ширина шины | ПСП | Mtex/s | Mpix/s | |||
МБ | МГц | бит | ГБ/c | ||||||||
HD 3870 X2 | RV670 | 55 | 2x 320 | 825 | 2x 512 | GDDR3 GDDR4 | 1800 2250 | 2x 256 | 2x 57,4 2x 72,0 | 2x 13200 | 2x 13200 |
HD 3850 X2 | RV670 | 55 | 320 | 670 | 2x 512 | GDDR3 | 1660 | 2x 256 | 2x 53,1 | 2x 10720 | 2x 10720 |
HD 3870 | RV670 | 55 | 320 | 775 | 512 / 1024 | GDDR3 GDDR4 | 1800 2250 | 256 | 57,6 72,0 | 12400 | 12400 |
HD 3850 | RV670 | 55 | 320 | 670 | 256 / 512 | GDDR3 | 1660 | 256 | 53,1 | 10720 | 10720 |
HD 3650 | RV635 | 55 | 120 | 725 | 256 / 512 | GDDR3 DDR2 | 1600 1000 | 128 | 25,6 16,0 | 5800 | 2900 |
HD 3470 | RV620 | 55 | 40 | 800 | 256 256 512 | GDDR3 GDDR3 DDR2 | 1900 1400 1000 | 64 | 15,2 11,2 8,0 | 3200 | 3200 |
HD 3450 | RV620 | 55 | 40 | 500 | 256 / 512 | DDR2 | 1000 | 64 | 8,0 | 2400 | 2400 |
Сравнительная характеристика видеокарт HD 4xxx:
Видеокарта | Чип | Тех- про- цесс | Кон- вейеры | Частота ядра | Память | Fill Rate | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
нм | МГц | Объем | Тип | Частота (эфф.) | Ширина шины | ПСП | Mtex/s | Mpix/s | |||
МБ | МГц | бит | ГБ/c | ||||||||
HD 4870 X2 | RV770 | 55 | 2x 800 | 750 | 2x 1024 | GDDR5 | 3600 | 2x 256 | 2x 115,2 | 2x 30000 | 2x 12000 |
HD 4850 X2 | RV770 | 55 | 800 | 625 | 2x 512 / 2x 1024 | GDDR3 | 2000 | 2x 256 | 2x 64,0 | 2x 25000 | 2x 10000 |
HD 4890 | RV790 | 55 | 800 | 850 | 512 / 1024 / 2048 | GDDR5 | 3900 | 256 | 124,8 | 34000 | 13600 |
HD 4870 | RV770 | 55 | 800 | 750 | 512 / 1024 / 2048 | GDDR5 | 3600 4000 | 256 | 115,2 128,0 | 30000 | 12000 |
HD 4850 | RV770 | 55 | 800 | 625 | 512 / 1024 | GDDR3 | 2000 | 256 | 64,0 | 25000 | 10000 |
HD 4830 | RV770 | 55 | 640 | 575 | 512 / 1024 | GDDR3 | 1800 | 256 | 57,6 | 18400 | 9200 |
HD 4770 | RV740 | 40 | 640 | 750 | 512 / 1024 | GDDR5 | 3200 | 128 | 51,2 | 24000 | 12000 |
HD 4650 | RV730 | 55 | 320 | 750 | 512 512 1024 | GDDR4 GDDR3 GDDR3 | 2200 2000 1800 | 128 | 35,2 32,0 28,8 | 24000 | 6000 |
HD 4650 | RV730 | 55 | 320 | 600 | 512 / 1024 512 | DDR2 GDDR3 | 1000 1400 | 128 | 16,0 22,4 | 19200 | 4800 |
HD 4550 | RV710 | 55 | 80 | 600 | 256 / 512 | GDDR3 | 1600 | 64 | 12,8 | 4800 | 2400 |
HD 4350 | RV710 | 55 | 80 | 575 | 256 / 512 | DDR2 | 1000 | 64 | 8,0 | 4800 | 2400 |
Выводы
Несмотря на свою теоретическую шейдерную мощь видеокарты ATI на практике не столь сильны, как может показаться на первый взгляд. В современных играх значительную часть времени занимают скалярные расчёты, что снижает реальную производительность систем на основе видеокарт ATI. С другой стороны, оптимизация шейдерного кода позволяет минимизировать этот недостаток.
Примером может послужить сравнение видеокарт GeForce GTX 295 и Radeon HD 4870 X2. Продукт от NVIDIA основан на двух графических процессорах GT200b с 240-ю унифицированными скалярными шейдерными конвейерами каждый, в то время как решение от ATI содержит по 800 конвейеров в каждом из своих двух графических процессоров RV770. Но на самом деле HD4870 X2 имеет только 320 шейдерных блоков (по 160 на графический процессор), производительность которых на скалярных операциях существенно уступает производительности конкурента.
Отсюда ответ на вопрос, почему видеокарта с 480-ю шейдерными конвейерами побеждает видеокарту, у которой их 1600, звучит примерно так: видеокарты ATI Radeon обладают суперскалярной архитектурой, в отличие от видеокарт NVIDIA GeForce с их скалярной архитектурой, и реальное количество шейдерных блоков у видеокарт ATI значительно меньше заявленного количества конвейеров.
Однако тот факт, что в 3D-приложениях, выпущенных к моменту выхода R600, суперскалярная архитектура не оправдала ожиданий, вовсе не означает, что в ATI неверно выбрали направление и создали ущербную базовую архитектуру. Во время разработки R600 основной акцент был сделан именно на вычисления, а не на скорость текстурирования или скорость заполнения (fill rate) — R600 показывает отличные результаты почти по всех синтетических тестах, особенно в геометрических, а также в тестах сложных пиксельных шейдеров с ветвлениями. Поэтому количество блоков текстурирования и растеризации не столь значительно, как ранее предполагалось. Превосходство R600 в шейдерной производительности будет тем значительнее, чем сложнее (векторизированнее) будут шейдерные операции.
Послесловие
В данной статье было произведено сравнение архитектуры графических процессоров NVIDIA G80 и ATI R600. Аналогичное сравнение применимо и для последующих поколений видеокарт со скалярной (GeForce 8 / 9 / GTX) и суперскалярной (Radeon HD 2xxx / HD 3xxx / HD 4xxx) архитектурой.
С рассмотрением блоков текстурирования этих графических процессоров можно ознакомиться в статье Игоря Лагунова «Блоки адресации, выборки и фильтрации текстур в составе современных графических чипов».
Краткий справочник терминов, упоминающихся в статье
Шейдер (shader) — это программа для одной из ступеней графического конвейера, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения. Она может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки.
Пиксельный шейдер (pixel shader) работает с фрагментами изображения, под которыми в данном случае подразумеваются пикселы, обладающие некоторым набором атрибутов, таких как цвет, глубина, текстурные координаты. Пиксельный шейдер используется на последней стадии графического конвейера для формирования фрагмента изображения.
Вершинный шейдер (vertex shader) оперирует данными, сопоставленными с вершинами многогранников. К таким данным, в частности, относятся координаты вершины в пространстве, текстурные координаты, тангенс-вектор, вектор бинормали, вектор нормали. Вершинный шейдер может быть использован для видового и перспективного преобразования вершин, генерации текстурных координат, расчета освещения и т. д.
Геометрический шейдер (geometry shader), в отличие от вершинного, способен обработать не только одну вершину, но и целый примитив. Это может быть отрезок (две вершины) и треугольник (три вершины), а при наличии информации о смежных вершинах (adjacency) может быть обработано до шести вершин для треугольного примитива. Кроме того, геометрический шейдер способен генерировать примитивы «на лету», не задействуя при этом центральный процессор.
Шейдерный конвейер (процессор) — это устройство для обработки одного элемента данных одной командой (типичными элементами данных могут быть целые или числа с плавающей запятой).
Блок растеризации (ROP, Raster Operator) — устройство, выполняющее Z-буферизацию, сглаживание и запись обработанного изображения в буфер кадра видеокарты.
Блок текстурирования (TMU, Texture Mapping Unit) — устройство, отвечающее за наложение изображений (текстур) на поверхности геометрических объектов.