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.
Примечания
- Millind Mittal, Alex Peleg, Uri Weiser. MMX Technology Architecture Overview // Intel Technology Journal. — 1997. — Т. 1, № 3.
- Intel in Haifa, Israel // intel.com
- Intel Israel Fab Tour — первое официальное международное пресс-мероприятие Intel в Израиле // ixbt.com
- Компиляторы могут остаться без поддержки Intel MMX // 2.09.2020
- Михаил Гук. Процессоры Intel: от 8086 до Pentium II. — СПб.: Питер, 1997. — С. 96. — 224 с. — ISBN 5-88782-398-4.
Литература
- Бердышев Евгений. Технология MMX. Новые возможности процессоров P5 и P6. — М.: ДИАЛОГ-МИФИ, 1998. — 234 с. — ISBN 5-86404-105-x.
Ссылки
- Технология MMX — новый этап развития процессоров Intel (рус.)
- IA Software Developer’s Manual, Vol 1 (англ.), см. раздел 8 о программировании MMX
- IA Optimization manual (англ.), Руководство
- Codenet.ru (рус.), статья о программировании ММХ, codenet.ru