MMX

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

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

Предпосылки[править | править вики-текст]

Фактически вся история развития компьютеров представляет собой непрерывную гонку между быстродействием центрального процессора и прочих систем — памяти и внешних устройств. Особенно это заметно в системах мультимедиа, где идет обработка звука и изображения, цифровое представление которых занимает большие объемы памяти. Для эффективной обработки звука и видео при относительно низкой пропускной способности системной магистрали (шины) все большее количество функций переносится в аппаратуру — модемы, видео- и звуковые адаптеры. Это вызывает их заметное удорожание в сравнении с общей стоимостью компьютера, что особенно неприятно в обстановке быстрого морального старения всей компьютерной аппаратуры.

Особенно данная проблема стала актуальна в начале 1990-х годов, когда ПК стал доступен широким массам пользователей и все активнее стал превращаться в средство развлечений. Первым процессором, ощутившим нехватку ресурсов для мультимедийных приложений по тому времени стал Pentium.

На самом деле, неспособность ПК с процессором Pentium эффективно обрабатывать в реальном времени звук и видео без специальных карт происходит уже не столько от общего быстродействия процессора или шины, которые в большинстве случаев вполне достаточны, а от характера его набора команд обработки данных, известного под названием CISC. Этот набор, состоящий из относительно сложных арифметико-логических команд, ориентирован на типовые задачи обработки данных, без специальной «заточки» под особые приложения. Эта выгодная для большинства приложений архитектура оказывается совершенно неэффективной при скоростной и специфической обработке больших массивов данных, поскольку сложная система команд используется на считанные проценты, а накладные расходы составляют десятки и сотни процентов.

Технология MMX представляет собой компромиссное решение, объединяющее пути, используемые в компьютерах SPARC и Silicon Graphics (технология RISC — Reduced Instruction Set Computer, компьютер с упрощенным набором команд), а также в компьютерах с параллельной архитектурой (технология SIMD: Single Instruction, Multiple Data — одна команда, много данных): классический процессор Pentium (CISC) с добавлением ряда простых (RISC) команд параллельной обработки данных (SIMD).

Технология MMX[править | править вики-текст]

Аббревиатура MMX происходит от выражения MultiMedia eXtension — расширение для мультимедиа, которое реализовано фирмой Intel в своей новой серии процессоров MMX с тактовой частотой 166 МГц и более.

Процессор Pentium MMX отличается от обычного Pentium по шести основным пунктам:

  1. добавлено 57 новых команд обработки данных;
  2. увеличен в два раза объем внутреннего кэша (16 кб для команд и столько же — для данных);
  3. увеличен объем буфера адресов перехода (Branch Target Buffer — BTB), используемого в системе предсказания переходов (Branch Prediction);
  4. оптимизирована работа конвейера (Pipeline);
  5. увеличено количество буферов записи (Write Buffers);
  6. введено так называемое двойное электропитание процессора.

Набор из 57 новых команд и является основным отличием; остальные пять — не более, чем сопутствующие изменения. Хотя увеличенный объем кэша и внутренних буферов и оптимизированный конвейер несколько ускоряют работу любых приложений, однако основное увеличение производительности — до 60 % — возможно только при использовании программ, правильно применяющих технологию MMX в обработке данных.

Обработка данных в MMX[править | править вики-текст]

Как уже говорилось, в Pentium MMX добавлено 57 новых команд обработки данных и, соответственно — четыре новых типа данных. За одну операцию команда MMX обрабатывает 64-разрядное двоичное слово (так называемое квадраслово, или QWord). Новые типы данных образуются от упаковки в квадраслово обычных типов — байтов (по 8), слов (по 4) или двойных слов (по 2). Четвертый тип представляет собой само квадраслово.

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

Набор MMX-команд[править | править вики-текст]

Набор MMX-команд состоит из команд пересылки данных, упаковки/распаковки, сложения/вычитания, умножения, сдвига, сравнения. Команды упаковки и сложения/вычитания могут работать в двух режимах: обычном, когда переполнение разрядной сетки вызывает «заворачивание» (wraparound) значения результата, и специальном, когда оно приводит к ограничению (clipping) результата до минимально или максимально допустимого значения. Режим ограничения в терминологии Intel называется Saturation (насыщение) — в нем особенно удобно выполнять смешивание цветов изображение или амплитуд звуковых сигналов, поскольку при обычном переполнении результат не имеет никакого смысла.

Команда умножения представлена тремя видами: первые два выполняют попарное умножение четырех слов с выбором либо старшей, либо младшей части результата, а третий выполняет операцию вида ab + cd для каждой пары из четырех слов операндов, что очень удобно при вычислении математических рядов.

Команды сдвига реализуют логический и арифметический сдвиги своих операндов (арифметический сдвиг отличается от логического тем, что при сдвиге вправо освободившиеся разряды заполняются копией знакового разряда, а не нулями, отчего он пригоден для умножения/деления знаковых операндов на степени двойки). Логические поразрядные команды выполняют операции И (AND), ИЛИ (OR), Исключающее ИЛИ (XOR), а также комбинированную команду И с инверсией одного из операндов (AND NOT), удобную для реализации «обратного выбора» по битовой маске.

Команды сравнения работают несколько необычно по сравнению с общепринятой логикой: вместо установки признаков для последующих команд перехода они генерируют единичные битовые маски для тех операндов, которые удовлетворяют условию, и нулевые — для остальных операндов. Последующие логические поразрядные операции могут выделить, погасить или как-то иначе обработать отмеченные таким образом операнды, которые в этом случае могут представлять собой точки изображения или отсчеты звукового сигнала.

Особенности реализации MMX[править | править вики-текст]

Для обработки данных и хранения промежуточных результатов в Pentium MMX используются восемь 64-разрядных регистров MM0..MM7, которые физически совмещены со стеком регистров математического сопроцессора. При выполнении любой из MMX-команд происходит установка «режима MMX» с отметкой этого в слове состояния сопроцессора (FPU Tag Word). С этого момента стек регистров сопроцессора рассматривается как набор MMX-регистров; завершает работу в режиме MMX команда EMMS (End MultiMedia State). С одной стороны, такая реализация позволила обеспечить нормальную работу приложений, использующих MMX, в многозадачных системах, не поддерживающих эту технологию, поскольку все подобные системы создают собственную копию содержимого стека сопроцессора и слова его состояния для каждого процесса. С другой стороны, переход между режимами занимает значительное время, и совмещение, например, в одном цикле команд сопроцессора с командами MMX может не только не ускорить, а даже существенно замедлить выполнение программы. Поэтому для достижения наилучших результатов рекомендуется группировать эти команды отдельно друг от друга, что на самом деле не представляет никакой сложности.

Производительность MMX[править | править вики-текст]

Так как MMX — достаточно узкоспециализированное расширение системы команд процессора, нельзя ожидать кардинального ускорения работы только от самого факта перехода на процессор MMX. На приложениях общего характера, незнакомых с MMX, реальная производительность возрастает лишь на единицы процентов, хотя тесты могут показывать ее возрастание на 20-30 % — это происходит из-за цикличности большинства тестов, когда большая часть цикла попадает в увеличенный внутренний кэш.

При использовании «чистого» MMX-кода, удачно подходящего к специфике решаемой задачи, быстродействие переписанного участка может возрасти в 5-6 раз, однако это ускорение будет локальным и неизбежно компенсируется «типовыми» участками программы, поэтому не следует сразу же ожидать от программ, использующих MMX, ускорения работы в разы. По максимальным результатам тестов Intel Media Benchmark и Norton Media Benchmark для Windows 95, обработка изображений с использованием технологии MMX происходит быстрее почти в пять раз, однако в среднем получается примерно 1,5—3-кратное ускорение. Одним из классов программ, которым использование MMX сильно помогает, являются игры.

Регистры 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 дополнительных инструкций для одновременной обработки нескольких единиц данных. Большинство команд имеют суффикс, который определяет тип данных и используемую арифметику:

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

Новые инструкции включают следующие группы:

  • Команды пересылки данных (Data Transfer Instructions) между регистрами MMX и целочисленными регистрами и памятью;
  • Команды преобразования типов
  • Арифметические операции (Arithmetic Instructions), включающие сложение и вычитание в разных режимах, умножение и комбинацию умножения и сложения;
  • Команды сравнения (Comparison Instructions) элементов данных на равенство или по величине;
  • Логические операции (Logical Instructions)- И, И-НЕ, ИЛИ и Исключающие ИЛИ, выполняемые над 64 битными операндами;
  • Сдвиговые операции (Shift Instructions) логические и арифметические;
  • Команды управления состоянием (Empty MMX State) очистка MMX — установка признаков пустых регистров в слове тегов.

Инструкции MMX не влияют на флаги условий. Регистры MMX, в отличие от регистров FPU, адресуются физически, а не относительно TOS. Любая инструкция MMX обнуляет поле TOS регистра состояния FPU. Инструкции MMX доступны из любого режима процессора.

MMX во встраиваемых процессорах[править | править вики-текст]

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

Примечания[править | править вики-текст]

Литература[править | править вики-текст]

  • Зубков С. В. Assembler для DOS, Windows, UNIX. 3-е изд., стер. — М. : ДМК Пресс; СПб. : Питер, 2004. — 608 с.
  • Роберт Шимонски Освой самостоятельно Unix. 10 минут на урок = Sams Teach Yourself Unix in 10 Minutes. — М.: «Вильямс», 2006. — С. 272. — ISBN 0-672-32764-3.

Ссылки[править | править вики-текст]



Наборы расширения базовых инструкций процессоров семейства x86
MMX | MMXEXT | SSE | SSE2 | SSE3 | SSSE3 | SSE4 | ATA | 3DNow! | 3DNowExt | SSE5 | AVX | AES | FMA