GeForce 6600 и 7800: в чём фишка? Ближайшие перспективы NVidia и ATI.

14 декабря 2004, вторник 17:19
для раздела Блоги
Эта статья появилась давно, ещё в декабре 2004-го, но не пошла в публикацию по причине недостаточного объёма текста и отсутствия иллюстраций. Сейчас она вроде бы заметно устарела, однако поднятые вопросы до сих пор мало где освещаются и многим не очевидны. В связи с выпуском GeForce 7800, архитектуру которого я буквально предсказал в этом материале, я решил его дополнить и всё же опубликовать.

Часть первая, ностальгически-лиричная

После того, как в ассортименте многих магазинов появились видеокарты NVidia GeForce 6600/6600GT, было сломано много копий вокруг вопроса, хорошая это покупка или GF 6800 всё же лучше? В активе у последнего большее количество конвейеров (как вертексных, так и пиксельных), вдвое более широкая шина памяти. Зато у 6600GT солидное превосходство в частотах. Кто же сильнее, кит или слон, давайте разберёмся.

Сразу оговорюсь, что против GeForce 6800GT у GeForce 6600GT нет никаких шансов - просто разные весовые категории. То же самое можно сказать и про сравнение с GeForce 6800, у которого разблокированы все конвейеры. А вот на штатных частотах и без разблокировки всё уже не так просто: 8 пиксельных конвейеров с частотой 500 МГц обеспечивают даже бОльшую скорость закраски, чем 12 пиксельных конвейеров с частотой 325 МГц. Правда GeForce 6800 имеет солидное преимущество в пропускной способности памяти, 22 ГБ/с против всего 16 у GF 6600GT PCI-E, или даже 14 у варианта с интерфейсом AGP. Так что же предпочесть? Это будет зависеть от ваших потребностей, поскольку между GeForce 6800 и 6600 есть одно архитектурное отличие, которое я и хочу осветить в этой статье. Заключается оно в максимально-возможном количестве одновременных записей в буфер экрана.

Создавая GeForce 6600, архитекторы сделали эдакий финт ушами, который очень сильно изменил характеристики нового продукта. Я бы даже назвал это новым словом в методике построения графических акселераторов, которое непременно ещё аукнется в скором будущем. Однако, прежде чем перейти к разъяснениям, необходимо сделать лёгкий экскурс в ближайшее прошлое с техническим уклоном.

До недавних пор принципы рендеринга графических акселераторов не отличались каким-либо изяществом. Выбрали полагающиеся пикселу текстуры из памяти, отфильтровали, наложили, записали окрашенный пиксел обратно в память и принялись за следующий. Закончив с последним пикселом в n-ной строке, переходили к первому в строке n+1, и так до победного конца. Довольно скоро темп закраски перестал удовлетворять требованиям игр, но эта проблема была решена просто: параллельно над закраской трудились два или даже четыре пиксельных конвейера.

Если на каждый пиксел накладывалось более одной текстуры, то он обрабатывался за большее количество тактов, т.е. пиксельная скорость падала прямо пропорционально количеству накладываемых текстур. Когда мультитекстурирование вошло в моду, недостаток скорости закраски устранили также легко, добавив в пиксельные конвейеры дополнительный текстурный модуль, чтобы две текстуры обрабатывались и накладывались на пиксел за один такт. Апофеозом этого направления развития явился ATI Radeon DDR, имевший по три текстурных модуля на двух пиксельных конвейерах.

Но вот незадача, все эти меры по наращиванию грубой силы тут же ударили по… производительности, потому что видеопамять уже не справлялась с таким объёмом работы. Два текстурных модуля требуют по две текстуры за такт. Двум пиксельным конвейерам нужна ровно в два раза более быстрая память, чем одному. Индустрия графических акселераторов столкнулась с такой же проблемой, что и индустрия процессоров во времена появления i80486 – частоту работу памяти нельзя наращивать бесконечно. Благодаря DDR памяти, в GeForce 256 смогли увеличить количество пиксельных конвейеров до четырёх, однако 4 конвейера по два текстурных модуля в GeForce 2 "пересилили" уже и DDR память. И вот тут конструкторам пришлось поднапрячься. Уже в GeForce 3 появились технологии экономии пропускной способности памяти (сжатие z-буфера, раннее z-отсечение) и "счетверённый" контроллер памяти. С каждым новым поколением акселераторов эти технологии совершенствовались, появились многоуровневые z-buffer с быстрой очисткой, сжатие цвета при сглаживании мультисэмплингом, но проблема нехватки скорости памяти не исчезла. Казалось бы, тупик, повышать производительность количественными методами нельзя? Ан нет!

Благодаря коренному пересмотру традиционной методики рендеринга стало возможным появление GeForce 6800 и Radeon X800 с 16-ю пиксельными конвейерами. Пиксельные конвейеры объединили в так называемые квады, рендерящие картинку не строками по четыре пиксела, а квадратами 2х2. Это значительно увеличило вероятность того, что четвёрки пиксельных конвейеров будут трудиться над одним полигоном и положенными именно ему текстурами, повышая КПД текстурного кэширования и записи результатов в память. Попробую растолковать на примере. Если размеры трансформированного полигона превышают один пиксел, на его рендеринг классическим методом понадобилось бы несколько проходов по строкам экрана. Отрендерив «верхушку» полигона, пиксельные конвейеры переходят к обработке следующего, выбирая положенные ему текстуры. Закончив первую строку, они снова примутся за первый полигон, опять выбирая из памяти его текстуры. Кваду пиксельных конвейеров повторные выборки текстур потребуются в разы реже. Этот простой и изящный шаг вдохнул в графические акселераторы новую жизнь и мы вновь увидели на порядок более мощные решения, не оставляющие предшественникам никаких шансов. Имея вдвое более узкую шину памяти, Radeon X700 и GeForce 6600 влёгкую обставляют Radeon 9800 и GeForce 5900.

Однако на этом интрига не заканчивается. Новые техпроцессы позволяют поднимать частоты графических ядер, однако память опять достигла своего частотного предела. И вот тут Nvidia совершила тот гениальный в своей простоте и эффективности шаг, о котором я хочу вам рассказать. Дабы не удорожать стоимость GeForce 6600 256-битной шиной памяти, но и не делать её узким местом архитектуры, инженеры ввели ограничение на количество записей результатов рендеринга за такт. Казалось бы, подобные ограничения негативно сказываются на производительности, что же в них хорошего? Однако, если всё тщательно проанализировать, такой манёвр оказывается просто золотым дном и позволит впредь ещё больше повысить производительность графических акселераторов.

Начнём с того, что вариант с 256-битной шиной памяти без ограничения на количество записей, без сомнения, был бы несколько быстрее того GeForce 6600, который увидел свет. Но вот насколько именно? Поскольку пиксельных конвейеров 8, а возможных записей результатов их работы всего 4, конвейеры могут простаивать. Однако эти простои будут иметь место только при условии, что они выдают по пикселу за каждый такт. Это возможно только если на пиксел накладывается одна текстура с билинейной фильтрацией (без обращения к соседнему mip-уровню); уже при двух текстурах негативное влияние ограничения сводится к нулю. В современных играх одиночное текстурирование нужно искать днём-с-огнём, следовательно, какого-либо падения производительности мы не сможем уловить. Анизотропная фильтрация требует выборки в разы значительно большего количества текстурных семплов, поэтому ограничение количества записей в память на GF6600 ведёт к уменьшению падения производительности от включения анизотропии по сравнению с GF6800 практически в два раза.

Таким образом, разница между гипотетическим «безлимитным» GeForce 6600 и его реальным вариантом будет проявляться лишь при простейшей графике. А теперь давайте вспомним, где вам больше не хватало производительности графического акселератора, в режиме 640х480 Low Quality, или в высоких разрешениях и максимальным качеством графики? Я думаю, ответ очевиден: нам не нужно несколько сотен некрасивых кадров в секунду, нам нуна большая скорость в красивых режимах, и тут у GeForce 6600 всё в порядке.

Чем тяжелее графика в игре, чем больше текстур и пиксельных эффектов, тем эффективнее оказывается решение с ограниченным числом записей за такт, поскольку часть пиксельных конвейеров всегда находится «на подхвате». Стоит одному из них замешкаться в обработке своего квада, как в бой вступает другой, у которого результат уже готов. Что называется, и волки сыты, и овцы целы: можно наращивать производительность в тяжёлых режимах, не особо упираясь в скорость памяти. Поскольку производители микросхем осваивают всё более «тонкие» техпроцессы, ядра графических акселераторов можно делать всё сложнее и сложнее, однако наращивать частоты памяти намного тяжелее. В такой ситуации оставлять часть конвейеров «про запас», ограничивая количество записей в память, вовсе не выглядит сумасбродной идеей. Достаточно существующему NV40 "привить" ещё несколько пиксельных квадов, и мы получим ощутимое увеличение быстродействия в "тяжёлых" графических режимах.

А что ATI? Насколько мне известно, архитектура R300 и R400 не имеет отдельных от пиксельных конвейеров блоков записи результатов рендеринга, значит проделать такой же трюк им не удастся. Ощутимо повысить тактовые частоты также не получится, у R480 они и так велики. А добавлять ещё несколько пиксельных квадов прежней "монолитной" архитектуры, с учетом тенденции к усложнению шейдеров, будет излишней тратой транзисторов. Скорее всего ATI пойдёт по пути оптимизации и тоже отделит блоки сохранения результата рендеринга от пиксельных конвейеров. Также обещается усовершенствование контроллера памяти, что явно не будет лишним для современных многоконвейерных монстров.

Часть вторая, архитектурно-пытливая

Выход GeForce 7800 наглядно продемонстрировал справедливость выводов первой части статьи, позволив оценить на практике приведённые теоретические выкладки. Но, заодно, вскрылись и некоторые подводные камни, что побудило меня написать продолжение к прогнозу. Дабы было понятно, о чём пойдёт речь, придётся немного углубиться в особенности архитектуры современных графических акселераторов. Начнём с того самого блока, который стал поводом для написания первой части статьи - ROP.

ROP это аббревиатура от Render OutPut - финальная стадия рендеринга, в которой производится блендинг (учет прозрачности, при необходимости смешение цвета с лежащим "глубже" пикселом, наложение тумана), сжатие цвета и глубины, запись пиксела во фрейм-буфер, обновление z-буфера. Всеми этими операциями, начиная с чипа NV30, заведуют отдельные от пиксельных конвейеров блоки. Поскольку они весьма сложны, сокращением количества ROP можно добиться существенного уменьшения площади чипа, к тому же блоки ROP могут работать на частоте, отличной от частот остальных блоков.

Отныне пиксельные конвейеры выдают не пикселы, а эдакий полуфабрикат, называемый fragment. Усердно перемалывая полигоны и текстуры, ни на что не отвлекаясь, конвейеры выдают четвёрку отрендеренных фрагментов в специальный буфер, из которого их "подхватывает" любой из освободившихся блоков ROP. Уже они решают, должен ли этот фрагмент попасть на экран или он был отрендерен зря. Где-то в этой цепочке происходит и "отсечение" лишних пикселов, которые образуются из-за того, что пиксельный конвейер всегда обрабатывает 4 пиксела, независимо от того, принадлежат они одному полигону или разным. Поскольку выборка текстур проводилась только для одного полигона, часть пикселов оказывается неправильными и их нужно будет обработать повторно. Такая схема выбрана для упрощения систем контроля в чипе, что в итоге позволяет увеличить тактовые частоты и производительность. В некотором роде это похоже на систему replay в Pentium 4 - процессор делает некоторое количество лишней работы, зато очень быстро.

Возможно здесь необходимо чуть углубиться в архитектуру пиксельных конвейеров современных графических акселераторов. Начиная с чипа NV30 используются макроконвейеры, обрабатывающие сразу 4 пиксела, по давно освоенному в процессорах принципу SIMD (одна инструкция для множественных данных). В каждый момент времени на конвейере производится одна и та же операция (например сложение регистров) для всех 4 пикселов. Правда пиксельные шейдеры 3.0 вводят некоторую вариативность в виде условных переходов, что заметно уменьшает количество необходимой для достижения нужного результата работы.

К такому макроконвейеру уже нельзя применить старую классификацию организации текстурных модулей вроде 4х2 или 8х1, поскольку текстурный модуль общий для всех 4 пикселов. В NV30 на квад приходилось два текстурных модуля, позволявшие выдавать четыре трилинейно-фильтрованных текстурных сэмпла за такт, в NV4x и G70 этот блок упрощён в связи с тенденцией увеличения пропорции между количеством шейдерных вычислений и количеством используемых текстур; теперь трилинейная фильтрация выполняется за два такта.

Кстати ATI в своей новой линейке Radeon X1xxx пошла по пути разделения обязанностей ещё дальше, отделив текстурные модули от конвейеров и добавив арбитра, который распределяет работу между пиксельными процессорами в зависимости от готовности необходимых им данных (включая текстуры). А в Radeon X1600, по некоторым данным, реализованы не 3 "квадовых" конвейера, а 4 конвейера, обрабатывающих по три пиксела. Кроме того, структура render back-end (аналог ROP) в Radeon X1600 сделана очень похожей на GeForce 6600 - четыре модуля могут записывать 8 значений z при отсутствии записи цвета. Почему такая возможность не реализована в "топовой" модели (X1800) не совсем понятно. Возможно RV530 является полигоном для отладки технологий, которые будут внедрены в ожидаемый вскоре R580.

Новая схема рендеринга позволила в несколько раз увеличить производительность графических акселераторов при заданной пропускной способности памяти, однако это не значит, что мощь можно без проблем наращивать и дальше. Crossbar memory architecture впервые появилась в GeForce 3 и с тех пор мало изменилась, разве что ширина шины памяти увеличилась вдвое. Доступом к памяти всё также заведуют 4 независимых контроллера памяти, связанные коммутаторами, т.е. в один момент времени может производиться максимум 4 обращения на чтение и запись из памяти. А теперь представьте, блоки ROP создают непрерывный поток записей во frame buffer и z-buffer, текстурные модули _на каждом_ кваде (а их в G70 уже 6) считывают текстуры нескольких mip-уровней (для трилинейной фильтрации), вертексные конвейеры также требуют определённой доли в пропускной способности памяти, и всё это одновременно!

24 пиксельных процессора G70 дают необходимый запас вычислительной мощности, даже если предположить, что каждый третий пиксел квада был отрендерен зря. Совершенно очевидно, что дальнейшее увеличение количества пиксельных конвейеров будет приводить только к возрастанию конкуренции за доступ к памяти, ведь уже сейчас GeForce 7800GTX в некоторых тестах на пиковую производительность уступает GeForce 7800GT, а он, в свою очередь, проигрывает GeForce 6800GT.

В этом плане ATI сделала большой шаг вперёд, увеличив количество контроллеров памяти до восьми. Разумеется, с сокращением ширины слова данных с 64-х до 32-х бит, поскольку развести 512-битную шину памяти пока не представляется возможным. Двукратное уменьшение пропускной способности каждого контроллера памяти компенсируется гораздо более высокими частотами работы, поскольку на рынке как раз появились микросхемы памяти GDDR-3 с временем цикла 1.4, 1.25 и даже 1.1 наносекунды, а уже анонсированные чипы GDDR-4 обещают время цикла 0.7 нс, т.е. эффективную частоту более 2.5 ГГц!

В то же время инженеры ATI предпочли не увеличивать количество пиксельных конвейеров по сравнению с предыдущим поколением (X800), а продолжить наращивание частот, что тоже разумно именно с позиции количества одновременных обращений к памяти. Результат, как говорится, на лицо - стала возможной даже полноценная "углонезависимая" анизотропная фильтрация (от которой NVidia отказалась в NV4x) без существенной потери производительности. А в рукаве у ATI остался козырь - банальное наращивание количества пиксельных конвейеров, которое подсистема памяти выдержит без труда. Неясен лишь вопрос о количестве render back-ends; возможно их будет меньше, чем пиксельных конвейеров, но они обзаведутся двойной производительностью при работе с z-буфером, как это сделано в RV530 aka Radeon X1600.

А в переспективах NVidia, в первую очередь, переработка контроллера памяти с конфигурации 4х64 бита в 8х32 бита, причём это усовершенствование мы наверняка cможем вкусить ещё до появления чипа нового поколения с унифицированной архитектурой конвейеров. По аналогии с NV30 и NV35 это может быть чип G75. К перспективе дальнейшего увеличения количества пиксельных квадов (до 32-х штук) без переделки контроллера памяти лично я отношусь скептически. Вторым шагом должно стать появление программируемого блока ROP, позволяющего выполнять мультисемплинг с нерегулярной решеткой, поскольку ATI сохраняет преимущество в этом плане.
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают