|
|
Материал опубликован - 05/03/2001 С выходом весной 1997 года процессора AMD K6 многие поспешили в магазины за новинкой только для того, чтобы впоследствии обменять его на Pentium MMX. Причина: Quake работает слишком медленно из-за слабого сопроцессора К6. Снова да здравствует Intel? Или нет? В Интернете развернулись бурные дискуссии между компьютерными гуру. Некоторые тесты показывали превосходство сопроцессоров AMD, другие же указывали на бесспорное лидерство Intel. Посмотрите на результаты тестов:
Обратите внимание, что по тесту Sisoft Sandra процессоры AMD показали лучшие значения, а по тестам ZD сопроцессор P II обошел K6-2 на 57%, а iP MMX обошел К6 на 20%. В чем же причина таких противоречащих результатов? Дело в том, что для увеличения производительности FPU производители использовали разные стратегии, которых всего около пяти: - Увеличение тактовой частоты Теперь обо всем подробнее. Объяснения будут максимально упрощенными, чтобы понять саму идею методов. Конвейерный FPU Как вам известно из курса математики, сложные функции вычисляются алгоритмическим путем. Например с помощью преобразования Фурье. Поэтому такие функции не могут быть вычеслены FPU за один такт. Конвейерный FPU подобен сборочному цеху - на каждом шаге выполняются простейшие операции и в итоге получается конечный результат. Допустим для вычисления некоторой функции требуется выполнить три простейших математических операции. Конвейерный FPU имеет три блока, подключенных последовательно к конвейеру, каждый из которых отвечает за выполнение одной из этих операций. В результате получаем следующую картину:
В результате за три такта мы вычисляем сложную функцию три раза, что соответствует быстродействию 1FLOPS на частоте 1Hz. Конечно это идеальный случай и в реальной ситуации быстродействие составит приблизительно 0.5 FLOPS. Но если вычисление трех одинаковых функций следует подряд, то наступает идеальный случай - и тут уж дело за программистами. Оптимизация кода в данном случае позолит повысить быстродействие почти в два раза - игра стоит свеч! В наихудшем случае второй операнд требует сразу обработки в блоке, занятом первым операндом и т.д - в результате получаем быстродействие 1/3 FLOPS, как у обычного FPU. Сопроцессор P II имеет два раздельных блока FPU. Один из них выполняет конвейерные операции сложения и вычитания, а другой, частично конвейеризованый, выполняет остальные операции. В результате пиковое быстродействие процессора PII-300 составляет 300MFLOPS. Почему же AMD не использовала конвейерный FPU в своем К6? На это есть две причины: Большинство компиляторов 1996/97 года не оптимизировали код для сопроцессора.
Если вы хотели получить прирост быстродействия, требовалась ручная оптимизация.
Именно этим путем пошли ребята из id Software. 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 прошли и дело кончилось бы судом. Первоисточник: hardware.ul.ru |
Статьи |
Новости |
Файлы |
Словарь |
Форум |
Производители |
Товары и цены |
Каталог ссылок |
Доска объявлений |