
- •Развитие микропроцессорных архитектур
- •Введение ……………………………………………….........................................4
- •С благодарностью
- •Введение
- •1. История развития микропроцессоров фирмы Intel
- •2. Микропроцессоры класса cisc
- •Можно отметить следующие основные черты архитектуры amd64:
- •4. Микропроцессоры класса risc
- •5. Повышение производительности микропроцессоров
- •6. Конвейерная работа микропроцессоров
- •7. Метод переименования регистров (регистровые окна)
- •8.Принцип обработки операндов simd
- •8.1. Архитектура mmx
- •8.2 Технология sse
- •8.3 Технология sse2
- •9. Обзор simd-команд
- •9.1. Команды передачи данных
- •9.2 Арифметические команды
- •9.2.2 Команды упакованного/скалярного умножения и деления
- •9.2.3 Команды упакованого/скалярного вычисления квадратных корней
- •9.2.4. Команды упакованного/скалярного нахождения максимума и минимума
- •9.2.5 Команды сравнения
- •9.3. Команды преобразования типов данных
- •9.4. Логические команды
- •9.5. Дополнительные команды simd над целочисленными операндами
- •9.6. Команды перестановки
- •9.7. Команды управления состоянием
- •9.8. Команды технологии sse3
- •1. Преобразование чисел с плавающей запятой в целые числа. В эту подгруппу входит одна-единственная инструкция, которая работает на уровне арифметического сопроцессора x87 fpu.
- •3. Загрузка невыровненных переменных. Данную подгруппу представляет инструкция lddqu.
- •Команда monitor устанавливает диапазон адресов памяти (обычно используется одна строка кэша), по которому будет осуществляться отслеживание записей по стандартному протоколу write-back.
- •10. Технология Hyper-Threading
- •11. Vliw (epic) микропроцессор
- •Литература
- •Замковец Сергей Всеволодович Развитие микропроцессорных архитектур
- •119333, Москва, ул. Вавилова, д. 44, кор. 2
9.6. Команды перестановки
Команда SHUFPS (Shuffle packed, single-precision, floating-point – упакованная перестановка операндов с плавающей запятой одинарной точности) выбирает по два из четырех элементов каждого операнда. Два выбранных элемента первого операнда копируются в младшие элементы выходного операнда, а два выбранных элемента второго операнда – в старшие элементы выходного операнда (рисунок 2). Выборка элементов для копирования производится в соответствии со значением 8-разрядного непосредственного операнда.
Входной (второй) операнд может располагаться либо в XMM регистре, либо в памяти. Выходной (первый) операнд должен обязательно находиться в XMM регистре.
Команда UNPCKHPS (Unpacked high packed, single-precision, floating-point – распаковка старших элементов операндов с плавающей запятой одинарной точности) копирует по два старших элемента каждого из операндов в выходной операнд, причем расставляет их, помещая через один (рисунок 3). Нижняя половина входных операндов игнорируется. Если входной операнд берется из памяти, то хотя в операции участвует только 64-разрядная группа данных, считываются из памяти все 128-разрядов операнда.
Команда UNPCKLPS (Unpacked low packed, single-precision, floating-point- распаковка младших элементов операндов с плавающей запятой одинарной точности) выполняет те же действия с двумя парами младших элементов каждого их операндов (рисунок 4).
Рисунок 2 Команда упакованной перестановки.
Рисунок 3 Операция распаковки старших элементов.
9.7. Команды управления состоянием
Команда STMXCSR (Store SIMD Floating-Point Control and Status Register) служит для сохранения содержимого регистра MXCSR в памяти, а команда LDMXCSR (Load SIMD Floating-Point Control and Status Register) - для загрузки этого содержимого из памяти.
Обычно команду LDMXCSR используют, когда необходимо сбросить флаги обнаружения арифметических исключений в регистре MXCSR.
Рисунок 4 Операция распаковки младших элементов.
Команда FXSAVE сохраняет в памяти компоненты состояния микропроцессора (регистр состояния FP, регистр состояния MMX и регистры SIMD), когда операционная система осуществляет переключение контекста.
Команда FXRSTOR восстанавливает компоненты состояния микропроцессора из памяти. Информация о компонентах состояния процессора для этих команд хранится в области памяти размером 512 байт. Задаваемый адрес памяти должен быть выровнен на 16 байт.
9.8. Команды технологии sse3
Команды, реализующие технологию SSE3, можно разбить на следующие подгруппы:
1. Преобразование чисел с плавающей запятой в целые числа. В эту подгруппу входит одна-единственная инструкция, которая работает на уровне арифметического сопроцессора x87 fpu.
Команда FISTTP (сохранение целочисленного значения с освобождением элемента стека x87-FP с округлением в сторону нуля). Ее поведение аналогично поведению стандартной IA-32 инструкции FISTP, но важным отличием является использование округления в сторону нуля (известного как truncate или chop) вне зависимости от того, какой способ округления выбран в данный момент в контрольном слове FPU;
2. дублирование данных. Эта подгруппа состоит из трех инструкций, первые две из которых можно считать дополнением/расширением набора инструкций SSE, а последнюю команду можно отнести к набору SSE2.
Команда MOVSLDUP — загрузка 128-разрядного значения из исходного операнда (памяти или XMM-регистра) в операнд назначения с дублированием первого и третьего 32-битных элементов:
Операнд A (128 разрядов, 4 элемента): a3 | a2 | a1 | a0 Операнд B (128 разрядов, 4 элемента): b3 | b2 | b1 | b0 MOVSLDUP A, B Результат (операнд A): b2 | b2 | b0 | b0
Команда MOVSHDUP — загрузка 128-битного значения из исходного операнда в операнд назначения с дублированием второго и четвертого 32-битных элементов:
Операнд A (128 бит, 4 элемента): a3 | a2 | a1 | a0 Операнд B (128 бит, 4 элемента): b3 | b2 | b1 | b0 MOVSHDUP A, B Результат (операнд A): b3 | b3 | b1 | b1
Команда MOVDDUP — загрузка 64-разрядного значения из памяти или исходного регистра (разряды [63-0]) с дублированием в обеих нижней и верхней частях регистра назначения:
Операнд A (128 разрядов, 2 элемента): a1 | a0 Операнд B (64 разряда, 1 элемент): b0 MOVDDUP A, B Результат (операнд A): b0 | b0;