Введение
Расширение набора инструкций 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! is a deprecated extension to the x86 instruction set developed by Advanced Micro Devices (AMD). It adds single instruction multiple data (SIMD) instructions to the base x86 instruction set, enabling it to perform vector processing of floating point vector operations using vector registers. This improvement enhances the performance of many graphics intensive applications. The first microprocessor to implement 3DNow! was the AMD K6 2, introduced in 1998. In appropriate applications, this enhancement raised the speed by about 2–4 times. However, the instruction set never gained much popularity, and AMD announced in August 2010 that support for 3DNow! would be dropped in future AMD processors, except for two instructions, PREFETCH and PREFETCHW. These two instructions are also available in Bay Trail Intel processors.
История
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 для снижения нагрузки на регистры, но на практике сложно повысить производительность из-за того, что инструкции выполняются на общих функциональных блоках.