Введение

Расширение набора инструкций x86 от AMD
3DNow! — это устаревшее расширение набора инструкций x86, разработанное компанией Advanced Micro Devices (AMD). Оно добавляет инструкции Single Instruction Multiple Data (SIMD) в базовый набор инструкций x86, позволяя выполнять векторную обработку операций с плавающей точкой с использованием векторных регистров. Это улучшение повышает производительность многих графически интенсивных приложений. Первым микропроцессором, реализовавшим 3DNow!, был AMD K6-2, представленный в 1998 году. В подходящих приложениях это усовершенствование увеличивало скорость примерно в 2–4 раза. Однако набор инструкций не получил широкого распространения, и AMD объявила в августе 2010 года о прекращении поддержки 3DNow! в будущих процессорах AMD, за исключением двух инструкций — PREFETCH и PREFETCHW. Эти две инструкции также доступны в процессорах Intel Bay Trail.

История

3DNow! был разработан в период, когда 3D-графика становилась мейнстримом в компьютерных мультимедиа и играх. Отображение 3D-графики в реальном времени сильно зависело от блока вычислений с плавающей точкой (FPU) центрального процессора для выполнения операций с плавающей точкой, в чем процессор K6 от AMD уступал своему конкуренту, Intel Pentium II. Как расширение набора инструкций MMX, 3DNow! расширил SIMD-регистры MMX для поддержки общих арифметических операций (сложение/вычитание/умножение) с данными с одинарной точностью (32-битной) плавающей точкой. Программное обеспечение, разработанное для использования 3DNow! от AMD вместо более медленного FPU x87, могло выполняться до четырех раз быстрее, в зависимости от набора используемых инструкций.

3DNow! Профессионал

3DNow! Professional — это торговое наименование, используемое для обозначения процессоров, сочетающих технологию 3DNow! с полным набором инструкций SSE (таких как SSE, SSE2 или SSE3). Athlon XP стал первым процессором, получившим торговое наименование 3DNow! Professional, и первым продуктом в семействе Athlon, поддерживающим полный набор инструкций SSE (включая в себя: 21 исходную инструкцию 3DNow!; пять инструкций расширения DSP для 3DNow!; 19 инструкций расширения MMX; и 52 дополнительные инструкции SSE для обеспечения полной совместимости с SSE).

Преимущества и недостатки

Одно из преимуществ 3DNow! заключается в том, что можно складывать или умножать два числа, хранящиеся в одном регистре. В SSE каждое число может быть объединено только с числом в той же позиции в другом регистре. Эта возможность, известная как горизонтальное сложение в терминологии Intel, стала основным дополнением к набору инструкций SSE3. Недостатком 3DNow! является то, что инструкции 3DNow! и MMX используют один и тот же набор регистров, в то время как SSE добавляет 8 новых независимых регистров (XMM0–XMM7). Поскольку регистры MMX/3DNow! совместно используются со стандартным x87 FPU, инструкции 3DNow! и x87 не могут выполняться одновременно. Однако, благодаря тому, что 3DNow! является псевдонимом для x87 FPU, состояния регистров 3DNow! и MMX можно сохранять и восстанавливать с помощью традиционных инструкций x87 F(N)SAVE и F(N)RSTOR. Это позволило операционным системам поддерживать 3DNow! без явных модификаций, в то время как для регистров SSE требовалась явная поддержка операционной системы для правильного сохранения и восстановления новых XMM-регистров (с помощью добавленных инструкций FXSAVE и FXRSTOR). Инструкции FX* из SSE предоставляют функциональный надмножество старых инструкций x87 для сохранения и восстановления. Они могут сохранять не только состояния регистров SSE, но и состояния регистров x87 (следовательно, применимы также для операций MMX и 3DNow! там, где это поддерживается). На процессорах AMD Athlon XP и K8 (например, Athlon 64) программисты на ассемблере отмечали, что можно комбинировать инструкции 3DNow! и SSE для снижения нагрузки на регистры, но на практике сложно повысить производительность из-за того, что инструкции выполняются на общих функциональных блоках.