Что такое предсказание ветвлений

В этой статье маг Ольга Васильева отвечает на вопрос «Что такое предсказание ветвлений?».

Предсказатель переходов — Модуль предсказания условных переходов (англ. Branch Prediction Unit) устройство, входящее в состав микропроцессоров, имеющих конвейерную архитектуру, определяющее направление ветвлений (предсказывающее, будет ли выполнен условный… … Википедия

Intel P6 — P6 суперскалярная суперконвейерная архитектура, разработанная компанией Intel и лежащая в основе микропроцессоров Pentium Pro, Pentium II, Pentium III, Celeron и Xeon. В отличие от x86 совместимых процессоров предыдущих поколений с CISC… … Википедия

Pentium III — > Центральный процессор Производство … Википедия

Вычислительный конвейер — У этого термина существуют и другие значения, см. Конвейер (значения). Конвейер способ организации вычислений, используемый в современных процессорах и контроллерах с целью повышения их производительности (увеличения числа инструкций,… … Википедия

X86 — 80486 DX2 x86 (Intel 80×86) аппаратная платформа: архитектура микропроцессора и соответствующий набор инструкций, как разработанных и выпускаемых компанией Intel, так и совместимых с ними процессоров других производителей (AMD, VIA … Википедия

WinChip — >Википедия

x86 — 80486 DX2 x86 (англ. Intel 80×86) архитектура процессора c одноимённым наборо … Википедия

EPIC (архитектура микропроцессора) — У этого термина существуют и другие значения, см. EPIC. EPIC (англ. explicitly parallel instruction computing) микропроцессорная архитектура с явным параллелизмом команд. Термин введён в 1997 году альянсом HP и Intel[1] для… … Википедия

В отличие от перемен, которые произошли при переходе от микроархитектур с Core на Core 2, Intel не очень сильно переделала переднюю часть конвейера Nehalem. Здесь есть те же самые четыре блока декодирования, которые появились вместе с Conroe — три простых и один сложный. По-прежнему поддерживается функция слияния макроопераций (macro-ops fusion), обеспечивается теоретическая максимальная пропускная способность 4+1 инструкций x86 за такт.

На первый взгляд никаких революционных изменений не произошло, однако нужно обратить внимание на детали. Как мы уже не раз упоминали, повышение числа исполнительных блоков — очень неэффективный способ поднять производительность. Накладные расходы при этом очень велики, а прирост всё больше срезается с каждым добавлением. Поэтому вместо добавления новых блоков декодирования, инженеры сконцентрировали своё внимание на оптимизации существующих.

Начнём с того, что была добавлена поддержка слияния макроопераций (macro-ops fusion) для 64-битного режима, что вполне оправданно для архитектуры, подобной Nehalem, и не скрывает амбиций по проникновению на серверный сегмент рынка. Но инженеры на этом не остановились. Если архитектура Conroe могла выполнять слияние только весьма ограниченного набора инструкций, архитектура Nehalem поддерживает большее число вариантов, то есть слияние макроопераций может выполняться чаще.

Ещё одна новая функция, представленная с Conroe, тоже была улучшена: Loop Stream Detector. За этим названием скрывается буфер, содержащий несколько инструкций (18 инструкций x86 в архитектуре Core 2). Когда процессор определяет цикл, он отключает некоторые части конвейера. Поскольку цикл подразумевает выполнение одинаковых инструкций указанное число раз, вряд ли имеет смысл выполнять предсказание ветвлений или забирать инструкции из кэша L1 при каждой итерации цикла. Поэтому Loop Stream Detector работает как небольшая кэш-память, которая «замыкает» первые ступени конвейера в подобных ситуациях. При реализации этой техники получается двоякий прирост: снижается энергопотребление, поскольку процессор не работает над бесполезными задачами, а также увеличивается производительность путём снижения нагрузки на кэш инструкций L1.

С архитектурой Nehalem Intel улучшила функциональность Loop Stream Detector. Начнём с того, что буфер был увеличен — теперь он вмещает 28 инструкций. Но, более того, изменилось его расположение в конвейере. В Conroe буфер располагался как раз за ступенью выборки инструкций (instruction fetch). Теперь же буфер находится после ступени декодирования; такое расположение позволило отключать большую часть конвейера. В Nehalem Loop Stream Detector хранятся уже не инструкции x86, а микрооперации. В данном отношении технология чем-то напоминает концепцию кэша с отслеживаниями (trace cache) у Pentium 4. Нас не удивляет, что в Nehalem можно найти ряд инноваций, появившихся с архитектурой NetBurst, поскольку команда в Хиллсборо (Hillsboro), отвечающая за Nehalem, занималась и проектом Pentium 4. Однако если Pentium 4 использовал кэш с отслеживаниями эксклюзивно, поскольку он мог рассчитывать только на один декодер в случае промаха кэша, Nehalem выигрывает от мощи четырёх декодеров, хотя Loop Stream Detector можно назвать только дополнительной оптимизацией для некоторых ситуаций. В любом случае, перед нами лучшее из обоих миров.

Последнее улучшение в передней части конвейера касается предсказания ветвлений. Эффективность алгоритмов предсказания ветвлений критична для архитектур, где используется высокий уровень параллелизма инструкций. Ветвления разрывают параллелизм, поскольку необходимо ждать результат предыдущей инструкции, прежде чем продолжить выполнение потока инструкций. Предсказание ветвлений прогнозирует, будет взята ветвь или нет, и если ветвь будет взята, то быстро вычисляет дальнейший адрес для продолжения выполнения. Для этого не требуется каких-либо сложных техник; всё что нужно — массив ветвлений, так называемый Branch Target Buffer (BTB), который сохраняет результаты ветвлений по мере продолжения выполнения кода (взята ветвь или нет, а также целевой адрес). К массиву прилагается алгоритм определения результата следующего ветвления.

Раньше после выборки команды условного ветвления (перехода) работа конвейера всегда приостанавливалась для проверки условия перехода:

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

Предсказание перехода (Branch Prediction) позволяет безостановочно (без проверки условия ветвления) выбрать направление дальнейшего выполнения программы. Известны два метода предсказания:

  • • статический, согласно которому заранее отдается предпочтение одному из условий ветвления. Его алгоритм закладывается программистом в текст программы и реализуется при ее выполнении;
  • • динамический, основанный на предыстории выполнения программы и предсказываемый на основании статистических данных, полученных для обеих ветвей.

В процессорах Pentium для прогнозирования используются следующие средства:

  • • 512 адресов ранее выполненных переходов, хранящихся в буфере адресов ветвлений (Branch Target Buffer – ВТВ);
  • • 4 бита предыстории ветвления, которые указывают, выполнялся ли переход при четырех предыдущих выборках данной команды. Биты хранятся в буфере истории переходов (Branch History Buffer – ВНВ).

При поступлении очередной команды условного перехода указанный в ней адрес Акуп сравнивается с адресом Автв буфера:

  • • если ранее по адресу Акуп не производились переходы, то этот адрес не содержится в буфере ВТВ и предсказывается отсутствие ветвления, поэтому продолжается выборка и декодирование команд, следующих за командой перехода;
  • • если в буфере ВТВ отыскивается адрес Автв = Акуп, то проводится анализ предыстории, в результате чего определяется направление ветвления, для которого чаще всего выполнялось условие ветвления, а также выявляются чередующиеся переходы.

Выбранная по предсказанному адресу команда условного перехода сохраняется (загружается в конвейер). Одновременно с ней выбирается, декодируется и сохраняется следующая команда. Если после анализа условия ветвления выясняется, что предсказание было неправильным, то в исполнительное устройство поступает следующая команда. Таким образом, сокращаются потери времени на перезагрузку конвейера. Данный алгоритм обеспечивает вероятность правильного предсказания ветвлений до 90%.

Способ обработки данных, при котором процессор заранее (до выявления условий перехода) выполняет команды ветвления, называется упреждающим исполнением, исполнением по предположению или спекулятивным исполнением (Speculative Execution). Этот способ, по существу, позволяет процессору завершать команды заранее, а затем использовать уже вычисленные результаты по мере необходимости. В его основе лежит опережающий просмотр счетчика команд. Процессор на основании анализа выбирает команды из накопителя (кэш-памяти, регистрового файла, пула), выполняет их и сохраняет результаты во временных регистрах.

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

При спекулятивном исполнении используются такие механизмы, как продвижение данных (Data Forwarding) и исполнение с изменением порядка следования команд (out-of-order execution – нестандартное исполнение) [18].

Читайте также:

Читайте также:  Как найти у предсказанное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Предсказания провидцев © 2024

Adblock detector