Итак, страсти поутихли, настало время спокойно разобраться, что представляет собой и что дает новый процессор фирмы AMD K6-2. Этот процессор является логическим продолжением линейки K6 и отличается от предшественника только добавленним в ядро нового модуля, обрабатывающего "3D-инструкции" и носящего название 3DNow!. По сути — это еще один сопроцессор по типу MMX, но умеющий выполнять 21 новую инструкцию. Эти новые инструкции призваны, прежде всего, ускорить обработку данных, связанных с трехмерной графикой. Поэтому в набор инструкций 3DNow! включены команды, работающие с вещественночисленными аргументами одинарной точности. Именно поэтому, технология ММХ не пошла в жизнь — ММХ работает с целыми числами, а при расчете трехмерных сцен оперировать приходится с вещественными. Как и ММХ, 3DNow! использует те же регистры, что и сопроцессор, это связано с тем, что операционные системы должны сохранять и сбрасывать все регистры процессора при переключении задач.
Теоретически, 3DNow! должен заменить сопроцессор при расчетах трехмерной геометрии и существенно ускорить выполнение этих вычислений. Модуль 3DNow! может выполнять до четырех SIMD (Single Instruction Multiple Data) инструкций (из своего 21-командного набора) параллельно, что при грамотном использовании может дать небывалый прирост производительности. Хорошей иллюстрацией этого тезиса может послужить Quake2, работающий на процессорах K6 в полтора раза медленней, чем на Pentium той же частоты. Однако, вопреки распространенному мнению, это связано не с тормознутостью AMD-шного сопроцессора, а с тем что Intel реализовал в своем кристалле возможность параллельной работы процессора с арифметическим сопроцессором. В Quake2, код оптимизирован с учетом этой особенности, поэтому если процессорные и сопроцессорные инструкции не могут выполняться одновременно (как на AMD K6), производительность получается крайне низкая. K6-2 должен решить эту проблему, но другим путем — за счет конвейеризации 3D вычислений в модуле 3DNow! Однако, вопрос распараллеливания вычислений должен решаться программистом, что вызывает определенные трудности при реализации алгоритмов, тем более, что процесс вычисления геометрии 3D-сцен далеко не линейный. Поэтому, теоретическая производительность К6-2, значительно превышающая скорость всех современных PII-процессоров, достигнута быть не может.
Таким образом, чтобы от 3DNow! был хоть какой-то эффект, необходимо, чтобы приложение использовало те самые 21 инструкцию. Причем не как-нибудь, а с учетом конвейерной структуры этого модуля процессора. Сейчас вся оптимизация под K6-2 заключается либо в использовании графических API с поддержкой 3DNow!, либо в выпуске специальных версий программ. Разберемся с оптимизацией поподробнее.
Все тесты выполнялись в системе с системной платой FIC VA-503+ c чипсетом VIA MVP-3, 64 Мбайтами SDRAM, видеокартой Diamond Viper V330 и 3D ускорителем Diamond Monster II с 12 Mбайтами памяти. Тестирование выполнялось под Windows 98 и DirectX 6.0 beta 1. В играх было использовано разрешение 640х480 и 800х600. В системе на PII использовалась плата ASUS P2B.
DirectX 6.0
Как известно, в DirectX 6.0 (при условии оптимизированных видеодрайверов) включена поддержка 3DNow! Однако, надо себе представлять как. Direct3D состоит из двух слоев: высокоуровневого (Retained Mode) и низкоуровневого (Immediate Mode). Immediate mode позволяет приложениям просто напрямую оперировать с видеопамятью, а retained mode включает в себя какие-то функции геометрического конвейера. Отсюда видно, что оптимизации в immediate mode быть не может в принципе. Вся надежда на retained mode. Однако, Microsoft, по крайней мере в DirectX 5.0 особо не напрягался работая над retained mode. В результате получилось, что геометрический конвейер DirectX 5.0 работает не просто медленно, а очень медленно. Помните, как дергаются кадры в 3D WinBench? Это как раз потому, что этот тест - практически единственное приложение, реализующее геометрический конвейер через DirectX. Остальные полагаются на собственные силы. Приведенные ниже результаты измерения производительности в 3D Winbench 98, таким образом, показывают лишь то, что теоретически можно выжать из 3DNow!, используя DirectX.
Практически же, в DirectX 6.0 ситуация с реализацией геометрических функций начала меняться в лучшую сторону. Разработчики игр это просекли, и опасливо начинают использовать элементы этого конвейера. Например, в Forsaken, используются какие-то функции, но прирост производительности крайне незначителен.
Так что пока разработчики не начнут использовать геометрию DirectX в полной мере, владельцам K6-2 надеяться здесь не на что.
Glide 3.0
Пока оптимизированные драйвера Glide не доступны, можно сообщить только теоретические прикидки. Glide включает небольшое число геометрических функций, поэтому, по оценкам самого AMD, использование оптимизированных под K6-2 драйверов даст лишь 15% прирост производительности.
OpenGL
В API OpenGL включены практически все функции графического конвейера, причем SGI, разрабатывая свои библиотеки позаботилась как и о высокой эффективности, так и о возможности распараллеливания вычислений. По нашему мнению, использование OpenGL и драйверов, оптимизированных под эту библиотеку — лучшее решение. Иллюстрация этого тезиса - немереный рост fps в Quake2, при использовании оптимизированного под 3DNow! минипорта.
А производителям игр, не только не надо особо заморачиваться на геометрические вещи, к тому же и оптимизация сама по себе происходит, хочешь под один процессор, хочешь — под другой.
Проблема одна — игр, работающих через OpenGL раз, два — и обчелся. А производители видеокарт не то, что под 3DNow! свои OpenGL-драйвера заточить не могут, у них вообще сделать их не получается. Так что надежда на использование этой технологии небольшая.
Оптимизация приложений
Попробуем объяснить, чем плоха оптимизация непостредственно самих программ. Дело в том, что компиляторы, генерящие 3DNow!-инструкции в природе отсутствуют. Да и вряд ли появятся. Спроектировать конвейерную параллельную обработку 3D-вычислений, да еще и так, чтобы исключений не было, очень трудно, и машинному алгоритму скорее всего непосильно вообще. Что же касается оптимизации вручную, то это также непросто и требует больших затрат. Поэтому, оптимизация часто делается чисто формально, как в Unreal, где на 3DNow! возлагаются элементы обсчета кинематики монстров, что вообще не дает никакого (!) выигрыша. Единственный более-менее положительный эффект от ручной оптимизации заметен в Incoming.
Но с выигрышем от использования OpenGL, ярким флагом, которым AMD размахивал на презентации (уж тут-то программисты постарались), показывая Quake2, этот прирост сравниться не может.
Выводы
Если исходить из того, что K6-2 обычный процессор K6 плюс еще что-то, а следовательно, процессор, показывающий очень неплохие результаты в офисных приложениях и, при выполнении ряда дополнительных условий, еще и в играх, а также учитывая цену, то K6-2 — просто находка.
Однако уже через полгода, когда выйдет Intel Katmai со своим набором 3D-инструкций KNI (MMX2), которые с 3DNow! не совместимы, про K6-2 все производители приложений и драйверов скорее всего забудут. Поэтому, мы не станем рекомендовать AMD K6-2 в качестве альтернативы PII.
Но, как решение для апгрейда старой Socket-7 системы, K6-2 — решение практически идеальное. Однако, следует иметь в виду, что для использования в старой материнской плате K6-2 необходимо напряжение питания 2.2 В, и, при отсутствии внешней частоты 100 МГц, умножения на 4 и выше.
Заметьте, что приведенный выше список приложений — это практически все, что можно выжать из нового процессора от AMD. Он, конечно, будет расширяться, но вряд ли быстрыми темпами из-за трудоемкости оптимизации под 3DNow! Тем более, что под MMX2 будет выпущен просто компилятор, который освободит разработчиков от ненужных усилий.
Так что, пожалуй, целерон будет жить :)