Предиктор ветвления - Branch predictor

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

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

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

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

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

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

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

Выполнение

Статическое предсказание ветвления

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

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

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

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

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

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

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

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

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

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

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

Предсказание следующей строки

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

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

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

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

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

Счетчик насыщения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Прогноз местного отделения

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

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

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

Прогнозирование глобального ветвления

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

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

Двухуровневый адаптивный предиктор с глобальным общим буфером истории и таблицей истории паттернов называется предиктором «gshare», если он xors глобальная история и филиал ПК, и "gselect", если он соединяет их. Предсказание глобального ветвления используется в AMD процессоров, а в Intel Pentium M, Основной, Ядро 2, и Silvermont -основан Атом процессоры.[15]

Прогнозирование легированных ветвей

Легированный предсказатель ветвления[16] сочетает в себе принципы локального и глобального прогнозирования сцепление локальные и глобальные истории ветвей, возможно, с некоторыми фрагментами из счетчик команд также. Тесты показывают, что ВИА Нано процессор может использовать эту технику.[8]

Согласен с предсказателем

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

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

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

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

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

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

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

Предиктор цикла

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

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

An непрямой прыжок инструкция может выбирать из более чем двух ветвей. Некоторые процессоры имеют специализированные косвенные предикторы ветвлений.[18][19] Новые процессоры от Intel[20] и AMD[21] может предсказывать непрямые переходы с помощью двухуровневого адаптивного предсказателя. Этот вид инструкций вносит более одного бита в буфер истории. В zEC12 и позже z / Архитектура процессоры IBM поддерживают ПРЕДВАРИТЕЛЬНАЯ ЗАГРУЗКА ОТРАСЛИ инструкция, которая может предварительно загрузить запись предиктора ветвления для данной команды с целевым адресом ветвления, созданным путем добавления содержимого регистра общего назначения к значению немедленного смещения.[22][23]

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

Прогнозирование возврата функции

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

Прогнозирование переходов с приоритетом

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

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

В Intel Core i7 имеет два целевые буферы ветвления и, возможно, два или более предиктора ветвления.[24]

Прогнозирование нейронных ветвей

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

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

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

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

В AMD Райзен[32][33][34] многоядерный процессор Infinity Fabric и Samsung Exynos процессор включает в себя предсказатель нейронных ветвей на основе персептрона.

История

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

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

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

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

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

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

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

ОИК Альфа 21264 (EV6) использует предсказатель следующей строки, замененный комбинированным локальным предсказателем и глобальным предсказателем, где выбор комбинирования выполняется бимодальным предсказателем.[38]

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

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

В 2018 году катастрофическая уязвимость безопасности называется Призрак был обнародован Google Project Zero и другие исследователи. Поражает практически все современные Процессоры, уязвимость заключается в извлечении личных данных из оставшихся кэшей данных ошибочных прогнозов ветвления.[39]

Смотрите также

Рекомендации

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

внешняя ссылка