Материал опубликован - 05/03/2001
Битва за 3D-олимп: 3DNow! vs FPU
Является ли технология 3DNow! лучшим решением для игр, чем конвейерный сопроцессор?
Если так, то почему AMD K6-2 300 не намного опережает Pentium II 300? Найдет
ли 3DNow! поддержку у разработчиков программного обеспечения или умрет? А может
это шаг в будущее? Я попытаюсь дать ответы на эти вопросы в данной статье.
Intel выиграла первый раунд в битве за 3D-олимп. Их сопроцессор оказался мощнее.
Теперь AMD контратакует с технологией 3DNow! предназначенной для замены сопроцессора
в тяжелых 3D - приложениях. Первые же испытания показали превосходство 300-мегагерцового
AMD K6-2 над Pentium II-400 Покупатели Pentium II - 400 оказались в шоке: они
переплачивали в три раза за аналогичное быстродействие. Однако позже стало ясно,
что только одна игра, Quake II, дает такое превосходство. В остальных играх
К6-2 300 находился на уровне Pentium II 300 - 333. Pentium II -400 оставался
вне конкуренции.
3DNow! уже присутствует на рынке около года. За это время в его адрес прозвучало
много восторгов и критики. Однако, эта технология была признана лучшей в 1998
году. 3DNow! не имеет большого преимущества над конвейерным сопроцессором в
сегодняшних играх из-за слабой поддержки.Даже самые современные 3D-игры используют
3DNow! в очень малой степени. Не стоит забывать, что не всем играм требуются
интенсивные вычисления. Стратегии очень мало зависят от сопроцессора. Теперь
понятно, почему 1200MFPS K6-2 300 не опережает 400MFPS Pentium II 400 и даже
300MFPS Pentium II 300? Из-за отсутствия оптимизации в программах!
Как можно говорить об оптимизации игры под 3DNow! если она изначально оптимизирована
под Intel FPU? Некоторые утверждают, что Quake не корректно использовать для
сравнения, т.к. он оптимизирован для 3DNow! Это не так! Он оптимизирован одновременно
для AMD и Intel. И он к сожалению является исключением.
3D-игры в основном состоят из двух частей:
- Логика игры. Она описыват законы игрового мира, такие как гравитация, тени,
освещение, попадание пуль, взрывы. Это требует интенсивных вычислений.
- Внешний интерфейс. Отображает результаты приведенных выше расчетов визуально.
Это происходит с использованием API, таких как DirectX, OpenGL или Glide.
Мы можем увидеть, что в Quake II сильно оптимизированы именно графические API
и практически нет оптимизации в логике игры. В то время, как обе части прекрасно
оптимизированы под конвейерные сопроцессоры! Фактически только геометрические
вычисления отлично оптимизированы для 3DNow! и конвейерного сопроцессора. В
самой логике игры присутствует оптимизация только для сопроцессора. Значит К6-2,
работающий в 4 раза быстрее обречен на жалкое существование? Нет! Если в лучшей
оптимизированной игре - Quake II, оптимизация присутствует только в API и результаты
просто превосходные, представьте себе какими будут результаты в полностью оптимизированной
игре!
Теперь рассмотрим работу 3DNow! в графических API. Нынешние игры просто не
позволяют раскрыть потенциал этой технологии. Если вы не согласны, то запустите
вашу самую любимую игру. Вы заметите, что ваши враги выглядят угловатыми и нереальными.
Это происходит потому, что для их отображения используется очень маленькое количество
полигонов. В играх следующего поколения этот недостаток будет исправлен и вы
увидете гладкие, реалистичные тела и лица противников. Большее количество полигонов
подразумевает увеличение однообразных вычислений над большими массивами данных.
А это является идеальным случаем для архитектуры SIMD, на которой построен блок
3DNow! В этом случае блок 3DNow! будет нуждаться в большом количестве кеша для
своевременного получения данных, иначе преимущество будет не так велико. Блок
FPU наоборот не будет успевать обрабатывать данные и размер кеша не будет иметь
значения. Это приводит к выводу, что К6-3 с трехуровневой схемой кеша, будет
генерировать просто феноменальное количество полигонов и долго будет вне конкуренции.
Реализация AGP тоже оказывает влияние на производительность в играх. AGP -
детище Intel и поэтому именно ее реализация на сегодняшний день является лучшей.
Чипсеты от VIA и ALI как для Super7, так и для P II уступают интеловским. Это
создает проблемы с новыми видеокартами и ограничивает скорость видеосистем.
НО! Это не является проблемой! Размер видеопамяти, установленной на современных
видеокартах, превышает 16Мб и влияние AGP не проявляется. Все текстуры умещаются
в локальной памяти видеокарты.
Теперь определим пиковую производительность 3DNow! Блок 3DNow! содержит два
конвейерных исполнительных модуля. Все 3DNow! инструкции выполняются за 2 такта.
Одна инструкция обрабатывает сразу две переменных. Получаем 1.2GFLOPS для К6-2
300. Это в 4 раза быстрее конвейерного сопроцессора. Но в реальных программах
этот предел не будет достигнут. Так же как и для Pentium II. Но вот только Pentium
II 300 гораздо ближе к пиковым показателям в 300MFLOPS, чем К6-2 к своим 1200MFLOPS.
Реальная производительность 3DNow! составляет 600-700MFLOPS. По результатам
тестов блок 3DNow! превосходит FPU-K6 в 4 раза и FPU-Pentium II в 2-2.5 раза
на операциях с одинарной точностью.
Так почему же 3DNow! так трудно достичь пикового быстродействия? Почему трудно
создать оптимизирующий компилятор(нынешние компиляторы используют 3DNow!, но
не оптимизируют код) и работать вручную.
- Блок 3DNow! состоит из двух конвейеров, подключенных к одному сдвоенному
исполнительному блоку. Первая часть этого блока выполняет инструкции сложения,
вычитания и т.п. Вторая часть выполняет остальные инструкции, такие как умножение.
Обе части работают одновременно. Таким образом могут выполняться одновременно
две инструкции сложения и две умножения, что дает 4FLOPS при частоте 1Гц. Это
единственный способ достичь пиковой производительности. Если в коде программы
подряд идут 4 сложения и 4 умножения, то производительность падает вдвое из-за
того, что одна часть блока 3DNow! не может выполнять команды второй части. Если
сравнить с конвейерным FPU: 2 сложения и 2 умножения выполнятся со скоростью
1FLOPS, 4 сложения и 4 умножения выполнятся также со скоростью 1FLOPS. Т.е.
оптимизация для 3DNow! сложнее, чем для конвейерного FPU и следовательно пиковая
производительность менее достижима. Требуются последовательности двух одинаковых
команд. Именно двух!
- В наборе команд 3DNow! есть инструкция FEMMS. Она предназначена для переключения
между режимом обычного FPU и 3DNow! Это происходит потому, что блок 3DNow! использует
в своей работе регистры FPU. Эта команда выполняется за два такта и вносит дополнительные
задержки если инструкции 3DNow! используются без оптимизации и происходят частые
переключения режимов процессора. При оптимизации инструкции 3DNow! должны быть
сгруппированы попарно. Отсутствие оптимизации в Unreal'е очень наглядно.
- Если программа не использует инструкции 3DNow!, то используется стандартный
сопроцессор K6-2, который имеет вдвое меньшую пиковую производительность по
сравнению с Pentium II.
- Пределом для достижения пикового быстродействия становится пропускная способность
шины памяти. Данные не успевают поступать с нужной скоростью и блок 3DNow! простаивает.
Теперь проведем упрощенное численное сравнение производительности Pentium II
и K6-2. Для этого введем понятие реальной производительности конвейерного сопроцессора
Pentium II - "RWFP". Тогда для К6-2 получаем:
Производительность K6-2 == 50% * реальной производительности 3dnow! + 50% *
реальной производительности FPU == 0.5* (2 *RWFP) + 0.5 * (0.5 * RWFP) == 1.25
RWFP
Исходя из этого расчета К6-2 300 должен работать как Pentium II 375 при хорошей
оптимизации. Конечно не учитывается влияние кеша второго уровня, работающего
в разных условиях(100 против 187Мгц).
Выводы. Технология 3DNow! позволяет достичь двухкратного превосходства над
конвейерным сопроцессором Pentium II. В реальных играх превосходство будет составлять
15-30%. С выходом новых игр, изначально оптимизированных под 3DNow! и использующих
большее количество полигонов разрыв должен возрасти до 50-70%. К сожалению,
на сегодняшних играх К6-2 уступает Pentium II, потому, что в основном используются
инструкции сопроцессора. Готовящийся к выходу К6-3 будет иметь куш второго уровня,
работающий на частоте процессора и снимет ограничение со скорости поступления
данных. Это частично решит проблему. Но действительно мощное решение будет в
К7, который сочетает мощь 3DNow! c мощью параллельного конвейерного сопроцессора.
Но владельцы К6-2 не должны расстраиваться. При стоимости меньшей, чем у Pentium
II и равной с CeleronA, они имеют сегодня(я не имею ввиду неоптимизированные
игры) равную производительность в 3D. При этом целочисленный блок работает быстрее.
А при хорошей оптимизации будут иметь преимущество и в 3D. Ну а пока разработчики
колебались, MS ввела поддержку 3DNow! в DX6, а производители видеокарт ввели
поддержку 3DNow! в драйвера.
Первоисточник: hardware.ul.ru
