MMX¶
MMX — это набор инструкций (расширение системы команд) для микропроцессоров архитектуры x86, разработанный корпорацией Intel. Представленный в 1996 году, MMX (MultiMedia eXtensions — расширения для мультимедиа) был первым крупным расширением набора команд x86, предназначенным для ускорения обработки мультимедийных данных — видео, аудио, 2D- и 3D-графики, а также задач цифровой обработки сигналов (ЦОС). Технология MMX была впервые реализована в процессорах Pentium MMX (кодовое имя P55C) и впоследствии поддерживалась во всех последующих процессорах Intel, а также была лицензирована и реализована компанией AMD в процессорах K6.
¶История
Разработка MMX началась в Intel в начале 1990-х годов в ответ на растущий спрос на производительность мультимедийных приложений. В то время обработка видео, звука и графики на персональных компьютерах (ПК) была крайне неэффективной, так как требовала выполнения большого количества однотипных операций над небольшими объёмами данных (например, пикселями, сэмплами аудио). Стандартные процессоры x86 были оптимизированы для работы с 32-битными целыми числами и не имели специализированных блоков для параллельной обработки.
Первым шагом Intel стала интеграция в процессор Pentium (1993) кэш-памяти второго уровня и улучшенного блока операций с плавающей запятой (FPU), но этого было недостаточно. В 1994 году Intel анонсировала проект «NSP» (Native Signal Processing), который предполагал использование основного процессора для задач ЦОС, что и привело к созданию MMX.
Официальный анонс MMX состоялся 8 января 1997 года с выходом процессора Pentium MMX. Технология была представлена как «ускорение мультимедиа и коммуникаций». Название MMX изначально расшифровывалось как «Matrix Math Extensions», но позже было изменено на «MultiMedia eXtensions», чтобы подчеркнуть её прикладное назначение.
¶Архитектура и принцип работы
MMX базируется на концепции SIMD (Single Instruction, Multiple Data — одна инструкция, множество данных). Это означает, что одна команда MMX может одновременно выполнять одну и ту же операцию над несколькими элементами данных, упакованными в один 64-битный регистр.
¶Регистры MMX
Для работы MMX используются 8 64-битных регистров, обозначаемых как MM0–MM7. Ключевая особенность архитектуры MMX заключается в том, что эти регистры физически совпадают с регистрами блока операций с плавающей запятой (FPU) — стека регистров FPU (ST0–ST7). Это было сделано для упрощения интеграции и минимизации изменений в ядре процессора. Однако это создавало серьёзное ограничение: переключение между использованием MMX и FPU требовало дорогостоящей операции очистки состояния (EMMS — Empty MMX State), иначе операции с плавающей запятой приводили к некорректным результатам.
¶Типы данных
MMX оперирует с 64-битными упакованными целыми числами. Данные могут быть упакованы в регистр одним из следующих способов:
- 8 упакованных байтов (8×8 бит) — для обработки пикселей или байтовых данных.
- 4 упакованных слова (4×16 бит) — для обработки сэмплов аудио или 16-битных цветовых компонентов.
- 2 упакованных двойных слова (2×32 бита) — для обработки 32-битных целых чисел.
- 1 64-битное слово (1×64 бита) — для операций с 64-битными данными.
¶Набор инструкций
Набор команд MMX включает 57 инструкций (в различных источниках указывается от 57 до 60, включая вариации). Они делятся на несколько категорий:
- Арифметические: сложение, вычитание, умножение с насыщением и без него. Насыщение (saturation) — ключевая особенность MMX: при переполнении результат не «заворачивается» (wrap-around), а фиксируется на максимально возможном значении (например, для 8-битного байта — 255), что критически важно для обработки графики и аудио, где недопустимы артефакты.
- Логические: AND, OR, XOR, ANDNOT.
- Сравнения: сравнение на равенство и больше/меньше, возвращающие маску из единиц или нулей.
- Сдвиги: логические и арифметические сдвиги, а также сдвиги с упаковкой.
- Преобразования: упаковка и распаковка данных (pack/unpack) — преобразование между разными типами упаковки (например, из 4×16 бит в 8×8 бит).
- Перемещения: загрузка и сохранение 64-битных данных из/в память, а также перемещение между регистрами MMX и целочисленными регистрами.
¶Классификация и поколения
MMX стал первым поколением SIMD-расширений для x86. Впоследствии Intel и AMD разработали более совершенные наборы инструкций, которые расширили и заменили MMX:
- MMX (1997) — базовый набор для целочисленных SIMD-операций.
- 3DNow! (1998, AMD) — расширение, добавившее SIMD-операции с плавающей запятой (одинарной точности). Включало инструкции для работы с векторами и матрицами, что ускоряло 3D-графику. 3DNow! была реализована в процессорах AMD K6-2 и K6-III, но не получила широкого распространения из-за доминирования Intel.
- SSE (Streaming SIMD Extensions, 1999, Intel) — кардинально новое расширение, которое добавило 8 новых 128-битных регистров (XMM0–XMM7) и инструкции для работы с числами с плавающей запятой одинарной точности. SSE решало проблему совместимости с FPU, так как использовало отдельные регистры. SSE постепенно вытеснило MMX и 3DNow!.
- SSE2 (2001, Intel) — расширение, добавившее поддержку 128-битных целочисленных SIMD-операций, что сделало MMX практически избыточным. SSE2 также включало операции с числами с плавающей запятой двойной точности.
- SSE3, SSSE3, SSE4 — последующие расширения, добавлявшие новые инструкции для улучшения производительности в специфических задачах (кодирование видео, криптография и т.д.).
- AVX (Advanced Vector Extensions, 2011, Intel) — современное расширение, использующее 256-битные регистры (YMM) и поддерживающее операции с плавающей запятой и целыми числами. AVX-512 (2016) использует 512-битные регистры (ZMM).
¶Применение
MMX нашёл применение в программном обеспечении, которое требовало интенсивной обработки данных, особенно в мультимедийных приложениях:
- Обработка изображений: фильтры (размытие, резкость), преобразование цветовых пространств (RGB ↔ YUV), масштабирование, поворот, сжатие и распаковка (JPEG, GIF).
- Обработка видео: кодеки (MPEG-1, MPEG-2, H.263), фильтрация, наложение эффектов, декодирование.
- Обработка аудио: микширование, эквалайзеры, сжатие (MP3, WMA), синтез звука.
- 2D-графика: ускорение прорисовки линий, заливки, копирования блоков (BitBlt), работа с альфа-каналами.
- 3D-графика: на начальном этапе MMX использовался для трансформации и освещения (T&L) вершин в программных рендерерах (например, в ранних версиях DirectX и OpenGL до появления аппаратных ускорителей). Однако с появлением SSE и 3DNow! эта роль перешла к ним.
¶Критика и ограничения
Несмотря на революционность, MMX имел ряд существенных недостатков:
- Совместимость с FPU: Физическое совмещение регистров MMX и FPU было серьёзным архитектурным компромиссом. Переключение между режимами требовало вызова инструкции EMMS, что снижало производительность и усложняло программирование. Смешивание кода MMX и FPU было практически невозможно без потери производительности.
- Ограниченный набор инструкций: MMX работал только с целыми числами. Операции с плавающей запятой, критически важные для 3D-графики и научных расчётов, не поддерживались. Это ограничение было устранено в 3DNow! и SSE.
- Отсутствие поддержки 64-битной архитектуры: MMX был разработан для 32-битных процессоров. В 64-битном режиме (x86-64) регистры MMX по-прежнему доступны, но их использование неэффективно по сравнению с SSE/AVX.
- Сложность программирования: Ручное написание кода на ассемблере с использованием MMX было трудоёмким и требовало глубокого понимания архитектуры. Компиляторы того времени плохо автоматически векторизовали код под MMX.
- Вытеснение более новыми технологиями: С появлением SSE (1999) и особенно SSE2 (2001), которые предоставляли более мощные и гибкие возможности, MMX постепенно утратил актуальность. SSE2 полностью покрывал функциональность MMX, добавляя поддержку чисел с плавающей запятой и 128-битных регистров.
¶Интересные факты
- Название MMX изначально было товарным знаком, и Intel активно продвигала его как маркетинговый термин. Процессоры Pentium MMX имели специальный логотип.
- В некоторых ранних реализациях MMX (например, в процессорах Pentium MMX) наблюдались проблемы с производительностью при выполнении определённых последовательностей инструкций, что приводило к «зависаниям» (stalls) конвейера.
- Технология MMX была лицензирована компанией Cyrix для своих процессоров 6x86MX, что позволило им конкурировать с Intel на рынке мультимедийных ПК.
- В современных процессорах (Intel Core, AMD Ryzen) MMX по-прежнему поддерживается для обратной совместимости, но практически не используется в новом программном обеспечении, так как все современные компиляторы и оптимизации ориентированы на SSE, AVX и их расширения.
¶Источники
- Intel Corporation. «Intel Architecture Software Developer’s Manual, Volume 2: Instruction Set Reference». 1997.
- Intel Corporation. «Pentium Processor with MMX Technology: Datasheet». 1997.
- AMD Corporation. «AMD-K6 Processor: MMX Technology». 1997.
- Patterson, D. A., & Hennessy, J. L. «Computer Organization and Design: The Hardware/Software Interface». 5th Edition. Morgan Kaufmann, 2013.
- Wikipedia. «MMX (instruction set)». (Англоязычная версия, использована для проверки фактов и дат).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


