MMX (MMX)

Перейти к навигации Перейти к поиску

MMX (Multimedia Extensions — мультимедийные расширения) — коммерческое название дополнительного SIMD-набора инструкций, разработанного компанией Intel и впервые представленного в 1997 году одновременно с линией процессоров Pentium MMX. Набор инструкций был предназначен для ускорения процессов кодирования/декодирования потоковых аудио- и видеоданных. Является развитием технологий, предложенных в микропроцессоре i860[1]. Разработан в лаборатории Intel в Хайфе, Израиль, в первой половине 1990-х[2][3].

Сейчас набор инструкций MMX, представленный в 1997 году, является откровенно устаревшим и уже давно вытеснен различными версиями SSE и AVX. Тем не менее, в средствах разработки он всё ещё формально поддерживается; правда, в силу редкости использования реализация страдает от многочисленных дефектов. Поэтому есть предложения удалить его из популярного набора компиляторов LLVM[4].

Регистры MMX

[править | править код]

Расширение MMX включает в себя восемь 64-битных регистров общего пользования MM0—MM7. Для совместимости со способами переключения контекста процессора в существующих ОС Intel была вынуждена объединить в программной модели процессора восемь регистров MMX с мантиссами восьми регистров FPU. Аппаратно это могут быть разные устройства, но с точки зрения программиста — это одни и те же регистры. Таким образом, нельзя одновременно пользоваться командами математического сопроцессора и MMX.

Типы данных MMX

[править | править код]

Команды технологии MMX обрабатывают целочисленные данные, упакованные в группы (векторы) общей длиной 64 бита, либо одиночные 64-битные слова. Такие данные могут находиться в памяти или в восьми MMX-регистрах.

Команды технологии MMX работают со следующими типами данных:

  • упакованные байты (восемь байтов в одном 64-разрядном регистре) (англ. packed byte);
  • упакованные слова (четыре 16-разрядных слова в 64-разрядном регистре) (англ. packed word);
  • упакованные двойные слова (два 32-разрядных слова в 64-разрядном регистре) (англ. packed doubleword);
  • 64-разрядные слова (англ. quadword).

MMX-команды имеют следующий синтаксис: instruction [dest, src] Здесь instruction — имя команды, dest обозначает выходной операнд, src — входной операнд.

Систему команд образуют 57 инструкций, позволяющих параллельно обрабатывать несколько элементов данных[5]. Большинство команд имеет суффикс, который определяет тип данных и используемую арифметику:

  • US (unsigned saturation) — арифметика с насыщением, данные без знака.
  • S или SS (signed saturation) — арифметика с насыщением, данные со знаком. Если в суффиксе нет ни S, ни SS, используется циклическая арифметика (wraparound).
  • B, W, D, Q указывают тип данных. Если в суффиксе есть две из этих букв, первая соответствует входному операнду, а вторая — выходному.

Можно выделить следующие группы инструкций[5]:

  • пересылки данных, позволяющих перемещать данные между регистрами MMX и целочисленными регистрами процессора или памятью;
  • упаковки и распаковки данных, позволяющих преобразовывать элементы векторов в элементы с меньшей разрядностью или попарно объединять элементы с образованием элементов большей разрядности;
  • арифметических, например, сложение и вычитание в различных режимах, умножение, а также операция умножения 4 пар операндов с последующим сложением первого произведения со вторым, а третьего - с четвёртым;
  • сравнения векторов с записью результата сравнения в виде битовой маски;
  • логических — И, инверсия прямой импликации, ИЛИ и исключающее ИЛИ;
  • логических и арифметических сдвигов;
  • управления состоянием — установка признаков пустых регистров слова тегов FPU.

Выполнение инструкций MMX не приводит к изменению флагов условий слова состояния FPU, за исключением поля TOP. К регистрам MMX можно обращаться непосредственно по именам, в отличие от регистров FPU, которые организованы в стек с вершиной, определяемой полем TOP слова состояния FPU. При этом поле TOP сбрасывается после выполнения любой инструкции MMX. Выполнение инструкций MMX возможно в любом режиме процессора[5].

MMX во встраиваемых процессорах

[править | править код]

Семейство процессоров Intel XScale, начиная с модели PXA270, содержит дополнение к системе команд ARM, называемое iwMMXt, похожее на расширение IA-32 MMX.

Примечания

[править | править код]
  1. Millind Mittal, Alex Peleg, Uri Weiser. MMX Technology Architecture Overview // Intel Technology Journal. — 1997. — Т. 1, № 3. Архивировано 4 марта 2016 года.
  2. Intel in Haifa, Israel Архивная копия от 19 июля 2013 на Wayback Machine // intel.com
  3. Intel Israel Fab Tour — первое официальное международное пресс-мероприятие Intel в Израиле Архивная копия от 11 ноября 2013 на Wayback Machine // ixbt.com
  4. Компиляторы могут остаться без поддержки Intel MMX Архивная копия от 3 сентября 2020 на Wayback Machine // 2.09.2020
  5. 1 2 3 Михаил Гук. Процессоры Intel: от 8086 до Pentium II. — СПб.: Питер, 1997. — С. 96. — 224 с. — ISBN 5-88782-398-4.

Литература

[править | править код]
  • Бердышев Евгений. Технология MMX. Новые возможности процессоров P5 и P6. — М.: ДИАЛОГ-МИФИ, 1998. — 234 с. — ISBN 5-86404-105-x.