Архитектура современных графических процессоров

Михаил Пешехонов (Michael)

09.06.2009

Предисловие

Появление видеокарт на основе графических процессоров 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 выглядит следующим образом:

Блок-схема 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:

Блок-схема 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) — устройство, отвечающее за наложение изображений (текстур) на поверхности геометрических объектов.



На главную страницу

Главная | Справочник | FAQ | Статьи | Загрузки | Контакты | Конференция

Логотипы, торговые марки и прочие зарегистрированные знаки принадлежат их правообладателям.
Copyright © 2001 - 2017, Radeon.ru Team.
Перепечатка материалов запрещена.

Рейтинг@Mail.ru Rambler's Top100