Микроархитектура процессоров

Прежде чем приступить к рассмотрению архитектур реальных процессоров, необ­ходимо напомнить принципы работы процессоров на основе конструктивной схемы простейшего гипотетического, или «классического», процессора. В основе архитектуры любого процессора лежит несколько конструктивных элементов: кэш команд и данных, предпроцессор (Front End) и постпроцессор, называемый также блоком исполнения команд (Execution Engine).

Микроархитектура процессоров

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

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

1. выборку из кэша;

2. декодирование;

3. выполнение;

4. запись результатов.

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

Конструктивная схема конвейерной обработки «классического» процессора

Конструктивная схема конвейерной обработки «классического» процессора

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

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

В соответствии со схемой «классического» процессора процедура исполнения кода процессором начинается с выборки инструкций в формате х86 и данных из кэша L1. Инструкции х86 имеют переменную длину, причем информация о длине инструкций сохраняется в специальных полях в кэше инструкций L1. Загрузка инструкций переменной длины х86 из кэша L1 происходит блоками определенной длины, из которых в дальнейшем выделяются инструкции, которые подвергаются декодированию.

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

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

Существуют два принципиально различных подхода к повышению производитель­ности процессора (не считая, конечно, увеличения тактовой частоты). Суть перво­го заключается в том, чтобы за счет уменьшения длины конвейера увеличивать количество исполнительных блоков. Таким образом, по существу, реализуется множество параллельных коротких конвейеров. При этом постпроцессор работает по классической схеме: осуществляет выборку команд, их декодирование и отправ­ку на множество исполнительных блоков. Такой подход позволяет в полной мере реализовать параллелизм на уровне инструкций (Instruction-Level Parallelism, ILP), когда несколько инструкций выполняются одновременно в различных исполни­тельных блоках процессора. Важно, что количество ступеней конвейера внутри постпроцессора (исполнительного блока) здесь невелико, поэтому инструкции выполняются за небольшое количество циклов.

Микроархитектура процессоров

Микроархитектура процессоров

Для реализации параллелизма на уровне инструкций необходимо, чтобы посту­пающие на исполнительные блоки команды можно было выполнять параллельно. Однако если, к примеру, для выполнения следующей по порядку инструкции тре­буется знать результат выполнения предыдущей инструкции (взаимозависимые инструкции), то в этом случае параллельное выполнение невозможно. Поэтому препроцессор прежде всего проверяет взаимозависимость команд и переупорядо­чивает их не в порядке поступления (out of order), а так, чтобы их можно было выполнять параллельно. На последних ступенях конвейера инструкции выстра­иваются в исходном порядке.

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

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

Яндекс.Метрика