Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Комплект инструкций, разработанный Intel.
Комплект инструкций для процессоров Intel Pentium и Pentium II.
Instruction set designed by Intel
the instruction set for Intel Pentium and Pentium II processors
MMX — это архитектура набора инструкций с множественным использованием данных (SIMD), разработанная Intel и представленная 8 января 1997 года вместе с линейкой микропроцессоров Pentium P5 (микроархитектура) под названием "Pentium с технологией MMX". Она была разработана на основе аналогичного блока, представленного в Intel i860, а ранее — в видеопиксельном процессоре Intel i750. MMX — это дополнительная возможность процессора, поддерживаемая Intel и другими производителями на процессорах IA-32 с 1997 года. AMD также добавила набор инструкций MMX в свой процессор K6. Газета The New York Times описала первоначальный импульс, включая рекламу во время Супербоула, как ориентированный на "новое поколение эффектных мультимедийных продуктов, включая видеотелефоны и 3D-видеоигры". Впоследствии MMX была расширена рядом разработок Intel и других компаний: 3DNow!, Streaming SIMD Extensions (SSE) и продолжающимися обновлениями Advanced Vector Extensions (AVX).
MMX is a single instruction, multiple data (SIMD) instruction set architecture designed by Intel, introduced on January 8, 1997 with its Pentium P5 (microarchitecture) based line of microprocessors, named "Pentium with MMX Technology". It developed out of a similar unit introduced on the Intel i860, and earlier the Intel i750 video pixel processor. MMX is a processor supplementary capability that is supported on IA 32 processors by Intel and other vendors as of 1997. AMD also added MMX instruction set in its K6 processor. The New York Times described the initial push, including Super Bowl advertisements, as focused on "a new generation of glitzy multimedia products, including videophones and 3 D video games." MMX has subsequently been extended by several programs by Intel and others: 3DNow!, Streaming SIMD Extensions (SSE), and ongoing revisions of Advanced Vector Extensions (AVX).
Технические детали
MMX определяет восемь процессорных регистров, названных MM0–MM7, и операции, которые работают с ними. Каждый регистр имеет ширину 64 бита и может использоваться для хранения 64-битовых целых чисел или нескольких меньших целых чисел в "упакованном" формате: одна инструкция может быть применена одновременно к двум 32-битовым целым числам, четырем 16-битовым целым числам или восьми 8-битовым целым числам. MMX предоставляет только целочисленные операции. Когда MMX первоначально разрабатывался для Intel i860, использование целочисленной математики было оправдано (она требовалась как для 2D, так и для 3D-вычислений), но с распространением графических карт, выполнявших большую часть этих вычислений, SIMD с целыми числами в процессоре стал несколько избыточным для графических приложений. В качестве альтернативы, операции арифметики насыщения в MMX могли значительно ускорить некоторые приложения цифровой обработки сигналов. Чтобы избежать проблем совместимости с механизмами переключения контекста в существующих операционных системах, регистры MMX являются псевдонимами для существующих регистров x87 с плавающей запятой, которые уже сохраняются и восстанавливаются при переключении контекста. В отличие от регистров x87, которые работают как стек, регистры MMX имеют прямой доступ (случайный доступ). Любая операция, включающая стек с плавающей запятой, может также повлиять на регистры MMX и наоборот, поэтому такая псевдонимность затрудняет работу с операциями с плавающей запятой и SIMD в одной программе. Для максимизации производительности программное обеспечение часто использовало процессор исключительно в одном из режимов, откладывая относительно медленное переключение между ними как можно дольше. Каждый 64-битный регистр MMX соответствует части мантиссы 80-битного регистра x87. Верхние 16 бит регистров x87, таким образом, остаются неиспользованными в MMX, и все эти биты установлены в единицы, что делает их данными типа "Не число" (NaN) или бесконечностями в представлении с плавающей запятой. Программное обеспечение может использовать это для определения, предназначено ли содержимое данного регистра для хранения данных с плавающей запятой или SIMD.
MMX defines eight processor registers, named MM0 through MM7, and operations that operate on them. Each register is 64 bits wide and can be used to hold either 64 bit integers, or multiple smaller integers in a "packed" format: one instruction can then be applied to two 32 bit integers, four 16 bit integers, or eight 8 bit integers at once. MMX provides only integer operations. When originally developed, for the Intel i860, the use of integer math made sense (both 2D and 3D calculations required it), but as graphics cards that did much of this became common, integer SIMD in the CPU became somewhat redundant for graphical applications. Alternatively, the saturation arithmetic operations in MMX could significantly speed up some digital signal processing applications. To avoid compatibility problems with the context switch mechanisms in existing operating systems, the MMX registers are aliases for the existing x87 floating point unit (FPU) registers, which context switches would already save and restore. Unlike the x87 registers, which behave like a stack, the MMX registers are each directly addressable (random access). Any operation involving the floating point stack might also affect the MMX registers and vice versa, so this aliasing makes it difficult to work with floating point and SIMD operations in the same program. To maximize performance, software often used the processor exclusively in one mode or the other, deferring the relatively slow switch between them as long as possible. Each 64 bit MMX register corresponds to the mantissa part of an 80 bit x87 register. The upper 16 bits of the x87 registers thus go unused in MMX, and these bits are all set to ones, making them Not a Number (NaN) data types, or infinities in the floating point representation. This can be used by software to decide whether a given register's content is intended as floating point or SIMD data.
Поддержка программного обеспечения
Программная поддержка MMX развивалась медленно, примерно через год после появления AMD 3DNow! в 1999 году. SSE устранила основные недостатки MMX (невозможность комбинировать целочисленные SIMD-операции с операциями с плавающей запятой), создав новый 128-битный регистровый файл (XMM0–XMM7) и новые SIMD-инструкции для него. Как и 3DNow!, SSE была ориентирована исключительно на операции с плавающей точкой одинарной точности (32 бита); целочисленные SIMD-операции по-прежнему выполнялись с использованием регистра и набора инструкций MMX. Однако новый регистровый файл XMM позволил свободно комбинировать операции SSE SIMD с операциями MMX или x87 FPU. Streaming SIMD Extensions 2 (SSE2), представленные вместе с Pentium 4, дополнительно расширили набор инструкций x86 SIMD, добавив поддержку целочисленных (8/16/32 бита) и данных с плавающей точкой двойной точности для регистрового файла XMM. SSE2 также позволила операционным кодам MMX (опкодам) использовать операнды регистров XMM, которые в последующих версиях SSE были расширены до еще более широких регистров YMM и ZMM.
Software support for MMX developed slowly. in 1999, roughly a year after AMD's 3DNow! was introduced. SSE addressed the core shortcomings of MMX (inability to mix integer SIMD ops with any floating point ops) by creating a new 128 bit wide register file (XMM0–XMM7) and new SIMD instructions for it. Like 3DNow!, SSE focused exclusively on single precision floating point operations (32 bit); integer SIMD operations were still performed using the MMX register and instruction set. However, the new XMM register file allowed SSE SIMD operations to be freely mixed with either MMX or x87 FPU ops. Streaming SIMD Extensions 2 (SSE2), introduced with the Pentium 4, further extended the x86 SIMD instruction set with integer (8/16/32 bit) and double precision floating point data support for the XMM register file. SSE2 also allowed the MMX operation codes (opcodes) to use XMM register operands, extended to even wider YMM and ZMM registers by later SSE revisions.
MMX в встроенных приложениях
Ядро микропроцессоров Intel и Marvell Technology Group XScale, начиная с PXA270, включает расширение архитектуры наборов команд SIMD для ядра архитектуры ARM под названием Intel Wireless MMX Technology (iwMMXt), функциональность которого аналогична расширению IA-32 MMX. Оно обеспечивает выполнение арифметических и логических операций над 64-битными целыми числами, при этом программное обеспечение может выбирать между выполнением двух 32-битных, четырех 16-битных или восьми 8-битных операций в одной инструкции. Расширение содержит 16 регистров данных по 64 бита и восемь управляющих регистров по 32 бита. Доступ ко всем регистрам осуществляется через стандартный механизм отображения сопроцессоров архитектуры ARM. iwMMXt использует пространство сопроцессоров 0 и 1, и некоторые его коды операций (опкоды) совпадают с опкодами более раннего расширения для операций с плавающей точкой, FPA. Более поздние версии процессоров ARM от Marvell поддерживают как опкоды Wireless MMX (WMMX), так и Wireless MMX2 (WMMX2).
Intel's and Marvell Technology Group's XScale microprocessor core starting with PXA270 include an SIMD instruction set architecture extension to the ARM architecture core named Intel Wireless MMX Technology (iwMMXt) which functions are similar to those of the IA 32 MMX extension. It provides arithmetic and logic operations on 64 bit integer numbers, in which the software may choose to instead perform two 32 bit, four 16 bit or eight 8 bit operations in one instruction. The extension contains 16 data registers of 64 bits and eight control registers of 32 bits. All registers are accessed through standard ARM architecture coprocessor mapping mechanism. iwMMXt occupies coprocessors 0 and 1 space, and some of its opcodes clash with the opcodes of the earlier floating point extension, FPA. Later versions of Marvell's ARM processors support both Wireless MMX (WMMX) and Wireless MMX2 (WMMX2) opcodes.