close

Вход

Забыли?

вход по аккаунту

?

MMX SSE

код для вставкиСкачать
2.1. Описание MMX
Intel MMX технология включает набор расширений к архитектуре Intel, которые разработаны, чтобы увеличить производительность средств мультимедиа и коммуникаций.
Эти расширения (которые включают новые регистры, типы данных, и инструкции) объединены с моделью выполнения "одна инструкция, много данных" (SIMD), чтобы ускорить выполнение приложений типа подвижное видео, комбинированую графику с видео, обработкой изображений, звуковым синтезом, синтезом речи и сжатием, телефонией, видео конференц-связью, и 2D и 3D графикой, которые типично используют алгоритмы с интенсивными вычислениями, чтобы исполнять повторяющиеся действия на больших множествах простых элементов данных.
MMX технология определяет простую и гибкую модель программного обеспечения, без нового режима или видимого состояния для операционной системы. Все существующее программное обеспечение продолжит работать правильно, без модификации, на процессорах архитектуры Intel, которые включают MMX технологию, даже в присутствии существующих и новых приложений, которые включают эту технологию.
2.1.1. Краткий обзор окружающей среды технологии программирования MMX(tm)
MMX технология обеспечивает следующие новые расширения к окружающей среде программирования Intel архитектуры.
* Восемь MMX(tm) регистров (от MM0 до MM7).
* Четыре MMX типа данных (упакованные байты, упакованные слова, упакованные двойные слова, и четверное слово (quadword)).
* система команд MMX.
Регистры MMX и типы данных описаны ниже. 2.1.2. Регистры MMX(tm)
Набор регистров MMX состоит из восьми 64-разрядных регистров. MMX команды обращаются к регистрам MMX непосредственно, используя имя регистра от MM0 до MM7. Эти регистры могут использоваться, только для выполнения вычислений над MMX типами данных; они не могут использоваться, чтобы адресовать память. Адресация операндов MMX команды в памяти обработана, используя стандартные способы адресации архитектуры Intel и универсальных регистров (EAX, EBX, ECX, EDX, EBP, ESI, EDI, и ESP).
63 0MM0MM1MM2MM3MM4MM5MM6MM7 Хотя регистры MMX определены в архитектуре Intel как отдельные регистры, они являются псевдонимами регистров в FPU стеке (R0..R7).
2.1.3. Типы данных MMX(tm)
MMX технология определяет следующие новые 64-разрядные типы данных:
Упакованные байты Восемь байтов, упакованные в одно 64-разрядное поле.
Упакованные слова Четыре (16-разрядных) слова, упакованные в одно 64-разрядное поле.
Упакованные двойные слова Два (32-разрядных) двойных слова, упакованные в одно 64-разрядное поле.
Четверное слово одно 64-разрядное поле.
Байты в упакованном типе данных байтов пронумерованы от 0 до 7, от байта 0, содержащегося в самых младших битах типа данных (биты 0..7), до байта 7, содержащегося в старших битах (биты 56..63). Слова в упакованном типе данных слов пронумерованы от 0 до 3, от слова 0, содержащегося в битах 0..15 типа данных до слова 3, содержащегося в битах 48..63. Двойные слова в упакованном типе данных двойных слов пронумерованы 0 и 1, с двойным словом 0 содержащимся в битах 0..31 и двойным словом 1, содержащимся в битах 32..63.
Упакованные байты (8x8 бит) 63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 0 Упакованые слова (4x16 бит) 63 48 47 32 31 16 15 0 Упакованные двойные слова (2x32 бит) 63 32 31 0 Одно четверное слово (64 бит) 63 0 MMX команды перемещают упакованные типы данных (упакованные байты, упакованные слова, или упакованные двойные слова) и тип данных четверное слово в- и из- памяти или в- и из- универсальных регистров архитектуры Intel в 64-разрядных блоках. Однако, при выполнении арифметических или логических операций над упакованными типами данных, MMX команды оперируют над параллельными на индивидуальными байтами, словами, или двойными словами, содержащихся в 64-разрядном MMX регистре, как описано в следующем разделе (Раздел 8.1.3., "Модель выполнения Одиночная Команда, Множественные Данные (SIMD)"). При операциях над над байтами, словами, и двойными словами внутри упакованных типов данных, MMX команды распознают и оперируют как над знаковыми, так и беззнаковыми целыми байтами, словами, двойными словами.
2.1.4. Модель Выполнения "Одиночная Команда, Множественные Данные (SIMD)"
MMX технология использует методику одиночная команда, множественные данные (SIMD) для выполнения арифметических и логических операций на байтах, словах, или двойных словах, упакованных в 64-разрядные регистры MMX. Например, команда PADDSB добавляет 8 знаковых байтов исходного операнда с 8 знаковами байтами в операнде адресата и сохраняет 8 результирующих байтов в операнде адресата. Эта SIMD методика ускоряет эффективность программного обеспечения, позволяя ту же самую операцию, которая будет выполнена на множестве элементах данных выполнять параллельно. MMX технология поддерживает параллельные операции на элементах данных байта, слова, и двойного слова которые содержится в регистрах MMX.
Модель выполнения SIMD, обеспечиваемая в MMX технологии прямо адресована потребностям современных средств связи, и графических приложений, которые часто используют сложные алгоритмы, которые выполняют те же самые операции на большом количестве маленьких типов данных (байты, слова, и двойные слова). Например, наиболее звуковые данные представляются в 16-разрядных количествах (слова). MMX команды могут функционировать на 4 из этих слов одновременно с одной командой. Видео и графическая информация обычно представляется как пакетированные 8-разрядные количества (байта). Здесь, одна MMX команда может оперировать над 8 из этих байтов одновременно.
2.1.5. Форматы данных памяти
Когда упакованые байты, слова, и двойные слова сохраняются в памяти, они сохраняются по последовательным адресам, с самым младшим байтом, словом, или двойным словом, сохраняемым в в самом низком адресе и более значимыми байтами, словами, или двойноми словами, сохраняемыми в более высоких адресах. Байты, слова, или двойные слова в памяти - всегда в формате little endian. То есть байты с более низкими адресами младше чем байты с более высокими адресами.
2.1.6. Форматы данных для MMX(tm) регистров
Значения в регистрах MMX имеют тот же самый формат, как и в памяти. MMX регистры имеют два режима доступа к данным: 64-разрядный режим доступа и 32-разрядный режим доступа. 64-разрядный режим доступа используется при 64-разрядном доступе к памяти, 64-разрядной передаче между регистрами MMX, всем пакетом, логическими и арифметическими командами, и некоторыми распаковывающими командами. 32-разрядный режим доступа используется при 32-разрядном доступе к памяти, 32-разрядной передаче между целочисленными регистрами и регистрами MMX, и некоторые распаковывающие команды.
2.1.7. Система команд MMX(tm)
Cистема команд MMX состоит из 57 команд, сгруппированных в следующие категории:
* Команды передачи данных
* Арифметические команды
* Команды сравнения
* Команды преобразования
* Логические команды
* Команды сдвига
* Команда освободить MMX(tm) состояние (EMMS)
При оперировании над упакованными данными внутри MMX регистра, данные приводятся типом, определенным командой. Например, команда PADDB (добавить упакованные байты) обрабатывает упакованные данные в регистре MMX как 8 упакованных байтов; в то время как, команда PADDW (добавить упакованные слова) обрабатывает упакованные данные как 4 упакованных слова.
2.1.8. Арифметика насыщенности и режим цикличности
MMX технология поддерживает новую арифметическую возможность, известную как арифметика насыщености (saturated arithmetics). Насыщенность лучше всего определить, противопоставляя ее с режимом цикличности. В режиме цикличности, результаты, которые переполняются или антипереполняются усечены, а возвращаются только самые младшие биты результата; то есть перенос игнорируется. В режиме насыщенности, результаты операции, которые переполняются или антипереполняются отсекаются к границе datarange для типа данных (см. Таблицу 8-1). Результат операции, которая превышает диапазон типа данных насыщается к максимальному значению диапазона. Результат, который является меньше чем диапазон типа данных saturates к минимальному значению диапазона. Этот метод обработки переполнения и антипереполнения полезен в многих приложениях, типа цветных вычислений.
Таблица 8-1
Тип данных Нижний предел Верхний предел Шестнадцат. Десятичн. Шестнадцат. Десатичн. Знаковый байт 80H -128 7FH 127 Знаковое слово 8000H -32768 7FFFH 32767 Беззнаковый байт 00H 0 FFH 255 Беззнаковое слово 0000H 0 FFFFH 65535 Например, когда результат превышает ограничение диапазона данных для знаковых байтов, он обрезается к 7FH (FFH для байтов без знака). Если значение - меньше чем ограничение диапазона данных, оно обрезается до 80-ое для знаковых байтов (00-ое для байтов без знака).
Насыщенность обеспечивает полезную возможность ухода от артефактов цикличности. В примере цветных вычислений, насыщенность заставляет цвет оставаться чистым черным или чистым белым.
MMX команды не указывают на появление переполнения или антипереполнения генерируя исключения или устанавливая флажки.
2.1.9. Операнды команд
Все MMX команды, за исключением EMMS, ссылаются и оперируют на двух операндах: источник и адресата. Первый операнд - адресат а второй операнд - источник. Операнд адресата может также быть вторым исходным операндом для операции. Команда записывает результат поверх операнда - адресата. Например, команда с двумя операндами декодировалась бы как:
DEST(первый операнд) = DEST(первый операнд) ОПЕРАЦИЯ SRC(второй операнд)
Исходный операнд (SRC) для всех MMX команд (за исключением команд передачи данных), может быть или в памяти или в регистре MMX. Операнд адресата всегда в регистре MMX. Для команд передачи данных, операндом источника и адресата может также быть целочисленный регистр (для команды MOVD) или память (для MOVD и MOVQ команд).
2.1.10 Краткий обзор системы команд MMX(tm)
Таблица 8-2 показывает команды в системе команд MMX. Следующие разделы дают краткий обзор каждой группы команд в системе команд MMX и командах внутри каждой группы.
2.1.10.1 Команды передачи данных
Команда MOVD (Переместить 32 Бита), передает 32 бита упакованных данных из памяти в регистраты MMX и обратно, или из целочисленных регистров в регистры MMX и обратно. Команда MOVQ (Переместить 64 Бита) передает 64 бита упакованных данных из памяти в регистры MMX и обратно, или между регистрами MMX.
2.1.10.2 Арифметические команды
Арифметические команды выполняют сложение, вычитание, умножение, и умножение / сложение на упакованных типах данных.
2.1.10.2.1 Упакованное сложение и вычитание
Команды PADDSB, PADDSW, и PADDWD (упакованное сложение) и PSUBB, PSUBW, и PSUBD (упакованное вычитание) добавляют или вычитают знаковые или беззнаковые элементы данных исходного операнда к или из операнда адресата в циклическом режиме. Эти команды поддерживают упакованные байты, упакованноы слова, и упакованные двойные слова.
Команды PADDSB и PADDSW (упакованное сложение с насыщенностью) и PSUBSB, и PSUBSW (упакованное вычитание с насыщенностью) добавляют или вычитают знаковые элементы данных исходного операнда к или из знаковых элементов данных операнда адресата и обрезают результат к ограничениям диапазона знакового типа данных. Эти команды поддерживают упакованные байты и упакованные слова.
Команды PADDUSB и PADDUSW (упакованное сложение без знака с насыщенностью) и PSUBUSB, и PSUBUSW (упакованное вычитание без знака с насыщенностью) добавляют или вычитают элементы данных без знака исходного операнда к или из элементов данных без знака операнда адресата и обрезают результат к ограничениям диапазона типа данных без знака. Эти команды поддерживают упакованные байты и упакованные слова.
2.1.10.2.2 Упакованное умножение
Команды упакованного умножения выполняют четыре умножения на парах 16-разрядных знаковых операндов, производя 32-разрядные промежуточные результаты. Пользователи могут выбирать старшие или младшие части каждого 32-разрядного результата.
Команды PMULHW (упакованное умножение старший) и PMULLW (упакованное умножение младший) умножают знаковые слова операндов источника и адресата и записывают старшую или младшую часть результатата в операнд адресата.
2.1.10.2.3 Упакованное умножение/сложение
Команда PMADDWD (упакованное умножение и сложение) вычисляет произведение знаковых слов операндов адресата и источника. Четыре промежуточных 32-разрядных произведения суммируются в парах, чтобы произвести два 32-разрядных результата.
2.1.10.3 Команды сравнения
Команды PCMPEQB, PCMPEQW, и PCMPEQD (упакованное сравнение на равенство) и PCMPGTB, PCMPGTW, и PCMPGTD (упакованное сравнение для большего чем) сравнивают соответствующие элементы данных в операндах источника и адресата на равенство или оценивают больше чем, соответственно. Эти команды генерируют маску единиц или нулей, которые записываются в операнд адресата. Логические операции могут использовать маску, чтобы выбрать элементы. Это может использоваться, чтобы выполнить упакованную условную операцию пересылки без ветвления или набора команд ветвления. Никакие флажки не установливаются. Эти команды поддерживают упакованные байты, упакованные слова и упакованные двойные слова.
2.1.10.4 Команды преобразования
Команды преобразования преобразовывают элементы данных внутри упакованного типа данных.
Команды PACKSSWB и PACKSSDW (упакованный со знаковой насыщенностью) преобразовывает знаковые слова в знаковые байты или знаковые двойные слова в знаковые слова, в режиме знаковой насыщенности.
Команда PACKUSWB (упакованный насыщенностью без знака) преобразовывает знаковые слова в байты без знака, в режиме насыщенности без знака.
Команды PUNPCKHBW, PUNPCKHWD, и PUNPCKHDQ (распаковать старшие упакованные данные) и PUNPCKLBW, PUNPCKLWD, и PUNPCKLDQ (распаковать младшие упакованные данные) преобразовывают байты в слова, слова в двойные слова, или двойные слова в четверное слово.
2.1.10.5 Логические команды
Команде PAND (поразрядное логическое И), PANDN (поразрядное логическое И-НЕ), POR (поразрядное логическое ИЛИ), и PXOR (поразрядное логическое исключающее ИЛИ) выполняют поразрядные логические операции над 64-разрядных данными.
2.1.10.6 Команды сдвига
Команды логического сдвига влево, логического сдвига вправо и арифметического сдвига право, сдвигают каждый элемент на определенное число битов. Логические левые и правые сдвиги также дают возможность перемещать 64-разрядное поле как один блок, что помогает в преобразованиях типа данных и операциях выравнивания.
Команды PSLLW и PSLLD (упакованный логический сдвиг влево) и PSRLW и PSRLD (упакованный логический сдвиг вправо) выполняют логический левый или правый сдвиг, и заполняют пустые старшие или младшие битовые позиции нулями. Эти команды поддерживают упакованные слова, упакованные двойные слова, и четверное слово.
Команда PSRAW и PSRAD (упакованный арифметический сдвиг вправо) выполняет арифметический сдвиг вправо, копируя знаковый разряд в пустые разрядные позиции на старшем конце операнда. Эта команда поддерживает упакованные слова и упакованные двойные слова.
2.1.10.7 Команда EMMS (Освободить MMX(tm) состояние)
Команда EMMS освобождает состояние MMX. Эта команда ОБЯЗАТЕЛНО должна использоваться, чтобы очистить состояние MMX (чтобы освободить tag-слово регистров для работы с плавающей запятой) в конце MMX подпрограммы перед вызовом других подпрограмм, которые могут выполнять операции с плавающей запятой.
Команда EMMS должна использоваться в каждом из следующих случаев:
* когда приложение, использующее команды с плавающей запятой обращается к MMX(tm) библиотеке/DLL. (Используйте команду EMMS конце MMX кода.)
* когда приложение, использующее MMX команды вызывает библиотеку/DLL с плавающей запятой. (Используйте команду EMMS перед вызовом кода с плавающей запятой.)
* когда произошло переключение между MMX кодом в задаче/нити и другими задачами/нитями в совместных операционных системах, если не уверенны, что большее количество MMX команд будет выполнено перед любым FPU кодом.
2.1.11 Обнаружение поддержки MMX(tm) технология, используя команду CPUID
Используйте команду CPUID, чтобы определить, поддерживает ли процессор систему команд MMX.
Если поддержка MMX технологии обнаружена с помощью команды CPUID, об этом сообщается, устанавливая бит 23 (бит MMX технологии) в 1 во флажках возможности(feature flags). Вообще, две версии подпрограммы могут быть созданы: одна со скалярными командами и одна с MMX командами. Приложение вызовет соответствующую подпрограмму в зависимости от результатов команды CPUID. Если поддержка MMX технологии обнаружена, то вызывается MMX подпрограмма; если никакая поддержка для MMX технологии не существует, прикладная программа вызывает скалярную подпрограмму.
Ниже приведен фрагмент подпрограммы обнаружения MMX.
...; identify existence of CPUID instruction
...
...; identify Intel processor
....
mov EAX, 1; request for feature flags
CPUID ; 0Fh, 0A2h CPUID instruction
Test EDX, 00800000h; Is IA MMX technology bit (Bit 23 of EDX)
; in feature flags set?
Jnz MMX_Technology_Found
2.1.12 Запись кода с MMX(tm) и командами с плавающей точкой
MMX технология отображает MMX регистры на регистры с плавающей запятой. Основная причина для этого состоит в том, чтобы дать возможность MMX технологии быть полностью совместимой и ясной для существующих программных сред (операционные системы и приложения). Этим способом операционные системы будут способны включить новые приложения и драйверы, которые используют MMX технологию. Приложение может содержать код с плавающей запятой и MMX код. Однако, следует учитывать, что частые переходы от MMX-коду к коду с плавающей запятой может существенно снизить производительность программы.
2.2. Описание SSE
Команды SSE появились в процессорах Intel, начиная с Pentium !!! и в процессорах AMD с Athlon XP. Они делятся на 4 категории: * SIMD-команды для данных одинарной точности с плавающей запятой (SPFP-команды); * Дополнительные SIMD-команды для целочисленных данных; * Команды управления кэшированием; * Команды сохранения и восстановления компонент состояния процессора. Одна SIMD-команда с плавающей запятой может обрабатывать одновременно четыре 32-разрядных числа одинарной точности с плавающей запятой (называемых SPFP-элементами данных). SIMD-команды для работы с SPFP-данными используют восемь новых 128-разрядных регистров - XMM-регистров. Команды обращаются к XMM-регистрам по именам: XMM0, XMM1, :, XMM7. Каждое 32-разрядное число с плавающей запятой имеет 1 знаковый бит, 8 битов порядка и 23 бита мантиссы, что соответствует стандарту IEEE-754 на формат представления чисел одинарной точности с плавающей запятой. SIMD-команды поддерживают два типа операций над упакованными данными с плавающей запятой - параллельные и скалярные. Параллельные операции, как правило, действуют одновременно на все четыре 32-разрядных элемента данных в каждом из 128-разрядных операндов. В именах команд, выполняющих параллельные операции, присутствует суффикс PS. Скалярные операции действуют на младшие (занимающие разряды 0-31) элементы данных двух операндов. Остальные три элемента данных в выходном операнде не изменяются (исключение составляет команда скалярного копирования MOVSS). В имени команд, выполняющих скалярные операции, присутствует суффикс SS. SSE-команды имеют следующий синтаксис: instruction [dest, src] Здесь instruction - имя команды, dest обозначает выходной операнд, src - входной операнд. Доступны следующие SSE-команды (обозначения: xmm - XMM-регистр; mm - MMX-регистр; m - память; imm - 8-битный непосредственный операнд; ir32 - целочисленный регистр): ADDPS xmm, xmm/mкоманда попарно складывает упакованные элементы данных и записывает суммы в соответствующие элементы XMM-регистра. SUBPS xmm, xmm/mкоманда вычитает элементы входного операнда из элементов первого регистра и записывает полученные разности в соответствующие элементы первого регистра. MULPS xmm, xmm/mкоманда попарно перемножает упакованные элементы. Произведения записываются в соответствующие элементы XMM-регистра. DIVPS xmm, xmm/mкоманда делит элементы первого операнда на соответствующие элементы входного операнда . Результаты деления записываются в XMM-регистр на место делимых. ADDSS xmm, xmm/mкоманда складывает младшие элементы данных и записывает результат в младший элемент XMM-регистра. Остальные элементы выходного операнда не меняются.SUBSS xmm, xmm/mкоманда вычитает младший элемент входного операнда из соответствующего элемента выходного операнда и записывает разность в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. MULSS xmm, xmm/mкоманда перемножает младшие элементы данных и записывает результат в младший элемент XMM-регистра. Остальные элементы выходного операнда не меняются. DIVSS xmm, xmm/mкоманда делит младший элемент выходного операнда на соответствующий элемент входного операнда и записывает результат в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. SQRTPS xmm, xmm/mкоманда вычисляет квадратный корень для каждого из четырех чисел во входном операнде и записывает результаты в выходной операнд. SQRTSS xmm, xmm/mкоманда вычисляет квадратный корень из младшего элемента входного операнда и записывает результат в младший элемент в выходной операнд. Остальные элементы выходного операнда не меняются. RCPPS xmm, xmm/mкоманда определяет приближенное обратное значение для каждого из четырех чисел входного операнда и записывает результаты в XMM-регистр. RSQRTPS xmm, xmm/mкоманда вычисляет приближенное обратное значение для квадратного корня из каждого из четырех чисел входного операнда и записывает результаты в XMM-регистр. RCPSS xmm, xmm/mкоманда определяет приближенное обратное значение для числа, находящегося в младшем элементе входного операнда и записывает результат в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. RSQRTSS xmm, xmm/mкоманда вычисляет приближенное обратное значение для квадратного корня из числа , находящегося в младшем элементе входного операнда и записывает результат в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. MAXPS xmm, xmm/mкоманда попарно сравнивает элементы данных и записывает большее значение из каждой пары в соответствующий элемент выходного операнда. MINPS xmm, xmm/mкоманда попарно сравнивает элементы данных и записывает меньшие значения из каждой пары в соответствующие элементы выходного операнда. MAXSS xmm, xmm/mкоманда сравнивает младшие элементы данных и записывает большее из значений в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. MINSS xmm, xmm/mкоманда сравнивает младшие элементы данных и записывает меньшее из значений в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. SHUFPS xmm, xmm/m, immкоманда с непосредственным операндом выбирает из первого операнда два элемента с 2-битными номерами из непосредственного операнда (непосредственный операнд делится справа налево на 4 2-битовых числа) и записывает их в младшие элементы выходного операнда. Из второго операнда выбираются два элемента со следующими 2-битными номерами и записываются в старшие элементы выходного операнда. Перестановка всех элементов происходит одновременно. UNPCKHPS xmm, xmm/mкоманда копирует третьи элементы входного и выходного операндов в соседние младшие элементы выходного операнда, а четвертые элементы входного и выходного операндов - соответственно, в старшие элементы выходного операнда. Распаковка элементов выполняется одновременно. UNPCKLPS xmm, xmm/mкоманда копирует первые элементы входного и выходного операндов в соседние младшие элементы выходного операнда, а вторые элементы входного и выходного операндов - соответственно, в старшие элементы этого операнда. Распаковка элементов выполняется одновременно MOVAPS xmm/m, xmm/m - команда копирует четыре FP-элемента одним из следующих способов: * из памяти в XMM-регистр * из XMM-регистра в память * из одного XMM-регистра в другой Линейный адрес соответствует адресу младшего байта группы данных в памяти. Обращение в память должно быть по адресу, кратному 16 байтам; в противном случае генерируется исключение. MOVUPS xmm/m, xmm/m - команда копирует четыре FP-элемента одним из следующих способов: * из памяти в XMM-регистр * из XMM-регистра в память * из одного XMM-регистра в другой Линейный адрес соответствует адресу младшего байта группы данных в памяти. Команда применяется для обращения к невыровненным данным в памяти. MOVHPS xmm/m, xmm/m - команда копирует два FP-элемента одним из следующих способов: * из памяти в два старшие элемента XMM-регистра * из двух старших элементов XMM-регистра в память При копировании данных из памяти в XMM-регистр, два младших элемента этого регистра не изменяются. Команда работает с адресом младшего байта группы данных в памяти. MOVLPS xmm/m, xmm/m - команда копирует два FP-элемента одним из следующих способов: * из памяти в два младшие элемента XMM-регистра * из двух младших элементов XMM-регистра в память При копировании данных из памяти в XMM-регистр, два старших элемента этого регистра не изменяются. Линейный адрес соответствует адресу младшего байта группы данных в памяти. MOVSS xmm/m, xmm/m - команда копирует один 32-рарядный FP-элемент одним из следующих способов: * из памяти в младший элемент XMM-регистра * из младшего элемента XMM-регистра в память * из младшего элемента одного XMM-регистра в младший элемент другого XMM-регистра При копировании 32 битов данных из памяти в XMM-регистр, все 96 оставшихся старших битов этого регистра обнуляются. Команда работает с адресом младшего байта группы данных в памяти. MOVLHPS xmm, xmmкоманда копирует 64 младших разряда входного регистра в 64 старших разряда выходного регистра, не меняя содержимое 64 младших разрядов выходного регистра. MOVHLPS xmm, xmmкоманда копирует 64 старших разряда входного регистра в 64 младших разряда выходного регистра, не меняя содержимое 64 старших разрядов выходного регистра. MOVMSKPS ir32, xmmкоманда копирует содержимое старших (знаковых) разрядов каждого из четырех FP-элементов, находящихся во входном XMM-регистре, в младшие разряды выходного целочисленного регистра, и формирует таким образом 4-битовую маску. Старшие 28 разрядов целочисленного регистра обнуляются. CMPEQPS xmm, xmm/m; CMPLTPS xmm, xmm/m; CMPLEPS xmm, xmm/m; CMPUNORDPS xmm, xmm/m; CMPNEQPS xmm, xmm/m; CMPNLTPS xmm, xmm/m; CMPNLEPS xmm, xmm/m; CMPORDPS xmm, xmm/mкоманды попарно сравнивают числа в соответствующих элементах операндов, проверяя выполнение условий равно, меньше, меньше или равно, несравнимы, не равно, не меньше, не { меньше или равно}, сравнимы соответственно. Элементы выходного операнда заполняются масками из единиц или нулей в зависимости от результата.CMPEQSS xmm, xmm/m; CMPLTSS xmm, xmm/m; CMPLESS xmm, xmm/m; CMPUNORDSS xmm, xmm/m; CMPNEQSS xmm, xmm/m; CMPNLTSS xmm, xmm/m; CMPNLESS xmm, xmm/m; CMPORDSS xmm, xmm/mкоманды сравнивают числа в младших элементах операндов, проверяя выполнение условий равно, меньше, меньше или равно, несравнимы, не равно, не меньше, не { меньше или равно}, сравнимы соответственно. Младший элемент выходного операнда заполняется маской из единиц или нулей в зависимости от результата. Содержимое трех старших элементов выходного операнда сохраняется.ANDPS xmm, xmm/mкоманда вычисляет поразрядное логическое И своих 128-битных входного и выходного операндов. Каждый бит результата полагается равным 1, если оба соответствующих бита операндов равны 1, и равным 0 в противном случае. Результат записывается в выходной операнд. ANDNPS xmm, xmm/mкоманда сначала инвертирует все разряды выходного операнда (логическое НЕ), а затем вычисляет поразрядное логическое И входного и инвертированного выходного операндов. Каждый бит результата полагается равным 1, если для входного операнда соответствующий бит равен 1, а для выходного - равен 0. В противном случае присваивается 0. Результат записывается в выходной операнд. ORPS xmm, xmm/mкоманда вычисляет поразрядное логическое ИЛИ своих 128-битных входного и выходного операндов. Каждый бит результата полагается равным 0, если оба соответствующих бита операндов равны 0, и равным 1 в противном случае. Результат записывается в выходной операнд. XORPS xmm, xmm/mкоманда вычисляет поразрядное логическое исключающее ИЛИ своих 128-битных входного и выходного операндов. Каждый бит результата полагается равным 1, если соответствующие биты операндов содержат различные значения. В случае одинаковых значений присваивается 0. Результат записывается в выходной операнд. COMISS xmm, xmm/mкоманда выполняет сравнение двух младших элементов операндов и устанавливает для них одно из соотношений: "меньше", "равны", "больше", "несравнимы". По результатам сравнения устанавливаются следующие значения флагов состояния ZF, PF и CF: РезультатЗначения в EFLAGS ZFPFCFНесравнимы111Меньше001Больше000Равны100 Если хотя бы один из сравниваемых элементов операндов содержит значение QNaN или SNaN, флаги устанавливаются в "несравнимы" и генерируется исключение. Согласно стандарту IEEE, величина QNaN определяется как любое нечисловое значение (NaN), у которого старший бит мантиссы равен 1. Величина SNaN определяется как любое нечисловое значение (NaN), у которого старший бит мантиссы равен 0, а хотя бы один из оставшихся битов мантиссы содержит 1. Если все биты мантиссы равны 0, то величина считается равной бесконечности. SNaN обычно используется для активизации обработчика исключений. UCOMISS xmm, xmm/mкоманда выполняет те же действия, что и команда COMISS xmm, xmm/m. Разница заключается в обработке нечисловых операндов. Для операндов типа SNaN команда генерирует исключение, а для операндов типа QNaN - нет. Флаги устанавливаются в значение "несравнимы" в каждом из случаев. CVTPS2PI mm, xmm/mкоманда преобразует FP-числа из двух младших элементов входного операнда в целые 32-разрядные числа со знаком, записываемые в два элемента выходного MMX-регистра. При необходимости результаты округляются в соответствии со значением поля RC в регистре MXCSR. CVTSS2SI ir32, xmm/mкоманда преобразует одно FP-число, содержащееся в младшем элементе входного операнда, в целое 32-разрядное число со знаком, записываемое в выходной целочисленный регистр. При необходимости результат округляется в соответствии со значением поля RC в регистре MXCSR. CVTTPS2PI mm, xmm/mкоманда преобразует FP-числа из двух младших элементов входного операнда в целые 32-разрядные числа со знаком, записываемые в два элемента выходного MMX-регистра. Когда необходимо округление, дробная часть результата отбрасывается, без учета значения поля RC в регистре MXCSR. Используйте эту команду для преобразований, где при округлении требуется только отбрасывание дробной части. CVTTSS2SI ir32, xmm/mкоманда преобразует одно FP-число, содержащееся в младшем элементе входного операнда, в целое 32-разрядное число со знаком, записываемое в выходной целочисленный регистр. Когда необходимо округление, дробная часть результата отбрасывается, без учета значения поля RC в регистре MXCSR. Используйте эту команду для преобразований, где требуется только отбрасывание дробной части при округлении. CVTPI2PS xmm, mm/mкоманда преобразует два 32-разрядных целых числа со знаком в два FP-числа, записываемые в два младших элемента выходного XMM-регистра. Два старших элемента выходного регистра не изменяются. CVTSI2SS xmm, ir32/mкоманда преобразует 32-разрядное целое число со знаком в FP-число, записываемое в младший элемент выходного XMM-регистра. Три старших элемента выходного регистра не изменяются. PEXTRV ir32, mm, immкоманда копирует 16-разрядное слово, на которое указывают два младших разряда непосредственного операнда, из MMX-регистра в целочисленный регистр. Старшие 16 разрядов целочисленного регистра заполняются нулями. PINSRW mm, ir32/m, immкоманда копирует 16-разрядное слово из входного операнда в слово MMX-регистра, на которое указывают два младших разряда непосредственного операнда. PMINSW mm, mm/mкоманда попарно сравнивает четыре слова со знаком в MMX-регистре с четырьмя словами со знаком во входном операнде. Минимальные значения записываются в выходной операнд. PMAXSW mm, mm/mкоманда попарно сравнивает четыре слова со знаком в MMX-регистре с четырьмя словами со знаком во входном операнде. Максимальные значения записываются в выходной операнд. PMINUB mm, mm/mкоманда попарно сравнивает восемь байтов без знака в MMX-регистре с восемью байтами без знака во входном операнде. Минимальные значения записываются в выходной операнд. PMAXUB mm, mm/mкоманда попарно сравнивает восемь байтов без знака в MMX-регистре с восемью байтами без знака во входном операнде. Максимальные значения записываются в выходной операнд. PMOVMSKB ir32, mmкоманда копирует старшие (знаковые) биты всех восьми упакованных байтов входного операнда - MMX-регистра и формирует 8-разрядную маску в младших разрядах 32-разрядного целочисленного регистра. Все старшие 24 разряда выходного целочисленного регистра обнуляются. PMULHUW mm, mm/mкоманда записывает в выходной операнд старшие 16 разрядов попарных промежуточных произведений 16-разрядных слов без знака входного и выходного операндов. PSHUFW mm, mm/m, immкоманда выбирает четыре 16-разрядных слова (не обязательно различных) из входного операнда и записывает их в определенном порядке в выходной операнд. Порядок записи слов задается 2-разрядными полями 8-разрядного непосредственного операнда. MOVNTPS m, xmmкоманда записывает 128 бит SPFP-данных непосредственно в память и не кэширует данные при кэш-промахе (cache miss). При кэш-попадании (cache hit) данные в кэше обновляются, а прямой записи в память не происходит. MOVNTQ m, mmкоманда записывает 64 бита целочисленных данных непосредственно в память и не кэширует данные при кэш-промахе. При кэш-попадании данные в кэше обновляются, а прямой записи в память не происходит. MASKMOVQ mm, mmкоманда выборочно записывает байты из MMX-регистра непосредственно в память. Байты выбираются в соответствии с 8-разрядной маской, состоящей из старших битов в байтах второго операнда - MMX-регистра. Единица в некотором разряде маски означает запись соответствующего байта в память, нуль - отсутствие записи. Адрес памяти, по которому производится запись, указывается в регистре EDI. hrefETCHT0 mкоманда записывает кэшируемые данные из памяти в кэш всех уровней. hrefETCHT1 m ; hrefETCHT2 mкоманды в архитектуре процессора PentiumR III записывают кэшируемые данные из памяти в кэш L2. hrefETCHTA mкоманда записывает кэшируемые данные из памяти в кэш для данных со слабой локализацией. В архитектуре процессора PentiumR III данные обходят L2-кэш и переносятся в L1-кэш, используемый для этих целей. SFENCEкоманда применяется для строгого упорядочения последовательности обращений в память и синхронизации ее с содержимым кэш-памяти, если такие обращения являются слабо упорядоченными. При использовании данной команды в основную память копируются все данные предшествующих команд записи, хранящиеся в буфере записи и кэше. Только после этого будут выполняться следующие команды записи. Команда временно блокирует выполнение лишь последующих команд сохранения данных, не влияя при этом на работу других команд. STMXCSR mкоманда записывает в 32-разрядное слово памяти содержимое регистра MXCSR. IDMXCSR mкоманда загружает из памяти 32-разрядное слово состояния и управления в регистр MXCSR. FXSAVE mкоманда сохраняет в области памяти по указываемому адресу состояние регистров данных с плавающей запятой, MMX-регистров, а также новых регистров процессора PentiumR III. Размер области памяти, в которой хранится информация о состоянии процессора, составляет 512 байт. FXSTOR mкоманда загружает предварительно сохраненную информацию о состоянии регистров данных с плавающей запятой, MMX-регистров, а также новых регистров процессора PentiumR III из 512-байтной области памяти в соответствующие регистры. Начальный адрес области памяти при загрузке должен быть выровнен на 16 байт. 4. Требования к отчету о лабораторной работе
При выполнении работы по одному из выбранных заданий, варианты которых даны в следующем разделе, необходимо разработать программу, использующие SIMD-расширения системы команд процессоров Intel, провести сравнение времени вычислений параллельного и непараллельного вариантов программы на разных наборах данных. Отчет о работе должен содержать:
* постановку задачи;
* описание параллельного алгоритма;
* листинг программы;
* результаты работы в виде графиков зависимости времени работы параллельной и непараллельной программ на наборах данных различного размера;
* выводы по работе
5. Варианты заданий
5.1. Произведение матриц
Произведением AB матрицы A(mxn)=(aij) на матрицу B(nxk)=(bij) является матрица С(mxk)=(сij), где
гдеi=1,2,...,m, j=1,2,...,k.
5.2. Шифрование методом гаммирования
Суть этого метода состоит в том, что символы шифруемого текста последовательно складываются с символами некоторой специальной последовательности, называемой гаммой. Иногда такой метод представляют как наложение гаммы на исходный текст, поэтому он получил название "гаммирование".
Процедуру наложения гаммы на исходный текст можно осуществить двумя способами. При первом способе символы исходного текста и гаммы заменяются цифровыми эквивалентами, которые затем складываются по модулю k, где k - число символов в алфавите, т.е.
tш =(tо + tг)mod k,
гдеtш- символы зашифрованного текста;
tо- символы исходного текста;
tг- символы гаммы.
При втором методе символы исходного текста и гаммы представляются в виде двоичного кода, затем соответствующие разряды складываются по модулю два.
5.3. Поиск заданного участка на карте
Карта представляет собой некоторый двумерный массив целых значений в диапазоне от -1 до 32767 (2-хбайтовое знаковое целое). Размер массива N на M. Также имеется шаблон участка размером L на K. Необходимо отыскать в карте участок, максимально похожий на имеющийся шаблон. Степень схожести определяется коэффициентом, который вычисляется следующим образом для каждой пары значений из шаблона (VШ) и карты (VК):
Итоговый коэффициент для очередного наложения шаблона на карту находится усреднением, коэффициентов пар значений. Следовательно, подходящий участок будет иметь максимальный из всех коэффициент.
Например, для шаблона: и участка карты , начинающегося с 1-й строки и 2-го столбца, итоговый коэффициент будет равен (0.5+0+0+1)/4=0.375
5.4. Нахождение контрольной суммы файла
Контрольная сумма файла представляет собой 16-битное целое беззнаковое значение. Поиск его производится следующим образом:
1. Файл бьется на 16-битные значения
2. Полученные 16-битные целые величины циклически складываются в одну величину.
5.5. Побайтовое сравнение файлов
Реализовать побайтовое сравнение двух заданных файлов. В качестве результата вывести смещения тех байтов, которые разнятся или же сообщение, что файлы идентичны.
5.6. Коррекция яркости и контраста
Дано изображение BMP-формата с глубиной цвета 24 бита. Произвести коррекцию его яркости и контраста на заданную величину по формуле:
И=И0К+Я
где И - новая интенсивность пиксела по красной, зеленой или синей компоненте, И0 - старая интенсивность, К - коэффициент контрастирования, Я - яркость.
5.7. Фильтрация изображения
Дано изображение BMP-формата с глубиной цвета 24 бита. Произвести его фильтрацию сглаживающим фильтром с апертурой 3 на 3. Фильтрация производится по красной, синей и зеленой компонентам изображения отдельно по формуле:
где Иij - новая интенсивность пиксела с координатами (i,j), И0 - старая интенсивность, MSR - элемент матрицы сглаживающей фильтрации, которая имеет вид:
Для данной апертуры фильтра затруднена фильтрация пикселов, стоящих на границе изображения, поэтому их можно просто выбросить из рассмотрения.
5.8. Поворот изображения на угол, кратный 90 градусов
Дано изображение BMP-формата с глубиной цвета 24 бита. Произвести его поворот на один из заданных углов: 90, 180, 270. При повороте использовать соответствующие матрицы поворота.
Документ
Категория
Рефераты
Просмотров
377
Размер файла
212 Кб
Теги
sse, mmx
1/--страниц
Пожаловаться на содержимое документа