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, особенностями которой стали: использование простых инструкций одинаковой длины, сгруппированных по три; переупорядочивание и оптимизация во время компиляции; использование нескольких последовательностей команд одновременно без предсказания переходов и загрузка данных до того, как они потребуются (проверка кэша выполняется вначале). Именно эти особенности позволили положить основу и сделать большой шаг для дальнейшего развития современных устройств компьютера.
Литература:
- What do IA-32 and Intel 64 Architecture mean: [Электронный ресурс] //Intel.Software; URL: https://software.intel.com/en-us/articles/ia-32-intelr-64-ia-64-architecture-mean
- Two level Adaptive Branch Prediction: [Электронный ресурс] //John J. Lee URL: http://www.ece.iupui.edu/~johnlee/ECE565/papers/Two-level_Adaptive_Branch-prediction.ppt
- Архитектура IA-64: [Электронный ресурс] //Дорофеев Н.; URL: https://www.ixbt.com/cpu/ia64.html
- Архитектуры IA-32 и IA-64: [Электронный ресурс] //Казанский национальный исследовательский технический университет им. А. Н. Туполева; URL: https://studfiles.net/preview/2016068/page:3/
- Методы предсказания переходов: [Электронный ресурс] //Vuzlit.ru; URL: https://vuzlit.ru/979635/metody_predskazaniya_perehodov
- Branch prediction: [Электронный ресурс] //Agner Fog; Techical University of Denmark; URL: https://www.agner.org/optimize/microarchitecture.pdf