Пиксельные конвейеры что это
На протяжении долгих лет архитектура графических процессоров принципиально не изменялась. Такое понятие, как «конвейер», стало доминирующим в описании архитектуры конкретного видеопроцессора, и отличия между ними в основном состояли в количестве отдельных вычислительных блоков. И вот наконец сегодня компания NVIDIA показывает нам другой путь развития.
На протяжении долгих лет архитектура графических процессоров принципиально не изменялась. Такое понятие, как «конвейер», стало доминирующим в описании архитектуры конкретного видеопроцессора, и отличия между ними в основном состояли в количестве отдельных вычислительных блоков. И вот наконец сегодня компания NVIDIA показывает нам другой путь развития.
Заметим сразу, что никаких сравнений с продуктами и особенностями архитектур конкурентов мы проводить не будем в связи с тем, что условия явно не равны: архитектура G80 специально разрабатывалась для DirectX 10, а все присутствующие на рынке продукты ориентированы на предыдущие версии API. Поэтому проводить параллели и искать отличия в реализации конкретных функций некорректно.
Графические процессоры с классическим конвейером и унифицированной архитектурой с концепцией потоковой обработки данных.
Классический конвейер.
В предпоследнем поколении видеокарт данные, полученные от центрального процессора, сперва обрабатываются вершинным блоком (он также называется процессором, конвейером):
- создаются вершины, над которыми производятся преобразования, дополненные вершинными шейдерами - программы, добавляющие некоторые эффекты объектам, например – мех, волосы, водная гладь, блеск и так далее;
Шейдер - это специальная программа, которая использует определенные программируемые регистры видеокарты для создания различных графических эффектов различают два вида шейдеров: вершинные и пиксельные шейдеры.
Вершинные шейдеры (см. рис. 1) позволяют гибко управлять ядром T&L, то есть дают разработчику широкие возможности по аппаратному ускорению обработки вершин полигонов (позволяют производить различные геометрические преобразования и вычисления). С помощью этих шейдеров можно получить объемный реалистичный туман, всевозможные деформации объектов, плавный морфинг, когда одно изображение "перетекает" в другое, эффект motion blur - размытие при движении, т.е. при очень быстром движении объекта, он начинает казаться нечетким, немного смазанным, доступны практически неограниченное количество источников света, и многое другое.
Пиксельные шейдеры в свою очередь дают широкие возможности по обработке пикселей (экранных точек). Эти шейдеры позволяют программисту по шагам управлять процессом наложения текстур и вычисления цвета пикселей. Можно получить в играх реальное освещение т. к. с помощью этих шейдеров возможно делать освещение определенных пикселей. В арсенале разработчика появились микрополигоны, что позволяет создавать реалистичные эффекты взрыва, дождя, пыли, дыма, и т.п. Шейдеры дают точные тени даже от малейших неровностей поверхности. С помощью пиксельных шейдеров можно получить еще множество интересных эффектов, но главная суть пиксельных и вершинных шейдеров - это добиться максимальной реалистичности.
- далее вершины собираются в примитивы – треугольники, линии, точки,
- после чего переходят в пиксельный блок, здесь определяются конечные пиксели, которые будут выведены на экран, и над ними проводятся операции освещения или затенения, текстурирования (этим занимается блок TMU – Texture Mapping Unit, который связан с пиксельным конвейером), присвоения цвета, добавляются эффекты от пиксельных шейдеров.
Рис. 4. Классический конвейер.
( Vertex – Вершина; Triangle – треугольник; T&L - Трансформация и Освещение; Pixel - пиксель - элемент изображения, выводимого на экран; блок ROP - Raster Operations - Растровые Операции (blending - cмешивание, antialiasing - сглаживание); Memory – Память - кадровый буфер для последующей выборки и вывода на экран).
- далее в блоке ROP - Raster Operations - Растровые Операции (в терминологии NVIDIA блоки рендеринга - Render Output Pipeline - ROP) вычисляются координаты конкретного пикселя, чтобы отбросить те, которые будут скрыты другими объектами и не видны пользователю, производится cмешивание -blending, и сглаживание - antialiasing;
- в следующем блоке фрагменты собираются в полигоны, состоящие из отдельных пикселей, и уже готовая картинка передаётся в память для последующей выборки и вывода на экран.
В характеристиках видеокарт, поддерживающих DirectX 9, всегда упоминается количество пиксельных, вершинных процессоров и текстурных блоков (например, в видеоадаптере GeForce 7600 GT есть 12 пиксельных и 5 вершинных процессора (ввиду меньшей нагрузки на вершинные конвейеры их количество – в пределах 2-8 шт. в зависимости от уровня графического процессора, и 12 TMU – по одному на пиксельный конвейер). Чем больше текстурных блоков, тем больше будет производительность видеокарты.
Компания ATI, начиная с серии Radeon X1000, отошла от привычной формулы «один TMU на один пиксельный конвейер», уменьшив общее количество «текстурников», которые теперь не связаны напрямую с пиксельными процессорами благодаря оптимизации архитектуры видеоядра. При этом количество пиксельных конвейеров в самой старшей модели видеокарты было увеличено до 48, а количество TMU осталось на уровне 16 шт. Такое решение – своего рода задел на будущее, так как в последние годы всё более заметно, что разработчики игр ориентируются не на грубую силу в виде огромного числа полигонов, а на тонкий расчёт, то есть использование сложных шейдеров, требующих математической вычислительной мощи.
При классическом рендеринге недостаток процесса формирования 3D-сцены состоит в том, что, если уже обработанные данные нужно снова запросить и изменить, приходится дожидаться завершения всего конвейера и заново вычитывать их из памяти или вообще снова получать данные от центрального процессора. Также разделение ядра на отдельные вершинные и пиксельные процессоры сильно ограничивает разработчиков графических приложений, ведь необходимо предусмотреть все варианты геометрии и эффектов в будущих играх, учитывая особенности решений обоих ведущих производителей видеокарт.
Унифицированная архитектура.
В основу новой унифицированной архитектуры (см. рис. 2) легла концепция потоковой обработки данных, благодаря которой появилась возможность отправки данных на повторную обработку без ожидания завершения всех стадий конвейера.
Также был добавлен новый вид шейдеров – геометрический, работающий с геометрией на уровне примитивов, а не вершин, что способствует разгрузке центрального процессора от лишней работы. И, конечно же, отказ от разделения на пиксельные и вершинные процессоры – теперь они общие, получили новое название – потоковые процессоры (стрим-процессоры) и в любой момент могут быть перепрограммированы под конкретные нужды приложения.
Рис. 2. Унифицированная архитектура.
Если необходим просчёт «скелета» сцены, то для текстурирования и пиксельной работы выделяется необходимое число блоков, а остальное идёт на вершинные операции. Если же, например, необходимо воссоздать бушующее море, всё наоборот: все силы бросаются на пиксельную обработку, а для геометрии, естественно, только необходимое.
Количество стрим-процессоров в новых ядрах достигает 128 шт. (NVIDIA) или 320 шт. (AMD), но напрямую их сравнивать нельзя из-за их особенностей (кстати, если говорить по всей строгости, процессоров у AMD R600 не 320, а 64, но каждый из них за один такт выполняет до 5 инструкций, что равняется 320 виртуальным процессорам).
Блоки TMU теперь не связаны напрямую с шейдерными, и их количество не сильно изменилось при переходе к унифицированной архитектуре.
Частота графического процессора задаётся, исходя из возможностей чипа или маркетинговых соображений разработчиков, иногда даже поддаётся заводскому разгону (оверклокинг – повышение рабочих частот компонентов компьютера) производителями видеокарт, чтобы выделить продукт и привлечь потенциального покупателя.
Как на платах активировать «дополнительные», ранее незадействованные конвейеры, из-за чего они вообще присутствуют в чипах, и, наконец, каким же образом можно заплатив меньше денег получить больше производительности.
Всем кулхацкерам посвящается – патчинг драйвера и BIOS
Практически же осуществим лишь второй способ, так как определение и последующая инициализация всех соответствующих параметров для нужного Device ID происходит на этапе ранней загрузки драйверов, что далеко до загрузки самой системы. Таким образом, остаётся лишь найти и заменить соответствующие куски в коде драйвера, а возможно это любым HEX-редактором. Однако времена, когда пользователи копались в HEX-редакторах, уже давным-давно канули в лету, гораздо проще один раз написать небольшую программку, которая и осуществляла бы замену.
Именно это и сделал российский программист, известный как Unwinder, в виде дополнительной утилиты к своему знаменитому пакету RivaTuner. Так называемые патч-скрипты, в которых прописываются исходный и результирующие идентификаторы и некоторые другие параметры, реализованы в виде отдельных текстовых файлов для большего удобства, а также чтобы не нарушать закон. Ведь в противном случае такая программка превращается в самый настоящий крэк, хотя таковым она по сути своей и является :-)
В случае компании NVIDIA, переделка продуктов которой стала возможна с появлением серии GeForce 6800, дело обстоит несколько иным образом – здесь мы обходимся одной лишь перепрошивкой нового BIOS, предварительно пропатченного тем же самым скриптом. Однако о реализации мы с Вами поговорим чуть ниже, а пока же давайте разберёмся, что можно переделать, и во что, и насколько это вероятно.
Немного теории: классический конвейер и DirectX 10
Начнём с небольшого отступления от сегодняшней темы и расскажем нашим читателям, что же такое пресловутый конвейер, из чего он состоит.
На самом деле то, что подразумевается под конвейером в видеопроцессоре, является лишь аппаратным обеспечением для реализации обработки графики, которая проводится конвейерным способом. Просчёт графики ведётся следующим способом:
Итак, изначально видеопроцессор получает от хоста (центрального процессора) информацию об объекте, который необходимо обработать. В дело вступает вершинный процессор ядра. Он на основании полученных данных строит конкретный объект с фиксированными координатами, называемый вершиной (vertice). На данном этапе проводятся отдельные дополнительные операции над этими вершинами – например, преобразование и освещение, изменение объекта шейдерами и т.п. Кстати, аппаратный Transform & Lighting (T&L) впервые был внедрён NVIDIA в ядро GeForce 256 в 1999 году, затем дополнительные возможности обработки вершин добавлялись с поддержкой новых версий DirectX (программируемые вершинные шейдеры в DirectX 8, пиксельные – в DirectX 9 и т.д.).
Следующая ступень конвейера – сборка (setup). На этом этапе вершины собираются в примитивы – треугольники (полигоны), линии или точки. Подчеркнём, что ни о каком видимом объекте пока речь не идёт, это абстрактная информация о том, что вершины объединены в какой-то геометрический объект.
Эта информация переходит дальше по конвейеру – в пиксельный процессор, который определяет конечные пиксели, которые будут выведены в кадровый буфер, и проводит над ними различные операции: затенение или освещение, текстурирование, присвоение цвета, данных о прозрачности и т.п. В целом эту операцию называют растеризацией, потому что объект разбивается на отдельные фрагменты – пиксели. Понятие «растровый» означает «состоящий из точек», именно такая графика имеет отношение к трёхмерной, существует ещё векторная, объекты в которой представляются математическими формулами. Также в относительно современных графических процессорах на данной стадии на сцену выходят пиксельные шейдеры, способные отобразить специфическое изображение (шейдеры освещения, затенения, блеска и т.п.) Над пикселями проводится Z-тестирование (выясняется глубина каждой точки, так как мы говорим о трёхмерном изображении), и линии сглаживаются (antialiasing). Вся эта информация передаётся на следующую стадию (Z-данные – в Z-буфер).
Затем фрагменты с присвоенными им координатами цветности (RGBA, где A – alpha, обозначающая дополнительную характеристику пикселя (прозрачность) обрабатываются блоком ROP (Raster Operations). Из Z-буфера вычитываются данные о расположении конкретных пикселей, чтобы отбросить те, которые будут скрыты другими объектами и не видны пользователю. Фрагменты снова собираются в полигоны, состоящие из отдельных пикселей, и весь массив уже обработанной картинки передаётся в кадровый буфер для последующей выборки и вывода на экран.
Вот такой процесс, собственно, и называется конвейером. В характеристиках графических процессоров указывают условные конвейеры, что означает, сколько одновременно обработок может проводить ядро. Например, возьмём GeForce 7600GT: 12 пиксельных конвейеров по одному TMU на каждый, 5 вершинных процессоров. Понимать это следует так: за один такт ядро способно обработать 5 наборов данных о вершинах и построить 5 вершин, одновременно после растеризации обрабатываются 12 пикселей, на каждый из которых может быть наложена текстура. Иногда делается упор на мультитекстурирование, когда на один пиксель накладывается несколько текстур, в таком случае в ядре предусматривается кратное количество пиксельных процессоров и TMU (например 4/8). Если TMU меньше, чем пиксельных процессоров, то текстурирование проходит за несколько тактов.
Проблема подобной организации обработки графики состоит в том, что если уже обработанные данные нужно снова запросить и изменить, приходится дождаться завершения всего конвейера и заново вычитать их из кадрового буфера – или вообще снова получить от хоста. Если речь идёт об изменении на поздней стадии (например, работа пиксельного шейдера, скажем, освещение), то все предыдущие стадии конвейера заново обрабатываются почем зря, тратя на это вычислительную мощность других блоков. Также разделение функциональных блоков ядра на отдельные группы (пиксельный, вершинный процессоры) очень сильно ограничивает разработчиков графических приложений. Им приходится думать, как бы не переборщить с геометрическими характеристиками и не «положить» видеокарты, снабжённые малым количеством вершинных процессоров, или, наоборот, «наступать на горло песне» и урезать красоты, получаемые мультитекстурированием и сложными пиксельными шейдерами во благо обладателей видеокарт с уклоном в геометрию, а не работу с растром.
Теперь рассмотрим DirectX 10 API.
Стоит сразу отметить, что новая версия API от Microsoft, также известная как WGF 2.0 (Windows Graphics Foundation), в чём-то является развитием предыдущих версий, а в чём-то это очень большой прорыв.
Поясним для читателей, не разбирающихся в 3D-программировании, как работает DirectX да и любой API. Фактически это виртуальная машина, внутри которой выполняется код приложения (игры и т.п.). Преимущество такого подхода состоит в том, что разработчик игры не должен задумываться о том, как же в конкретной видеокарте реализована та или иная функция, он лишь пишет универсальный код на языках Microsoft High Level Shader Language или NVIDIA Cg. Этот код в рамках работающей виртуальной машины API компилируется в понятный конкретному GPU набор машинных команд с помощью компилятора Just-In-Time (JIT). При смене конкретных типов инструкций ядро виртуальной машины меняет модель работы, это выполняется центральным процессором на уровне драйвера.
Первое улучшение DirectX 10 по сравнению с DX9 – уменьшенное количество возможных состояний ядра за счёт большей унификации. Теперь большее количество инструкций выполняется в рамках одного runtime, благодаря чему происходит меньше прерываний на обращение процессора к драйверу и смену состояния ядра API.
В Shader Model 4 включено большое количество новых инструкций и унифицирован их набор, введены новые регистры и константы и многое другое. Таблица изменений – в следующей иллюстрации:
Революционным шагом в порядке обработки данных, которые в дальнейшем станут трёхмерным изображением, является концепция потоковой обработки. О традиционном конвейере мы поговорили чуть выше, теперь посмотрим на новый конвейер.
Потоковый вывод данных даёт возможность намного быстрее отослать на повторную обработку данные, уже прошедшие через вершинный или геометрический шейдер, с помощью специального потокового буфера (stream buffer). Благодаря этому не тратится время на ожидание завершения работы пиксельного шейдера и растеризации.
Отметим ещё одну новацию в DirectX 10: введён новый вид шейдеров – geometry shaders. Они позволяют работать с геометрией не на уровне отдельной вершины, как в случае с вершинными шейдерами, а на уровне примитивов. Это означает, что не нужно больше менять каждую вершину, собираемую затем в линию, можно геометрическим шейдером изменить всю линию. Это должно серьёзно разгрузить центральный процессор и предоставить ему работу только с движком игры и AI. Работа с геометрическим шейдером позволит затрачивать намного меньшее количество тактов графического процессора на просчёт сложных геометрических преобразований, в частности, всеми любимых реалистичных волос. Также геометрические шейдеры помогут увеличить реалистичность изображения воды за счёт возможностей тесселяции (разбиения полигонов на более мелкие).
Ну что-то типа этого. Начну с теории.
Конвейеры используются для описания архитектуры видеокарт и дают вполне наглядное представление о производительности графического процессора. Конвейер нельзя считать строгим техническим термином. В графическом процессоре используются разные конвейеры, которые выполняют отличающиеся друг от друга функции. Исторически под конвейером понимали пиксельный процессор, который был подключён к своему блоку наложения текстур (TMU). Например, у видеокарты Radeon 9700 используется восемь пиксельных процессоров, каждый из которых подключён к своему TMU, поэтому считают, что у карты восемь конвейеров. Но современные процессоры описать числом конвейеров весьма сложно. По сравнению с предыдущими дизайнами, новые процессоры используют модульную, фрагментированную структуру. Новатором в этой сфере можно считать ATi, которая с линейкой видеокарт X1000 перешла на модульную структуру, что позволило достичь прироста производительности через внутреннюю оптимизацию. Некоторые блоки процессора используются больше, чем другие, и для повышения производительности графического процессора ATi постаралась найти компромисс между числом нужных блоков и площадью кристалла (её нельзя очень сильно увеличивать). В данной архитектуре термин "пиксельный конвейер" уже потерял своё значение, поскольку пиксельные процессоры уже не подключены к собственным блокам TMU. Например, у графического процессора ATi Radeon X1600 есть 12 блоков пиксельных шейдеров и всего четыре блока наложения текстур TMU. Поэтому нельзя говорить, что в архитектуре этого процессора есть 12 пиксельных конвейеров, как и говорить, что их всего четыре. Впрочем, по традиции пиксельные конвейеры всё ещё упоминают. С учётом сказанных допущений, число пиксельных конвейеров в графическом процессоре часто используют для сравнения видеокарт (за исключением линейки ATi X1x00). Например, если взять видеокарты с 24 и 16 конвейерами, то вполне разумно предположить, что карта с 24 конвейерами будет быстрее.
Современная видеокарта использующая интерфейс PCI Express (PCI-E) может быть сложнее и значительно дороже материнской платы, она представляет собой очень сложное устройство, но меньших размеров. При описании современных видеокарт и современных технологий применяемых в видеосистеме персональных компьютеров авторы часто используют технические термины не всегда понятные специалистам сервисных служб по ремонту и техническому обслуживанию. Обычно это не влияет на качество ремонта аппаратуры, но при замене видеокарт, при покупке конечно не будет лишним знание технологий, которые использованы в приобретаемой (обычно достаточно дорогой) видеокарте.
Шейдерный блок.
Технология эта сравнительно новая. Шейдер - это специальная программа, которая использует определенные программируемые регистры видеокарты для создания различных графических эффектов (регистры - это ячейки памяти). Всего различают два вида шейдеров: вершинные и пиксельные шейдеры.
Вершинные шейдеры
Вершинные шейдеры позволяют гибко управлять ядром T&L (от англ. Transformation and Lighting - Трансформация и Освещение), то есть дают разработчику широкие возможности по аппаратному ускорению обработки вершин полигонов (позволяют производить различные геометрические преобразования и вычисления). В наборе команд вершинных шейдеров присутствуют 127 инструкций. Что же реально можно получить с помощью вершинных шейдеров? Область их применения практически не ограничена (а если и ограничена, то только фантазией разработчика). С помощью этих шейдеров можно получить объемный реалистичный туман, всевозможные деформации объектов, плавный морфинг (это когда одно изображение "перетекает" в другое), эффект motion blur (размытие при движении, т.е. при очень быстром движении объекта, он начинает казаться нечетким, немного смазанным), практически неограниченное количество источников света, и многое другое.
Пиксельные шейдеры
Пиксельные шейдеры в свою очередь дают широкие возможности по обработке пикселей (экранных точек). Инструкций пиксельных шейдеров всего 8. Эти шейдеры позволяют программисту по шагам управлять процессом наложения текстур и вычисления цвета пикселей. Что это дает разработчику (и пользователям)? Что касается игр, то здесь использование шейдеров, как пиксельных, так и вершинных, возрастает все больше и больше. Во-первых, можно получить в играх (и не только) реальное освещение (ведь с помощью этих шейдеров возможно делать освещение определенных пикселей). Во-вторых, в арсенале разработчика появились микрополигоны, что позволяет создавать реалистичные эффекты взрыва, дождя, пыли, дыма, и т.п. В-третьих, шейдеры дают точные тени (теперь тени образуются даже от малейших неровностей поверхности). С помощью пиксельных шейдеров можно получить еще множество интересных эффектов, но главная суть пиксельных и вершинных шейдеров, я думаю, стала понятной - это добиться максимальной реалистичности. Кстати, в отличии от вершинных шейдеров, нет способа эмулировать пиксельные шейдеры программным путем.
Унифицированная архитектура
В основе унифицированной архитектуры взята концепция потоковой обработки данных, благодаря которой появилась возможность отправки данных на повторную обработку без ожидания завершения всех стадий конвейера. Также был добавлен новый вид шейдеров – геометрический, работающий с геометрией на уровне примитивов, а не вершин, что способствует разгрузке центрального процессора от лишней работы. Произошел отказ от разделения на пиксельные и вершинные процессоры – теперь они общие, получили новое название – потоковые процессоры (стрим-процессоры) и в любой момент могут быть перепрограммированы под конкретные нужды приложения.
Конвейер
В предпоследнем поколении видеокарт данные, полученные от центрального процессора, сперва обрабатываются конвейером (он также называется процессором, вершинным блоком): создаются вершины, над которыми производятся преобразования, дополненные вершинными шейдерами (программы, добавляющие некоторые эффекты объектам, например – мех, волосы, водная гладь, блеск и так далее).
Далее вершины собираются в примитивы – треугольники, линии, точки, после чего переходят в пиксельный блок.
Пиксельныйблок . Блок TMU – Texture Mapping Unit
Здесь определяются конечные пиксели, которые будут выведены на экран, и над ними проводятся операции освещения или затенения, текстурирования (этим занимается блок TMU – Texture Mapping Unit, который связан с пиксельным конвейером), присвоения цвета, добавляются эффекты от пиксельных шейдеров.
Количество конвейеров Чем больше конвейеров поддерживает видеокарта, тем, естественно, лучше. Кроме количества поддерживаемых конвейеров очень важно число текстурных блоков. Если взять, к примеру, две видеокарты с одним и тем же количеством конвейеров, но разным количеством текстурных блоков, то при наложении одной текстуры на объект разницы во времени мы не почувствуем вообще. Когда же придет пора мультитекстурирования, то видеокарта с меньшим числом текстурных блоков проиграет. Чтобы узнать, сколько текстур видеокарта сможет наложить на объект за один проход, необходимо количество конвейеров умножить на число текстурных блоков. Кстати, минимальное требование для DirectX9-совместимых ускорителей - это 16 текстур за один проход.
T&L(Transform&Lighting).
Трансформация и Освещение (так звучит название этой технологии на русском языке) - это процесс переноса информации о 3D мире (позиция объектов, дистанция между ними, источники света) в 2D изображение, которое в действительности и отображается на экране. С появлением аппаратной поддержки T&L увеличилась скорость игр, а также их качество (не только графика, но и искусственный интеллект и физика). Причем же здесь трансформация и освещение к, например, искусственному интеллекту? Дело в том, что создание объектов со сложной геометрией (а тем более, освещением) требует очень больших скоростей обработки данных. И всю эту работу приходилось делать процессору (при использовании программного T&L). И после того, как видеокарта начала сама "беспокоиться" о трансформации и освещении, довольно большая нагрузка спала с центрального процессора, тем самым, дав больше процессорного времени и мощности для других задач (ИИ, физические расчеты, и др.). Так что наличие аппаратной поддержки T&L играет очень важную роль (во всех новых ускорителях она есть).
T & L -конвейер
Сейчас значительно улучшен блок T&L. В первую очередь, возросла производительность: теперь акселератор способен на 3D-расчеты, эквивалентные по сложности 76 млрд. операций с плавающей точкой в секунду. Во-вторых, блок стал программируемым, и это мощный инструмент для разработчиков игровых приложений. И это очевидная «статья расходов» новых транзисторов - они обеспечивают логику и математику GPU нового поколения. Разумеется, T&L необходима большая пропускная способность шины, так как ее ширины постоянно не хватает. По заявлению Nvidia, все данные о геометрии полигонов хранятся в специальном буфере локальной видеопамяти. Благодаря конвейерам, оснащенным программируемым T&L-блоком, в NV20 введена поддержка 3D-текстур и, следовательно, воксельной графики. Технология 3D-текстур позволяет создавать более точные 3D-объекты, передавая специфику материалов, обрабатывать объемные среды (туман, взвесь частиц в луче света), а также создавать объекты с изменяющейся структурой - разрушающиеся стены, вмятины, трещины и тому подобное. Открывается интересная возможность поддержки сплайновых полигонов. Сплайновые криволинейные поверхности, это уже почти реальность.
Программируемый T&L-блок (nfiniteFX Engine).
Программируемый T&L-блок открывает технологию пиксельных и вершинных шейдеров, позволяя программистам регулировать процесс рендеринга, что дает практически бесконечные возможности по созданию новых эффектов. Ведь, если разобраться, в GeForce256, как и в GeForce2, не было настоящего геометрического процессора. Конечно, в GeForce256 и GeForce2 очень помогала возможность аппаратной трансформации и освещения полигонов, но это же и ограничивало программистов, которые не были больше способны управлять процессами рендеринга и наложения текстур. Теперь появился первый настоящий GPU.
Аппаратный T&L, и не какой-нибудь, а уже программируемый. Программируемый T&L-конвейер, помимо повышения скорости, дает известные преимущества. Аппаратная поддержка воксельной геометрии, 3D-текстур, сплайновых поверхностей. Множество фактов говорит о том, что чип способен создавать криволинейные полигоны, причем сложности высокого порядка. В чип введена поддержка уже привычной технологии сжатия текстур FXT1 (а также S3TC). Видеочипы все больше походят на процессоры. Это и полностью программируемые этапы рендеринга, и реализация нестандартных контроллеров памяти, и даже постоянное увеличение объема накристальной кэш-памяти.
Графический процессор
Ключевым компонентом любой современной видеокарты является графический процессор (или набор микросхем - графический чипсет), который занимается расчётами выводимой на экран информации и трёхмерных сцен. На данный момент разработкой графических процессоров занимаются в основном компании NVIDIA, продвигающая серию GeForce, и AMD, купившая канадскую компанию ATI с её линейкой Radeon. Программные драйверы, с помощью которых операционные системы и приложения управляют видеокартой, как правило, разрабатываются именно с учетом параметров конкретного набора микросхем.
Видеопамять
Для хранения изображений, текстур и другой необходимой информации на плате видеокарты установлены чипы памяти (GDDR, GDDR2, GDDR3, GDDR4), соединённые с графическим процессором специальной шиной, ширина которой определяется в битах: 64, 128, 256, 320, 384, 512. Эффективные частоты могут достигать: 1000 МГц для GDDR и GDDR2, на картах с GDDR3 - 2200 МГц, а GDDR4 – более 2 ГГц.
DAC (Digital to Analog Converter)
Цифроаналоговый преобразователь, он же DAC (Digital to Analog Converter). Ранее используемый в качестве отдельной микросхемы, DAC зачастую встраивается в графический процессор новых наборов микросхем.
RAMDAC
Цифроаналоговый преобразователь видеокарты с собственной памятью с произвольным доступом (обычно называемый RAMDAC) преобразует генерируемые компьютером цифровые изображения в аналоговые сигналы, которые может отображать монитор.
Разъём Dual - Link DVI - I
Современные ускорители обычно снабжены самыми современными видеовыходами, в том числе двумя интерфейсами Dual-Link DVI, поддерживающими вывод на два монитора с разрешением 2560х1600.
Присутствие двух разъёмов Dual-Link DVI, что позволяет работать с плоскопанельными дисплеями больших форматов с разрешением до 2560 x 1600 пикселей;
BIOS видеокарты
BIOS видеокарты (подобно системной BIOS персонального компьютера, хранится в микросхеме ROM) содержит основные команды (программы), которые предоставляют интерфейс между оборудованием видеоадаптера и программным обеспечением, информацию о видеоадаптере, экранные шрифты и т. д. Программа, которая обращается к функциям BIOS видеокарты, может быть автономным приложением, операционной системой или системной BIOS. Обращение к функциям BIOS позволяет вывести информацию о мониторе во время выполнения процедуры POST и начать загрузку системы до начала загрузки с диска любых других программных драйверов.
Видеодрайвер
Программный драйвер является одним из важнейших элементов видеосистемы, с его помощью осуществляется связь программного обеспечения с видеокартой. Видеодрайверы используются для поддержки процессора видеоадаптера. Несмотря на то, что видеокарты поставляются изготовителем вместе с драйверами, иногда используются драйверы, поставляемые вместе с набором микросхем системной логики. Желательноиспользовать драйверы, поставляемые производителем адаптера. Программные драйверы разрабатываются для взаимодействия непосредственно с API, а не с операционной системой и программным обеспечением (API - OpenGL и Direct 3D).
Fillrate.
Fillrate - это величина, которая указывает на скорость закраски треугольников. По большому счету это основной фактор, сдерживающий быстродействие 3D ускорителей. Fillrate указывается в двух видах - мегапикселей/секунду (MPix/s) и мегатекселей/секунду (MTexels/s, где тексель - это элемент текстуры, т.е. определенный пиксель в текстуре). Вывод здесь напрашивается один: чем больше эти два показателя, тем быстрее будет работать видеокарта.
Как это работает
Первая переделанная видеокарта оказалась рабочей, и спустя некоторое время работы с паяльником мы получили Radeon 9700 за намного меньшие деньги. Повезло, хороший экземпляр попался. Однако, давайте не будем забывать, что далеко не все чипы вот так с ходу согласятся работать в полно-конвейерном режиме, ведь существует и большое количествочипов, отбракованных именно по этому критерию. Да и перепайка резистора – вещь своеобразная, надо и с паяльником «дружить», и руки иметь не трясущиеся, да и, опять-таки, не факт ведь, что плата нормально заработает!
Надо искать альтернативные варианты, чем наши энтузиасты и занялись. Но для того, чтобы искать варианты реализации чего-то, надо сначала понимать, а что именно мы хотим реализовать и что для этого надо сделать. В первую очередь, надо понимать, каким образом система определяет и задействует нужное количество конвейеров. Есть, конечно же, BIOS, однако решающую роль он не сыграет, и даже если мы прошьем BIOS от Radeon 9700 в обычную 9500, это ровным счёётом ничего не изменит. Карта как определялась «Radeon 9500», так и будет определяться, вне зависимости от того, какая прошивка будет у неё во Flash-памяти.
Проблема решается иным образом – у каждой видеокарты, да и не только видеокарты, а у любого компьютерного устройства вообще, имеется свой уникальный идентификатор, по которому система это устройство определяет и выбирает для него соответствующий драйвер. Драйверы под все видеокарты ATI/NVIDIA уже давно стали унифицированными, т.е. один и тот же драйвер используется для всей огромной линейки видеокарт данного производителя. И здесь идентификатор устройства играет огромную роль – только имея это число, драйвер сможет понять, что за видеокарта установлена и как с ней надо работать. Вот тут-то мы и подходим к самому интересному.
Что нам давала перепайка резистора на подложке чипа? Немного углубляемся в вопросе и выясняем, что как раз этот резистор отвечал за Device ID карточки и выставлял нужный идентификатор, соответствующий Radeon 9500 или 9700 в зависимости от своего положения. И как раз здесь мы приходим к интересной мысли – если вся операция сводится к обману драйвера и форсированию «чужого» Device ID, то почему бы не попытаться сделать это программно, не касаясь великомученика-резистора?
Однако переходим в наше время
Всё это, конечно, хорошо, если бы не было так поздно – заметит читатель, ознакомившись с вышеизложенным текстом. И совершенно верно, надо сказать, заметит! Radeon 9500/9700 уже морально и технологически устарели, и больше подходят для пребывания на бездонных прилавках магазинов, торгующих б/у комплектующими, нежели для установки в машины пользователей. С этим не поспоришь. С момента появления первых Radeon 9700 прошло уже достаточно много лет, однако принципы остались всё теми же прежними, и переделка новых GeForce 6800, как мы расскажем вам чуть ниже, происходит примерно тем же образом, что и раньше, с той лишь разницей, что патчим мы не драйвер, а саму прошивку BIOS.
Однако для того, чтобы лучше понимать, что и во что переделывается, давайте начнём с «разбора полётов», а именно, что переделывается, как, и что получается в итоге. Начнём с калифорнийской линейки GeForce 6800 AGP, построенной на базе чипа NV40 и представленной сейчас на рынке в виде следующих вариаций:
• GeForce 6800Ultra – 16 пиксельных конвейеров, частоты 450/1100 МГц;
• GeForce 6800GT – 16 пиксельных конвейеров, частоты 350/1000 МГц;
• GeForce 6800 – 12 пиксельных конвейеров, частоты 325/700 МГц;
• GeForce 6800LE – 8 пиксельных конвейеров, частоты плавающие МГц.
Как видите, младшая модель отличается от старшей как минимум вдвое меньшим количеством пиксельных конвейеров, в то время как средняя, или даже корректнее назвать её базовой, обделена лишь четырьмя пиксельными конвейерами. Такой существенный разброс можно легко обусловить проблемами с технологическим процессом и, соответственно, малым процентом выпуска абсолютно годных чипов, которые пошли бы на GeForce 6800 Ultra. Таким образом, две старшие модели, 6800Ultra и 6800GT, ни во что не переделываются, их мы можем считать полноценными и трогать не будем.
Переделочный интерес для нас представляют модели GeForce 6800, с надеждой на включение всех 16-и конвейеров и получения чего-то отдалённо похожего на GeForce 6800GT (точный аналог мы не получим из-за более медленной памяти DDR у GeForce 6800 против более быстрой GDDR-3 у 6800GT) и тёмная лошадка GeForce 6800LE. С последними дело обстоит вообще странно – ни о каком на 100% рабочем NV40 там, разумеется, и речи идти не может, так как вряд ли кто-то станет ставить и без того дефицитный чип на бюджетную модель, так что максимум, на что мы можем рассчитывать – так это на переделку GeForce 6800LE в обычный GeForce 6800 путём активации дополнительных четырёх конвейеров.
У канадцев ситуация обстоит примерно таким же образом – дабы держать свою продукцию на уровне калифорнийских конкурентов. После анонса базовых моделей Radeon X800Pro и Radeon X800XT, как мы знаем, последовали дополнительные модели типа X800XL, а главное, совсем уж обрезанного и перерезанного Radeon X800LE. В итоге получается точно такая же линейка, как и у NVIDIA, за исключением последней вышедшей Radeon X850, держащейся как бы особняком:
• Radeon X800XT – 16 пиксельных конвейеров, частоты 500/1000 МГц;
• Radeon X800XL – 16 пиксельных конвейеров, частоты 400/1000 МГц;
• Radeon X800Pro – 12 пиксельных конвейеров, частоты 475/900 МГц;
• Radeon X800SE – 8 пиксельных конвейеров, частоты 425/800 МГц.
Таким образом, помимо неинтересных в плане переделки X800XT и X800XL, мы имеем две младшие модели X800Pro и X800LE, построенные на базе чипа R420 и имеющие по 12/8 пиксельных конвейеров соответственно. Вот мы и разобрались с тем, какие карты можно переделать и во что, однако же, для полной ясности и наглядности, распишем возможные варианты:
• GeForce 6800LE 8PP - > GeForce 6800 12PP (+4 PP)
• GeForce 6800LE 8PP - > GeForce 6800 16PP аналог GT (+8PP) *
• GeForce 6800 12PP - > GeForce 6800 16PP аналог GT (+4PP)
У канадцев всё то же самое:
• Radeon X800SE 8PP - > Radeon X800 12PP (+4PP)
• Radeon X800SE 8PP - > Radeon X800 16PP (+8PP) *
• Radeon X800Pro 12PP - > Radeon X800 16PP (+4PP)
Введение и немного истории
Я думаю, рассказывать о том, что такое пиксельные и вершинные конвейеры в чипах современных графических ускорителей, уже не надо – большей части нашей аудитории эти понятия хорошо знакомы. Также не будем говорить и о том, что количество оных прямо влияет на производительность графического чипа в целом. Остановимся мы на другом вопросе – каким же образом некоторым людям на некоторых платах удаётся активировать «дополнительные», ранее незадействованные конвейеры, из-за чего они вообще присутствуют в чипах, и, наконец, каким же образом можно, заплатив меньше денег, получить больше производительности.
Дабы лучше понимать суть дальнейшего изложения, давайте немного углубимся в историю – вспомним, когда же впервые люди узнали о существовании незадействованных пиксельных конвейеров, возможности и пути их активации? А произошло это в далёком 2001 году, когда в нашей стране появились первые видеокарты на базе тогдашнего флагманского чипа от ATI – R300. Видеокарты делились изначально на две базовые модели:
• Radeon 9700 – полноценное решение, имевшее 8 пиксельных конвейеров и ширину шины памяти 256-бит.
• Radeon 9500 – фактически тот же самый Radeon 9700, построенный на базе той же самой PCB с 256-битной шиной памяти, однако меньшими по сравнению с Radeon 9700 частотами и, что самое главное, вдвое меньшим количеством пиксельных конвейеров.
И всё бы ничего, если б не один интереснейший момент – обе модели были построены на базе одного и того же чипа, то есть графические процессоры и платы с различным количеством конвейеров были идентичными и представляли собой тот самый знаменитый R300. Ларчик, как вскоре выяснили дотошные экспериментаторы, открывался довольно просто – на подложке чипа находились резисторы, и расположение одного из резисторов отличалось в зависимости от модели платы. Казалось бы – достаточно лишь перепаять тот самый резистор, и младшая модификация R300 моментально заиграет недостающими конвейерами, но не всё оказалось так просто и безоблачно. А начинать надо с того, каким же образом полноценные чипы попадали и попадают на сокращённые версии видеокарт.
Отбраковка и дефицит: когда цель оправдывает средства
Казалось бы, всё элементарно – производитель изготавливает массу совершенно одинаковых графических процессоров, имеющих физически на месте все пиксельные конвейеры. Далее, после того, как ещё свежие пластины разрезаны и на мощностях производителя имеется партия готовых чипов, начинается их предварительное тестирование и отбраковка.
Чипы тестируются в различных условиях – на различных частотах и режимах работы конвейеров. Вариант номер один – берем R300, который в своей флагманской вариации имеет 8 пиксельных конвейеров и рабочую тактовую частоту 325 МГц. Производим тестирование на 8 конвейерах и пониженной частоте. Если никаких сбоев не обнаруживается, повышаем частоту до номинальных 325 МГц. Если чип успешно проходит все тесты, то он отмечается как полноценный Radeon 9700 Pro и откладывается в соответствующую партию.
Вариант номер два – чип проходит тестирование со всеми включенными конвейерами, однако не может стабильно работать на флагманской частоте. В таком случае частота сбавляется до отметки несколько меньшей, и тестирование проводится уже на пониженной частоте. Если тестирование проходит успешно, то такой наполовину отбракованный чип отмечается как Radeon 9700 и также откладывается в соответствующую партию.
А вот что делать, если чип оказался инвалидом с парочкой выбитых конвейеров? Канадская компания ATI слишком рациональна, чтобы просто отбраковывать и выбрасывать такие чипы. Производится несложный тест – отключается ровно половина пиксельных конвейеров, и проводится тестирование такого, уже обрезанного по характеристикам чипа. Не проходит – значит, совсем плох, можно выкинуть на свалку или повестить на стене в рамочке с подписью «667-й блин комом». А вот если чип отлично работает с половиной отключенных конвейеров – тогда уже другое дело, можно пойти по принципу безотходного производства и сделать из него младшую модель, в данном случае, если мы говорим о чипах R300, то это Radeon 9500.
И получилось у канадской компании ATI всё совсем уж идеально – продавались и полноценные Radeon 9700, и неплохие Radeon 9500. Однако спрос, как гласит старый рыночный закон, рождает предложение, и, разумеется, недорогие Radeon 9500 пользовались куда большей популярностью, нежели хай-эндовые Radeon 9700.
Вот здесь и возникает главная загвоздка – людям нужно куда больше недорогих Radeon 9500, которые пользуются просто бешеной популярностью в своем секторе. А технологический процесс-то на месте не стоит и постоянно отлаживается, а вместе с ним возрастает и процент выпуска годных чипов. Что же получается? Полноценных чипов выходит всё больше, а отбракованных по нерабочим конвейерам – всё меньше.
Что делать? Спрос на Radeon 9500 колоссален, отбракованных чипов выходит хотя и много, но всё же далеко не достаточно для полного заполнения ими Radeon 9500. Остаются два варианта – либо разработать новый чип с изначально отсутствующими «лишними» конвейерами, либо ставить на платы Radeon 9500 совершенно рабочие чипы и принудительно отключать в них конвейеры. Разработка нового чипа – вариант хороший, однако больно уж дорогой – придется перерабатывать сам чип, а вместе с ним и новую разводку PCB плат, что невыгодно. Себестоимость чипов вполне позволяла ATI прибегнуть к первому варианту и комплектовать младшие модели годными и хорошими чипами.
Продажи шли хорошо, владельцы Radeon 9500 до поры до времени довольствовались тем, что имеют, канадцы получали хорошие деньги и уже практически полностью вышли из сложившегося несколько лет назад кризиса. Но не будем забывать ещё о двух группах – энтузиастах и экспертах-исследователях. Так бы всё и продолжилось, если б не они, эти вредные российские спецы. :-)
Читайте также: