Конфигурация «железа» тестового стенда не изменилась. Поскольку для тестирования видеокарт ряд тестов требует наличия DirectX 10, в дополнение к Windows XP мы также будем использовать Windows Vista 64 Ultimate.
Тестовый стендШина PCI-Express
CPU Intel Core 2 Duo X6800 2,93 ГГц
MB MSI 975X Platinum PowerUp Edition
Memory Corsair XMS Xpert DDRII-800 4x512Mb
OS WinXP + SP2 + DirectX 9.0c; Windows Vista 64 Ultimate + DirectX 10
PSU Thermaltake ToughPower 750 Wt
Тестирование проводилось с помощью драйверов ForceWare 158.22 и Catalyst ver. 8.37.4.
Синтетические тесты в DirectX 10
DX10 Shader Tests
Этот набор тестов демонстрирует производительность шейдерных блоков GPU при выполнении элементарных операций. Данный тест был разработан инженерами компании AMD. И хотя может возникнуть некая предубежденность типа «на их собственных тестах результаты их видеокарты конечно будут выше», исходные коды открыты, так что любой может ознакомиться с особенностями данного теста и поискать «фирменные» закладки, если они есть. Скачать полную версию теста с исходниками можно отсюда. Результаты приводятся следующим образом – сначала идет название теста, потом краткое описание от разработчика, затем диаграмма и наши комментарии. Итак, приступим.
Тест №1. "float MAD serial" - Зависимые скалярные инструкции
Комментарий разработчика:
Тест выдает пакет скалярных инструкций «сложение-умножение», которые выполняются последовательно. Это наихудший случай для суперскалярной архитектуры, поскольку из имеющихся 5 вычислительных блоков HD2900XT может использоваться только один. Код, выполняемый в этом тесте, можно условно выразить следующим образом:
x = x * x + x
x = x * x + x
. . .
Видеокарта 8800GTS демонстрирует в этом тесте невероятную производительность при исполнении пиксельных шейдеров, однако результат вертексных шейдеров оказывается в разы ниже. Результаты нового GPU от AMD занимают золотую середину и практически идентичны как для пиксельных, так и для вертексных шейдеров.
Тест №2. "float4 MAD parallel" – Векторные инструкции
Комментарий разработчика:
Тест выдает две последовательности инструкций «сложение-умножение» над четырехмерными векторами (float4). «Умный» компилятор в драйвере способен разбить 4D-векторы на составные инструкции, чтобы заполнить все 5 вычислительных слотов. Это пример одного из наилучших вариантов использования суперскалярной архитектуры и довольно характерен для цепочек инструкций, которые можно видеть во многих шейдерах. Этот пример также демонстрирует гибкость архитектуры, которая может обрабатывать не только тривиальные случаи типа 3+2 или 4+1. Код, выполняемый в этом тесте, можно условно выразить следующим образом:
xyzw1 = xyzw1 * xyzw1 + xyzw1
xyzw2 = xyzw2 * xyzw2 + xyzw2
xyzw1 = xyzw1 * xyzw1 + xyzw1
. . .
В этом тесте с завидным преимуществом лидирует HD2900XT. Что интересно, в этот раз небольшая разница в скорости исполнения пиксельных и вертексных шейдеров присутствует и у HD2900XT, но у 8800GTS эта разница достигает практически двукратного размера.
Тест №3. "float SQRT serial" – Специальная функция
Комментарий разработчика:
Этот тест использует 5-й специальный вычислительный слот, который наряду со стандартными операциями «сложение-умножение» и т.д. способен выполнять трансцендентные операции. Код, выполняемый в этом тесте, использует операцию извлечения квадратного корня:
x = sqrt(x)
x = sqrt(x)
. . .
По всей видимости, преимущество HD2900XT в этом тесте обусловлено наличием того самого специального блока, который оказывается вовсе не «пятым колесом», а эффективным средством выполнения трансцендентных операций.
Тест №4. "float 5-instruction issue" - Независимые скалярные инструкции
Комментарий разработчика:
Этот тест использует 5 типов скалярных инструкций (умножение, сложение, минимум, максимум, извлечение квадратного корня), каждая из которых использует свой операнд, а все вместе они скомпонованы в одну супер-скалярную инструкцию. Это представляет типичный случай объединения инструкций компилятором драйвера с максимальной эффективностью.
По всей видимости, преимущество HD2900XT в этом тесте обусловлено наличием того самого специального блока, который оказывается вовсе не «пятым колесом», а эффективным средством выполнения трансцендентных операций.
Тест №4. "float 5-instruction issue" - Независимые скалярные инструкции
Комментарий разработчика:
Этот тест использует 5 типов скалярных инструкций (умножение, сложение, минимум, максимум, извлечение квадратного корня), каждая из которых использует свой операнд, а все вместе они скомпонованы в одну супер-скалярную инструкцию. Это представляет типичный случай объединения инструкций компилятором драйвера с максимальной эффективностью.
Комментарии излишни. Подавляющее преимущество Radeon HD2900XT.
Тест №5. "int MAD serial" – зависимые DX10 скалярные инструкции
Комментарий разработчика:
Тест аналогичен тесту №1, но вместо инструкций с плавающей точкой используются целочисленные.
Тест №6. "int4 MAD parallel" – DX10 целочисленные векторные инструкции
Комментарий разработчика:
Тест аналогичен тесту №2, но вместо инструкций с плавающей точкой используются целочисленные.
Итоговая диаграмма тестов DX10 Shader tests
Для полноты картины мы свели результаты всех тестов в одну диаграмму. Видно, что из всех тестов 8800GTS оказывается впереди только при выполнении пиксельного шейдера с последовательными инструкциями типа «float MAD». Но на этой диаграмме можно отметить куда более интересный момент. Смотрите, в каждом тесте HD2900XT эффективно выполняет как пиксельные, так и вертексные шейдеры, причем с очень близкой производительностью. Что это означает? Это говорит о том, что мы имеем дело с действительно унифицированной шейдерной архитектурой, которая с равной эффективностью выполняет шейдер любого типа, будь он пиксельный или вертексный.
N-Patches
Помимо эффективного выполнения пиксельных и вертексных шейдеров, архитектура Radeon HD2900XT способна весьма эффективно работать с «геометрией» объекта. Встроенный в GPU блок аппаратной тесселяции позволяет «на лету» преобразовывать грубую угловатую малополигональную модель во вполне приличный «гладкий» объект. Давайте посмотрим, как это получается.
В данном тесте вычислительная задача для GPU состоит в рендеринге большого количества человечков, представляющих собой довольно грубые модели. На скриншоте ниже показано, как это выглядит в действительности.
Модели действительно «угловаты» и примитивны. Чтобы было понятнее, почему так получается, приведем скриншот в режиме wire-frame.
Что будет, если применить к таким объектам метод тесселяции? С повышением уровня количество полигонов в объекте возрастает как квадрат от значения уровня тесселяции. Но одного увеличения количества полигонов в объекте мало. Допустим, у нас был исходный треугольник, и мы разбили его на несколько меньших, все они окажутся по-прежнему в одной плоскости, и «угловатость» никуда не исчезнет, если не сделать следующий шаг. Далее, надо сместить вершины новых полигонов так, чтобы объект приобрел более сглаженную форму. Есть разные способы таких преобразований, например по методу Безье, кубическими сплайнами, с помощью N-Patches и т.д. Сейчас мы рассмотрим метод N-Patches. Опуская промежуточные шаги, сразу приведем скриншот с уровнем тесселяции «8», который максимально возможен для этого теста (аппаратно GPU HD2900XT поддерживает уровень тесселяции вплоть до 15).
Смотрите, как преобразились модели! Вместо несуразных угловатых кубиков мы получили очень приличные сглаженные фигурки.
А вот так это выглядит в привычном нам виде. Прелесть данной технологии в том, что разработчики могут оперировать довольно простыми моделями, экономя время и ресурсы, а видеопроцессор с блоком аппаратной тесселяции «на лету» преобразует объекты в красивую картинку. Если раньше это было как в детском стишке - «палка, палка, огуречик, вот и вышел человечек», то с помощью Radeon HD2900XT при том же «алгоритме» без труда получаем Памелу Андерсен.
На этой диаграмме показано изменение производительности, измеряемое в FPS, при увеличении уровня тесселяции. Как видите, при отсутствии тесселяции видеокарта 8800GTS прекрасно справляется с этим несложным заданием и заметно опережает HD2900XT, однако даже самый минимальный уровень тесселяции кардинально меняет расстановку сил. Производительность 8800GTS драматически падает, в то время как производительность HD2900XT падает всего лишь на 25%. Оно и понятно, у него же имеется блок аппаратной тесселяции. Дальнейшее повышение уровня тесселяции приводит к плавному снижению FPS у Radeon HD2900XT, но даже в самом «тяжелом» случае значение FPS не опускается ниже 200. Прекрасный результат.
Все, что мы пока видели, это тесты, предоставленные компанией AMD. Неудивительно, что видеокарта HD2900XT в них выглядит весьма впечатляюще. Теперь давайте попробуем испытать видеокарты в тестах, которые не являются порождением какого-либо производителя видеокарт.