Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Архитектура ia 32

Архитектура 32-битных микропроцессоров семейства Intel IA-32. Часть 1

Регистры

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

Восемь регистров общего назначения имеют длину в 32 бит и содержат адреса или данные. Они поддерживают операнды-данные длиной 1, 8, 16, 32 и (при использовании двух регистров) 64 бит ; битовые поля от 1 до 32 бит ; операнды-адреса длиной 16 и 32 бит . Эти регистры называются EAX, EBX, ECX, EDX, ESI , EDI , EBP , ESP . Доступ к младшим 16 бит этих регистров выполняется независимо при использовании соответствующих имен 16-битных регистров: AX, BX, CX, DX, SI , DI, BP и SP . Также могут использоваться индивидуально младший (биты 0-7) и старший (биты 8-15) байты регистров AX, BX, CX, DX. Им соответствуют обозначения AH , DH, CH, BH и AL, DL, CL, BL.

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

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

  • EAX — аккумулятор, операнд-источник или приемник результата (некоторые инструкции могут быть короче на один байт при использовании EAX);
  • EBX — указатель на данные в сегменте DS;
  • ECX — счетчик для цепочечных (например, MOVS) и циклических (с префиксом REP) инструкций;
  • EDX — адрес порта ввода-вывода для инструкций IN/INS, OUT/OUTS;
  • ESI — указатель на операнд-источник в сегменте DS для цепочечных инструкций;
  • EDI — указатель на операнд-приемник в сегменте ES для цепочечных инструкций;
  • EBP — указатель на данные в сегменте SS.

МП включает шесть непосредственно доступных 16-битных регистров сегментов. С каждым сегментным регистром ассоциирован программно-недоступный кэш дескриптора соответствующего сегмента, содержащий базовый адрес сегмента в линейном адресном пространстве, предел сегмента и атрибуты сегмента. Этот кэш заполняется при загрузке значения в сегментный регистр . В реальном режиме предел сегмента всегда 0FFFFh, атрибуты игнорируются, а базовый адрес вычисляется сдвигом значения селектора на 4 бита влево. В защищенном режиме кэш заполняется соответствующими значениями из дескрипторной таблицы .

Не все сегментные регистры равнозначны. Регистр CS хранит селектор сегмента кода. МП извлекает очередную инструкцию для исполнения, формируя логический адрес из селектора в CS и смещения в регистре EIP . Значение этого регистра нельзя изменить непосредственно, оно меняется в командах межсегментного перехода ( FAR JMP), межсегментного вызова ( FAR CALL ), при вызове обработчика прерывания ( INT ) и при возврате из далекой процедуры (RETF) или обработчика прерывания ( IRET ).

Регистр SS хранит селектор сегмента стека. Стек используется для передачи параметров подпрограммам и для сохранения адреса возврата при вызове подпрограммы или обработчика прерывания. Вершиной стека считается байт , логический адрес которого образуется из селектора в регистре SS и смещения в регистре ESP . Программа может непосредственно изменить значение SS, что дает ей возможность переключаться между несколькими стеками. Причем на время выполнения команды MOV SS,xxxx и одной команды, следующей за ней (обычно это MOV ESP ,xxxx), запрещаются маскируемые и блокируются немаскируемые прерывания .

Регистры DS, ES, FS и GS хранят селекторы сегментов данных. Если инструкция обращается к памяти, но содержит только смещение, то считается, что она обращается к данным в сегменте DS. Сегмент ES может использоваться без явного указания в цепочечных командах. Сегменты FS и GS используются при обращении к памяти только при явном использовании в инструкции префиксов этих сегментов.

Указатель команд ( EIP ) является 32-разрядным регистром. Он содержит смещение следующей команды, подлежащей выполнению. Относительный адрес отсчитывается от базового адреса сегмента исполняемой задачи. Указатель команд непосредственно недоступен программисту, но он изменяется явно командами управления потоком, прерываниями и исключениями (JMP, CALL , RET , IRET , команды условного перехода). Получить текущее значение EIP можно, если выполнить команду CALL , а затем прочитать слово на вершине стека.

Регистр системных флагов EFLAGS содержит группу флагов состояния , управления и системных флагов. Младшие 16 бит регистра представляют собой 16-разрядный регистр флагов и состояния МП 8086, называемый FLAGS, который наиболее полезен при исполнении программ для МП 8086 и Intel-286. Некоторые из флагов могут быть изменены специально предназначенными для этой цели инструкциями. Для изменения или проверки группы флагов можно воспользоваться следующими командами:

  • LAHF/SAHF — загрузка/сохранение младших 8 битов регистра флагов в регистре AH;
  • PUSHF/POPF — помещение/извлечение из стека младших 16 битов регистра флагов ;
  • PUSHFD/POPFD — помещение/извлечение из стека 32-битного регистра EFLAGS.

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

  • Регистр глобальной дескрипторной таблицы (GDTR). Содержит 32-битный линейный адрес и 16-битную границу глобальной дескрипторной таблицы . Значение этого регистра можно загрузить/сохранить при помощи привилегированных инструкций LGDT/SGDT. В реальном режиме этот регистр не используется. Перед переходом в защищенный режим в этот регистр следует загрузить корректные значения.
  • Регистр локальной дескрипторной таблицы (LDTR). Содержит 16-битный селектор локальной дескрипторной таблицы . С регистром связан программно-недоступный кэш дескриптора для хранения базового адреса, предела и атрибутов соответствующей дескрипторной таблицы . Значение этого регистра можно загрузить/сохранить при помощи привилегированных инструкций LLDT/SLDT. В реальном режиме этот регистр не используется, и попытка обращения к нему генерирует особый случай «недействительный код операции» (исключение #6). С каждой задачей в защищенном режиме может быть связана своя локальная дескрипторная таблица, поэтому селектор LDT хранится в TSS и автоматически загружается при переключении задач.
  • Регистр таблицы дескрипторов прерываний ( >IDT устанавливается в 0, а предел — 0FFFFh. В реальном режиме эта таблица хранит 4-байтные векторы прерываний, а в защищенном — 8-байтные дескрипторы шлюзов обработчиков прерываний и исключений. Это единственный регистр среди перечисленных, который используется в реальном режиме.
  • Регистр задачи (TR). Указывает на информацию, необходимую МП для определения текущей задачи. Регистр содержит 16-битный селектор дескриптора сегмента состояния задачи. С регистром связан программно-недоступный кэш дескриптора TSS для хранения базового адреса, предела и атрибутов соответствующего сегмента состояния задачи. Значение этого регистра можно загрузить/сохранить при помощи привилегированных инструкций LTR /STR. В реальном режиме этот регистр не используется, и попытка обращения к нему генерирует особый случай «недействительный код операции» (исключение #6).
Читать еще:  Модель архитектуры клиент сервер

МП имеет четыре 32-разрядных регистра управления CR0-CR4, в которых хранятся флаги состояния МП или глобальные флаги. Вместе с регистрами системных адресов эти регистры хранят информацию о состоянии МП, которая влияет на все задачи в системе. Системным программистам регистры управления доступны только через варианты команды MOV , которые позволяют их загружать или сохранять в регистрах общего назначения.

Шесть доступных регистров отладки (DR0-DR3, DR6, DR7, регистры DR4 и DR5 зарезервированы) расширяют возможности отладки. Они устанавливают точки останова по данным и позволяют устанавливатьзадавать точки останова по командам без модификации сегментов программ. Регистры DR0-DR3 предназначены для хранения четырех линейных адресов точек останова. Регистр DR6 отражает текущее состояние точек останова. Регистр DR7 задает условие для точек останова.

В МП Intel-386 и Intel-486 использовались также 2 регистра страничных проверок (TR6 и TR7), которые позднее были исключены из архитектуры IA-32 .

Формат команды микропроцессора IA-32

Инструкция микропроцессора может содержать следующие поля:

префиксКОПMod R/MSIBсмещениенепосредственный операнд
0/1 байт1/2 байта0/1 байт0/1 байт0/1/2/4 байта0/1/2/4 байта

Префикс — необязательная часть инструкции, которая позволяет изменить некоторые особенности ее выполнения. В команде может быть использовано сразу несколько префиксов разного типа. Типы префиксов: командные префиксы (префиксы повторения) REP, REPE/REPZ, REPNE/REPNZ; префикс блокировки шины LOCK; префиксы размера; префиксы замены сегмента.

КОП — код операции .

Байт » Mod R/M» определяет режим адресации , а также иногда дополнительный код операции . Необходимость байта » Mod R/M» зависит от типа инструкции.

Байт SIB (Scale-Index-Base) определяет способ адресации при обращении к памяти в 32-битном режиме. Необходимость байта SIB зависит от режима адресации, задаваемого полем » Mod R/M».

Кроме того, инструкция может содержать непосредственный операнд и/или смещение операнда в сегменте данных.

На размер инструкции накладывается ограничение в 15 байт . Инструкция большего размера может получиться при некорректном использовании большого количества префиксов. В IA-32 в таком случае генерируют исключение #13.

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

Для совместимости с 16-битными процессорами архитектура IA-32 использует одинаковые коды для инструкций, оперирующих как с 16-битными, так и 32-битными операндами. Новая архитектура предусматривает также новые возможности при указании адреса для операнда в памяти. Как процессор будет считать операнд или его адрес , зависит от эффективного размера операнда и эффективного размера адреса для данной команды. Эти значения определяются на основе режима работы, бита D дескриптора используемого сегмента и наличия в инструкции определенных префиксов.

Непосредственный режим адресации подразумевает включение операнда-источника в код инструкции. Операнд может быть 8-битовым или 16-битовым, если значение эффективного размера операнда — 16. Операнд может быть 8-битовым или 32-битовым, если значение эффективного размера операнда — 32. Обычно непосредственные операнды используются в арифметических инструкциях.

Регистровый режим адресации определят операнд -источник или операнд -приемник в одном из регистров процессора или сопроцессора.

В некоторых случаях, (например, в инструкциях DIV и MUL) могут использоваться пары 32-битных регистров (например, EDX:EAX), образуя 64-битный операнд .

Адресация через порт ввода-вывода подразумевает получение операнда или сохранение операнда через пространство портов ввода-вывода. Адрес порта ввода-вывода либо непосредственно включается в код инструкции, либо берется из регистра DX.

Очень распространенный способ адресации операнда — адресация через память . Таким образом, может быть указан операнд -источник или операнд -приемник. Следует отметить, что процессор не позволяет одновременно задавать оба операнда через память (за исключением некоторых цепочечных команд).

Для получения операнда из памяти процессору необходимо знать селектор сегмента и смещение в сегменте. В некоторых командах селектор может быть указан непосредственно в коде инструкции. В других случаях процессор может явно или неявно использовать значение одного из сегментных регистров. Под неявным использованием сегментных регистров подразумевается то, что в зависимости от предназначения операнда процессор использует определенный сегментный регистр для обращения к памяти: CS -для выборки инструкций; SS — для работы со стеком или обращения к памяти через регистры ESP или EBP ; ES — для получения адреса операнда-приемника в цепочечных командах; DS — при всех остальных обращениях к памяти. Явное использование сегментных регистров возможно, если в код инструкции включается префикс смены сегмента. Указание префикса смены сегмента допустимо не для всех команд: нельзя менять сегмент для команд работы со стеком (всегда используется SS); для цепочечных команд можно менять сегмент только операнда-источника ( операнд -приемник всегда адресуется через ES).

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

Такая схема позволяет в языках высокого уровня и на языке Ассемблера легко реализовать работу с массивами.

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Intel IA-32

Intel IA-32

ДизайнерIntel Corporation
Биты32-bit
Представлен1985 год
Версияi386
РасширенияMMX
ОткрытоНет
Регистры
32 бита
Общее назначение32 бита
FPU (Floating Point Unit)32 бита

Intel IA-32 (сокращение от «Intel Architecture, 32-bit», иногда также называемое i386) – это 32-разрядная версия архитектуры набора инструкций x86, разработанная Intel и впервые реализованная в Intel 80386 в 1985 году, показанный на рисунке 1. IA-32 является первым воплощением x86, поддерживающим 32-разрядные вычисления, в результате термин «IA-32» может использоваться в качестве метонима для обозначения всех версий x86, поддерживающих 32-битные вычисления.

Рисунок 1 – Intel 80386

Содержание

Альтернативные названия

В различных директивах языка программирования IA-32 по-прежнему иногда называют архитектурой «i386». В некоторых других контекстах некоторые итерации ISA IA-32 иногда обозначаются как i486, i586 и i686, ссылаясь на наборы инструкций, предлагаемые Intel 80386, микроархитектурами P5 и P6 соответственно. Эти обновления предлагали множество дополнений наряду с базовым набором IA-32, то есть с плавающей запятой и расширениями MMX. [Источник 1]

Истоки появления

Intel была исторически крупнейшим производителем процессоров IA-32, причем вторым по величине поставщиком был AMD. В 1990-х годах VIA, Transmeta и другие производители чипов также выпускали совместимые с IA-32 процессоры (например, WinChip). В современную эпоху Intel по-прежнему выпускает процессоры IA-32 под платформой микроконтроллеров Intel Quark, однако с 2000-х годов большинство производителей (включая Intel) почти полностью перешли на реализацию процессоров на основе 64-битного варианта x86, x86-64. x86-64 по спецификации предлагает устаревшие режимы работы, которые работают на ISA IA-32 для обратной совместимости.

Читать еще:  Как установить linux mint 19 с флешки

Даже учитывая современную распространенность x86-64, по состоянию на 2018 год версии IA-32 с защищенным режимом многих современных операционных систем все еще сохраняются, например Microsoft Windows и дистрибутив Ubuntu Linux. Несмотря на то, что имя IA-32 (и вызывает некоторую потенциальную путаницу), 64-разрядная эволюция x86, которая возникла из AMD, не будет известна как «IA-64», которое вместо этого принадлежит архитектуре Intel Itanium. [Источник 2]

Архитектурные особенности

Первичной определяющей характеристикой IA-32 является наличие 32-разрядных регистров процессора общего назначения (например, EAX и EBX), 32-разрядных целочисленных арифметических и логических операций, 32-разрядных смещений в сегменте в защищенном режиме и перевод сегментированных адресов на 32-битные линейные адреса. Дизайнеры воспользовались возможностью, чтобы сделать другие улучшения. Ниже приводятся некоторые из наиболее значительных изменений.

Рисунок 2 – Intel Pentium

32-битная целая функция

Все регистры общего назначения (GPR) расширяются от 16 бит до 32 бит, а все арифметические и логические операции, операции с памятью и регистром и памятью и т.д. Могут работать непосредственно с 32-битными целыми числами. Толкает и поставляет по стеку по умолчанию 4-байтные шаги, а несегментированные указатели имеют ширину 4 байта.

Более общие режимы адресации

Любой GPR может использоваться как базовый регистр, и любой GPR, отличный от ESP, может использоваться в качестве индексного регистра в ссылке на память. Значение регистра индекса может быть умножено на 1, 2, 4 или 8 перед добавлением к значению базового регистра и смещению.

Дополнительные сегментные регистры

Предусмотрены два дополнительных сегментарных регистра, FS и GS.

Большее виртуальное адресное пространство

Архитектура IA-32 определяет 48-битный сегментированный формат адреса с 16-разрядным номером сегмента и 32-битным смещением внутри сегмента. Сегментированные адреса сопоставляются с 32-битными линейными адресами.

Пейджинг спроса

32-битные линейные адреса — это виртуальные адреса, а не физические адреса; они переводятся на физические адреса через таблицу страниц. В Intel 80386, Intel 80486 и исходных процессорах Intel Pentium (представлен на рисунке 2) физический адрес составлял 32 бита; в процессорах Intel Pentium Pro и более поздних версиях расширение физического адреса допускало 36-битные физические адреса, хотя размер линейного адреса был еще 32 бита. [Источник 3]

Процессоры данной архитектуры

Ниже представлен список процессоров Intel, в которых использовалась данная архитектура.

Регистры процессора IA32

Макс Петровмай 2013

Процессоры IA32 (32-bit Intel Architecture) имеют набор высокоскоростных ячеек памяти, расположенных в непосредственной близости от ядра процессора, которые называют регистрами. Это 4 32-разрядных регистров общего назначения:
EAX/AX/AH/AL — аккумулятор (Extended Accumulator eXtended),
EBX/BX/BH/BL — база (Extended Base eXtended),
ECX/CX/CH/CL — счетчик (Extended Counter eXtended),
EDX/DX/DH/DL — данные (Extended Data eXtended),

индексные 32-разрядные регистры:
ESI/SI — индекс источника (Extended Source Index),
EDI/DI — индекс приемника (Extended Destination Index),

32-разрядные регистры-указатели:
EBP/BP — указатель базы (Extended Base Pointer),
ESP/SP — указатель стека (Extended Stack Pointer);
EIP/IP — указатель команд (Extended Instruction Pointer);

шесть 16-разрядных сегментных регистров:
CS — сегмент кода (Code Segment),
DS — сегмент данных (Data Segment),
SS — сегмент стека (Stack Segment),
ES — дополнительный сегмент (E Segment),
FS — дополнительный сегмент (F Segment),
GS — дополнительный сегмент (G Segment);

32-разрядный регистр флагов:
EFLAGS/FLAGS — флаги (Extended FLAGS).

Кроме того, в процессоре IA32 присутствуют управляющие регистры CR0 . CR4 , регистры управления памятью GDTR , IDTR , LDTR , TR , регистры отладки DR0 . DR7 , регистры тестирования TR1 . TR12 .

Во всех современных процессорах архитектуры IA32 присутствуют регистры SIMD-расширения (Single Instruction — Multiple Data): 64-битные регистры MMX-расширения MMX0 . MMX7 , 128-битные регистры SSE-расширения XMM0 . XMM7 .

Присутствующая в обозначении части регистров дробная черта говорит о допустимых вариантах обращения к этим регистрам, что связано с задачей обеспечения совместимости команд 32-разрядного процессора с командами процессоров предшествующих поколений (16- и 8-разрядных). Например, программа может обращаться либо к 32-битному регистру EAX , либо к его младшему слову AX (эмуляция 16-разрядного процессора), либо к каждому байту младшего слова AH или AL (эмуляция 8-разрядного процессора). Коды операций с AX , AH и AL в 32-разрядном процессоре остались те же, что были в 16- или 8-разрядном процессоре.

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

Регистры ESI и EDI предназначены для операций над массивами данных (цепочечных операций). Регистр ESI содержит адрес следующего элемента массива, который надлежит обработать. Результат обработки помещается по адресу, содержащемуся в регистре EDI .

Регистры EBP , ESP , EIP содержат, соответственно, указатель на базу кадра стека, указатель на вершину стека, указатель на следующую команду, которую предстоит выполнить процессору.

Сегментные регистры содержат адреса сегмента кода, сегмента данных, сегмента стека ( CS , DS , SS ). В программе может быть организовано 3 добавочных сегмента данных, для задания их адресов используются регистры ES , FS , GS .

Биты (флаги) регистра EFLAGS в зависимости от их значения (1 — флаг поднят, 0 — флаг опущен) несут информацию о состоянии процессора после выполнения операции и о ее результате.

Сравнительный анализ исполнения алгоритмов, содержащих ветвления в архитектуре IA-32 и IA-64.

Рубрика: Технические науки

Дата публикации: 19.01.2019 2019-01-19

Статья просмотрена: 134 раза

Библиографическое описание:

Буняева Е. В., Холодилов А. А., Яковлева А. В. Сравнительный анализ исполнения алгоритмов, содержащих ветвления в архитектуре IA-32 и IA-64. // Молодой ученый. — 2019. — №3. — С. 15-17. — URL https://moluch.ru/archive/241/55715/ (дата обращения: 04.04.2020).

Читать еще:  Архитектура клиент серверных сетей

Intel Architecture является системой архитектуры процессоров, которая разработана компанией Intel. В настоящее время широко известны два представителя данной системы: IA-32 и IA-64, со своими особенностями, повлиявшими на развитие современных процессоров. В частности, реализация механизма предсказания ветвлений, при исполнении алгоритмов, содержащих условия, особенности которой рассматриваются в данной статье.

Так, IA-32 (Intel Architecture, 32 bit) — это микропроцессорная архитектура, являющаяся третьим поколением архитектуры x86, отметившаяся переходом на 32-разрядные вычисления. Первым представителем архитектуры был микропроцессор Intel 80386, выпущенный 17 октября 1985 года. Новая архитектура стала доминирующей среди микропроцессоров для персональных компьютеров на ближайшие 20 лет, но в дальнейшем была вытеснена 64-разрядной архитектурой x86–64 [1, с.4].

IA-64 (Intel Architecture-64) — 64-битная аппаратная платформа: микропроцессорная архитектура и соответствующая архитектура набора команд, разработанная совместно компаниями Intel и Hewlett Packard. Она была реализована в микропроцессорах Itanium и Itanium 2, основана на EPIC (сокр. от англ. Explicity Parallel Instruction Computing, вычисления с явной параллельностью инструкций). Изначально предлагалась в качестве платформы для домашних компьютеров, но после выпуска AMD64, сохранившей совместимость с x86, актуальность использования платформы IA-64 где-либо, кроме серверов, пропала, несмотря на то, что в конце 2001 года для IA-64 была выпущена специальная версия Windows XP 64-bit for IA-64 [1, с.4].

Данные архитектуры в значительной мере отличаются друг от друга. Так, например, одним из главных отличий является наличие модуля предсказания переходов или прогнозирования ветвлений, предназначенный для сокращения времени простоя конвейера за счет предварительной загрузки и исполнения инструкций, которые должны выполниться после выполнения инструкции условного перехода. Это устройство, которое входит в состав микропроцессоров, имеющих конвейерную архитектуру и предсказывающее, будет ли выполнен условный переход в исполняемой программе. Именно прогнозирование ветвлений играет важнейшую роль, так как оно позволяет в большинстве случаев оптимально использовать вычислительные ресурсы процессора [2, с.4].

Отличие заключается в том, что в архитектуре IA-64 данный модуль отсутствует. Вместо этого в ней используется технология «отмеченных команд» (predication) для устранения потерь производительности из-за неправильно предсказанных переходов и необходимости пропуска участков кода после ветвлений. Когда процессор встречает «отмеченное» ветвление в процессе выполнения программы, он начинает одновременно выполнять все ветви. После того, как будет определена «истинная» ветвь, процессор сохраняет необходимые результаты и сбрасывает остальные [3, с.4].

В архитектуре IA-32 наличие модуля предсказания ветвлений позволяет совершать попытки предсказания переходов (Рисунок 1). Код предварительно анализируется и по некоторым характеристикам предполагается наиболее вероятное его продолжение. И это продолжение загружается в кэш и выполняется еще до вычисления условия перехода. После вычисления условия в случае успешного предсказания результаты работы выполненного после условия кода принимаются, выполнение продолжается, и таким образом, сокращается время простоя, в ином случае, выполненные результаты отбрасываются. Конвейер команд очищается и загружается новым кодом, что приводит к большим задержкам. В большинстве случаев процесс всё же будет ускоряться, так как вероятность неправильного предсказания переходов составляет около 10 % [4, с.4].

Рис 1. Сравнительная характеристика архитектур Intel

Также стоит отметить, что предсказатель переходов имеет своей целью осуществление предварительной выборки инструкций и данных из памяти, а также выполнение инструкций, находящихся после условного перехода, до того, как определено его направление. Основными методами же являются статический и динамический, которые, в свою очередь, подразделяются на множество других [5, с.4].

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

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

‒ адаптивный двухуровневый предсказатель. В котором для первого уровня выполняются история последних k ветвлений, второго уровня k указывает на таблицу шаблонов;

‒ локальное предсказание перехода. В нем каждый условный переход в области имеет собственную историю переходов. Шаблоны переходов могут быть общими или отдельными;

‒ глобальное предсказание перехода. Глобальное предсказание переходов не хранит истории отдельно для каждого перехода, а использует общую историю. Любые закономерности в переходах сказываются на этой истории, но историю могут загрязнять нерелевантные записи;

‒ гибридный предсказатель. Этот предсказатель может выбирать результаты наиболее успешных предсказателей на основе истории либо использовать мажоритарную функцию нечётного количества предсказателей;

‒ предсказатель для цикла. Он может использовать счетчик цикла для отсчета количества переходов в начало цикла. Этот предсказатель может использоваться в гибридном предсказателе;

‒ предсказание косвенных переходов. Данный предсказатель может иметь больше двух ветвлений. Новейшие процессоры имеют возможность выбора более двух условий используя, двухуровневый адаптивный предсказатель. Процессоры без поддержки предсказаний косвенных переходов могут использовать статическое предсказание или брать предыдущее значение [6, с.4];

Таким образом, выбор предсказания переходов зависит от вида решаемой задачи. Но также стоит учесть, что ограничением для одновременного выполнения нескольких команд является несвязанное использование одних и тех же регистров. Так, для решения этой проблемы используется алгоритм переименования регистров, то есть одному и тому же логическому регистру ставят в соответствие несколько физических, а каждому независимому участку кода выделяют свой физический регистр. Желание загрузить простаивающие блоки процессора привело к появлению технологии аппаратной поддержки параллельных процессов — Hyper-Threading. Она позволяет на одном и том же процессоре одновременно выполнять два процесса, используя не занятые блоки. В отличие от использования двух параллельных процессоров, данный метод является не таким дорогим, но и считается не эффективный. При его использовании производительность увеличивается примерно на 20–30 % [4, с.4].

Желание усовершенствовать и устранить недостатки архитектуры привели к дальнейшему развитию аппаратной платформы IA-64, особенностями которой стали: использование простых инструкций одинаковой длины, сгруппированных по три; переупорядочивание и оптимизация во время компиляции; использование нескольких последовательностей команд одновременно без предсказания переходов и загрузка данных до того, как они потребуются (проверка кэша выполняется вначале). Именно эти особенности позволили положить основу и сделать большой шаг для дальнейшего развития современных устройств компьютера.

Ссылка на основную публикацию
Adblock
detector