Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Юрий Владимирович самый уважаемы человек =)экза...doc
Скачиваний:
7
Добавлен:
12.09.2019
Размер:
1.41 Mб
Скачать

92. Теги, призначення

Регистр тэгов.

Формат 16-битного регистра тэгов, состоящий из восьми двухбитных полей, показан на рис. 4.11. Каждое поле соответствует одному численному регистру и обозначает следующее: 00 - действительное число (т.е. любое конечное ненулевое число), 01 - нуль, 10 - недействительное число (например, нечисло или бесконечность), 11 - пустой регистр. Регистры отмечаются как пустые, если они не инициализированы или их содержимое было "извлечено" из стека численных регистров. Процессор 80287 использует этот тэг для обнаружения антипереполнения стека (слишком много извлечений) и переполнения стека (слишком много включений).

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

93. Конвеєри mmx та sse

SSE (англ. Streaming SIMD Extensions, потоковое SIMD-расширение процессора) — это SIMD (англ. Single Instruction, Multiple Data, Одна инструкция — множество данных) набор инструкций, разработанный Intel и впервые представленный в процессорах серии Pentium III как ответ на аналогичный набор инструкций 3DNow! от AMD, который был представлен годом раньше. Первоначально названием этих инструкций было KNI — Katmai New Instructions (Katmai — название первой версии ядра процессора Pentium III).

Технология SSE позволяла преодолеть 2 основные проблемы MMX — при использовании MMX невозможно было одновременно использовать инструкции сопроцессора, так как его регистры были общими с регистрами MMX, и возможность MMX работать только с целыми числами.

SSE включает в архитектуру процессора восемь 128-битных регистров и набор инструкций, работающих со скалярными и упакованными типами данных.

Преимущество в производительности достигается в том случае, когда необходимо произвести одну и ту же последовательность действий над разными данными. В таком случае блоком SSE осуществляется распараллеливание вычислительного процесса между данными.

Особенности

8 (в x86-64 - 16)128-битных регистров XMM.

32-битный (в x86-64 - 64) регистр флагов (MXCSR).

128-битный упакованный тип данных с плавающей точкой одинарной точности.

Инструкции над вещественными числами одинарной точности.

Инструкции явной предвыборки данных, контроля кэширования данных и контроля порядка операций сохранения.

Регистры

В SSE добавлены восемь (шестнадцать) 128-битных регистров, которые называются xmm0 — xmm7 (-xmm15).

Каждый регистр может содержать четыре 32-битных значения с плавающей точкой одинарной точности.

SSE-команды

Команды для чисел с плавающей точкой

Команды пересылки

Скалярные типы – MOVSS

Упакованные типы – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS

Арифметические команды

Скалярные типы – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS

Упакованные типы – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS

Команды сравнения

Скалярные типы – CMPSS, COMISS, UCOMISS

Упакованные типы – CMPPS

Перемешивание и распаковка

Упакованные типы – SHUFPS, UNPCKHPS, UNPCKLPS

Команды для преобразования типов

Скалярные типы – CVTSI2SS, CVTSS2SI, CVTTSS2SI

Упакованные типы – CVTPI2PS, CVTPS2PI, CVTTPS2PI

Битовые логические операции

Упакованные типы – ANDPS, ORPS, XORPS, ANDNPS

Команды для целых чисел

Арифметические команды

PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW

Команды пересылки

PEXTRW, PINSRW

Другие

PMOVMSKB, PSHUFW

Другие команды

Работа с регистром MXCSR

LDMXCSR, STMXCSR

Управление кэшем и памятью

MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

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

Технология 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.