Основные принципы работы современных процессоров
История 32-разрядных процессоров Intel началась с процессора Intel386. Он вобрал в себя все черты своих 16-разрядных предшественников 8086/88 и 80286 для обеспечения совместимости с громадным объемом программного обеспечения, существовавшего на момент его появления. Однако в процессорах 80386 преодолено жесткое ограничение на длину непрерывного сегмента памяти – 64 Кбайт.
Процессор может работать в одном из двух режимов: режим реальной адресации (Real Address Mode), в котором возможна адресация до 1 Мбайт физической памяти, и защищенный режим виртуальной адресации (Protected Virtual Address Mode), в котором процессор позволяет адресовать до 4 Гбайт физической памяти и до 64 Тбайт виртуальной памяти каждой задачи.
Эти процессоры имеют встроенный блок управления памятью, который поддерживает механизмы сегментации и страничной трансляции адресов (Paging). Процессоры обеспечивают четырехуровневую систему защиты пространств памяти и ввода/вывода, а также переключение задач. Система команд расширена при сохранении всех команд 8086, 80286. Подробнее режимы процессора и механизм страничной организации памяти будут рассмотрены далее.
В архитектуру процессоров введены средства отладки и тестирования.
В микроархитектуре процессоров пятого и шестого поколений – Pentium, Pentium Pro, Pentium MMX, Pentium II и Pentium III – существенное значение имеет реализация различных способов конвейеризации и распараллеливания вычислительных процессов, а также других технологий, не свойственных процессорам прежних поколений.
Конвейеризация (pipelining) предполагает разбивку выполнения каждой инструкции на несколько этапов, причем каждый этап выполняется на своей ступени конвейера процессора. При выполнении инструкция продвигается по конвейеру по мере освобождения последующих ступеней. Таким образом, на конвейере одновременно может обрабатываться несколько последовательных инструкций, и производительность процессора можно оценивать темпом выхода выполненных инструкций со всех его конвейеров. Для достижения максимальной производительности процессора – обеспечения полной загрузки конвейеров с минимальным числом лишних штрафных циклов (penalty cycles) – программа должна составляться с учетом архитектурных особенностей процессора. Конечно, и код, сгенерированный обычным способом, будет исполняться на процессорах классов Pentium и Р6 достаточно быстро. Конвейер «классического» процессора Pentium имеет пять ступеней. Конвейеры процессоров с суперконвейерной архитектурой (superpipelined) имеют большее число ступеней, что позволяет упростить каждую из них и, следовательно, сократить время пребывания в них инструкций.
Скалярным называют процессор с единственным конвейером, к этому типу относятся все процессоры Intel до 486 включительно. Суперскалярный (superscalar) процессор имеет более одного (Pentium – два) конвейера, способных обрабатывать инструкции параллельно. Pentium является двухпотоковым процессором (имеет два конвейера), Pentium Pro – трехпотоковым.
Переименование регистров (register renaming) позволяет обойти архитектурное ограничение на возможность параллельного исполнения инструкций (доступно всего восемь общих регистров). Процессоры с переименованием регистров фактически имеют более восьми общих регистров, и при записи промежуточных результатов устанавливается соответствие логических имен и физических регистров. Таким образом, одновременно могут исполняться несколько инструкций, ссылающихся на одно и то же логическое имя регистра, если, конечно, между ними нет фактических зависимостей по данным.
Продвижение данных (data forwarding) подразумевает начало исполнения инструкции до готовности всех операндов. При этом выполняются все возможные действия, и декодированная инструкция с одним операндом помещается в исполнительное устройство, где дожидается готовности второго операнда, выходящего с другого конвейера.
Предсказание переходов (branch prediction) позволяет продолжать выборку и декодирование потока инструкций после выборки инструкции ветвления (условного перехода), не дожидаясь проверки самого условия. В процессорах прежних поколений инструкция перехода приостанавливала конвейер (выборку инструкций) до исполнения собственно перехода, на чем, естественно, терялась производительность. Предсказание переходов направляет поток выборки и декодирования по одной из ветвей. Статический метод предсказания работает по схеме, заложенной в процессор, считая, что переходы по одним условиям, вероятнее всего, произойдут, а по другим – нет. Динамическое предсказание опирается на предысторию вычислительного процесса – для каждого конкретного случая перехода накапливается статистика поведения, и переход предсказывается, основываясь именно на ней.
Исполнение по предположению, называемое также спекулятивным (speculative execution), идет дальше – предсказанные после перехода инструкции не только декодируются, но и по возможности исполняются до проверки условия перехода. Если предсказание сбывается, то труд оказывается ненапрасным, если не сбывается – конвейер оказывается недогруженным и простаивает несколько тактов.
Исполнение с изменением последовательности инструкций (out-of-order execution), свойственное RISC-архитектуре, теперь реализуется и для процессоров х86. При этом изменяется порядок внутренних манипуляций данными, а внешние (шинные) операции ввода/вывода и записи в память выполняются, конечно же, в порядке, предписанном программным кодом. Однако эта способность процессора в наибольшей степени может блокироваться несовершенством программного кода (особенно 16-битных приложений), если он генерируется без учета возможности изменения порядка.
Технология Intel MMX улучшает компрессию/декомпрессию видео, работу с изображениями, шифрование и обработку сигналов ввода/вывода – т.е. все мультимедиа-операции, операции связи и сетевые взаимодействия. Основа MMX расширения процессорного ядра заключается в технологии обработки множественных данных в одной инструкции (Single Instruction Multiple Data - SIMD). Сегодняшние мультимедийные и коммуникационные приложения часто используют повторные циклы, выполнение которых, при использовании в менее чем 10% программных кодов, отнимает до 90% процессорного времени. Процесс SIMD (один поток команд и множество потоков данных) дает возможность одной инструкции исполнять одну и ту же функцию с различными данными и их частями. SIMD позволяет чипу уменьшить количество циклов с интенсивными вычислениями, характерными для обработки видео, аудио, графической информации и анимации.
Технологии MMX и SIMD требуют добавления все новых и новых инструкций (уже сейчас их 57 для MMX и 70 – для SIMD в Pentium III), обеспечивающих оптимальное выполнение алгоритмических задач. А при добавлении новых инструкций необходима переработка компиляторов всех языков программирования для введения и поддержки соответствующих инструкций и технологий. Конкуренты Intel предлагают альтернативные решения, при которых требуется минимальное число новых инструкций или вообще не требуется переработка компиляторов, а повышение производительности процессоров и скорости выполнения программ и вычислений достигается за счет внутренней оптимизации процессорного ядра. Так, технология 3D Now (AMD) позволяет производить две операции с плавающей точкой вместо одной у Pentium, а число новых инструкций около 30 при относительно равной стоимости. Дальнейшее увеличение числа инструкций при каждом введении новых технологий обработки данных может привести Intel к тому, что микропроцессоры станут очень «тяжелыми» и перегруженными объемом поддерживаемых инструкций, а компилирующие системы для них (например от Microsoft) – еще тяжелее и неповоротливее, чем в настоящее время, а все нарастающая тактовая частота и производительность процессора будет «съедаться» непомерно большими программными продуктами, так что эффективность нововведений может оказаться невысокой.
Особенности процессора Intel Pentium 4
Intel Pentium 4 – это первый процессор в семействе 32-битных процессоров седьмого поколения от Intel.
Несмотря на то что Intel Pentium 4 является процессором с архитектурой IA-32, характерной для 32-разрядных процессоров, последняя сильно отличается от архитектуры процессоров семейства P6 и даже получила специальное название – NetBurst.
Рассмотрим основные новшества, появившиеся в NetBurst.
Hyper-Pipelined Technology. Суть технологии Hyper-Pipelined (гиперконвейер) заключается в том, что Intel Pentium 4 имеет очень длинный конвейер, состоящий из 20 стадий. Для сравнения: конвейер у процессоров семейства P6 состоит всего из 10 стадий.
Преимущества от использования такого новшества далеко не очевидны. С одной стороны, более длинный конвейер позволяет упростить логику работы каждой отдельной стадии, а значит, более просто реализовать ее аппаратно, что приводит к уменьшению времени выполнения каждой отдельно взятой стадии. А это, в конечном счете, приводит к тому, что тактовая частота процессора может быть значительно увеличена.
С другой стороны, при обнаружении неправильно предсказанного перехода весь конвейер останавливается вместе с одновременным сбросом его содержимого. Поэтому при увеличении длины конвейера для обеспечения роста производительности нужно повышать эффективность алгоритмов предсказания переходов.
В Intel Pentium 4 интегрирован более совершенный механизм предсказания переходов. Количество ошибочно предсказанных переходов у него в среднем на 33% меньше, чем у процессоров с архитектурой P6.
Execution Trace Cache. Execution Trace Cache – это название и одновременно способ реализации кэша инструкций в архитектуре NetBurst. Смысловое содержание этого термина можно перевести как «кэш трассировки выполняемых микроопераций».
В Execution Trace Cache хранятся микрооперации, которые были получены в результате декодирования входного потока инструкций исполняемого кода и готовы для передачи на выполнение конвейеру. Емкость Execution Trace Cache составляет 12 Кбайт.
Execution Trace Cache устроен таким образом, что вместе с кодом каждой микрооперации в нем хранятся результаты выполнения ветвей кода для этой микрооперации – в той же строке кэша (cache line), что и сама микрооперация. Это позволяет легко и своевременно выявлять микрооперации, которые никогда не будут выполнены, и быстро удалять их из кэша инструкций, а также оперативно «вычищать» Execution Trace Cache от «лишних» микроопераций в случае обнаружения ошибочно предсказанного перехода. Последнее обстоятельство особенно важно, так как позволяет сократить общее время реинициализации конвейера после его остановки в результате выполнения перехода, который был «угадан» неправильно.
Rapid Execution Engine. Так, в архитектуре NetBurst назван блок выполнения арифметико-логических операций. Конструктив Rapid Execution Engine довольно оригинален: во-первых, он состоит из двух АЛУ-модулей, работающих параллельно; во-вторых, рабочая тактовая частота этих АЛУ-модулей в два раза выше тактовой частоты процессора – это достигается за счет регистрации как переднего, так и заднего фронта задающего тактового сигнала. Таким образом, каждый АЛУ-модуль способен выполнить до двух целочисленных операций за один рабочий такт процессора, а весь Rapid Execution Engine в целом – до четырех таких операций.
Advanced Dynamic Execution. Advanced Dynamic Execution – это обобщенное название механизма динамического выполнения команд, используемого в NetBurst. Аналогичный механизм используется в процессорах семейства P6, однако, в Intel Pentium 4 он улучшен.
Динамическое исполнение представляет собой комбинацию трех технологий обработки данных, обеспечивающих более эффективную работу процессора – множественное предсказание ветвлений,анализ потока данныхи спекулятивное исполнение. Динамическое исполнение обеспечивает более эффективную работу процессора, позволяя манипулировать данными, а не просто исполнять последовательный список инструкций.
Технология множественного предсказания ветвленийпредсказывает прохождение программы по нескольким ветвям, процессор может предвидеть разделение потока инструкций, что дает возможность с 90%-ной точностью предсказать, в какой области памяти можно найти следующие инструкции. Это оказывается возможным, поскольку в процессе исполнения инструкции процессор просматривает программу на несколько шагов вперед. Технология анализа потока данныхпозволяет проанализировать код и составить график, т.е. новую оптимальную последовательность исполнения инструкций, независимо от порядка их следования в тексте программы. Спекулятивное выполнение повышает скорость выполнения за счет выполнения до 5 инструкций одновременно по мере их поступления в оптимизированной последовательности – т.е. спекулятивно. Это обеспечивает максимальную загруженность процессора и увеличивает скорость исполнения программы. Поскольку выполнение инструкций происходит на основе предсказания ветвлений, результаты сохраняются как «спекулятивные» – промежуточные с возможным отвержением из-за нарушения последовательности инструкций – промахов в предсказании. На конечном этапе порядок инструкций и результатов их выполнения восстанавливается до первоначального.
Регистры процессора
Регистр – разновидность ОЗУ, встроенного в микропроцессор.
Рассмотрим состав и назначение регистров на примере микропроцессоров фирмы Intel.
Процессоры х86 имеют регистры, подразделяющиеся на следующие категории:
регистры общего назначения (общие регистры данных и адресов);
указатель команд (инструкций);
регистры сегментов;
регистр флагов;
управляющие регистры;
системные адресные регистры;
регистры отладки;
регистры тестирования;
модельно-специфические (зависящие от конкретной модели процессора) регистры.
На рис. 2 изображены основные регистры 32-разрядных процессоров. Они будут подробно рассмотрены ниже.
Рис. 2. Основные регистры 32-разрядных процессоров