Тестовый стенд
Конфигурация «железа» тестового стенда не изменилась.
Поскольку для тестирования видеокарт ряд тестов требует
наличия 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 типов скалярных инструкций (умножение, сложение,
минимум, максимум, извлечение квадратного корня), каждая из
которых использует свой операнд, а все вместе они скомпонованы
в одну супер-скалярную инструкцию. Это представляет типичный
случай объединения инструкций компилятором драйвера с
максимальной эффективностью.
Комментарии излишни. Подавляющее преимущество 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 в них
выглядит весьма впечатляюще. Теперь давайте попробуем испытать
видеокарты в тестах, которые не являются порождением
какого-либо производителя видеокарт.