Команды mmx ( начиная с pentium mmx, k6 )


Содержание

Векторная обработка (SIMD-команды)

В классификации Г. Флинна (см. табл. 2.4) имеется рубрика SIMD — поток данных, обрабатываемых одной командой. В последовательных расширениях системы команд х86, выполненных Intel и AMD, все более полно используются принципы обработки одной командой вектора (потока) данных.

ММХ (MultiMedia extension) — архитектура системы команд (57 команд для ФЗ, см. табл. 3.4), непосредственно предназначенных для задач мультимедиа, связи и графических приложений, которые часто используют сложные алгоритмы, исполняющие одинаковые операции на большом количестве типов данных (байты, слова и двойные слова). Анализ участков таких программ с большим объемом вычислений показал, что такие приложения имеют следующие общие свойства, определившие выбор системы команд и структуры данных:

  • • небольшая разрядность целочисленных данных (например, 8-разрядные пиксели для графики или 16-разрядное представление речевых сигналов);
  • • небольшая длина циклов, но большое число их повторений;
  • • большой объем вычислений и значительный удельный вес операций умножения и накопления;
  • • существенный параллелизм операций в программах.

Это и определило новую структуру данных и расширение системы команд. При этом было достигнуто общее повышение производительности на 10—20 %, а в программах обработки мультимедиа — до 60 %.

В процессоре Pentium MMX (1996 г.) появляются 8 новых 64-разрядных «регистров» с именами ммО—мм7 (или же ммп), в действительности, эти новые «регистры» были только псевдонимами для регистров стека ПЗ х87 (см. рис. 3.4). В связи с тем, что каждый из регистров стека содержит 80 бит, старшие 16 бит регистров стека оказываются неиспользованными в ММХ (рис. 3.4). Поэтому в режиме ММХ они заполняются всеми единицами, что позволяет отличать данные формата с плавающей запятой от ММХ-данных.

Преимущество совмещения ММп с регистрами FPU состоит в том, что одни и те же команды и структуры данных различных операционных систем (при обработке прерываний и вызове подпрограмм) могут использоваться как для сохранения содержания регистров ПЗ, так и регистров 3DNow!.

Каждый из регистров ммп предназначен для целых чисел на 64 бита. Однако главным понятием набора команд ММХ является концепция упакованных типов данных (см. табл. 1.10, рис. 1.5).

MMX-команды исполняются в том же режиме процессора, что и команды с плавающей запятой. Поэтому при исполнении всех MMX-команд (кроме EMMS) «портится» слово состояния регистров с плавающей запятой. В табл. 3.4 приведены примеры некоторых команд.

MMX-команды используются в ЦП, начиная с Pentium MMX (AMD Кб) и имеют следующий синтаксис:

instruction [src, dest]

Здесь instruction — имя команды, dest — выходной, а src — входной операнды. Все команды ММХ оперируют с двумя операндами — источник и приемник. В обозначениях команды правый операнд является источником, а левый — приемником.

Операнд-приемник может также быть и вторым операндом-источником. Команды записывают в приемник результат.

Операнд-источник для всех команд ММХ (кроме команд пересылок) может располагаться либо в памяти, либо в регистре ММХ. Операнд-приемник должен располагаться в регистре ММХ.

Для команд пересылок операндами могут также выступать целочисленные РОН или ячейки памяти. Большинство команд имеет суффикс, который определяет тип данных и используемую арифметику:

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

Все 57 MMX-команд разделены на следующие классы — арифметические, сравнения, преобразования, логические, сдвига, пересылки и смены состояний. Основные форматы представлены в табл. 3.4 (не представлены команды сравнения, логические, сдвига и смены состояний).

Архитектура 3DNow! впервые реализована в процессорах AMD К6-2 (май 1998 г.). Технология 3DNow! включает 21 дополнительную команду, новые типы данных и использует регистры ммп (ммо—ММ7) для поддержки высокопроизводительной обработки ЗО-графики и звука (см. табл. 3.5).

В то время как архитектура ММХ предполагает целочисленную арифметику, векторные команды 3DNow! параллельно обрабатывают две пары 32-разрядных вещественных операндов одинарной точности (см. табл. 1.10).

Таблица 3.4. Некоторые команды технологии ММХ

Сложение с округлением [byte, word, doubleword]

MMX-технология

MMX = Multi-Media eXtension – мульти-медиа расширение.

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

· использование данных целого типа небольшой разрядности, например, 8-разрядные графические пиксели и 16-разрядная оцифровка звука;

· короткие циклы с высокими коэффициентами повторяемости;

· большое количество операций умножения и суммирования, в том числе из-за широкого использования быстрого преобразования Фурье;

· применение алгоритмов, требующих интенсивных вычислений;

· широкое использование операций с высоким уровнем параллелизма.

Было отмечено, что в мультимедийных приложениях 80% времени выполнения программы приходится на 10-20% программного кода. Малая разрядность данных требует дополнительных действий при их обработке на 32-разрядном микропроцессоре, не позволяя в то же время использовать всю мощь 32-разрядной архитектуры.

Простым и наглядным примером такого рода обработки может служить изменение значений всех пикселей видеопамяти на определенную величину. Пусть емкость видеопамяти составляет 1 Мбайт, а каждый пиксель кодируется 1 байтом. Тогда для выполнения указанного действия потребуется выполнить примерно 1 млн операций по прибавлению константы к однобайтовому операнду, который выбирается из памяти. Одновременное выполнение таких действий над 4 операндами, что сократило бы количество операций в 4 раза, невозможно в классической архитектуре IA-32 из-за отсутствия соответствующих команд в системе команд и форматов используемых данных.

На устранение этих противоречий и были направлены основные усилия разработчиков технологии MMX. Процессор Pentium MMX, в котором впервые была реализована новая технология, был представлен фирмой INTel в январе 1997 года. Он позволил на 10-20 % повысить производительность на стандартных тестах, а для специализированных мультимедийных приложений — на 50 %.

Главной особенностью MMX-технологии является новый принцип обработки информации — обработка по схеме SIMD (Single Instruction Multiple Data) — один поток команд, много потоков данных. Этот вид обработки подразумевает, что с помощью одной команды одна и та же операция выполняется сразу над несколькими операндами, например, производится суммирование нескольких пар слагаемых. Такой подход требует поддержки как со стороны системы команд и форматов данных, так и на аппаратном уровне.

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

Расширение MMX использует новые типы упакованных данных:

Packed byte — упакованные байты (восемь байт).

Packed word — упакованные слова (четыре слова).

Packed doubleword — упакованные двойные слова (два двойных слова).

Packed quadword — учетверенное слово.

Расширение MMX включает 8 регистров общего пользования (MM0-MM7). Размер регистров составляет 64 бита. Физически эти регистры пользуются младшими битами рабочих регистров сопроцессора.

Команды MMX «портят» регистр состояния и регистр тэгов. По этой причине совместное использование команд MMX и команд сопроцессора может вызвать определенные трудности. Другими словами, перед каждым использованием команд MMX Вам придется сохранять контекст сопроцессора, а это может весьма замедлить работу программы. Важно отметить также, что команды MMX работают непосредственно с регистрами сопроцессора, а не с указателями на элементы стека.

Важное правило, которое следует соблюдать при совместном использовании математического сопроцессора и MMX-расширения: последней выполняемой командой MMX-расширения должна быть команда EMMS. Дело в том, что все ММХ-команды выполняются в том же режиме, что и команды сопроцессора с плавающей точкой, что вызывает изменения содержимого регистра состояния (swr) сопроцессора. Команда EMMS обеспечивает корректный переход процессора от выполнения фрагмента программного кода с ММХ-командами к обработке обычных команд с плавающей точкой. При этом emms устанавливает значение 1 во всех разрядах регистра состояния. Если фрагмент программы, в,котором есть ММХ-команды, не заканчивается командой emms, то все последующие операции с плавающей точкой будут давать некорректные результаты, о чем сигнализирует исключение Stack overflow.

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

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


Команда PMADDWD «Умножение с накоплением» эффективна при выполнении вычислений, характерных для обработки звуковой и графической информации. Она одновременно перемножает четыре операнда формата «слово» (16 разрядов), попарно складывает результаты умножений двух младших и двух старших байт и получает два 32-разрядных результата.

Команда PMAXSB выполняет нахождение максимума одновременно для восьми 8-разрядных операндов. Она позволяет не только выполнить операцию пакетами по 8 байт, но и избежать ветвлений, а следовательно, и «штрафов» за их неправильное предсказание.

Не нашли то, что искали? Воспользуйтесь поиском:

Знакомство с MMX-технологией.

Автор: Сергей Забарянский

Сергей Забарянский, один из ведущих программистов недавно вышедшего шутера Venom, созданного GSC Game World, а теперь, один из основателей новой команды разработчиков Deep Shadows, делится своими соображениями по данной теме.

Какие же именно инструкции есть у популярного процессора?
Как организована работа с дополнительными типами данных?
И главное — зачем все это?
— Ответы на эти вопросы перед вами.

Призрак MMX уже давно бродит по страницам компьютерных изданий. Шуму вокруг него предостаточно. «MMX — прорыв в новое тысячелетие», — говорили нам страницы газет. А все почему? Из-за каких-то пятидесяти семи инструкций! И хотя цифра внушает нам трепет, все же не совсем ясно, как, не меняя кардинально архитектуру микропроцессора, можно получить супер-мультимедийный компьютер? За счет чего?

Постараемся развеять туман, нагнанный рекламной компанией на простые вещи. Существует множество multimedia приложений. На первый взгляд между ними нет ничего общего. Однако на самом деле, внутри, они все как близнецы-братья. Мультимедийные приложения обрабатывают большие объемы данных. Самая трудоемкая и в тоже время часто используемая операция — применение одного и того же преобразования к массиву данных. Как это понимать?

Допустим, у нас есть два массива: A и B, длиной по 8 байтов каждый. Поставим себе задачу — прибавить к каждому элементу массива B соответствующий ему элемент массива A. Это приведет нас к такой программе:

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

Не правда ли просто и элегантно? Красиво ответите вы, однако какое отношение это все имеет к multimedia? Допустим, выполняется программа обрабатывающая 256-цветное изображение. Обычно она обрабатывает каждый пиксел по отдельности, используя же MMX, она может обрабатывать восемь пикселей сразу! Так что же такое MMX? MMX — это расширение, включающее в себя 57 новых команд и восемь 64-разрядных регистров. В основу положен принцип SIMD (Single Instruction Multiple Data) — одна инструкция — множество данных. MMX предоставляет инструкции для складывания, умножения и даже выполнения комбинированных операций. К примеру, команда PMADDWD перемножает, а затем складывает четыре слова данных, при этом она выполняется намного быстрее программы использующей только набор «стандартных» инструкций. Технология MMX предоставляет простую, гибкую программную модель, не требуя при этом перевода процессора в какой-то особенный режим. Все существующие программы будут корректно исполняться на процессорах с MMX без каких-либо изменений, даже если в системе присутствуют приложения, использующие новую технологию.

В процессорах использующих MMX добавлено 8 новых 64-разрядных регистров MM0-MM7. Они могут быть использованы только для выполнения операций с типами данных MMX. Команды MMX позволяют задавать в качестве операндов как регистры общего назначения (EAX, EBX, ECX, EDX, EBP, ESI, EDI и ESP), так и переменные в памяти, используя для этого стандартную схему адресации принятую в процессорах x86. Хотя MMX регистры и имеют ни с чем не совпадающие названия, на самом деле, они являются «псевдонимами» регистров сопроцессора (st0-st7). Это означает, что, изменяя один из регистров MMX, в своей программе, мы в то же время изменяем регистры сопроцессора. Зачем такие сложности? Не проще ли было их сделать «раздельными»? В конце концов, для этого понадобилось бы не так уж и много усилий со стороны разработчиков процессора. Очевидно, это было сделано не только с целью «добавить работу программистам». Как всегда, все дело в совместимости. Если бы было сделано так, как подсказывает логика, то пришлось бы переписать операционную систему! Те, кто знаком с работой процессора в защищенном режиме, наверное, уже догадались, о чем идет речь. Конечно же — о мультизадачности. Дело в том, что в многозадачной среде программы должны быть независимы друг от друга. При переключении с одной задачи на другую значения всех регистров «старой» задачи должны быть сохранены. В настоящее время о сохранении регистров микропроцессора заботится сам микропроцессор, а о сохранении регистров сопроцессора заботится операционная система. Так как все регистры MMX одновременно являют собой регистры FPU, то OS, сохраняя регистры FPU, сохраняет и регистры MMX! Проблема решена. Программист должен заботиться о том, чтобы код, использующий FPU и MMX, работал корректно. Код одного типа (MMX или FPU) должен быть по возможности сгруппирован. Для достижения наибольшей производительности в программе не должно быть условных переходов из части кода, использующего FPU к коду использующему MMX. После того как работа с MMX завершена, нужно очистить регистры mmreg0-mmreg7. Это делается для того, чтобы в последующем сопроцессор не столкнулся с «грязными» регистрами непонятного формата. Для этого используется новая инструкция EMMS, которая помечает все регистры FPU как «пустые».

Всем инструкциям x86 ставится в соответствие число — код операции. Длинна кода операции один-два байта. Ему может предшествовать байт SIB (Scale-масштаб, Index-индекс, Base-база) определяющий полный режим адресации. В процессоре x86 перед инструкцией также возможно присутствие префиксов, несколько модифицирующих «смысл» команды (префикс замены сегмента, префикс команды). Инструкции MMX формируются точно также как и «старые» команды.

Прежде чем начать использовать MMX, было бы неплохо убедиться в его присутствии. Если вам кажется, что это скучная задача, то вы ошибаетесь. Корпорация Intel делает все от нее зависящее, чтобы программисты отрабатывали свой хлеб. Решение, предлагаемое в документации до гениального просто. Достаточно вызвать инструкцию CPUID для получения флагов говорящих о том, чем напичкан процессор. Все бы было хорошо, если бы не одна тонкость. Для того чтобы ее вызвать, не получив при этом исключения (Exception), нужно убедиться в том, что программа выполняется на процессоре Pentium. Как это определить?

Судя по всему, должна быть команда, сообщающая информацию о типе процессора. Забавно, но у Intel ушло десять лет на то, чтобы реализовать такую инструкцию, хотя она должна была бы появиться еще в i8086. Одной из надежных эвристик определяющих тип процессора является проверка «устанавливаемости» 21 бита регистра флагов (EFLAGS). Чтобы не быть голословным, я написал программу mmxtest.asm (mmxtest.zip (919 байт)), которая проверяет присутствие MMX и не двусмысленно об этом сообщает.

Точно также как и «обычные» инструкции микропроцессора инструкции MMX могут выполняться в паре с другой инструкцией одновременно. Более того, в некоторых случаях, возможно, одновременное выполнение двух инструкций MMX. Операции сдвига и умножения могут быть выполнены как на u-, так и на v- конвейере. Ограничения, накладываемые на возможность распаровки следующие:

* Две инструкции, использующие блок сдвигов MMX (инструкции упаковки/распаковки и сдвига) не могут выполняться одновременно.

* Две инструкции, использующие блок умножения MMX (инструкции типа pmul, pmulh, pmadd) не могут выполняться в паре.

* Инструкции MMX, которые обращаются к памяти, могут выполняться только на u- конвейере.

* Целевой регистр MMX-инструкции попавшей в u-конвейер не должен совпадать с регистром-источником инструкции попавшей на v-конвейер (тест на зависимость). То есть пара инструкций:

*Инструкция EMMS не паруется.

* Если или CR0.TS, или CR0.EM установлены, то MMX инструкции не могут быть выполненными на v-конвейере.

MMX поддерживает данные в упакованном формате. Это означает, что каждый 64 битовый регистр MMX может интерпретироваться как:

    1. Восемь байтов
    2. Четыре слова
    3. Два двойных слова
    4. Одна 64-разрядная переменная

То, как интерпретируется конкретный регистр, отлично отображается в мнемонике команды. К примеру, инструкция PADDB складывает два операнда, полагая, что они являются набором байт, а PADDW считает операнды набором слов.

Все инструкции можно разбить на следующие группы:

арифметические команды
сложение PADDB PADDD PADDSB PADDSW PADDUSB PADDUSW PADDW
сложение и умножение PMADDWD
умножение PMULHW PMULLW
вычитание PSUBB PSUBD PSUBSB PSUBSW PSUBUSB PSUBUSW PSUBW
команды очищающие регистры
EMMS
команды сравнения
проверка равенства PCMPEQB PCMPEQD PCMPEQW
сравнение PCMPGTB PCMPGTD PCMPGTW
команды упаковки/распаковки
PUNPCKHBW PUNPCKHDQ PUNPCKHWD PUNPCKLBW PUNPCKLDQ PUNPCKLWD PACKSSDW PACKSSWB PACKUSWB
логические команды
PAND PANDN POR PXOR
команды передачи данных
MOVD MOVQ
команды сдвига
логический сдвиг влево PSLLD PSLLQ PSLLW
арифметический сдвиг вправо PSRAD PSRAW
логический сдвиг вправо PSRLD PSRLQ PSRLW

Команды MMX имеют такой формат:

То есть источником может быть как переменная памяти, так и регистр MMX. А целевым может быть только регистр MMX. К тому же MOVD и MOVQ допускают пересылки из регистров MMX в память. Одним из первых вопросов у меня был: «зачем так много команд?». Ведь количество операций не так уж и велико. Дело в том, что название команды формируется из двух частей. Первая часть говорит о том, что она делает (MOV,PSUB,PADD). Вторая же говорит о том, как она интерпретирует операнды. Рассмотрим команду PACKUSWB. Первая часть строки — PACK указывает, что будем что-то упаковывать. Вторая же — USWB в свою очередь разбивается на две US и WB. US говорит о том, что результат будет беззнаковым с сатурацией , WB же указывает, что источник — упакованные слова, результат — упакованные байты. Благодаря такой записи смысл инструкции схватывается «на лету», по этой же причине команд так много. Приведем полный перечень мнемоник:

    P-упакованные данные (Packed data)
    B-байт (byte)
    W-слово (word)
    D-двойное слово (DoubleWord)
    Q-64 битовая переменная (QuadWord)
    S-знаковая (Signed)
    U-беззнаковая (Unsigned)
    SS-знаковая с сатурацией (Signed Saturation)
    US-беззнаковая с сатурацией (Unsigned Saturation)

Скорее всего, прочитав кое-что о командах, вас потянуло ко сну. Дабы не спать на рабочем месте давайте поговорим о простом.

Вообще существует множество задач, где MMX приходится весьма кстати. К примеру, MMX прекрасно подходит для задач обработки звука. Действительно, оцифрованный звук задается последовательностью 8-ми,16-ти или 32-разрядных чисел. По этой причине, если нам нужно, к примеру, воспроизвести два звука одновременно, то согласно теореме о суперпозиции нам следует сложить соответствующие последовательности чисел. Тут MMX на высоте. Кроме того, как нельзя кстати, есть возможность складывать с сатурацией. В результате скорость может быть повышена в 4-5 раз.

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

Правда можно в качестве элементов использовать числа с фиксированной точкой . Размер такого числа — четыре байта. То есть в один регистр поместится только два элемента вектора. Тонкость тут в том, что в случае трехмерных преобразований скалярное произведение нужно считать от двух трехэлементных векторов. Решить проблему можно — использовать для этого два MMX регистра: в первом два элемента, во втором один. Однако выигрыш при этом будет не столь значителен, как хотелось бы.

К чему же мы пришли?

Очевидно, что технология MMX — это шаг вперед. Аббревиатура MMX — уже стала символом революции. Не даром корпорация Intel пыталась в судебном порядке запретить AMD ее использовать, впрочем, безуспешно.

Она прекрасно вписывается в существующую архитектуру микропроцессора. Сохраняется полная совместимость с уже написанными программными продуктами. Наряду с этим видны и ограничения, заложенные в нее, которые со временем нужно будет преодолевать.

КРАТКОЕ ОПИСАНИЕ КОМАНД.

Приведем описание некоторых инструкций, помогающих понять суть работы MMX.

MOVD
Формат
MOVD mmreg1, reg32/mem32
MOVD reg32/mem32, mmreg1
Описание
Инструкция MOVD пересылает 32 младших бита регистра MMX в регистр общего назначения или память. Или же из регистра общего назначения/памяти в регистр MMX. В последнем случае кроме собственно пересылки биты 32-64 соответствующего регистра обнуляются.

PADDB
Формат
PADDB mmreg1, mmreg2/mem64
Описание
Складывает восемь 8-разрядных чисел операнда источника (MMX регистра или 64-разрядного поля памяти) и восемь 8-разрядных чисел операнда-получателя (регистра MMX). В случае переполнения полученные значения заворачиваются (то есть 255+10=9) без установки флага переноса при подсчете последующих байтов. Результат помещается в операнд-получатель.

PADDSW
Формат
PADDSW mmreg1, mmreg2/mem64
Описание
Складывает четыре 16-битных чисел со знаком операнда источника (регистра MMX или 64-разрядного поля памяти) и четыре соответствующих значения операнда-получателя (регистра MMX). Если сумма каких-либо двух из них менее чем -32768 (8000h), то результат сложения -32768 (8000h). Аналогично в случае, когда сумма превышает 32767 (7FFFh), то возвращаемый результат 32767 (7FFFh). Результат заносится в операнд-получатель.Следующий список возможных ситуаций помогает понять, как происходит сложение:

Если число D250h (-11696) складывается с 8807h (-30713), то получаемый результат 8000h (-32768) — минимально возможное 16-разрядное число.
Если число 5321h (+21281) прибавляется в EC22h (-5086), то получаемый результат 3F43h (+16195).
Сумма 16-разрядного числа 7007h (+28679) и 0FF9h (+4098) дает результат 7FFFh (+32767) — максимально возможное положительное число.
Если к FFFFh (-1) прибавить FFFFh (-1), то получим FFFEh (-2).

PAND
Формат
PAND mmreg1, mmreg2/mem64
Описание
Инструкция PAND выполняет логическую операцию «и» над операндами. Результат заносится в операнд-получатель. Если соответствующие биты источника и получателя равны единице, то значение итогового бита единица. Эта команда может использоваться для распаковки упакованных переменных при помощи маски полученной от инструкций сравнения PCMPEQ и PCMPGT.


PCMPEQB
Формат
PCMPEQB mmreg1, mmreg2/mem64
Описание
Сравнивает источник с получателем, рассматривая операнды как упакованные байты. Если биты операндов эквивалентны, то все биты 8-разрядной части получателя устанавливаются равными единице, в противном случае они обнуляются.

PCMPGTD
Формат
PCMPGTB mmreg1, mmreg2/mem64
Описание
Аналогична PCMPEQ, но в отличие от нее биты в целевом операнде устанавливается в том случае, когда байт целевого операнда больше соответствующего байта операнда источника.

PACKUSWB
Формат
PACKUSWB mmreg1, mmreg2/mem64
Описание
Переводит восемь знаковых слов задаваемые аргументами (по четыре слова в каждом) в восемь беззнаковых байт. После чего результат сохраняется в mmreg1. Сатурация при этом происходит следующим образом:

* Если слово содержит отрицательное число, то соответствующий ему байт будет равен нулю
Если значение слова превышает 255, то соответствующий ему байт будет равен 255

Илон Маск рекомендует:  Иерархия в HTML

Команды mmx ( начиная с pentium mmx, k6 )

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

Особенно данная проблема стала актуальна в начале 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

Расширение 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), включающие сложение и вычитание в разных режимах, умножение и комбинацию умножения и сложения;

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

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

Примечания


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

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

См. также

Литература

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

Ссылки

  • IA Software Developer’s Manual, Vol 1 (англ.) , см. раздел 8 о программировании MMX
  • IA Optimization manual (англ.) , Руководство
  • Codenet.ru (рус.) , статья о программировании ММХ, codenet.ru
  • [1] (рус.) , статья о программировании ММХ
Это заготовка статьи о компьютерах. Вы можете помочь проекту, исправив и дополнив её.
Это примечание по возможности следует заменить более точным.
Для улучшения этой статьи желательно ? :
  • Проставив сноски, внести более точные указания на источники.
Наборы расширения базовых инструкций процессоров семейства x86
MMX | MMXEXT | SSE | SSE2 | SSE3 | SSSE3 | SSE4 | ATA | 3DNow! | 3DNowExt | SSE5 | AVX | AES

Wikimedia Foundation . 2010 .

Смотреть что такое «MMX» в других словарях:

MMX — [Abk. für Multimedia Extension, dt. »Multimediaerweiterung«], eine Prozessortechnologie von Intel, welche die Ausführung von Multimedia Software beschleunigt. MMX umfasst einen Satz von 57 neuen Grafik , Audio und V >Universal-Lexikon

Mmx — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Sigles d une seule lettre Sigles de deux lettres > Sigles de trois lettres … Wikipédia en Français

MMX — es el acrónimo de MultiMedia eXtensions, un juego de instrucciones introduc >Enciclopedia Universal

MMX — may refer to:* MMX (instruction set), a single instruction, multiple data instruction set designed by Intel * Michelson Morley Experiment, the 1887 experiment attempting to find ev >Wikipedia

MMX — steht für: Flughafen Malmö, ein Flughafen in Schweden (IATA Code) Michelson Morley Experiment, physikalisches Experiment Mineração e Metálicos S.A., Bergbaufirma von Eike Batista Multi Media Extension, von Intel entworfene Prozessortechnik Das… … Deutsch Wikipedia

MMX — (Multi Media Extensions) improved and very fast Pentium processor for operating multimedia programs … English contemporary dictionary

MMX — DEFINICIJA krat. inform. integrirani sklop Pentium© serije procesora koji poboljšava multimedijalne sposobnosti računala ETIMOLOGIJA engl. Multi media extensions© … Hrvatski jezični portal

MMX — Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías, prensa diaria o páginas de Internet f >Wikipedia Español

MMX — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Sigles d’une seule lettre Sigles de deux lettres > Sigles de trois lettres Sigles de quatre lettres … Wikipédia en Français

MMX — ● np. tm. ►PUCE►TM MultiMedia eXtension ou Matrix Math Extensions. Ensemble de 57 instructions incluses en 1997 dans les processeurs Intel à partir du Pentium pour faciliter le traitement du son et des images. Il s agit en gros de l incorporation … Dictionnaire d’informatique francophone

Технология MMX — новый этап развития процессоров Intel

Что такое MMX? Новый стандарт семейства x86 Производители оборудования — за MMX Решающее слово — за разработчиками ПО Что дальше? Как быть пользователям? История разработки Pentium MMX В чем причина задержки выпуска Pentium MMX Каким будет микропроцессор начала 2000 г.

Итак, 8 января 1997 г. произошло событие, которого мировое компьютерное сообщество ждало в течение всего прошлого года: компания Intel объявила о выпуске процессора Pentium с технологией MMX и начале его поставок на рынок. (О планах создания новой модели с рабочим названием P55C руководство Intel объявило еще в начале прошлого года.) Выпуск нового процессора являет собой очень важный шаг в развитии всей индустрии ПК; это событие имеет огромное значение не только для производителей оборудования и разработчиков ПО, но и для пользователей.

Внешняя сторона дела выглядит следующим образом. В новом процессоре реализован дополнительный набор из 57 команд; таким образом, их общее число достигло 277. Тут можно вспомнить, что в первом процессоре серии x86, знаменитой модели 8086, выпущенной в 1979 г., оно было равно 170. Следующее расширение произошло только в 1985 г.: в микропроцессоре 386 число команд выросло до 220. С тех пор развитие архитектуры процессоров шло постоянно, росла их производительность, менялся аппаратный интерфейс (разъем), но с точки зрения программного обеспечения все оставалось по-прежнему — система команд не изменилась даже в Pentium Pro. В 486-м стандарт был расширен за счет включения в него операций с плавающей запятой, которые ранее рассматривались как стандартное, но необязательное дополнение, реализуемое сопроцессором. На уровне микрокоманд тоже происходили многие важные изменения, и именно поэтому постоянно появлялись компиляторы, оптимизирующие программы под процессоры 386, 486 и т. д. Однако в программировании, даже на ассемблере, все оставалось в принципе по-прежнему. И вот теперь, через 12 лет, Intel решила дополнить систему команд процессора.

Следует отметить некоторые принципиальные различия между ситуациями 1997 и 1985 гг. Выпуск модели 386 ознаменовал не просто смену второго поколения микропроцессоров третьим, а начало перехода от 16-разрядных к 32-разрядным системам. В случае с MMX ни о каком переходе к новому поколению микропроцессоров речь не ведет даже Intel: несмотря на увеличение числа команд, в его основе лежит внутренняя архитектура и технология производства Pentium. В какой-то степени появление нового набора команд можно сравнить с интеграцией на кристалле встроенного математического сопроцессора. И тем не менее, хотя речь идет в первую очередь о вроде бы чисто механическом расширении топологии процессора, на самом деле Pentium MMX, учитывая реализацию в нем целого ряда новых архитектурных и технологических решений, вполне можно отнести к классу 5,5.

Что такое MMX?

Несмотря на официальные утверждения Intel, что название MMX является просто товарным знаком фирмы и не несет никакой смысловой нагрузки, уже давно принято производить сокращение ММХ от MultiMedia eXtention — мультимедийное расширение. Действительно, дополнительный набор команд предназначен в первую очередь для реализации алгоритмов, характерных для обработки графических, видео- и аудиоданных: фильтрации, преобразований Фурье, свертки и пр.

Включение подобных специальных операций в универсальный процессор является признанием того факта, что мультимедийные задачи становятся массовыми и будут сохранять свою актуальность в течение длительного времени. Тем самым часто используемые в них математические операции выходят на один уровень с традиционными арифметическими командами. Следует обратить внимание, что, хотя первые предложения по их реализации на уровне процессора выдвигались еще в 1992 г., окончательное решение расширить стандартный набор команд было принято лишь два года спустя, когда четко обозначились перспективы развития ПК в сторону мультимедиа и телекоммуникаций.


По числу команд MMX-набор выглядит довольно представительно, но состоит он из достаточно простых операций с беззнаковыми целочисленными данными: сложения, умножения, логических операций. Выигрыш в производительности должен достигаться за счет реализации принципа SIMD (Single Instruction Multiple Data — одна команда, множественные данные) — параллельного выполнения одной операции сразу над несколькими порциями (8-, 16-, 32-разрядных) данных, представленными в виде одного 64-разрядного блока, помещенного в один регистр. Именно такие типы данных используются для хранения мультимедийной и телекоммуникационной информации. В результате можно, например, обрабатывать одновременно четыре пиксела графической информации с числом цветовых оттенков 64 тысячи. Кроме реализации чисто параллельных операций, в MMX включен целый ряд специальных векторных операций типа подсчета суммы произведений пар чисел: a1*b1+a2*b2 .

Таким образом, вычислительный эффект от применения MMX-технологии в мультимедийном и коммуникационном ПО может оказаться весьма существенным. По оценкам Intel, на долю таких команд приходится не более 10% кода подобных программ, а тратится до 90% общего времени исполнения программы. Иными словами, прирост производительности для подобных приложений может достигать 50-400% (На практике такого прироста пока не наблюдается. О результатах тестирования программ, использующих MMX-технологию, см. «Мир ПК» # 2/97, с. 22. — Прим. ред. ).

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

Кроме экономии на аппаратной части, такое решение обеспечивает совместимость с программным обеспечением. В частности, в многозадачных операционных системах (OS/2, Windows 95) при переключении с одной задачи на другую необходимо осуществлять сохранение и восстановление всех регистров процессора. Появление же дополнительных регистров потребовало бы хотя и не очень значительных, но все же изменений в существующих ОС. Не говоря уже об увеличении времени, уходящего на переключение между приложениями.

Следствием использования общего набора регистров является необходимость четкого разделения в программе фрагментов обработки чисел с плавающей запятой и новых MMX-данных. В общем случае для перехода от одного вида операций к другому требуется сохранение в ОЗУ всего блока регистров, что занимает относительно много времени. Однако эта проблема, хотя о ней часто говорится в последнее время, не слишком актуальна — обычно процессы обработки целых и вещественных чисел достаточно изолированы даже в задачах трехмерной графики, где нужно использовать и то и другое.

Новый стандарт семейства x86

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

Тут следует заметить, что стандарта на семейство процессоров x86, принятого сообществом производителей его клонов, не существует. Есть только стандарт де-факто. С некоторыми оговорками это относится и к стандартам на другие компоненты ПК: системные платы, шины и пр. На начальном этапе развития IBM PC их утверждала компания IBM, но последние 10 лет законы диктует Intel. А для остальных производителей (выпускающих процессоры, системные платы и все остальное) вопрос о том, следовать этому стандарту или нет, решается сугубо добровольно. Впрочем, возможность выбора здесь весьма ограничена, и это хорошо видно на примере деятельности производителей клонов x86.

Показательна попытка Cyrix в начале 90-х годов сделать экзотические варианты промежуточных моделей процессоров 386-486, требующих специальных системных плат. После той неудачи Cyrix уже не рискует заниматься подобными экспериментами. Но ее опыт не пошел на пользу другой компании, NexGen, которая продолжала попытки выпускать собственные модификации x86, имеющие очень хорошие характеристики, но неспособные работать на стандартных платах. В результате к моменту ее покупки фирмой AMD в конце 1995 г. NexGen уже стояла на пороге финансового краха.

Технические характеристики процессоров (это относится к любому отдельному компоненту вычислительной системы) сами по себе не являются решающим фактором в их успешном продвижении на рынке. Сравнение процессоров разных типов, безусловно, представляет научный интерес, но весьма опосредованно влияет на практические предпочтения потребителей. Ведь они хотят купить не просто систему, состоящую из огромного набора аппаратных и программных компонент, а комплекс, обладающий эксплуатационными характеристиками, проверенными опытом других, и имеющий ясные перспективы развития. Именно поэтому на массовом рынке успехом всегда будут пользоваться в первую очередь стандартные продукты, а уже потом — лучшие среди них.

Успешность AMD во многом объясняется именно тем, что она всегда шла четко в кильватере Intel. В 1994 г. после заключения соответствующих соглашений и прекращения судебных преследований со стороны Intel по поводу использования внутренней архитектуры ее процессоров дела AMD пошли еще лучше. И хотя в своей модели AMDk586 фирма впервые реализовала собственную архитектуру процессора, для уверенности в совместимости с внешним интерфейсом Pentium она опять-таки заключила соответствующие кросс-лицензионные соглашения с Intel.

Вполне понятно, что новый стандарт x86 могла предложить только компания Intel. Внешне это решение выглядит как диктат, но на самом деле это далеко не так — сколь бы крупной ни была фирма, она может принять какие-либо решения, лишь будучи уверенной в том, что рынок поддержит их.

Вопрос о том, в какой степени стандарт MMX будет поддержан отраслью, начал обсуждаться среди экспертов еще год назад, сразу после его объявления. Тут можно вспомнить, что фирма NexGen еще осенью 1995 г. сообщила о планах создания специального мультимедийного сопроцессора. Но проект закрылся сам собой вместе с ликвидацией компании.

В самом начале 1996 г. (когда Intel еще хранила полное молчание на этот счет) Cyrix, не уточняя особо детали, заявила с своем намерении включить мультимедийные расширения в процессор M2, позиционируемый ею как альтернатива Pentium Pro. На прошедшей летом в Калифорнии конференции Hot Chip, посвященной разработкам микросхем для мультимедиа, Cyrix представила также проект создания оригинальной мультимедийной схемы, по мнению экспертов, весьма похожей на P55C. Фактически фирма признала стандарт Intel, при этом пытаясь создать собственный расширенный вариант. Тем временем осенью начались препирательства между Intel и Cyrix по поводу законности использования последней названия MMX, которое является торговой маркой Intel (сейчас Cyrix пытается отстоять свое «право на ММХ» в суде). Но пока суд да дело, на выставке CeBIT’97 Cyrix представила свой вариант MMX в процессоре M2.

Фирма AMD, как обычно следуя за лидером, еще в январе прошлого года без лишнего шума заключила с Intel соглашение о лицензировании MMX-технологии (имелось в виду только право на использование набора команд, внутренняя реализация должна была разрабатываться самой компанией). Как и Cyrix, AMD представила свой новый процессор на выставке CeBIT’97.

Производители оборудования — за MMX

Весьма естественно предположить, что реакция собратьев по семейству x86 на новый стандарт волнует Intel меньше всего — ведь это конкуренты. Совсем другое дело — производители ПК и комплектующих, которые считаются стратегическими партнерами компании. Реакцию отрасли предугадать было легко — ММХ-технологию встретили с горячим энтузиазмом.

Оно и понятно: появление нового процессора автоматически означает начало массового обновления парка ПК (точно так же, как появление Windows 95 вызвало волну обновления всего прикладного ПО). И, обещая принципиальную аппаратную совместимость Pentium MMX с основными узлами ПК, Intel создала стимул для пользователей двигаться по пути не частичной модернизации ПК, а его полной замены: для его установки нужна новая системная плата, которая отличается от старой единственным свойством — на один из контактов разъема процессора подается дополнительный номинал напряжения. Из-за этого «пустяка» (можно было встроить источник напряжения в сам кристалл) придется менять всю плату. Впрочем, с выпуском Pentium OverDrive MMX для замены платы появился еще один стимул — на плате будут стоять новые компоненты (например, BIOS), оптимизированные для работы с MMX. Короче говоря, теперь пользователь просто обречен на покупку нового ПК.

А для производителей системных плат, которые пока боятся переходить на выпуск новых изделий, найдется поучительный пример. В момент выхода в свет процессора Pentium в 1992 г. тайваньские производители плат (мировые лидеры в этой сфере) засомневались, стоит ли форсировать переход на эту платформу, — рынок 486-х моделей был тогда на подъеме. Но собственное производство системных плат, развернутое Intel, оказалось для них важным доводом — лидерства можно ведь и лишиться.

Немного сложнее обстоят дела с многочисленными производителями плат расширения. Совершенно очевидно, что появление MMX-технологии затрагивает интересы разработчиков мультимедийных аппаратных средств, так как она должна отобрать часть выполняемых их устройствами функций. В связи с этим следует отметить, что новая технология полностью соответствует объявленной Intel еще в середине 1995 г. стратегической программе NSP (Native Signal Processing — естественная обработка сигнала), суть которой заключается в постепенном переносе специализированных функций обработки с дополнительных плат на центральный процессор. Эффект для конечного пользователя — уменьшение затрат на оборудование, функции которого теперь будут реализовываться программными средствами. Еще тогда возникал вопрос, не собирается ли Intel таким образом «отбирать хлеб» у производителей аппаратуры? Но опыт прошедших почти двух лет показал, что такие опасения безосновательны.

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

Решающее слово — за разработчиками ПО

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

Специфика же современной ситуации в вычислительной технике заключается в том, что смена поколений программного обеспечения, несмотря на «мягкость» процесса, происходит существенно медленнее, чем смена аппаратуры. Чтобы убедиться в этом, достаточно обратить внимание на такой факт. Хотя технические возможности для создания 32-разрядных приложений для ПК появились еще 12 лет назад, полный переход к ним от 16-разрядных систем не закончился еще и поныне.

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

Теперь понятно, почему Intel уделяет такое внимание не только своим стратегическим партнерам типа Microsoft, но и всем независимым программистам. Еще в 1995 г. в рамках поддержки разработчиков ПО компания объявила свободный доступ к собственным программным технологиям для всех желающих. Год назад было сделано предварительное объявление о будущем архитектурном расширении процессора именно для программистов, сопровождавшееся предоставлением широкой публике подробных материалов на CD-ROM.

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

Еще один немаловажный момент — программировать c использованием MMX сегодня можно только на ассемблере (например, Microsoft Macro Assembler с MMX-расширениями). Поддержка MMX на языках высокого уровня — дело будущего, хотя наверняка не очень далекого. В настоящее время, например, при работе в VC++ использование MMX-команд возможно лишь с помощью ассемблерных вставок.

Уже сейчас видно, что разработчики ПО довольно активно занялись поддержкой MMX: практика показывает, что опаздывать с внедрением новых технологий просто опасно. К тому же это дает отличную возможность без хлопот выпустить новые версии собственных программных продуктов. Например, Microsoft включила поддержку MMX (ActiveMovie, Direct3D API и ряд других средств) в новую версию Windows 95 OEM Service Release 2, выпущенную в августе 1996 г.

Что дальше?

В общем виде ответ на этот вопрос довольно очевиден: в будущем Pentium MMX полностью заменит старые процессоры 486 и Pentium. Но как скоро это произойдет? На какой тип процессора ориентироваться покупателю ПК сегодня?

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

Сегодня Intel предлагает на рынке шесть типов процессора Pentium (с тактовой частотой 100, 120, 133, 150, 166 и 200 МГц) и два типа Pentium MMX (с тактовой частотой 166 и 200 МГц). Следует обратить внимание, что только Pentium-100 и -120 выпускаются по технологии 0,6 мкм, все остальные — по технологии 0,35 мкм. Судя по темпам обновления производства Intel (доля 0,6 мкм за 1996 г. сократилась с 85 до 10%), выпуск этих моделей прекратится уже весной. Экстраполируя данные прошлых лет, можно прогнозировать, что тактовая частота Pentium, произведенного по 0,35-мкм технологии, поднимется к концу года до 166 МГц.

По чисто техническим причинам дальнейшее повышение частоты модели Pentium/0,35мкм уже невозможно: 200 МГц — это предел данной технологии. В частности, создание Pentium-200 потребовало специальных решений для улучшения теплоотвода на уровне корпусирования. Конечно, скоро должна появиться технология 0,25 мкм, но ее применение для старых моделей явно нецелесообразно.

Что касается Pentium MMX, то при всей своей архитектурной схожести с Pentuim в конструктивном плане это новая модель процессора и соответственно новая технология его производства (чего стоит одно снижение напряжения питания!). Представленные сегодня модели с частотами 166 и 200 МГц являются начальными в новой технологической линии Pentium MMX/0,35мкм. Значит, можно ожидать, что ее верхняя граница находится на отметке около 260 МГц и будет достигнута в начале 1998 г., а модели 166/200 превратятся к тому моменту в самые ходовые процессоры нижнего уровня. Таким образом, получается, что с чисто технологической точки зрения производство Pentium-200 должно естественным образом прекратиться в первой половине 1998 г., после чего останется один Pentium MMX.

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

Как долго продержится Pentium MMX? Срок жизни одной производственной технологии для конкретной модели составляет около двух лет. Далее возможен переход к технологии 0,25 (наверное, реально она может появиться в 1998 г.), тогда к 2000 г. будет достигнуто увеличение тактовой частоты процессора до 400-450 МГц. Но есть большие сомнения, что так будет в действительности. С одной стороны, при существующей пропускной способности системной шины PCI (хотя, конечно, возможна ее модернизация) производительность ПК уже заметно отстает от роста частоты: например, замена Pentium-100 на Pentium-200 увеличивает производительность лишь на 50%. С другой стороны, архитектуру Pentium уже в ближайшем будущем будет вытеснять Pentium Pro.

О перспективах развития Pentium Pro сейчас говорить довольно сложно. Фактически первый год его жизни на рынке был в основном посвящен апробации архитектуры и решению маркетинговых проблем: пользователь должен был поверить в него, а разработчики — написать 32-разрядные программы. Этим, наверное, объясняется тот факт, что за прошедший год не было выпущено ни одной новой модели. Поэтому вполне уместно ожидать появления некоторых принципиально новых технологических решений (например, по аналогии перехода от Pentuim-60/66 к Pentium-75/120).

В процессоре Pentium II Klamath реализованы весьма радикальные новые решения — например, он будет устанавливаться на специальную плату расширения, подключаемую к системной плате посредством нового разъема. Но пока этот процессор реально недоступен, какие-либо выводы о его будущем делать рано.

Как быть пользователям?

Одновременное предложение двух альтернативных моделей Pentium и Pentium MMX вносит естественную сумятицу в умы пользователей — что покупать? Тем более что Intel подкинула еще одну загадку, предлагая Pentium и Pentium MMX (оба с тактовой частотой 200 МГц) практически по одной цене.

На самом деле переход к широкому применению MMX-технологии в практических задачах будет происходить все же не так быстро, как это могло показаться вначале. Как уже отмечалось выше, основная проблема состоит в создании соответствующего программного обеспечения. Многочисленные объявления о выпуске программ с «полной поддержкой MMX» не должны вводить в заблуждение: в них речь идет либо о рекламных приемах (технология-то поддерживается, только неясно, как она повышает эффективность программ и, вообще, нужна ли такая поддержка в этих задачах), либо о чисто демонстрационных или тестовых вариантах.

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

Что же касается домашних пользователей, то здесь все зависит от финансовых возможностей: если у вас достаточно денег, то, конечно, лучше покупать Pentium MMX-200 (цены на них будут выше, чем на Pentium-200, хотя бы по маркетинговым причинам). Если вы ориентируетесь на средний уровень ПК, то тогда можно смело приобретать компьютер с Pentium-133. Но при этом лучше убедиться, что в нем стоит новая системная плата, позволяющая через год поставить Pentium MMX-200.

Андрей Колесов — к.т.н., независимый эксперт по компьютерным технологиям. E-mail: akolesov@glasnet.ru

16-разрядные 32-разрядные
8086 = 170 команд + FP (необязательный набор операций с плавающей запятой) 386 = (170 + 50) команд + FP (необязательный набор операций с плавающей запятой),
486 = 220 команд + FP
Pentium MMX =220 + FP + MMX


История разработки Pentium MMX

Еще в 1992 г. ( год выпуска Pentium!) в израильском научно-исследовательском центре Intel группа компьютерной архитектуры под руководством Ури Вайсера начала предварительную проработку вопроса о расширении архитектуры x86 за счет дополнительных команд для обработки мультимедиа-данных.

Тогда этим занимались лишь около дюжины инженеров. Несколько позже они представили руководству компании свои предложения, после тщательного анализа которых в начале 1994 г. было принято решение одобрить проект и приступить к его реализации.

В марте прошлого года Intel официально сообщила о планах выпуска будущего процессора с кодовым названием P55C в четвертом квартале 1996 г. и представила разработчикам ПО его полные спецификации. Тогда же была объявлена специальная программа поддержки программистов, призванная стимулировать их участие в создании новых приложений с использованием технологии MMX. Начиная с лета 1996 г. опытные образцы процессоров стали передаваться для ознакомления и тестирования партнерам компании по производству ПК, а также фирмам-разработчикам ПО. Однако в августе компания неожиданно объявила о переносе срока выпуска P55C на начало 1997 г.

В чем причина задержки выпуска Pentium MMX

Официальное объяснение задержки с выходом нового процессора — желание создать достаточно большой товарный запас, который сразу бы обеспечил неограниченные поставки процессора производителям ПК. Действительно, говоря о своих планах начать производство Pentium MMX в 1996 г., представители компании всегда подчеркивали, что его поставки на первом этапе будут носить ограниченный характер.

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

Летом же прошлого года стало отчетливо видно, что ее конкуренты как по семейству x86 (AMD и Cyrix), так и из стана PowerPC явно не успевают с массовым выпуском своей альтернативной продукции. В результате у компании появилась возможность не спешить с началом официального выпуска новых процессоров. Следует отметить, что одновременное присутствие на рынке моделей Pentium и Pentium MMX создает для пользователей непростую дилемму. Тогда, летом 1996 г., она звучала так: покупать ПК с обычным Pentium-166/200 сейчас или подождать несколько месяцев до выхода Pentium MMX? Таким образом, отодвинув сроки выпуска нового процессора, компания обеспечила продвижение появившейся незадолго до этого модели Pentium-200, в частности в четвертом квартале, на который традиционно приходится наибольший объем продаж года.

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

Еще одной причиной задержки могли стать и проблемы с организацией производства. Несмотря на то, что Intel всегда очень тщательно планировала расширение своих производственных мощностей (строительство одного современного завода по изготовлению кремниевых пластин требует 2-3 лет и 2-3 млрд. долл.), осенью прошлого года у компании возникли проблемы с поставками процессоров Pentium Pro 200. Из-за неудовлетворенного спроса цены на эти модели на вторичном рынке подскочили до 950 долл. (при цене производителя 525 долл.).

Сейчас процессоры Pentium MMX выпускаются заводами # 11 и 15, расположенными в штатах Нью-Мехико и Орегон. В ближайшем будущем должно начаться их производство на заводе # 12 в штате Аризона. Корпусирование процессоров производится в Малайзии, на Филиппинах и в штате Аризона.

Каким будет микропроцессор начала 2000 г.

В связи с отмечавшимся в конце 1996 г. юбилеем выпуска своего первого микропроцессора компания Intel поделилась с общественностью своим видением перспектив развития микропроцессорной технологии компании. В частности, было обнародовано мнение экспертов Intel о характеристиках ее микропроцессора в 2000 г., особенно интересное тем, что позволило увидеть изменения в прогнозах, сделанных в 1989 г. и 1996 г. (см.таблицу).

Современное состояние и прогноз развития микропроцессоров Intel


Характеристики Состояние на конец 1996 г Прогноз 1989 г. на 2000 г. Прогноз 1996 г. на 2000 г.
Число транзисторов, млн. 6 50 40
Размер кристалла, кв. мм 550 1200 1100
Ширина проводника, мкм 0,35 0,20 0,18
MIPS, млн. опер./с 400 700 2400
Производительность (по тесту ISPEC95) 8,6 17,5 60
Тактовая частота, МГц 200 250 900

По данным уточненного прогноза с учетом сегодняшних реалий ожидается, что кристалл будет компактнее, а число транзисторов на нем меньше, чем это представлялось семь лет назад. Но показатели производительности микропроцессора будут существенно выше по сравнению с предполагаемыми ранее. В основном это будет достигнуто за счет значительного увеличения тактовой частоты (до 900 МГц вместо ранее предполагавшихся 250).

Как известно, следующая модель микропроцессора компании P7 (Merced) должна быть уже 64-разрядной. Ее появление ожидается в 1998 г., и очевидно, что именно она будет самым мощным изделием Intel в течение, по крайней мере, двух-трех лет. И скорее всего, принципиально новых шагов до конца этого тысячелетия в области развития микропроцессорной технологии сделано не будет.

Что касается общих тенденций развития микропроцессорных технологий, то, по мнению представителей Intel, они будут заключаться в следующем:


    — уменьшение минимальной ширины проводника на кристалле; — увеличение числа металлических слоев; — снижение напряжения питания (в современных моделях оно равно 2,9-3,3 В); — усовершенствование микроархитектуры (суперскалярность, суперконвейерность, увеличение внутренней кэш-памяти и пр.).

MMX (набор инструкций) — MMX (instruction set)

MMX является одна команда, несколько данных ( SIMD ) набор команд разработанный Intel , введенный в 1997 году с P5 -На Pentium линию микропроцессоров , обозначенную как «Pentium с MMX Technology». Она развилась из подобного блока , введенного на i860 Intel , а ранее i750 Intel пиксельный процессор видео. MMX является процессор дополнительный потенциал , который поддерживается на последних IA-32 процессоров от Интел и других производителей.

The New York Times описал первоначальный толчок, в том числе Супер Боул объявлений, так как сосредоточены на «новое поколение блестящих мультимедийных продуктов, в том числе видеотелефоны и 3-D видеоигры.»

MMX впоследствии был продлен на несколько программ по Intel и другие: 3DNow! , Streaming SIMD Extensions (SSE), и ведущиеся пересмотры Advanced Vector Extensions (AVX).

содержание

обзор

Именование

MMX официально бессмысленная аббревиатура торговой марки от Intel; Неофициально, инициалы были по- разному объясняется , стоя на

  • MultiMedia EXTENSION ,
  • Multiple Math EXTENSION , или
  • Матрица Math удлинительных .

Newsweek описал его как «57 новых„указания“травлению микроскопически на поверхности чипа.»

AMD , во время одного из своих многочисленных судебных баталий с Intel, получают маркетинговые материалы от Intel указывает , что MMX постоял «Matrix Math Extensions». Так как аббревиатура не может быть торговой маркой, это была попытка аннулировать товарный знак Intel. В 1995 году Intel подала иск против AMD и Cyrix Corp. за неправильное использование своей торговой марки MMX. AMD и Intel улажены, с AMD признания MMX в качестве товарного знака , принадлежащего Intel, а также с предоставлением прав Intel AMD использовать товарный знак MMX в качестве названия технологии, но не имя процессора.

Технические детали

MMX определяет восемь регистров , называемых mm0 через MM7, и операции , которые работают на них. Каждый регистр составляет 64 бита в ширину и может быть использован для хранения либо 64-битных чисел, или несколько меньших чисел в «упакованной» формат: одна команда , то может быть применен к двум 32-битных чисел, четыре 16-битных чисел, или восемь 8-битных целых чисел сразу.

ММХ обеспечивает только целочисленные операции. Когда первоначально разработаны, для i860 Intel , использование целого математики имело смысл (как 2D и 3D расчеты требуются), но , как графические карты , которые сделали многое из этого стали обычными, число SIMD в CPU стало несколько избыточно для графических приложений. С другой стороны, арифметические насыщения операции в MMX может значительно ускорить некоторые цифровой обработки сигналов приложений.

Для того, чтобы избежать проблем совместимости с контекстом переключателем механизмами в существующих операционных системах, регистры MMX являются псевдонимами для существующих x87 FPU регистров, которые переключение контекста будет уже сохранять и восстанавливать. В отличии от регистров x87, которые ведут себя как стек , регистры MMX каждый непосредственно адресуемый ( с произвольным доступом).

Любая операция с участием стеки с плавающей запятой также может повлиять на MMX регистры и наоборот, так что это сглаживание затрудняет работу с плавающей точкой и операции SIMD в том же приложении. Для того, чтобы максимально увеличить производительность, программисты часто используют процессор исключительно в одном режиме или другой, откладывая относительно медленное переключение между ними как можно дольше.

Каждый 64-битный регистр ММХ соответствует мантиссы части 80-битового регистра x87. Верхние 16 биты x87 регистров , таким образом , остаются неиспользованными в MMX, и эти биты все настроены на те, что делают их пренебрежимы малыми или бесконечности в представлении с плавающей запятой. Это может использоваться приложениями , чтобы решить , является ли содержание конкретного регистра в качестве предназначен плавающей точкой или данных SIMD.

поддержка программного обеспечения

Программная поддержка MMX была медленно. C компилятор Intel, и связанные с ним средство разработок получены встроенными функциями для вызова инструкций MMX и Intel выпустила библиотеки общих векторизованных алгоритмов с использованием MMX. И Intel и Metrowerks попытка автоматической векторизации в их составителей, но операции в C язык программирования отображается плохо на набор инструкций MMX и пользовательских алгоритмов в 2000 , как правило , по- прежнему должны были быть записаны в сборке .

правопреемник

AMD , конкурирующие x86 микропроцессорный поставщика, расширение компании Intel MMX со своим 3DNow! набор инструкций. 3DNow является наиболее известными для добавления одинарной точности (32-битной) поддержки с плавающей точкой в SIMD-команды набор, среди других целочисленных и более общих усовершенствований.

После MMX, следующий крупное расширение компании Intel x86 был SSE , введенный с семейством Pentium-III (примерно через год после 3DNow от AMD! Было введено).

ГСП были рассмотрены основные недостатки MMX (неспособность смешать целочисленным SIMD OPS с любыми плавающей точкой OPS), создавая новый 128-битный широкий файл регистров (XMM0-xmm7) и новые инструкции SIMD для него. Как 3DNow !, SSE, сосредоточены исключительно на операций с плавающей точкой одинарной точности (32 бита); Операции целого числа SIMD все еще выполняются с использованием регистров и набора инструкций MMX. Тем не менее, новый XMM регистров файлов разрешено SSE SIMD-операции, которые свободно смешиваться с любым MMX или x87 FPU опс.

SSE2 , введенный с Pentium 4, дополнительно расширили x86 набор команд SIMD с целыми (8/16/32 бит) и поддержка данных с плавающей точкой двойной точности для файла XMM регистров. SSE2 , также позволил опкодам MMX использовать XMM регистры операнды, распространяется на еще более широкие Y и ZMM регистров путем более поздними версиями SSE.

MMX во встраиваемых приложениях


Intel — х и Marvell «s XScale ядро микропроцессора , начиная с PXA270 включают SIMD набор команд расширения для ядра ARM под названием iwMMXt , функции которого аналогичны таковым из IA-32 расширения MMX. iwMMXt означает «Intel Wireless MMX Technology». Это обеспечивает арифметические и логические операции над 64-разрядными целыми числами (программное обеспечение может выбрать , чтобы вместо выполнения двух 32-битных, четыре 16-битных или восемь 8-битных операций в одной инструкции). Расширение содержит 16 регистров данных из 64 бит и восьми регистров управления 32 бита. Все регистры доступны через стандартный ARM архитектуру механизма отображения сопроцессора. iwMMXt занимает сопроцессоры 0 и 1 место, и некоторые из его опкодов столкновения с опкодами ранее расширения с плавающей точкой, FPA.

Более поздние версии Marvell ARM процессоров «s поддерживает поддержку WMMX (Wireless MMX) и WMMX2 (Wireless MMX2).

Знакомство с MMX-технологией.

Автор: Сергей Забарянский

Сергей Забарянский, один из ведущих программистов недавно вышедшего шутера Venom, созданного GSC Game World, а теперь, один из основателей новой команды разработчиков Deep Shadows, делится своими соображениями по данной теме.

Какие же именно инструкции есть у популярного процессора?
Как организована работа с дополнительными типами данных?
И главное — зачем все это?
— Ответы на эти вопросы перед вами.

Призрак MMX уже давно бродит по страницам компьютерных изданий. Шуму вокруг него предостаточно. «MMX — прорыв в новое тысячелетие», — говорили нам страницы газет. А все почему? Из-за каких-то пятидесяти семи инструкций! И хотя цифра внушает нам трепет, все же не совсем ясно, как, не меняя кардинально архитектуру микропроцессора, можно получить супер-мультимедийный компьютер? За счет чего?

Постараемся развеять туман, нагнанный рекламной компанией на простые вещи. Существует множество multimedia приложений. На первый взгляд между ними нет ничего общего. Однако на самом деле, внутри, они все как близнецы-братья. Мультимедийные приложения обрабатывают большие объемы данных. Самая трудоемкая и в тоже время часто используемая операция — применение одного и того же преобразования к массиву данных. Как это понимать?

Допустим, у нас есть два массива: A и B, длиной по 8 байтов каждый. Поставим себе задачу — прибавить к каждому элементу массива B соответствующий ему элемент массива A. Это приведет нас к такой программе:

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

Не правда ли просто и элегантно? Красиво ответите вы, однако какое отношение это все имеет к multimedia? Допустим, выполняется программа обрабатывающая 256-цветное изображение. Обычно она обрабатывает каждый пиксел по отдельности, используя же MMX, она может обрабатывать восемь пикселей сразу! Так что же такое MMX? MMX — это расширение, включающее в себя 57 новых команд и восемь 64-разрядных регистров. В основу положен принцип SIMD (Single Instruction Multiple Data) — одна инструкция — множество данных. MMX предоставляет инструкции для складывания, умножения и даже выполнения комбинированных операций. К примеру, команда PMADDWD перемножает, а затем складывает четыре слова данных, при этом она выполняется намного быстрее программы использующей только набор «стандартных» инструкций. Технология MMX предоставляет простую, гибкую программную модель, не требуя при этом перевода процессора в какой-то особенный режим. Все существующие программы будут корректно исполняться на процессорах с MMX без каких-либо изменений, даже если в системе присутствуют приложения, использующие новую технологию.

В процессорах использующих MMX добавлено 8 новых 64-разрядных регистров MM0-MM7. Они могут быть использованы только для выполнения операций с типами данных MMX. Команды MMX позволяют задавать в качестве операндов как регистры общего назначения (EAX, EBX, ECX, EDX, EBP, ESI, EDI и ESP), так и переменные в памяти, используя для этого стандартную схему адресации принятую в процессорах x86. Хотя MMX регистры и имеют ни с чем не совпадающие названия, на самом деле, они являются «псевдонимами» регистров сопроцессора (st0-st7). Это означает, что, изменяя один из регистров MMX, в своей программе, мы в то же время изменяем регистры сопроцессора. Зачем такие сложности? Не проще ли было их сделать «раздельными»? В конце концов, для этого понадобилось бы не так уж и много усилий со стороны разработчиков процессора. Очевидно, это было сделано не только с целью «добавить работу программистам». Как всегда, все дело в совместимости. Если бы было сделано так, как подсказывает логика, то пришлось бы переписать операционную систему! Те, кто знаком с работой процессора в защищенном режиме, наверное, уже догадались, о чем идет речь. Конечно же — о мультизадачности. Дело в том, что в многозадачной среде программы должны быть независимы друг от друга. При переключении с одной задачи на другую значения всех регистров «старой» задачи должны быть сохранены. В настоящее время о сохранении регистров микропроцессора заботится сам микропроцессор, а о сохранении регистров сопроцессора заботится операционная система. Так как все регистры MMX одновременно являют собой регистры FPU, то OS, сохраняя регистры FPU, сохраняет и регистры MMX! Проблема решена. Программист должен заботиться о том, чтобы код, использующий FPU и MMX, работал корректно. Код одного типа (MMX или FPU) должен быть по возможности сгруппирован. Для достижения наибольшей производительности в программе не должно быть условных переходов из части кода, использующего FPU к коду использующему MMX. После того как работа с MMX завершена, нужно очистить регистры mmreg0-mmreg7. Это делается для того, чтобы в последующем сопроцессор не столкнулся с «грязными» регистрами непонятного формата. Для этого используется новая инструкция EMMS, которая помечает все регистры FPU как «пустые».

Всем инструкциям x86 ставится в соответствие число — код операции. Длинна кода операции один-два байта. Ему может предшествовать байт SIB (Scale-масштаб, Index-индекс, Base-база) определяющий полный режим адресации. В процессоре x86 перед инструкцией также возможно присутствие префиксов, несколько модифицирующих «смысл» команды (префикс замены сегмента, префикс команды). Инструкции MMX формируются точно также как и «старые» команды.

Прежде чем начать использовать MMX, было бы неплохо убедиться в его присутствии. Если вам кажется, что это скучная задача, то вы ошибаетесь. Корпорация Intel делает все от нее зависящее, чтобы программисты отрабатывали свой хлеб. Решение, предлагаемое в документации до гениального просто. Достаточно вызвать инструкцию CPUID для получения флагов говорящих о том, чем напичкан процессор. Все бы было хорошо, если бы не одна тонкость. Для того чтобы ее вызвать, не получив при этом исключения (Exception), нужно убедиться в том, что программа выполняется на процессоре Pentium. Как это определить?

Судя по всему, должна быть команда, сообщающая информацию о типе процессора. Забавно, но у Intel ушло десять лет на то, чтобы реализовать такую инструкцию, хотя она должна была бы появиться еще в i8086. Одной из надежных эвристик определяющих тип процессора является проверка «устанавливаемости» 21 бита регистра флагов (EFLAGS). Чтобы не быть голословным, я написал программу mmxtest.asm (mmxtest.zip (919 байт)), которая проверяет присутствие MMX и не двусмысленно об этом сообщает.

Точно также как и «обычные» инструкции микропроцессора инструкции MMX могут выполняться в паре с другой инструкцией одновременно. Более того, в некоторых случаях, возможно, одновременное выполнение двух инструкций MMX. Операции сдвига и умножения могут быть выполнены как на u-, так и на v- конвейере. Ограничения, накладываемые на возможность распаровки следующие:

* Две инструкции, использующие блок сдвигов MMX (инструкции упаковки/распаковки и сдвига) не могут выполняться одновременно.

* Две инструкции, использующие блок умножения MMX (инструкции типа pmul, pmulh, pmadd) не могут выполняться в паре.

* Инструкции MMX, которые обращаются к памяти, могут выполняться только на u- конвейере.

* Целевой регистр MMX-инструкции попавшей в u-конвейер не должен совпадать с регистром-источником инструкции попавшей на v-конвейер (тест на зависимость). То есть пара инструкций:

*Инструкция EMMS не паруется.

* Если или CR0.TS, или CR0.EM установлены, то MMX инструкции не могут быть выполненными на v-конвейере.

MMX поддерживает данные в упакованном формате. Это означает, что каждый 64 битовый регистр MMX может интерпретироваться как:

    1. Восемь байтов
    2. Четыре слова
    3. Два двойных слова
    4. Одна 64-разрядная переменная

То, как интерпретируется конкретный регистр, отлично отображается в мнемонике команды. К примеру, инструкция PADDB складывает два операнда, полагая, что они являются набором байт, а PADDW считает операнды набором слов.

Все инструкции можно разбить на следующие группы:

арифметические команды
сложение PADDB PADDD PADDSB PADDSW PADDUSB PADDUSW PADDW
сложение и умножение PMADDWD
умножение PMULHW PMULLW
вычитание PSUBB PSUBD PSUBSB PSUBSW PSUBUSB PSUBUSW PSUBW
команды очищающие регистры
EMMS
команды сравнения
проверка равенства PCMPEQB PCMPEQD PCMPEQW
сравнение PCMPGTB PCMPGTD PCMPGTW
команды упаковки/распаковки
PUNPCKHBW PUNPCKHDQ PUNPCKHWD PUNPCKLBW PUNPCKLDQ PUNPCKLWD PACKSSDW PACKSSWB PACKUSWB
логические команды
PAND PANDN POR PXOR
команды передачи данных
MOVD MOVQ
команды сдвига
логический сдвиг влево PSLLD PSLLQ PSLLW
арифметический сдвиг вправо PSRAD PSRAW
логический сдвиг вправо PSRLD PSRLQ PSRLW

Команды MMX имеют такой формат:

То есть источником может быть как переменная памяти, так и регистр MMX. А целевым может быть только регистр MMX. К тому же MOVD и MOVQ допускают пересылки из регистров MMX в память. Одним из первых вопросов у меня был: «зачем так много команд?». Ведь количество операций не так уж и велико. Дело в том, что название команды формируется из двух частей. Первая часть говорит о том, что она делает (MOV,PSUB,PADD). Вторая же говорит о том, как она интерпретирует операнды. Рассмотрим команду PACKUSWB. Первая часть строки — PACK указывает, что будем что-то упаковывать. Вторая же — USWB в свою очередь разбивается на две US и WB. US говорит о том, что результат будет беззнаковым с сатурацией , WB же указывает, что источник — упакованные слова, результат — упакованные байты. Благодаря такой записи смысл инструкции схватывается «на лету», по этой же причине команд так много. Приведем полный перечень мнемоник:

    P-упакованные данные (Packed data)
    B-байт (byte)
    W-слово (word)
    D-двойное слово (DoubleWord)
    Q-64 битовая переменная (QuadWord)
    S-знаковая (Signed)
    U-беззнаковая (Unsigned)
    SS-знаковая с сатурацией (Signed Saturation)
    US-беззнаковая с сатурацией (Unsigned Saturation)

Скорее всего, прочитав кое-что о командах, вас потянуло ко сну. Дабы не спать на рабочем месте давайте поговорим о простом.

Вообще существует множество задач, где MMX приходится весьма кстати. К примеру, MMX прекрасно подходит для задач обработки звука. Действительно, оцифрованный звук задается последовательностью 8-ми,16-ти или 32-разрядных чисел. По этой причине, если нам нужно, к примеру, воспроизвести два звука одновременно, то согласно теореме о суперпозиции нам следует сложить соответствующие последовательности чисел. Тут MMX на высоте. Кроме того, как нельзя кстати, есть возможность складывать с сатурацией. В результате скорость может быть повышена в 4-5 раз.

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

Правда можно в качестве элементов использовать числа с фиксированной точкой . Размер такого числа — четыре байта. То есть в один регистр поместится только два элемента вектора. Тонкость тут в том, что в случае трехмерных преобразований скалярное произведение нужно считать от двух трехэлементных векторов. Решить проблему можно — использовать для этого два MMX регистра: в первом два элемента, во втором один. Однако выигрыш при этом будет не столь значителен, как хотелось бы.

К чему же мы пришли?

Очевидно, что технология MMX — это шаг вперед. Аббревиатура MMX — уже стала символом революции. Не даром корпорация Intel пыталась в судебном порядке запретить AMD ее использовать, впрочем, безуспешно.

Она прекрасно вписывается в существующую архитектуру микропроцессора. Сохраняется полная совместимость с уже написанными программными продуктами. Наряду с этим видны и ограничения, заложенные в нее, которые со временем нужно будет преодолевать.

КРАТКОЕ ОПИСАНИЕ КОМАНД.

Приведем описание некоторых инструкций, помогающих понять суть работы MMX.

MOVD
Формат
MOVD mmreg1, reg32/mem32
MOVD reg32/mem32, mmreg1
Описание
Инструкция MOVD пересылает 32 младших бита регистра MMX в регистр общего назначения или память. Или же из регистра общего назначения/памяти в регистр MMX. В последнем случае кроме собственно пересылки биты 32-64 соответствующего регистра обнуляются.

PADDB
Формат
PADDB mmreg1, mmreg2/mem64
Описание
Складывает восемь 8-разрядных чисел операнда источника (MMX регистра или 64-разрядного поля памяти) и восемь 8-разрядных чисел операнда-получателя (регистра MMX). В случае переполнения полученные значения заворачиваются (то есть 255+10=9) без установки флага переноса при подсчете последующих байтов. Результат помещается в операнд-получатель.

PADDSW
Формат
PADDSW mmreg1, mmreg2/mem64
Описание
Складывает четыре 16-битных чисел со знаком операнда источника (регистра MMX или 64-разрядного поля памяти) и четыре соответствующих значения операнда-получателя (регистра MMX). Если сумма каких-либо двух из них менее чем -32768 (8000h), то результат сложения -32768 (8000h). Аналогично в случае, когда сумма превышает 32767 (7FFFh), то возвращаемый результат 32767 (7FFFh). Результат заносится в операнд-получатель.Следующий список возможных ситуаций помогает понять, как происходит сложение:

Если число D250h (-11696) складывается с 8807h (-30713), то получаемый результат 8000h (-32768) — минимально возможное 16-разрядное число.
Если число 5321h (+21281) прибавляется в EC22h (-5086), то получаемый результат 3F43h (+16195).
Сумма 16-разрядного числа 7007h (+28679) и 0FF9h (+4098) дает результат 7FFFh (+32767) — максимально возможное положительное число.
Если к FFFFh (-1) прибавить FFFFh (-1), то получим FFFEh (-2).

PAND
Формат
PAND mmreg1, mmreg2/mem64
Описание
Инструкция PAND выполняет логическую операцию «и» над операндами. Результат заносится в операнд-получатель. Если соответствующие биты источника и получателя равны единице, то значение итогового бита единица. Эта команда может использоваться для распаковки упакованных переменных при помощи маски полученной от инструкций сравнения PCMPEQ и PCMPGT.

PCMPEQB
Формат
PCMPEQB mmreg1, mmreg2/mem64
Описание
Сравнивает источник с получателем, рассматривая операнды как упакованные байты. Если биты операндов эквивалентны, то все биты 8-разрядной части получателя устанавливаются равными единице, в противном случае они обнуляются.


PCMPGTD
Формат
PCMPGTB mmreg1, mmreg2/mem64
Описание
Аналогична PCMPEQ, но в отличие от нее биты в целевом операнде устанавливается в том случае, когда байт целевого операнда больше соответствующего байта операнда источника.

PACKUSWB
Формат
PACKUSWB mmreg1, mmreg2/mem64
Описание
Переводит восемь знаковых слов задаваемые аргументами (по четыре слова в каждом) в восемь беззнаковых байт. После чего результат сохраняется в mmreg1. Сатурация при этом происходит следующим образом:

* Если слово содержит отрицательное число, то соответствующий ему байт будет равен нулю
Если значение слова превышает 255, то соответствующий ему байт будет равен 255

MMX в вопросах и ответах (стр. 1 из 2)

В.: Можно ли считать ММХ стратегическим изменением архитектуры процессоров х8б?

О.: Да, это действительно так. Следует особо подчеркнуть, что сегодня мы являемся свидетелями уникального события, которое крайне редко встречается в истории вычислительной техники. ММХ — наиболее значительное изменение архитектуры х86, с тех пор, как Intel представила миру первый 32-разрядный 386-процессор в 1985 году. Теперь важно, чтобы и производители компьютеров, и разработчики программ быстрее освоили эту новую технологию. Последний раз, когда Intel пересматривала архитектуру x86 в таком «интенсивном духе», было 11 лет назад, но большинство пользователей PC только теперь переходит к 32-разрядному программному обеспечению. Сегодня Intel хочет, чтобы технология ММХ намного быстрее нашла свое признание.

В.: В чем сущность технологии ММХ?

О.: Задачи мультимедиа, на которые ориентирована технология ММХ, требуют интенсивных вычислений над целыми числами. Поэтому сущность решения состояла в том, чтобы нарастить архитектуру процессоров Pentium новым модулем, нацеленным на решение данной задачи, — но так, чтобы этот модуль был незаметен для уже существующих программ и операционных систем. При этом, чтобы не нарушать вопросов совместимости с предыдущими поколениями программ, Intel представила восемь новых регистров ММХ как логические регистры, которые отображаются на существующий стек регистров с плавающей запятой (FPU, сопроцессор). В сопроцессорах Pentium имеются восемь универсальных регистров для операций над числами с плавающей запятой, и каждый — шириной 80 битов. При этом в описании числа с плавающей запятой используются 64 бита для мантиссы и 16 битов для экспоненты. Команды ММХ используют только 64-разрядную часть мантиссы каждого из регистров сопроцессора, чтобы сохранить операнды ММХ.

Итак, сущность ММХ состоит в появлении в процессорах Pentium виртуального эквивалента восьми новых регистров и 57 новых команд, которые оптимизированы для задач мультимедиа. Такой прием дает возможность обойтись без радикального изменения стандартной архитектуры х86. Поставщикам операционных систем также не придется придумывать новые коды, чтобы сохранить состояние регистров ММХ — с точки зрения операционной системы они выглядят точно также, как обычные регистры чисел с плавающей запятой.

В.: За счет чего возрастает производительность систем? О.: Как было отмечено выше, команды ММХ используют регистры сопроцессора, но представляют собой команды целочисленного типа. Их 64-разрядные операнды могут содержать восемь упакованных байтов, или четыре упакованных 16-разрядных слова, или два упакованных 32-разрядных двойных слова, или же одиночное 64-разрядное слово учетверенной длины. Т.е. различные по длине данные мультимедиа упаковываются в одно 64-разрядное слово, и над ним производится некое общее действие.

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

Предположим, что программа управляет графикой в 8-разрядном цвете, который чаще всего используется в играх. ММХ-команда может упаковывать восемь пикселей в одиночный операнд и обрабатывать их разом. Обычный же ЦП класса х86 может обрабатывать одновременно только один пиксель. Приложения, работающие со звуком или коммуникационные программы в основном используют шестнадцатиразрядные типы данных, так что одиночная ММХ-команда может зараз обрабатывать по четыре из таких значения в одном разряде. Однако следует подчеркнуть, что для реализации этого алгоритма требуется отдельное программное обеспечение, оптимизированное для ММХ.

В.: Были ли сделаны какие-либо дополнительные усовершенствования в Pentium ММХ, кроме поддержки новых инструкций? О.: Да, существует целый список схемотехнических и архитектурных изменений, которые внесены в Pentium ММХ наряду с поддержкой новых инструкций:

Команды MMX для оптимизации графики

В не таком уж далеком 1996 году корпорация Intel внедрила в свои процессоры новую мультимедийную технологию под названием MMX (MultiMedia eXtension), которая давала (со слов фирмы) 400-процентный выигрыш в скорости работы с графикой, звуком и т.п.

Прошло время. появились уже более новые и эффективные разработки (3D-Now, SSE), а MMX так и не получила особой популярности из-за малой документированности; всё, что мне удалось найти в Internet — это немного примеров на страничке самой Intel, плюс очень небольшое количество других сайтов. в общем, негусто. В данной статье я хотел бы устранить этот пробел и рассказать вам о широчайших возможностях применения и использования MMX команд. Итак.

Технология MMX состоит из 57-ми совершенно новых инструкций процессора (специально для обработки графики и звука), а также восьми универсальных 64-битных регистров (mm0-mm7). И самое главное — добавлено четыре новых 64-разрядных типа данных:
• упакованные байты (восемь байт, представляющих собой одно большое 64-битное число),
• упакованные слова (четыре обычных слова)
• упакованные двойные слова (два 32-разрядных слова)
• простое 64-битное число.

Ещё хотелось бы отметить, что практически все MMX-инструкции (за исключением умножения) выполняются за один такт работы процессора.

Сначала хотелось бы кратко рассмотреть все эти команды (более подробное описание можно найти практически в любом современном справочнике по ассемблеру):

1) Команды пересылки данных – обмен данными между: MMX регистрами, стандартными 32-битными регистрами, а также ячейками памяти (Movd, Movq)

2) Команды преобразования типов – конверсия из одного типа данных MMX в другой (Packss, Packus, Punpckh, Punpckl)

3) Арифметические операции – универсальные команды сложения, вычитания, умножения упакованных типов данных, как с насыщением (т.е при переполнении остается максимальное или минимальное значение), так и без него (Padd, Padds, Paddus, Psub, Psubs, Psubus, Pmulhw, Pmullw, Pmaddwd)

4) Команды сравнения – сравнивают элементы данных (байты, слова, двойные слова) с последующим созданием маски результата (Pcmpeq, Pcmpgt)

5) Логические операции – обычные команды логики, за исключением, что работают с 64-битной точностью (Pxor, Por, Pand, Pandn).

6) Команды сдвига – аналог стандартных команд сдвига, только эти предназначены специально для работы с упакованными типами данных (Psll, Psrl, Psra).

7) Обнуление FPU регистров (Emms) – обязательно должно стоять после всех MMX процедур, т.к. регистры mm0-mm7 заодно являются мантиссой регистров математического сопроцессора (st0-st7).

А теперь – вперед! Применим все это на практике.

Примечание:
Все процедуры, описанные здесь, основаны на 32-х и 24-х битных RGB-режимах графики.

1. Для первого примера возьмем реализацию быстрого вывода картинки (спрайта) с наложением – байты изображения складываются с уже имеющимися байтами на экране (источники освещения [lensflares], частицы [particles], различные многослойные эффекты и т.д.).

Edi — адрес экрана (буфера экрана)
Ebx — адрес спрайта

Попробуем переделать это под MMX:

Сразу очевиден огромный прирост в скорости из-за параллельной обработки сразу четырех байт, а также из-за отсутствия команд условных переходов. Кстати — при использовании Psubusb (с константой) вместо Paddusb можно получить супер-быстрый RGB-фильтр, что тоже весьма приятно.

2. Ещё один пример вывода картинки (спрайтов): на этот раз с прозрачностью – вывод на экран только тех байт, чьи значения не равны константе прозрачности (этот метод используется практически во всех современных 2D-играх).

Как и в первом примере, получаем немалое ускорение — за счёт отсутствия команд условных переходов, а также из-за параллельности обработки сразу нескольких байт изображения.

3. Размытие при движении (motion blur) – объекты оставляют за собой плавно угасающий шлейф (применяется и на телевидении, и в 3D играх).

mask7f1 = 0x7f7f7f7f7f7f7f7f;
movq mm4,mask7f1 ; загрузка маски в регистр mm4

movq mm0,[esi] ; загрузка восьми байт текущего кадра (изображение на экране в данный момент)
movq mm1,[edi] ; загрузка восьми байт предыдущего кадра
psrlq mm0,1 ; быстрая процедура деления на два каждого из 8 байт
psrlq mm1,1 ; (как в mm0, так и в mm1)
pand mm0,mm4 ; -//-
pand mm1,mm4 ; -//-
paddb mm0,mm1 ; сложение mm0 с mm1 (=среднее арифметическое между mm0 и mm1)
movq [esi],mm0 ; кладём это на экран (в видеобуфер)
movq [edi],mm0 ; а также в буфер предыдущего кадра
add esi,8
add edi,8

Сразу восемь байт! То самое 400% ускорение, которое нам так долго рекламировала Intel!

4. Канал прозрачности (alpha blending) [далее ab] – одно изображение плавно появляется или растворяется поверх другого (также очень часто применяется при работе с видео).

ab: a = b + (a — b) * alpha

где:
a – основное изображение
b – изображение которое накладывается
alpha – количество градаций(позиций) ab — обычно хватает 0. 255.

Переведём это все в MMX-команды:

a) инициализация регистров

биты 31. 24 23. 16 15. 8 7. 0
eax = alpha alpha alpha alpha

б) основная процедура

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

Ну вот, в приведённых примерах мы рассмотрели практически все MMX-команды и способы ММХ-оптимизации — применяя их. Осталось заметить, чтобы получить ещё более быстродействующие программы, нужно размещать команды согласно правилам оптимизации под соответствующий процессор (к сожалению, у Intel и AMD они разные), а также правильно использовать его внутренний кэш. Большую часть этой работы берут на себя компиляторы высокого уровня (C++, Pascal, Basic и т.д.), но ассемблерные вставки придется переделывать вручную. На чем хотелось бы и закончить.

Используйте MMX в своих программах!

Статья взята из журнала «Программист» (№ 1 за 2001 год).

Работа с mmx (функция обработки массива в DLL)

Всем доброго времени суток.

Есть пример создания DLL на ассемблере, содержащей функцию dMMX. Функция складывает содержимое массивов source и target, получает три параметра (размер массивов и адреса входного и выходного массивов), результат помещает в массив source.

Подскажите как решить проблему и понять что не так.

При выполнении отладки выдает сообщение с указанием на функцию.

Код программы на с++

19.01.2015, 10:17

Сумма элементов массива (с использованием MMX команд)
Здравствуйте уважаемые эксперты! Тему уже создавал, но в разделе «Паскаль», поэтому прощу не.

Вычислить сумму элементов массива (xmm, mmx)
ассемблерные вставки (xmm и mxx команды) само задание: вычислить сумму элементов массива. вот.

Сумма элементов массива(с использованием MMX и XMM команд)
Здравствуйте уважаемые эксперты! Вобщем нужно найти сумму массива с использованием MMX и XMM.

Сложить два массива по 8 натуральных чисел, с насыщением MMX ассемблер NASM
Здравствуйте! Пишу программу, складывающую поэлементно 2 массива по 8 натуральных чисел, не.

Илон Маск рекомендует:  Что такое код sqlобновление представлений
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL