Введение

Комплект инструкций, разработанный Intel.
Комплект инструкций для процессоров Intel Pentium и Pentium II.

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 определяет восемь процессорных регистров, названных 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 развивалась медленно, примерно через год после появления 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.

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).