Из Википедии, бесплатной энциклопедии
  (Перенаправлено из предсказания ветки )
Перейти к навигации Перейти к поиску

В компьютерной архитектуры , А ветви предсказателем [1] [2] [3] [4] [5] представляет собой цифровую схему , которая пытается угадать , в какую сторону ветви (например, если-то-иначе структура ) будет идти прежде , чем это известно окончательно. Цель предсказателя ветвления - улучшить поток в конвейере команд . Предикторы ветвления играют критически важную роль в достижении высокой эффективной производительности во многих современных конвейерных архитектурах микропроцессоров, таких как x86 .

Пример 4-х ступенчатого конвейера. Цветные прямоугольники представляют собой независимые друг от друга инструкции.

Двустороннее ветвление обычно реализуется с помощью инструкции условного перехода . Условный переход может быть либо «не выполнен» и продолжить выполнение с первой ветвью кода, которая следует сразу после условного перехода, либо он может быть «взят» и перейти в другое место в программной памяти, где находится вторая ветвь кода. хранится. Точно неизвестно, будет ли выполнен условный переход или нет, пока условие не будет вычислено и условный переход не пройдет стадию выполнения в конвейере команд (см. Рис. 1).

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

Время, которое тратится впустую в случае неверного предсказания перехода , равно количеству этапов в конвейере от этапа выборки до этапа выполнения. Современные микропроцессоры, как правило, имеют довольно длинные конвейеры, поэтому задержка неверного предсказания составляет от 10 до 20 тактов . В результате увеличение длины конвейера увеличивает потребность в более продвинутом предсказателе ветвления. [6]

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

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

Реализация [ править ]

Предсказание статического ветвления [ править ]

Статическое предсказание - это простейший метод предсказания ветвлений, поскольку он не полагается на информацию о динамической истории выполнения кода. Вместо этого он предсказывает результат перехода, основываясь исключительно на инструкции перехода. [7]

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

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

Более продвинутая форма статического прогнозирования предполагает, что обратные ветки будут выполняться, а прямые - нет. Обратная ветвь - это ветвь, у которой целевой адрес ниже, чем ее собственный адрес. Этот метод может помочь с точностью прогнозирования петель, которые обычно являются ветвями, указывающими назад, и которые используются чаще, чем не используются.

Некоторые процессоры позволяют вставлять в код подсказки прогнозирования ветвления, чтобы определить, следует ли выполнять статическое прогнозирование или нет. Intel Pentium 4 принимает подсказки предсказания ветвления, но в более поздних процессорах Intel от этой функции отказались. [8]

Статическое предсказание используется в качестве метода отката в некоторых процессорах с динамическим предсказанием ветвления, когда у динамических предсказателей нет достаточной информации для использования. И Motorola MPC7450 (G4e), и Intel Pentium 4 используют эту технику как запасной вариант . [9]

При статическом прогнозировании все решения принимаются во время компиляции перед выполнением программы. [10]

Динамическое предсказание ветвления [ править ]

Динамическое предсказание ветвлений [2] использует информацию о взятых или невыполненных ветвях, собранную во время выполнения, для прогнозирования результата ветвления. [1]

Предсказание случайного ветвления [ править ]

Использование случайного или псевдослучайного бита (чистое предположение) гарантировало бы для каждой ветви 50% правильного прогноза, который не может быть улучшен (или ухудшен) путем переупорядочения инструкций. (С помощью простейшего статического предсказания типа «предположить дубль» компиляторы могут переупорядочить инструкции, чтобы добиться более точного предсказания, чем 50%.) Кроме того, это сделало бы время [гораздо более] недетерминированным.

Предсказание следующей строки [ править ]

Некоторые суперскалярные процессоры (MIPS R8000 , Alpha 21264 и Alpha 21464 ( EV8 )) получают каждую строку инструкций с указателем на следующую строку. Этот предсказатель следующей строки обрабатывает предсказание цели ветвления, а также предсказание направления ветвления.

Когда предсказатель следующей строки указывает на выровненные группы из 2, 4 или 8 инструкций, целью ветвления обычно не будет первая извлеченная команда, и поэтому исходные извлеченные команды теряются. Предположим для простоты, что при равномерном распределении целевых объектов ветвления отбрасываются команды 0,5, 1,5 и 3,5 соответственно.

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

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

Одноуровневое предсказание ветвления [ править ]

Счетчик насыщения [ править ]

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

2-битный счетчик насыщения [11] - это конечный автомат с четырьмя состояниями:

Рисунок 2: Диаграмма состояний 2-битного счетчика насыщения
  • Сильно не взяли
  • Слабо не берется
  • Слабо взят
  • Сильно взятый

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

В исходном процессоре Intel Pentium, отличном от MMX , используется счетчик насыщения, хотя и с несовершенной реализацией. [8]

В тестах SPEC '89 очень большие бимодальные предикторы насыщаются на 93,5% правильных, когда каждая ветвь отображается на уникальный счетчик. [12] : 3

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

Двухуровневый предсказатель [ править ]

Двухуровневый предсказатель ветвлений, также называемый предсказателем ветвлений на основе корреляции, использует двумерную таблицу счетчиков, также называемую «таблицей истории шаблонов». Записи в таблице представляют собой двухбитовые счетчики.

Двухуровневый адаптивный предсказатель [ править ]

Рисунок 3: Двухуровневый адаптивный предсказатель ветвления. Каждая запись в таблице истории паттернов представляет собой 2-битный счетчик насыщения типа, показанного на рисунке 2. [13]

Если ifоператор выполняется три раза, решение о третьем выполнении может зависеть от того, были ли выполнены предыдущие два или нет. В таких сценариях двухуровневый адаптивный предсказатель работает более эффективно, чем счетчик насыщения. Условные скачки, которые совершаются каждый второй раз или имеют какой-либо другой регулярно повторяющийся паттерн, плохо предсказываются счетчиком насыщения. Двухуровневый адаптивный предсказатель запоминает историю последних n вхождений ветви и использует один счетчик насыщения для каждого из возможных 2 n шаблонов истории. Этот метод проиллюстрирован на рисунке 3.

Рассмотрим пример n = 2. Это означает, что два последних вхождения ветви хранятся в двухразрядном регистре сдвига . Этот регистр истории переходов может иметь четыре различных двоичных значения, 00, 01, 10 и 11, где ноль означает «не принят», а один означает «принято». Таблица истории паттернов содержит четыре записи на каждую ветвь, по одной для каждой из 2 2  = 4 возможных историй ветвей, и каждая запись в таблице содержит двухбитовый счетчик насыщения того же типа, что и на рисунке 2 для каждой ветви. Регистр истории ветвей используется для выбора того, какой из четырех счетчиков насыщения использовать. Если история 00, то используется первый счетчик; если в истории 11, то используется последний из четырех счетчиков.

Предположим, например, что условный переход выполняется каждый третий раз. Последовательность ветвления - 001001001 ... В этом случае запись номер 00 в таблице истории паттернов перейдет в состояние «сильно занято», что означает, что после двух нулей следует единица. Запись с номером 01 перейдет в состояние «категорически не принимается», что означает, что после 01 идет ноль. То же самое и с записью номер 10, в то время как запись с номером 11 никогда не используется, потому что никогда не бывает двух последовательных записей.

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

Преимущество двухуровневого адаптивного предсказателя заключается в том, что он может быстро научиться предсказывать произвольный повторяющийся шаблон. Этот метод был изобретен Т.-Ю. Yeh и Йельского Patt в Университете штата Мичиган . [14] С момента первой публикации в 1991 году этот метод стал очень популярным. Варианты этого метода прогнозирования используются в большинстве современных микропроцессоров. [ необходима цитата ]

Двухуровневый нейронный предсказатель [ править ]

Предложен двухуровневый предсказатель ветвлений, в котором второй уровень заменяется нейронной сетью . [15]

Прогноз местного отделения [ править ]

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

Intel Pentium MMX , Pentium II и Pentium III имеют локальные прогностические ветви с местной историей 4-битном и краеведческой шаблон таблицы с 16 записей для каждого условного перехода.

В тестах SPEC '89 очень большие локальные предикторы дают 97,1% правильных значений. [12] : 6

Предсказание глобального ветвления [ править ]

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

Эта схема лучше схемы счетчика с насыщением только для таблиц большого размера и редко бывает так же хороша, как локальное предсказание. Буфер истории должен быть длиннее, чтобы делать хороший прогноз. Размер таблицы истории паттернов экспоненциально увеличивается с размером буфера истории. Следовательно, большая таблица истории паттернов должна использоваться всеми условными переходами.

Двухуровневый адаптивный предсказатель с глобальным общим буфером истории и таблицей истории шаблонов называется предсказателем «gshare», если он xors глобальной истории и ПК ветви, и «gselect», если он объединяет их. Глобальное предсказание ветвлений используется в процессорах AMD , а также в процессорах Intel Pentium M , Core , Core 2 и Atom на базе Silvermont . [16]

Прогнозирование легированной ветки [ править ]

Средство прогнозирования переходов [17] сочетает в себе принципы локального и глобального прогнозирования путем объединения локальных и глобальных историй переходов, возможно, с некоторыми битами из счетчика программ . Тесты показывают, что процессор VIA Nano может использовать эту технику. [8]

Согласен с предсказателем [ править ]

Согласованный предсказатель - это двухуровневый адаптивный предсказатель с глобальным общим буфером истории и таблицей истории паттернов, а также дополнительным локальным счетчиком насыщения. Выходные данные локального и глобального предикторов подвергаются операции XOR друг с другом для получения окончательного прогноза. Цель состоит в том, чтобы уменьшить количество конфликтов в таблице истории паттернов, где две ветви с противоположным прогнозом имеют одну и ту же запись в таблице истории паттернов. [18]

Предиктор согласия использовался в первой версии Intel Pentium 4 , но позже от него отказались.

Гибридный предсказатель [ править ]

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

Скотт Макфарлинг предложил комбинированное предсказание ветвлений в своей статье 1993 года. [12]

В тестах SPEC'89 такой предсказатель примерно так же хорош, как и локальный предсказатель. [ необходима цитата ]

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

Предиктор цикла [ править ]

Условный переход , который управляет цикл лучше всего предсказан с особым предиктором цикла. Условный переход в конце цикла, который повторяется N раз, будет выполнен N-1 раз, а затем не будет выполнен ни разу. Если условный переход помещен в начало цикла, он не будет выполняться N-1 раз, а затем будет выполнен один раз. Условный переход, который выполняется много раз в одну сторону, а затем один раз в другую сторону, определяется как имеющий поведение цикла. Такой условный скачок легко предсказать с помощью простого счетчика. Предиктор цикла является частью гибридного предиктора, где мета-предиктор определяет, имеет ли условный переход поведение цикла.

Косвенный предсказатель ветвления [ править ]

Команда непрямого перехода может выбирать из более чем двух ветвей. Некоторые процессоры имеют специализированные косвенные предикторы ветвлений. [19] [20] Новые процессоры Intel [21] и AMD [22] могут предсказывать непрямые переходы с помощью двухуровневого адаптивного предсказателя. Этот вид инструкций вносит более одного бита в буфер истории. Процессоры zEC12 и более поздние версии z / Architecture от IBM поддерживают инструкцию BRANCH PREDICTION PRELOAD, которая может предварительно загрузить запись предиктора ветвления для данной инструкции с целевым адресом ветвления, созданным путем добавления содержимого регистра общего назначения к значению немедленного смещения. [23][24]

Процессоры без этого механизма просто предсказывают косвенный переход к той же цели, что и в прошлый раз. [8]

Прогнозирование возврата функции [ править ]

Функция , как правило , вернуться туда , где он вызывается. Команда возврата - это косвенный переход, который считывает свой целевой адрес из стека вызовов . Многие микропроцессоры имеют отдельный механизм прогнозирования для команд возврата. Этот механизм основан на так называемом буфере стека возврата , который является локальным зеркалом стека вызовов. Размер буфера стека возврата обычно составляет 4–16 записей. [8]

Отмена предсказания ветвления [ править ]

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

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

Intel Core i7 имеет две целевые ветви буферов и , возможно , два или более предсказатель переходов. [25]

Прогнозирование нейронных ветвей [ править ]

Машинное обучение для предсказания ветвей с использованием LVQ и многослойных перцептронов , называемое « предсказанием нейронных ветвей», было предложено Лучианом Винтаном ( Университет Лучиана Блага в Сибиу ). [26] Год спустя он разработал предсказатель ветвей персептрона. [27] Даниэль Хименес значительно развил исследования в области прогнозирования нейронных ветвей. [28] В 2001 году [28] был представлен первый предсказатель персептрона, который можно было реализовать аппаратно. Первая коммерческая реализация предсказателя ветвления персептрона была в микроархитектуре AMD Piledriver . [29]

Основным преимуществом нейронного предсказателя является его способность использовать длинные истории, требуя только линейного роста ресурсов. Классические предикторы требуют экспоненциального роста ресурсов. Хименес сообщает о глобальном улучшении на 5,7% по сравнению с гибридным предсказателем в стиле Макфарлинга. [30] Он также использовал гибридные предикторы, перекрывающие gshare / персептрон. [30]

Основным недостатком предсказателя персептрона является его высокая задержка. Даже после использования преимуществ высокоскоростной арифметики задержка вычислений относительно высока по сравнению с тактовым периодом многих современных микроархитектур. Чтобы уменьшить задержку предсказания, Хименес предложил в 2003 году нейронный предсказатель быстрого пути , где предсказатель персептрона выбирает свои веса в соответствии с текущим путем ветвления, а не в соответствии с ПК ветви. Эту концепцию развили многие другие исследователи (А. Сезнец, М. Монкиеро, Д. Тарьян и К. Скадрон, В. Десмет, Аккари и др., К. Аасараай, Майкл Блэк и др.). [ необходима цитата ]

Большинство современных предсказателей ветвей используют предсказатели персептронов (см. Intel «Championship Branch Prediction Competition» [31] ). Intel уже реализует эту идею в одном из симуляторов IA-64 (2003 г.). [32]

AMD Ryzen [33] [34] [35] многоядерный процессор с Бесконечность Ткань и Samsung Exynos процессор включает перцептрон на основе нейронной ветви предсказатель.

История [ править ]

IBM 7030 Stretch , разработанный в конце 1950 - х годов, предварительно выполняет все безусловные ветви и любые условные переходы , которые зависели от индексных регистров. Для других условных ветвей первые две реализованные производственные модели прогнозируют невыполненное; последующие модели были изменены для реализации прогнозов на основе текущих значений бит индикатора (соответствующих сегодняшним кодам состояния). [36]Дизайнеры Stretch учли статические подсказки в инструкциях ветвления на раннем этапе проекта, но отказались от них. Восстановление ошибочного прогноза было обеспечено модулем прогнозирования на Stretch, и часть репутации Stretch как невысокой производительности объяснялась временем, необходимым для восстановления ошибочного прогноза. Последующие разработки больших компьютеров IBM не использовали предсказание ветвлений со спекулятивным исполнением до IBM 3090 в 1985 году.

Двухбитовые предикторы были введены Томом МакВильямсом и Куртом Виддоусом в 1977 году для суперкомпьютера S-1 Национальной лаборатории Лоуренса Ливермора и независимо Джимом Смитом в 1979 году в CDC. [37]

Микропрограммные процессоры, популярные с 1960-х по 1980-е годы и позже, выполняли несколько циклов на инструкцию и, как правило, не требовали предсказания переходов. Однако, помимо IBM 3090, есть несколько других примеров микропрограммных проектов, которые включают предсказание ветвлений.

Burroughs B4900 , микропрограммная COBOL машина выпустила около 1982 года, был конвейерная и б предсказания ветвлений. Состояние предыстории предсказания ветвления B4900 сохраняется обратно в инструкции в памяти во время выполнения программы. B4900 реализует предсказание ветвления с 4 состояниями, используя 4 семантически эквивалентных кода операции ветвления для представления каждого типа оператора ветвления. Используемый код операции указывает историю этой конкретной инструкции перехода. Если аппаратное обеспечение определяет, что состояние прогнозирования ветвления конкретной ветви необходимо обновить, оно перезаписывает код операции семантически эквивалентным кодом операции, намекающим на правильную историю. Эта схема имеет процент совпадений 93%. Патент США 4 435 756 и другие были выданы по этой схеме.

VAX 9000 , объявленный в 1989 году, как микропрограммный и конвейерное и прогнозирование выполняет филиал. [38]

Первые коммерческие процессоры RISC, MIPS R2000 и R3000, а также более ранние процессоры SPARC , делают только тривиальное предсказание ветвлений «не выполнено». Поскольку они используют слоты задержки перехода, выбирают только одну инструкцию за цикл и выполняются по порядку, потери производительности нет. Более поздний R4000 использует такое же тривиальное предсказание «невыполненного» ветвления и теряет два цикла для каждого взятого ветвления, потому что повторение разрешения ветвлений составляет четыре цикла.

Прогнозирование ветвлений стало более важным с появлением конвейерных суперскалярных процессоров, таких как Intel Pentium , DEC Alpha 21064 , MIPS R8000 и серия IBM POWER . Все эти процессоры полагаются на однобитовые или простые бимодальные предикторы.

DEC Alpha 21264 (EV6) использует предиктор следующей строки, замещенный комбинированным локальным предиктором и глобальным предиктором, где выбор комбинирования выполняется бимодальным предиктором. [39]

AMD K8 имеет комбинированный бимодальный и глобальный предиктор, где комбинирование выбор является еще одним бимодальным предсказателем. Этот процессор кэширует базовый и выборочный счетчики двухрежимного предсказателя в битах кэша L2, который в противном случае используется для ECC. В результате он имеет очень большие базовые таблицы и таблицы предикторов выбора, а также четность, а не ECC для инструкций в кэше L2. Дизайн четности достаточен, так как любая инструкция, в которой возникла ошибка четности, может быть признана недействительной и повторно загружена из памяти.

Альфа 21464 [39] (EV8, отменен в конце конструкции) имел минимальную филиальную misprediction штрафа в размере 14 циклов. Он должен был использовать сложный, но быстрый предсказатель следующей строки, замененный комбинированным бимодальным предсказателем и предсказателем с большинством голосов. Большинство голосов было между двухрежимным и двумя предикторами gskew.

В 2018 году проект Zero компании Google и другие исследователи обнародовали катастрофическую уязвимость системы безопасности под названием Spectre . Эта уязвимость затрагивает практически все современные процессоры и заключается в извлечении частных данных из оставшихся кешей данных неверных предсказаний ветвлений. [40]

См. Также [ править ]

  • Предиктор цели перехода
  • Предикация ветвления
  • Атаки с анализом предсказания ветвления - на криптографию с открытым ключом RSA
  • Блок инструкции
  • Предварительная выборка из кеша
  • Косвенное управление филиалами (IBC)
  • Барьер косвенного предсказания ветвлений (IBPB)
  • Спекуляция с ограничением косвенного ответвления (IBRS)
  • Однопоточный косвенный предсказатель ветвлений (STIBP)

Ссылки [ править ]

  1. ^ a b Малишевский Алексей; Бек, Дуглас; Шмид, Андреас; Лэндри, Эрик. «Динамическое предсказание ветвлений» .
  2. ^ а б Ченг, Чжи-Ченг. «Схемы и характеристики динамических предсказателей ветвления» (PDF) .
  3. ^ Парихар, Радж. «Методы прогнозирования ветвлений и оптимизации» (PDF) . Архивировано из оригинального (PDF) 16 мая 2017 года . Проверено 2 апреля 2017 .
  4. ^ Mutlu, Onur (2013-02-11). «18-447 Лекция 11 по компьютерной архитектуре: Прогнозирование переходов» (PDF) .
  5. ^ Мишо, Пьер; Сезнец, Андре; Улиг, Ричард (сентябрь 1996 г.). «Искаженные предикторы ветвления». S2CID 3712157 .  Цитировать журнал требует |journal=( помощь )
  6. ^ Eyerman, S .; Smith, JE; Экхаут, Л. "Характеристика штрафа за неправильное предсказание перехода" . 2006 Международный симпозиум IEEE по анализу производительности систем и программного обеспечения . IEEE. DOI : 10.1109 / ispass.2006.1620789 . ISBN 1-4244-0186-0.
  7. ^ Шен, Джон П .; Липасти, Микко (2005). Современный дизайн процессоров: основы суперскалярных процессоров . Бостон: Высшее образование Макгроу-Хилла . С.  455 . ISBN 0-07-057064-7.
  8. ^ a b c d e f Туман, Агнер (01.12.2016). «Микроархитектура процессоров Intel, AMD и VIA» (PDF) . п. 36 . Проверено 22 марта 2017 .
  9. ^ Pentium 4 и G4e: архитектурное сравнение , Ars Technica
  10. ^ Пласкеллик, Джим. «CMSC 611: Расширенная компьютерная архитектура, Глава 4 (Часть V)» .
  11. ^ «Динамическое предсказание ветвлений» . web.engr.oregonstate.edu . Проверено 1 ноября 2017 .
  12. ^ a b c Макфарлинг, Скотт (июнь 1993 г.). «Объединение предсказателей ветвления» (PDF) . Технический отчет Digital Western Research Lab (WRL), TN-36.
  13. ^ «Новый алгоритм улучшает предсказание ветвления: 3/27/95» (PDF) . Университет Карнеги-Меллона . Проверено 2 февраля 2016 .
  14. ^ Yeh, T.-Y .; Патт, Ю.Н. (1991). «Двухуровневое адаптивное прогнозирование ветвей обучения». Материалы 24-го ежегодного международного симпозиума по микроархитектуре . Альбукерке, Нью-Мексико, Пуэрто-Рико: ACM. С. 51–61.
  15. ^ Иган, Колин; Стивен, Гордон; Быстро, П .; Anguera, R .; Винтан, Лучиан (декабрь 2003 г.). «Двухуровневое предсказание ветвлений с использованием нейронных сетей» . Журнал системной архитектуры . 49 (12–15): 557–570. DOI : 10.1016 / S1383-7621 (03) 00095-X .
  16. ^ «Сильвермонт, Архитектура с низким энергопотреблением Intel (стр. 2)» . Технологии реального мира .
  17. ^ Скадрон, К .; Martonosi, M .; Кларк, DW (октябрь 2000 г.). «Таксономия отраслевых неверных предсказаний и сплит-предсказаний как надежное решение для неверных исторически неверных предсказаний». Труды Международной конференции 2000 г. по параллельным архитектурам и методам компиляции . Филадельфия.
  18. ^ Sprangle, E .; и другие. (Июнь 1997 г.). «Согласный предсказатель: механизм уменьшения негативного влияния истории ветвей». Материалы 24-го Международного симпозиума по компьютерной архитектуре . Денвер.
  19. ^ «Cortex-A15 MPCore Техническое справочное руководство, раздел 6.5.3« Косвенный предсказатель » » . ARM Holdings .
  20. ^ Дризен, Карел; Хёльцле, Урс (1997-06-25). «Пределы косвенного прогнозирования ветвлений» (PDF) .
  21. ^ Стоукс, Джон (2004-02-25). "Взгляд на ядро ​​Centrino: Pentium M" . С. 2–3.
  22. ^ Кантер, Аарон (2008-10-28). «Анализ производительности для Core 2 и K8: Часть 1» . п. 5.
  23. ^ "Принципы работы z / Architecture" (PDF) . IBM . Март 2015. С. 7–40, 7–43. SA22-7832-10.
  24. ^ "Техническое руководство IBM zEnterprise BC12" (PDF) . IBM . Февраль 2014. с. 78.
  25. ^ WO 2000/014628 , Yeh, Tse-Yu и HP Sharangpani, «Метод и устройство для предсказания ветвлений с использованием таблицы предсказания ветвлений второго уровня», опубликовано 16 марта 2000 г. 
  26. ^ Винтан, Лучиан Н. (1999). На пути к высокопроизводительному предсказателю нейронных ветвей (PDF) . Материалы Международной конференции по нейронным сетям (IJCNN).
  27. ^ Винтан, Лучиан Н. (2000). «На пути к мощному динамическому предсказателю ветвлений» (PDF) . Румынский журнал информационных наук и технологий . Бухарест: Румынская академия. 3 (3): 287–301. ISSN 1453-8245 .  
  28. ^ а б Хименес, DA; Лин, К. (2001). Прогнозирование динамических ветвлений с помощью персептронов . Материалы 7-го Международного симпозиума по архитектуре высокопроизводительных компьютеров (HPCA-7). Монтеррей, Нидерланды, Мексика. С. 197–296.
  29. ^ Уолтон, Джарред (2012-05-15). «Обзор AMD Trinity (A10-4600M): новая надежда» . AnandTech .
  30. ^ a b Хименес, Даниэль А. (декабрь 2003 г.). Прогнозирование нейронных ветвей на основе быстрого пути (PDF) . 36-й ежегодный международный симпозиум IEEE / ACM по микроархитектуре (MICRO-36). Сан-Диего, США . Проверено 8 апреля 2018 .
  31. ^ «Прогнозирование отделения чемпионата» .
  32. ^ Брекельбаум, Эдвард; Рупли, Джефф; Вилкерсон, Крис; Блэк, Брайан (декабрь 2002 г.). Окна иерархического планирования . Материалы 34-го Международного симпозиума по микроархитектуре. Стамбул, Турция.
  33. ^ Джеймс, Дэйв (2017-12-06). «Обзоры AMD Ryzen, новости, производительность, цены и доступность» . PCGamesN .
  34. ^ «AMD выводит вычисления на новый уровень с процессорами Ryzen ™» . www.amd.com . Проверено 14 декабря 2016 .
  35. ^ «Процессор AMD Zen теперь называется Ryzen, и он действительно может бросить вызов Intel» . Ars Technica UK . Проверено 14 декабря 2016 .
  36. ^ IBM Stretch (7030) - Агрессивный однопроцессорный параллелизм
  37. ^ S-1 Суперкомпьютер
  38. ^ Микроархитектура VAX 9000
  39. ^ а б Сезнец, Феликс, Кришнан, Сазеидес. Компромиссы проектирования для условного предсказателя переходов Alpha EV8
  40. ^ Гиббс, Сэмюэл (2018-01-04). «Meltdown и Spectre:« худшие из когда-либо »ошибок ЦП затрагивают практически все компьютеры» . Хранитель . Проверено 18 мая 2018 .

Внешние ссылки [ править ]

  • Seznec et al. (1996). « Предикторы ветвления с несколькими блоками впереди » - демонстрируют, что точность предсказания не ухудшается из-за индексации с адресом предыдущего ветвления.
  • Seznec et al. (2002). « Компромиссы дизайна для условного предсказателя переходов Alpha EV8 » - описывает предсказатель переходов Alpha EV8 . В этой статье прекрасно обсуждается, как они пришли к своей конструкции на основе различных аппаратных ограничений и исследований моделирования.
  • Хименес (2003). « Пересмотр сложных предсказателей ветвлений » - описывает предсказатели ветвлений EV6 и K8 и соображения конвейерной обработки.
  • Туман, Агнер (2009). «Микроархитектура процессоров Intel, AMD и VIA» . Проверено 1 октября 2009 .
  • Эндрюс, Джефф (30 октября 2007 г.). «Реорганизация ветвей и петель для предотвращения неверных прогнозов» . Сеть программного обеспечения Intel . Проверено 10 ноября 2018 .
  • Ага, Александр. «Что такое прогнозирование переходов? - Пример переполнения стека» .