Среда
24.04.2024, 13:24
SamStudio
Вы вошли как Гость | Группа "Гости" | RSS
        
Каталог статей

SamStudio


Ցանկ

Мои статьи [10]


Փոքր-ЧАТ


Главная » Статьи » Мои статьи

CPU Специализация инструкции
         CPU :: Специализация :: инструкции

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

 - 3DNow!
 - AMD64 (x86-64)
 - Cpuid
 - EM64T (x86-64)
 - Extended 3DNow!
 - IA-32 (x86-32)
 - MIMD
 - MISD
 - MMX
 - SIMD
 - SISD
 - SSE
 - SSE2
 - SSE3
 - SSE4
 - SSE4.1
 - SSE4.2
 - SSE4A
 - SSSE3

3DNow!

3DNow! — дополнительное расширение MMX для процессоров AMD, начиная с AMD K6 3D. Причиной создания 3DNow! послужило стремление завоевать превосходство над процессорами производства компании Intel в области обработки мультимедийных данных. Хотя это расширение является разработкой AMD, его также интегрировали в свои процессоры IBM, Cyrix и другие. 

Технология 3DNow! ввела 21 новую команду процессора и возможность оперировать 32-битными вещественными типами в стандартных MMX-регистрах. Также были добавлены специальные инструкции, оптимизирующие переключение в режим MMX/3DNow! (femms, которая заменяла стандартную инструкцию emms) и работу с кешем процессора. Таким образом технология 3DNow! расширяла возможности технологии MMX, не требуя введения новых режимов работы процессора и новых регистров. 

В 3DNow! компания AMD добавила новый тип данных — 32-битные вещественные числа, инструкции для работы с этим типом, а также некоторые инструкции для манипулирования стандартными типами MMX. 


Проверка поддержки 3DNow! процессором. 

Перед началом работы с расширением 3DNow! следует убедиться, что ЦП их поддерживает. Для этого используется инструкция CPUID. Общий порядок действий при проверке выглядит следующим образом: 

1. Убедиться, что процессор поддерживает инструкцию CPUID. Если нет, то ЦП не поддерживает и 3DNow!. 
2. Выполнить инструкцию cpuid со значением EAX = 0 — это необходимо для следующего шага. 
3. Выполнить CPUID со значением EAX = 80000000h. Если после выполнения инструкции в EAX будет значение меньше 1, то 3DNow! не поддерживается. 
4. Выполнить CPUID с EAX = 80000001h. Если после выполнения бит 31 регистра EDX будет установлен в 1, то 3DNow! поддерживается. Иначе — нет.

AMD64 (x86-64)

AMD64 (также x86-64/Intel64/EM64T/x64) — 64-битная архитектура микропроцессора и соответствующий набор инструкций, разработанные компанией AMD. Это расширение архитектуры x86 с полной обратной совместимостью. Набор инструкций x86-64 в настоящее время поддерживается процессорами AMD Athlon 64, Athlon 64 FX, Athlon 64 X2, Turion 64, Opteron, последними моделями Sempron. Интересно, что этот набор инструкций был поддержан основным конкурентом AMD — компанией Intel под названием Intel 64 (ранее известные как EM64T и IA-32e) в поздних моделях процессоров Pentium 4, а также в Pentium D, Pentium Extreme Edition, Celeron D, Core 2 Duo и Xeon. Корпорации Microsoft и Sun Microsystems используют для обозначения этого набора инструкций термин x64. 


Особенности архитектуры: 

Разработанный компанией AMD набор инструкций x86-64 (позднее переименованный в AMD64) — расширение архитектуры Intel IA-32 (x86-32). Основной отличительной особенностью AMD64 является поддержка 16-ти 64-битных регистров общего назначения (против 8-и 32-битных в x86-32), 64-битных арифметических и логических операций над целыми числами и 64-битных виртуальных адресов. Для адресации новых регистров для команд введены так называемые «префиксы расширения регистра», для которых был выбран диапзон кодов 40h-4Fh, использующихся для команд INC <регистр> и DEC <регистр> в 32- и 16-битных режимах. Команды INC и DEC в 64-битном режиме должны кодироваться в более общей, двухбайтовой форме. 


Архитектура x86_64 имеет: 
- 16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15) 
- 8 80-битных регистров с плавающей точкой (ST0 — ST7) 
- 8 64-битных регистров Multimedia Extensions (MM0 — MM7, имеют общее пространство с регистрами ST0 — ST7) 
- 16 128-битных регистров SSE (XMM0 — XMM15) 
- 64-битный указатель RIP 
- 64-битный регистр флагов RFLAGS. 


Смерть и возрождение сегментной модели организации памяти. 

Разрабатывая архитектуру x86-64, инженеры корпорации AMD решили навсегда покончить с главным "рудиментом" архитектуры x86 — сегментной моделью памяти, которая передавалась по наследству ещё со времён 8086/80286. Однако, как потом оказалось, они очень погорячились. Архитектура стала абсолютно невиртуализуемой. При разработке новой версии своего продукта для виртуализации программисты компании VMWare столкнулись с непреодолимыми трудностями при реализации 64-битной виртуальной машины. Поскольку, для отделения кода монитора от кода «гостя» программой использовался механизм сегментации, эта задача стала практически неразрешимой. Осознав свою ошибку, AMD вернула ограниченный вариант сегментной организации памяти начиная с ревизии D архитектуры AMD64, что позволило запускать 64-битные ОС в виртуальных машинах. Intel, однако, этому примеру не последовала, и поэтому ни на одном её процессоре, не поддерживающем средства аппаратной виртуализации, запустить 64-битную виртуальную машину нельзя. С целью проверки того, возможен ли на данном процессоре запуск 64-битных гостевых ОС или нет, VMWare предоставляет вместе со своими продуктами специальную утилиту. Также следует отметить, что первоначально попавшие «под нож» команды LAHF и SAHF, которые также активно используются ПО виртуализации, затем также были возвращены в систему команд. С распространением средств аппаратной виртуализации (Intel VT, AMD-V) потребность в сегментации вновь постепенно отпадет, однако VMWare по-прежнему активно её использует, и поддержки AMD-V даже на сегодняшний день в её продуктах нет.

Cpuid

CPUID (CPU Identification) — ассемблерная инструкция процессоров x86, используется для получения информации о процессоре. Используя её, программа может определить тип ЦП и его возможности (например, можно определить, какие расширения поддерживаются процессором). 

Инструкция CPUID впервые появилась в процессорах i486. Потом она начала поддерживаться всеми процессорами начиная с Intel 80486DX/SX/DX2 SL, AMD 80486DX4, Cyrix M1, UMC U5S. 

Проверка поддержки инструкции CPUID процессором: 

Так как инструкция CPUID отсутствовала в первых процессорах архитектуры x86, перед её использованием следует удостоверится что ЦП ее поддерживает. Для этого производится попытка изменить бит 21 (ID) регистра EFLAGS. Если бит успешно поменяется, то инструкция CPUID процессором поддерживается. 

Приведенный ниже исходный код проверяет поддержку инструкции CPUID: 

pushfd ; размещение регистра EFLAGS в стэке 
pop eax ; извлечение значения EFLAGS в EAX 
mov ebx, eax ; сохранение значения в EBX 
xor eax, 200000h ; изменение 21-го бита 
push eax ; размещение нового значения в стэке 
popfd ; сохранение нового значения в EFLAGS 
pushfd ; снова размещение EFLAGS в стэке 
pop eax ; значение EFLAGS теперь в EAX 
xor eax, ebx ; проверка 21-го бита 
je no_cpuid ; если он не изменился, то CPUID не поддерживается 
В данном примере используется инструкция XOR, так как она непременно поменяет только 21-й флаг ID не затронув другие. Обратите внимание что здесь используются 32-битные инструкции, поэтому рекомендуем сначала проверить поддерживает ли процессор 32-битные директивы. 

Использование CPUID: 

Инструкция CPUID по содержимому регистра EAX определяет какого рода информацию о процессоре необходимо вернуть. Первый раз её следует вызывать со значением EAX = 0. При этом будет возвращено максимально допустимое значение параметра инструкции, поддерживаемое данным процессором. 

Для того, чтобы получить информацию о дополнительных функциях, имеющихся в процессорах, в регистре EAX перед вызовом CPUID должен быть установлен бит 31. Например, чтобы определить максимально допустимое значение параметра для дополнительных функций, необходимо выполнить CPUID со значением EAX = 80000000h. 

EAX = 0: Получить идентификатор производителя процессора 
При EAX = 0 ЦП возвращает идентификатор производителя процессора (англ. Vendor ID) в виде 12 символов ASCII, содержащихся в регистрах EBX, ECX, EDX (именно в таком порядке). В регистре EAX же возвращается максимально допустимое значение EAX при вызове CPUID. 

Вот некоторые идентификаторы производителей процессоров: 

ASCii-строка HEX-значения EBX:EDX:ECX Название 
производителя 
"GenuineIntel" 756E6547:49656E69:6C65746E Intel 
"AuthenticAMD" 68747541:69746E65:444D4163 AMD 
"CyrixInstead" 69727943:736E4978:64616574 Cyrix 
"CentaurHauls" 746E6543:48727561:736C7561 Centaur 
"SiS SiS SiS " 20536953:20536953:20536953 SiS 
"NexGenDriven" 4778654E:72446E65:6E657669 NexGen 
"GenuineTMx86" 756E6547:54656E69:3638784D Transmeta 
"RiseRiseRise" 65736952:65736952:65736952 Rise 
"UMC UMC UMC " 20434D55:20434D55:20434D55 UMC 
"Geode by NSC" 646F6547:79622065:43534E20 National Semiconductor 

EM64T (x86-64)

EM64T (Extended Memory 64 Technology) - реализация 64-битных расширений AMD64 процессорной архитектуры IA-32 (архитектуры x86-совместимых процессоров) фирмы Intel. Основное улучшение, обеспечиваемое EM64T — 64-битная адресация оперативной памяти, что позволяет снять присущее 32-битным процессорам ограничение в 4 гигабайта адресуемой напрямую памяти. 

EM64T обеспечивает поддержку: 
- 64-битового линейного действительного адресного пространства; 
- 64-битовых указателей; 
- 64-битовые регистры общего назначения; 
- 64-битовых целых чисел; 
- поддержку до 1 терабайта адресного пространства платформы.

MMX

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

SIMD

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

SISD

SISD (англ. Single Instruction, Single Data) — архитектура компьютера, в которой один процессор выполняет один поток команд, оперируя одним потоком данных. Относится к фон-Неймановской архитектуре.

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 и работы с вещественными числами. 

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

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

Реализация блоков SIMD осуществляется распараллеливанием вычислительного процесса между данными. То есть когда через один блок проходит поочерёдно множество потоков данных.

SSE2

SSE2 (англ. Streaming SIMD Extensions 2, потоковое SIMD-расширение процессора) — это SIMD (англ. Single Instruction, Multiple Data, Одна инструкция — множество данных) набор инструкций, разработанный Intel, и впервые представленный в процессорах серии Pentium 4. 

SSE2 использует восемь 128-битных регистров (xmm0 до xmm7), включённых в архитектуру x86 с вводом расширения SSE, каждый из которых трактуется как 2 последовательных значения с плавающей точкой двойной точности. SSE2 включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных. Также SSE2 содержит инструкции для потоковой обработки целочисленных данных в тех же 128-битных xmm регистрах, что делает это расширение более предпочтительным для целочисленных вычислений, нежели использование набора инструкций MMX, появившегося гораздо раньше. 

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

SSE3

SSE3 (PNI — Prescott New Instruction) — третья версия SIMD-расширения Intel, потомок SSE, SSE2 и x87. Впервые представлено 2 февраля 2004 года в ядре Prescott процессора Pentium 4. В 2005 AMD предложила свою реализацию SSE3 для процессоров Athlon 64 (ядра Venice и San Diego). 

Набор SSE3 содержит 13 инструкций: 
- FISTTP (x87) 
- MOVSLDUP (SSE) 
- MOVSHDUP (SSE) 
- MOVDDUP (SSE2) 
- LDDQU (SSE/SSE2) 
- ADDSUBPD (SSE) 
- ADDSUBPD (SSE2) 
- HADDPS (SSE) 
- HSUBPS (SSE) 
- HADDPD (SSE2) 
- HSUBPD (SSE2) 
- MONITOR (нет аналога в SSE3 для AMD) 
- MWAIT (нет аналога в SSE3 для AMD).

SSE4

SSE4 это набор команд Intel Core микроархитектуры, впервые реализованный в процессорах серии Penryn (не следует путать с SSE4A от AMD). Он был анонсирован 27 Сентября 2006, однако детальное описание стало доступно только весной 2007. 

SSE4 состоит из 54 инструкций, 47 из них относят к SSE4.1 (они есть только в процессорах Penryn). Ожидается, что полный набор команд (SSE4.1 и SSE4.2, то есть 47 + оставшиеся 7 команд) будет доступен в процессорах Nehalem. Ни одна из SSE4 инструкций не работает с 64-х битными mmx регистрами (только с 128-ми битными xmm0-15). 

Компилятор языка Си от Intel начиная с версии 10 генерирует инструкции SSE4 при задании опции -QxS. 

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

SSE4.1

SSE4.1 это расширенный набор команд SSE4 от Intel. 

Ниже приведены инструкции, входящие в SSE4.1: 
- Ускорение видео (3 инструкции) 
- Векторные примитивы (5 инструкций) 
- Вставки/извлечения (4 инструкции) 
- Скалярное умножение векторов (2 инструкции) 
- Смешивания (4 инструкции) 
- Проверки бит 
- Округления (2 инструкции) 
- Чтение WC памяти

SSE4.2

SSE4.2 это расширенный набор команд SSE4 от Intel. 

SSE4.2 состоит из 7 инструкций. Ожидается, что полный набор команд будет доступен в процессорах Nehalem. 

Инструкции SSE4.2: 
- Обработка строк (4 инструкции) 
- Подсчет CRC32 
- Подсчет популяции единичных бит 
- Векторные примитивы

SSE4A

SSE4A это расширенный набор команд SSE4 от AMD, разработанный скорее не как дополнение, а как альтернатива инструкциям SSE4 от Intel.

SSSE3

SSSE3 (Supplemental Streaming SIMD Extension 3) — это обозначение данное Intel 4-му расширению системы команд. Предыдущее имело обозначение SSE3 и Intel добавил ещё один символ 'S' вместо того, чтобы увеличить номер расширения, возможно потому, что они посчитали SSSE3 простым дополнением к SSE3. Часто, до того как стало использоваться официальное обозначение SSSE3, эти новые команды назывались SSE4. Также их называли кодовыми именами Tejas New Instructions (TNI) и Merom New Instructions (MNI) по названию процессоров, где впервые Intel намеревалась поддержать эти новые команды. Появившись в Intel Core Microarchitecture, SSSE3 доступно в сериях процессоров Xeon 5100 (Server и Workstation версии), а также в процессорах Intel Core 2 (Notebook и Desktop версии). 

Новыми в SSSE3, по сравнению с SSE3, являются 16 уникальных команд, работающих с упакованными целыми. Каждая из них может работать как с 64-х битными (MMX), так и с 128-ми битными (XMM) регистрами, поэтому Intel в своих материалах ссылается на 32 новые команды. 

Вот некоторые из них: 
- Работа со знаком (2 инструкции) 
- Сдвиги 
- Перемешивание байт 
- Умножения (2 инструкции) 
- Горизонтальные сложения/вычитания целых (4 инструкции)
Категория: Мои статьи | Добавил: Sam (01.06.2010)
Просмотров: 9084 | Рейтинг: 4.2/4
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Մուտք

Փնտրել

Հարցում

Գնահատեք ձեր համակարգչային գիտելիքները
Գնահատել է: 86


Տվյալներ

Онлайн всего: 1
Гостей: 1
Пользователей: 0


SamStudio © 2024
Хостинг от uCoz