Материал опубликован - 05/03/2001
Битва за 3D-олимп: AMD против Intel
Еще 10 лет назад никто не заботился о наличии сопроцессора. Все что нам было
нужно - быстрый процессор. В настоящее время процессор без арифметического сопроцессора
рассматривается нами как бесполезный калькулятор. Уже в 1996 году процессоры
конкурентов Intel опередили оригинальный Pentium и завоевывали всевозможные
призы. Первый альтернативный процессор пятого поколения - Cyrix 6x86 стал продуктом
года и обгонял Pentium на 30%. Появившийся вслед за ним AMD K5 обгонял Pentium
уже на 50% (К5-166 работал на частоте 117Мгц). Лидерство Intel оказалось под
угрозой. И тут пришел Quake... Первые же тесты доказали лидерство Intel. Сперва
высказывались предположения, что Quake, единственная игра использующая сопроцессор,
не сможет изменить положения, т.к. остальные игры(Duke3D, Blood ) прекрасно
работали на альтернативных процессорах. Но выходящие игры следующего поколения
были построены уже на движках, использующих сопрцессор.Они стали использовать
расчеты 3D объектов в трехмерном пространстве для большей реалистичности, а
спрайтовые игры канули в лету. Лидерство Intel осталось непоколебимым.
С выходом весной 1997 года процессора AMD K6 многие поспешили в магазины за
новинкой только для того, чтобы впоследствии обменять его на Pentium MMX. Причина:
Quake работает слишком медленно из-за слабого сопроцессора К6. Снова да здравствует
Intel? Или нет? В Интернете развернулись бурные дискуссии между компьютерными
гуру. Некоторые тесты показывали превосходство сопроцессоров AMD, другие же
указывали на бесспорное лидерство Intel. Посмотрите на результаты тестов:
| |
Sisoft Sandra FPU
|
ZD
FPUmark
|
|
K6-233
|
132
|
740
|
|
PMMX-233
|
130
|
900
|
|
K6-2 300
|
167
|
980
|
|
PII-300
|
160
|
1540
|
Обратите внимание, что по тесту Sisoft Sandra процессоры AMD показали лучшие
значения, а по тестам ZD сопроцессор P II обошел K6-2 на 57%, а iP MMX обошел
К6 на 20%. В чем же причина таких противоречащих результатов?
Дело в том, что для увеличения производительности FPU производители использовали
разные стратегии, которых всего около пяти:
- Увеличение тактовой частоты
- Конвейерный FPU
- FPU с малыми задержками
- SIMD FPU
- Параллельные конвейерные FPU
Первый путь избрали все производители, а вот дальше пути разошлись. Intel пошел
вторым путем, а AMD третьим. Четвертая стратегия используется в К6-2 и подходящих
К7 и Katmai. Теперь уже известно, что в К7 будет использована и пятая стратегия.
Теперь обо всем подробнее. Объяснения будут максимально упрощенными, чтобы
понять саму идею методов.
Конвейерный FPU
Как вам известно из курса математики, сложные функции вычисляются алгоритмическим
путем. Например с помощью преобразования Фурье. Поэтому такие функции не могут
быть вычеслены FPU за один такт. Конвейерный FPU подобен сборочному цеху - на
каждом шаге выполняются простейшие операции и в итоге получается конечный результат.
Допустим для вычисления некоторой функции требуется выполнить три простейших
математических операции. Конвейерный FPU имеет три блока, подключенных последовательно
к конвейеру, каждый из которых отвечает за выполнение одной из этих операций.
В результате получаем следующую картину:
| Входные данные |
Clock 1
|
|
|
Готовый результат |
| Блок 1 |
Блок 2 |
Блок 3 |
| Operand 3 |
Operand 2 |
Operand 1 |
|
Clock 2
|
|
|
| Блок 1 |
Блок 2 |
Блок 3 |
|
Operand 4
|
Operand 3 |
Operand 2 |
|
Clock 3
|
|
|
| Блок 1 |
Блок 2 |
Блок 3 |
|
Operand 5
|
Operand 4 |
Operand 3 |
В результате за три такта мы вычисляем сложную функцию три раза, что соответствует
быстродействию 1FLOPS на частоте 1Hz. Конечно это идеальный случай и в реальной
ситуации быстродействие составит приблизительно 0.5 FLOPS. Но если вычисление
трех одинаковых функций следует подряд, то наступает идеальный случай - и тут
уж дело за программистами. Оптимизация кода в данном случае позолит повысить
быстродействие почти в два раза - игра стоит свеч! В наихудшем случае второй
операнд требует сразу обработки в блоке, занятом первым операндом и т.д - в
результате получаем быстродействие 1/3 FLOPS, как у обычного FPU. Сопроцессор
P II имеет два раздельных блока FPU. Один из них выполняет конвейерные операции
сложения и вычитания, а другой, частично конвейеризованый, выполняет остальные
операции. В результате пиковое быстродействие процессора PII-300 составляет
300MFLOPS.
Почему же AMD не использовала конвейерный FPU в своем К6? На это есть две причины:
Большинство компиляторов 1996/97 года не оптимизировали код для сопроцессора.
Если вы хотели получить прирост быстродействия, требовалась ручная оптимизация.
Именно этим путем пошли ребята из id Software.
Для выполнения простых операций, подобных сложению, умножению или вычитанию,
конвейерному FPU PII требуется от 3 до 5 тактов. Это далеко не самый лучший
результат. А именно эти команды используются очень часто.
FPU с малыми задержками
AMD избрала другой путь. Если рассмотреть его на приведенном выше примере,
то получится, что сопроцессор AMD способен вычислять сложную функцию не за 3,
а за два такта. Таким образом уменьшается задержка получения готового результата
по сравнению с классическим FPU. Наиболее важные операции выполняются за 2 такта,
в то время как PII требуется 3-5 тактов. Стратегия исключительно проста, но
оптимизация кода не дает никакого прироста производительности, поэтому пиковое
быстродействие FPU составляет 150MFLOPS для K6-2 300.
Почему же AMD не применила в своем высокоскоростном FPU конвейер? Да потому,
что эти понятия взаимоисключающие. Более длинный конвейер дает при оптимизации
более высокое быстродействие при вычислении сложных функций, но при этом увеличение
стадий обработки увеличивает количество тактов на получение конечного результата,
т.е. увеличивает задержки!!! Может быть когда-нибудь найдется гений, который
сможет найти идеальное решение, но сейчас, увы... ничего не поделаешь.
Вот в этих различиях и кроется секрет противоречивых показателей различных
бенчмарков. Тест Sisoft Sandra не оптимизирован под конвейерный FPU PII и поэтому
AMD с более быстродействующим FPU вырывается вперед. А вот тест ZD уже использует
оптимизацию, в связи с чем PII показывает быстродействие близкое к пиковому.
Так какая же стратегия является верной - конвейерная обработка или вычисления
с малыми задержками? В случае, если вычисления с плавающей запятой разбросаны
в коде, то AMD намного быстрее. Однако в современном программном обеспечении
операции с плавающей запятой имеют тенденцию идти последовательно, даже без
оптимизации. Поэтому в большинстве случаев PII значительно быстрее. Характерный
пример - расчет 3D-сцен, часто встречающийся в играх.
Еще одним доводом в пользу конвейерного FPU стал авторитет фирмы Intel. Она
создала оптимизирующее ПО и оказывала мощную поддержку для разработчиков ПО.
Так что забудьте сказку о значительном превосходстве конвейерного сопроцессора
P II. Это преимущество проявляется только при оптимизации и при использовании
специфического софта, где оптимизация происходит самопроизвольно(к сожалению
в эту категорию попадают 3D-игры). Неоптимизированные программы, интенсивно
использующие FPU, не дадут практически никакого преимущества P II(разница составит
+-5%). При оптимизации разница возрастет до 50% в ползу конвейерного FPU.
Почему же AMD пошла своим путем и не использовала конвейерный сопроцессор в
К6-3? Для этого можно было пойти тремя различными путями:
- Полностью скопировать конвейерную архитектуру. AMD могла встроить в К6-3
свою версию конвейерного FPU, при этом не получив требуемого быстродействия.
Почему? Потому, что программы оптимизированы не под конвейерный FPU, а под интеловский
конвейерный FPU. Чувствуете разницу? К тому же дни, когда AMD копировала архитектуру
Intel прошли и дело кончилось бы судом.
- Создать принципиально новый сопроцессор для новой архитектуры. Но для этого
необходимо изменить архитектуру всего процессора. Именно так AMD и поступила,
разработав параллельный конвейерный FPU для К7.
- Добавить несколько специальных команд для программного обеспечения, где наиболее
заметно превосходство конвейерных FPU.
Именно третий вариант был использован для процессоров К6-2 и К6-3. Технология
AMD 3DNow! позволяет превзойти сопроцессоры Intel на их же территории. Конечно
эти инструкции не могут полностью заменить стандартный сопроцессор, а в этом
случае сказывается высокое быстродействие FPU с малыми задержками. Учитывая
мощный целочисленный блок и кеш второго уровня 256Кб, работающий на полной частоте
ядра процессора, процессор К6-3 можно смело выдвигать в лидеры архитектуры х86.
Доказательством тому стали сообщения практически ото всех разработчиков ПО о
поддержке технологии 3DNow! в их новых продуктах. Поэтому 1999 год станет годом
расцвета 3DNow!
Первоисточник: hardware.ul.ru
