Понимание современной архитектуры ЦП (часть 2): микроархитектура

Понимание современной архитектуры ЦП (часть 2): микроархитектура

4 апреля 2022 г.

В прошлой статье мы говорили о современной архитектуре ЦП. Мы обсудили, что такое ЦП, краткую историю ЦП и объяснили концепцию вычислительных уровней абстракции и архитектуры набора инструкций. ISA — это то, что мы обычно называем архитектурой процессора. Сегодня мы углубимся в то, из чего состоит микроархитектура ЦП. Другими словами, как именно реализованы ISA, каковы их строительные блоки и как они работают. Это подробное объяснение.


Ключевые строительные блоки в ISA процессора


Микроархитектура — это реализация архитектуры набора инструкций. Микроархитектура работает по четырехступенчатому циклу:


  • Первый шаг "Выборка" заключается в извлечении информации из памяти, чтобы ЦП точно знал, что программа хочет выполнить.

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

  • После декодирования инструкций центральный процессор должен их выполнить, что приводит нас к следующему шагу «Выполнение». Существует множество типов операций выполнения, таких как арифметические операции (сложение, умножение, деление и т. д.), логические операции (И, НЕ, ИЛИ, исключающее ИЛИ и т. д.), операции сравнения данных, а затем решает, куда идти дальше в коде, операция как таковая. известны как «ветви», поскольку они могут направлять код в разные места. Стадия выполнения ЦП зависит от ISA, так как многие ЦП с более сложными ISA могут выполнять гораздо больше операций.

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

Эти операции составляют основной строительный блок ЦП, в совокупности они называются «конвейером» ЦП.


Иллюстрация глубины конвейера ЦП


Глубина конвейера


Теперь, когда мы описали, как выглядит конвейер, как выглядят современные микропроцессоры? С годами среднее количество этапов конвейера выросло. Конвейер подобен сборочной линии. Чем больше этапов добавлено, тем меньше делается на каждом отдельном этапе. Чем больше у вас стадий конвейера, тем быстрее может работать каждая стадия и тем больше стадий выполняется параллельно. Современный микропроцессор имеет около 15-20 каскадов.


Цикл выборки и декодирования обычно состоит из 6-10 стадий, вместе они называются внешним интерфейсом микропроцессора. Выполнение и обратная запись также выросли примерно до 6-10 этапов. Они называются серверной частью микропроцессора. Конвейер ЦП является синхронным, и это означает, что каждый конвейер управляется тактовым сигналом, и все данные переходят от одного этапа конвейера к другому по мере того, как такт ЦП завершает цикл. Количество ступеней частично определяет пиковую частоту процессора. Современные процессоры могут работать на частоте до 5 ГГц, количество логики на этих этапах определяет, насколько быстро могут работать этапы или часы. Если ЦП работает на частоте 5 ГГц, это означает, что каждый этап должен выполняться и завершаться за 5 миллиардных долей секунды.


Предположение


Если вы помните базовый конвейер, показанный выше, в начале мы получаем инструкции, а ближе к концу выполняем эти инструкции.


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


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


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


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


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


Внешний интерфейс: прогнозирование и выборка


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


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


Внешний интерфейс: декодирование


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


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


Бэкэнд процессора: продолжение следует…



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE