Свершилось! Архитектура Radeon HD 2000 – достойный ответ конкуренту
Больше полугода мы с нетерпением ждали появления видеокарт нового поколения от корпорации ATI/AMD. За это время мы рассмотрели и протестировали большое количество новейших видеокарт от конкурента – NVIDIA Corporation, и каждый раз нам приходилось оговариваться, что тестирование GeForce 8 в сравнении с видеокартами предыдущего поколения некорректно. Это связано и с тем, что видеокарты создавались с особым уклоном под обработку графики, написанной на DirectX 10, и с тем, что унифицированные шейдерные архитектуры намного лучше справляются с обработкой современной графики, насыщенной шейдерной, то есть математической, обработкой. И вот наконец 14 мая ATI официально представляет новое поколение видеокарт под названием Radeon HD 2000. Теперь мы сможем перестать сравнивать тёплое с мягким, наконец у нас есть видеокарты, выступающие в «одной лиге».
Как видим, так же, как в своё время NVIDIA поступила с префиксом FX, ATI избавляется от префикса X в названиях видеокарт. Вместо него появляются буквы HD. Ход абсолютно логичный: архитектура ядер R6xx абсолютно не похожа на предыдущие поколения и никоим образом не является их эволюционным развитием. Буквы HD символизируют основное направление развития всей индустрии компьютерной (да и не только) графики: разрешения растут, и требуется приемлемая производительность на невообразимых ранее диагоналях мониторов. На способностях Radeon HD 2000 по обработке графики высокого разрешения мы остановимся отдельно.
Семейство AMD Radeon HD 2000
Что же нам предлагает ATI в новой линейке продукции?
Модель видеокарты | Radeon HD 2400 | Radeon HD 2600 | Radeon HD 2900 |
Количество SP | 40 | 120 | 320 |
Частота ядра | 525-700 МГц | 600-800 МГц | 740 МГц |
Мат. производительность | 42-56 GigaFLOPs | 144-192 GigaFLOPs | 475 GigaFLOPs |
Скорость пиксельной обработки | 4,2-5,6 млрд пикселей/с | 14,4-19,2 млрд пикселей/с | 47,5 млрд пикселей/с |
Скорость обработки полигонов | 262-350 млн/c | 600-800 млн/с | 740 млн/с |
Текстурных блоков | 4 | 8 | 16 |
Блоков рендеринга | 4 | 4 | 16 |
Энергопотребление | ~25 Вт | ~45 Вт | ~215 Вт |
Объем памяти | 256 МБ GDDR3, 128/256 МБ DDR2 | 256 МБ GDDR4, 256 МБ GDDR3, 256 МБ DDR2 | 512 МБ GDDR3 |
Шина памяти | 64 бит | 128 бит | 512 бит |
Частота памяти | 400-800 МГц | 400-1100 МГц | 825 МГц |
Пропускная способность памяти | 6.4-12.8 Гбайт\с | 12.8-35.2 Гбайт\с | 106 Гбайт\с |
Кол-во транзисторов | 180 миллионов | 390 миллионов | 700 миллионов |
Техпроцесс | TSMC 65G+ | TSMC 65G+ | TSMC 80HS |
Разъёмы вывода | D-Sub+Dual Link DVI+Video-Out (HDMI адаптер) | 2x Dual-Link DVI+Video-Out (HDMI адаптер) | 2xDual Link DVI+Video-Out (HDMI адаптер, HDCP) |
В рамках линейки, как видим, будет довольно большое количество модификаций видеокарт, имеющих разные частоты и оборудованных разными типами памяти. Уже сейчас можно выделить как возможного фаворита Radeon HD 2600XT c высокочастотной памятью GDDR3. Нам кажется несколько неоправданным создание модификации с памятью GDDR4, которая стоит заметно выше предыдущего поколения, греется и потребляет больше энергии, а в условиях 128-битной шины памяти вряд ли раскроет свой потенциал. Впрочем, для того чтобы говорить с уверенностью, нужно сначала увидеть видеокарты в работе.
Отметим, что, к сожалению, AMD не удалось сдержать обещания и выпустить на рынок сразу целую линейку видеокарт нового поколения, покрыв все сегменты рынка: 14 мая выходит только Radeon HD 2900XT, а продукты среднего и нижнего ценового диапазонов появятся в продаже в конце июня. Также чуть позже выйдет самая производительная видеокарта новой линейки – Radeon HD 2900XTX, оборудованная 1 Гбайт памяти GDDR4 и способная работать на более высоких частотах.
Архитектура Radeon HD 2000
Итак, приступим к рассмотрению архитектуры. Сразу оговоримся, что рассматривать мы будем старшую версию ядра, так как младшие не имеют принципиальных различий, кроме уменьшенного числа функциональных блоков.
Архитектура Radeon HD 2000 очень заметно оптимизирована под новое поколение API DirectX. В прошлых поколениях архитектур проектировщикам приходилось искать оптимальное соотношение пиксельных процессоров, выполняющих работу сугубо графического характера, и вершинных, фактически занимающихся математическими вычислениями с плавающей точкой. Это было связано с тем, что раньше весь массив данных проходил по традиционному конвейеру от начала до конца, и при необходимости изменения или повторной обработки приходилось заново всё просчитывать. Теперь можно в любой момент выгрузить данные в память, снова их считать, не дожидаясь конца конвейера, и произвести новые расчёты.
Если проследить эволюцию «соотношений сил» между пиксельными и вершинными конвейерами, то можно заметить, как с течением времени ATI всё больше ориентировалась на математическую работу, то есть вершинные шейдеры. Не зря скорость их обработки была коньком архитектур R4x и R5x. Теперь же с унифицированной шейдерной архитектурой, заложенной в требованиях DirectX 10, не нужно ломать голову над поиском оптимального соотношения, скорость обработки вершин в любой момент может быть повышена за счёт простаивающих пиксельных конвейеров, и наоборот.
Семейство Radeon HD 2900 основано на графическом процессоре, разработанном ATI для консоли нового поколения Xbox 360, которое называется Xenos. Как и конкурирующая архитектура G80 от NVIDIA, R600 является суперскалярной архитектурой, ориентированной на параллельное исполнение нескольких потоков данных и в первую очередь математические вычисления. Инженеры использовали почти все выигрышные особенности консольного процессора и развили их. Из сокращений можно отметить разве что отсутствие памяти eDRAM, использовавшейся в Xenos в качестве высокоскоростного кэша.
Рассмотрим ядро в порядке прохождения данных по конвейеру. В самом начале обработки в дело вступает командный интерпретатор (Command processor). Он распоряжается загрузкой данных в память, исполняет часть микрокода. В результате оптимизаций AMD заявляет, что нагрузка на процессор, связанная с этими операциями, снижена на 30%.
Далее Setup Engine, состоящий из вершинного и геометрического ассемблеров и интерполятора, готовит данные для обработки потоковыми процессорами. Он может исполнять три вида функций: сборку вершин (vertex assembly) и тесселяцию, геометрическую обработку (для нововведения DirectX 10 – Geometry Shaders) и выборку и интерполяцию для пиксельных шейдеров. Затем данные передаются диспетчеру.
На диспетчере следует остановиться отдельно. ATI называет его Ultra-Threaded Dispatch Processor. Он поддерживает раздельные очереди команд для каждого типа шейдеров. Инструкции и данные поступают в диспетчер и распределяются по очередям. Затем данные из очередей передаются на арбитраж. На каждый SIMD-массив приходится по два арбитра, что даёт возможность обрабатывать по 2 потока данных на массив, то есть до 8 потоков одновременно. Для текстур и вершин – свои арбитры. В зависимости от инструкций данные направляются либо на обработку потоковыми процессорами, либо на текстурную выборку и другие текстурные операции в текстурные блоки. В любой момент при возникновении в конвейере данных, имеющих более высокий приоритет, диспетчер может сбросить даже не до конца обработанные данные в кэш и пустить приоритетные данные на обработку. После этого данные, отправленные ранее в кэш, могут быть снова загружены, и обработка продолжится с того места, где остановилась. Это обеспечивается возможностью потоковой обработки данных, предусмотренной DirectX 10, о которой мы уже говорили в статье про GeForce 8800.
Для вершинных и пиксельных шейдеров предусмотрены собственные кэши, геометрические шейдеры используют кэш вершинных. При этом объём вершинного кэша увеличен в 8 раз по сравнению с архитектурой Radeon X1950. Наличие кэша инструкций позволяет исполнять шейдеры неограниченной длины с неограниченным числом констант.
Диспетчер следит за тем, чтобы исполняющие блоки не простаивали, и при возникновении ситуации, когда обрабатываемые в конвейере данные нуждаются в выборке из памяти или ожидают результатов обработки в другом конвейере, возвращает эти данные в текущем состоянии в очередь и запускает следующие из очереди в обработку. После выполнения условий, необходимых для продолжения обработки, она возобновляется с места остановки.
Теперь посмотрим на «лошадиные силы», которыми как раз и выделяется R600.
Ядро содержит 320 так называемых «единиц потокового вычисления» (stream processing units). Фактически процессоров в ядре 64, а не 320, они сгруппированы по 16 в 4 SIMD-массива (SIMD – Single Instruction on Multiple Data). Такое решение позволяет с большой скоростью проводить однотипные вычисления над большим количеством примитивов, что, собственно, мы и наблюдаем в современной графике (постобработка, шейдеры освещения, тени и т.п.). Каждый процессор способен выполнять 5 инструкций, при этом 4 из них – MUL/ADD (Multiply-Add), и ещё одну сложную трансцендентную инструкцию (SIN, COS, LOG и т.п.). Все инструкции с плавающей точкой выполняются с 32-битной точностью. В составе каждого процессора имеется блок исполнения ветвлений, управляющий выборкой данных и отсылкой их на исполнение, что уменьшает простой конвейеров и упрощает работу диспетчера. Каждый процессор оборудован регистром общего назначения, хранящим исходные данные, временные значения обработки и выходные значения после обработки. Процессоры спроектированы под VLIW-архитектуру (Very Large Instruction Word), каждое слово инструкции может содержать до 6 независимых операций, 5 из них математических и 1 управляющая (Flow Control).
Вычислительная мощь SIMD-массивов ядра составляет до 475 ГигаFLOPs по оценке AMD, причём в случае использования массива Crossfire заявляется до 950 миллиардов операций с плавающей точкой в секунду. Так что в ближайшем будущем можно ожидать превышения порога в 1 тераFLOPs на настольном компьютере. Производитель особенно гордится статистическими данными, достигнутыми благодаря как собственно архитектуре, так и технологии производства. С 1 мм2 ядра AMD получает более 1 гигаFLOPs, который стоит менее 1 доллара, а за 1 Вт энергопотребления – более 3,4 ГигаFLOPs. Производительность оценивалась по обработке 32-битным операциям MUL/ADD с плавающей точкой. Для сравнения: производительность двухъядерного Xeon в подобных вычислениях на частоте 3 ГГц составляет около 50 гигаFLOPs.
Математическая мощь HD 2000 при правильном применении поражает. Уже довольно долгое время программа распределённых вычислений Folding@Home Кембриджского университета поддерживает архитектуру Radeon X1000, и скорость обработки пакетов заданий силами графических процессоров в разы превышает скорость работы центрального процессора. А ведь у Radeon X1950XTX, бывшего короля графики ATI, всего 48 пиксельных конвейеров, способных обрабатывать по 16 текселей за такт, и 8 вершинных конвейеров. Radeon HD 2900 с точки зрения обработки содержит 320 вычислительных блоков, разделенных на 4 группы, которые в идеале способны проводить до 320 вычислений одновременно. Можете себе представить силу ядра в обработке математики – как научных приложений, так и шейдеров, в первую очередь вершинных и геометрических.
Однако вернёмся к архитектуре и взглянем на текстурные блоки. Radeon HD 2900 оборудован четырьмя такими блоками. Каждый из них содержит 8 процессоров, осуществляющих адресацию текстур, 20 текстурных семплеров, осуществляющих по 1 выборке текстуры за такт, 4 блока фильтрации FP-текстур. В результате Radeon HD 2900 способен за 1 такт адресовать 32 текселя, осуществить выборку 80 значений текстурных координат и билинейную фильтрацию одного 64-битного значения цветовых координат (64-битный HDR). Билинейная фильтрация 128-битных текстур осуществляется за 2 такта. Это в 7 раз быстрее, чем у Radeon X1000. Для текстурных блоков сохранена способность архитектуры X1000, называемая Fetch4: возможность выборки 4 не фильтрованных значений вместо 1 фильтрованного.
Текстурные блоки разделяют 256 кбайт кэша второго уровня, при этом без ограничений могут получать доступ к кэшу 1 уровня и вершинному кэшу.
ATI вводит новый формат данных для 32-битных HDR – RGBE 9:9:9:5. Поддерживается хранение и использование текстур сверхвысокого разрешения – 8192x8192.
Отдельно следует остановиться на работе ядра с вершинными данными. За один такт может быть выбрано до 16 вершин. Кроме того, ATI возвращает в ядро некогда разработанную, но позже упразднённую технологию тесселяции. На ней остановимся подробнее.
Как известно, есть несколько способов получить объект с высокой детализацией и затем управлять им. Во-первых, можно «в лоб» создать объект с огромным количеством полигонов, а затем при каждом изменении его положения перерисовывать его. Во-вторых, можно изменять его конфигурацию с помощью вершинного шейдера. В-третьих, можно использовать карту нормалей (normal map), которая будет накладываться на объект со сравнительно более низким числом полигонов и давать более высокую детализацию. Наконец, в последних версиях DirectX возможно использование карт смещения (displacement maps), представляющих собой набор координат ключевых вершин объекта, не требующих просчёта объекта с нуля.
Тесселяция представляет собой рекурсивное применение разделения крупных полигонов на более мелкие математическим путём. В итоге получается, что в памяти видеокарты хранится объект малого разрешения, а выделенный блок тесселяции разделяет его на радикально большее число ключевых координат и работает с ними с помощью карт смещения. Таким способом можно добиться качества объектов (главным образом персонажей), сравнимого с тем, что мы видим в высокобюджетных фильмах. Однако там на просчёт одного кадра уходит огромное количество процессорного времени, а в нашем случае рендеринг производится на лету. При этом тесселяция производится ещё до передачи данных на обработку вершинным шейдером, поэтому просчитанным объектом можно будет управлять по собственному разумению разработчика приложения, без нужды в отдельном инструментарии. Фактически от разработчика больше не требуется долгой и кропотливой работы над созданием высоко детализированной модели и её анимацией. Теперь можно создать модель со сравнительно малым количеством полигонов, анимировать её и создать хорошую карту смещений – всё остальное за вас сделает блок тесселяции, а после рендеринга вы получите модель, сравнимую по качеству с шедеврами, виденными в кино. Для примера посмотрите, что можно сделать из 1 тысячи полигонов:
В механизме тесселяции предусмотрена возможность задавать уровни детализации (LoD, Level of Detail) в зависимости от расстояния до объекта. Это заметно упростит работу видеокарты в современных играх при сохранении отличного качества графики.
Кроме работы с персонажами тесселяция очень здорово может помочь в работе с ландшафтом. Обратите внимание на сравнение традиционной методики и новых возможностей в следующей таблице:
Итак, после обработки SIMD-массивами и текстурными блоками ядро передаёт данные на рендеринг, то есть на сборку и вывод финальной сцены в кадровый буфер. Блоков рендеринга четыре, они, среди традиционной оценки Z-буфера и оценки данных Alpha-координат, содержат блок мультисемплинга. ATI вводит новый метод сглаживания изображения – Custom Filter Antialiasing, представляющий собой программируемый алгоритм, использующий для сглаживания не только набор субпикселей одного пикселя, но и несколько субпикселей соседних пикселей. При этом профиль можно без проблем изменить путём замены фильтра драйвером и получить лучшее качество сглаживания, устранить проблемы с «неудобными» углами и т.п. Особо стоит отметить, что алгоритм обнаруживает грани объектов и использует для их сглаживания больше семплов. Список поддерживаемых образцов – в следующей таблице.
Render Back-end теперь применяет новый метод сжатия 32-битных Z-координат и стенсилей, до 16:1 против 8:1 в прошлых поколениях чипов. При сглаживании сцены методом 8x MSAA степень сжатия может достичь 128:1. Z-буфер может оцениваться дважды, до работы пиксельного шейдера и после неё, в результате объекты, не попадающие на финальную сцену, отбрасываются. Улучшена иерархия Z-буфера, позволяющая ускорить в первую очередь скорость обработки стенсильных теней. На следующем слайде приведено соотношение производительности в обработке стенсильных теней Radeon HD 2900 и Radeon X1950 XTX.
Наконец, после всей обработки, да и на промежуточных стадиях, данные передаются в кадровый буфер, то есть в память видеокарты. И тут AMD/ATI также даёт нам повод для отдельной остановки.
Думаю, многие помнят контроллер памяти Radeon X1000. Решение инженеров ATI очень оригинально и выигрышно, кольцевой контроллер памяти позволяет уменьшить задержки на промежуточных стадиях и упростить организацию доступа к ней на физическом уровне. Однако стоит заметить, что на самом деле в Radeon X1000 контроллер памяти был не полностью кольцевым, он объединял в себе черты традиционного контроллера и кольцевого. В Radeon HD 2000 контроллер памяти полностью сделан по кольцевой схеме. 512-битная шина памяти на самом деле представляет собой как бы 4 шины по 128 бит, объединённые в общую шину. Более того, шина памяти двунаправленная, по 512 бит в каждом направлении, что даёт фактически 1024 бита разрядности. Подключение шины к ядру осуществляется в 4 местах, названных Ring Stop, с шириной двустороннего канала по 64 бита на каждое соединение. Такой дизайн в сочетании с высокоскоростной памятью дает ATI возможность достичь пропускной способности памяти более 100 ГБ/с! Преимуществом полностью кольцевой шины является то, что при проектировании новых ядер инженерам не придётся заново проектировать и контроллер памяти, достаточно организовать интеграцию существующего в новое ядро. Заметно упрощается и проектирование печатных плат и выводов чипа графического процессора, не нужно проводить дорожки в одно место, их можно вывести там, где удобно.
В конце остановимся на технологии Crossfire. ATI продолжила благое начинание, представленное в Radeon X1950Pro, и внедрила поддержку Crossfire непосредственно в ядро. Теперь не нужно искать мастер-карту, мучиться с кабелями для объединения видеокарт – Compositing Engine встроен в ядро и позволяет объединить две одинаковые карты обычным мостиком, точно как NVIDIA SLI.
Из нововведений стоит отметить новый алгоритм Alternate Frame Rendering, улучшающий скорость поочередной обработки кадров парой видеокарт. AMD заявляет, что новая версия Compositing Engine специально создавалась для будущей поддержки видеокарт с двумя GPU, что довольно интересно, так как до этого подобные видеокарты были очень редким явлением.
Вывод
Итак, как видим, с теоретической точки зрения новая графическая архитектура ATI/AMD получилась вполне удачной. Новые видеокарты абсолютно очевидно ориентированы на графические приложения ближайшего и более отдалённого будущего, в которых намного больше будет именно математических вычислений на основе шейдеров. Особенно это относится к вершинным и геометрическим шейдерам.
Также стоит очень внимательно посмотреть на инициативу ATI по внедрению тесселяции в игровую графику. Если разработчики игр её поддержат (а уже сейчас Microsoft Game Studios и Techland сообщают об активной поддержке со стороны AMD при разработке игр), то мы наконец можем надеяться на долгожданную кинематографичность графики в играх при сохранении нормальной скорости обработки. Было бы очень интересно посмотреть не только на технологические демонстрационные ролики AMD и NVIDIA, но и на реальное воплощение их технологий – хотя бы заставки в играх, созданные на их движке и рассчитывающиеся в реальном времени.
Отдельно следует остановиться на побочном применении вычислительной мощи Radeon HD 2000 – научных, медицинских и других подобных расчётах. На самом деле не использовать такие ресурсы в целях, как раз требующих именно таких мощностей, было бы кощунством. Мы постараемся в ближайшее время дополнительно акцентировать ваше внимание на возможных методах применения новых видеокарт в подобных целях, благо их совсем не мало. Пока же отметим, что на пресс-конференции в Тунисе, проведённой AMD для журналистов со всего мира, был озвучен доклад, из которого стало ясно, что за подобное применение графических процессоров взялись всерьёз: разработан инструментарий для программирования, совместимый с существующими языками программирования, осуществляется активная и всесторонняя поддержка разработчиков.
Немаловажные изменения коснулись встроенного декодера видео, причём настолько значительные, что, по нашему мнению, они достойны отдельного материала. Этим мы в ближайшее время и займёмся, оставайтесь с нами!
Читайте также «Тестирование Radeon HD 2900XT: у них получилось!»