Суперскалярный процессор (или многозадачный процессор [1] ) — это ЦП , который реализует форму параллелизма, называемую параллелизмом на уровне инструкций, в пределах одного процессора. [2] В отличие от скалярного процессора , который может выполнять не более одной инструкции за такт, суперскалярный процессор может выполнять более одной инструкции в течение такта, одновременно отправляя несколько инструкций в различные исполнительные блоки процессора. Таким образом, он обеспечивает большую пропускную способность (количество инструкций, которые могут быть выполнены за единицу времени), чем было бы возможно при заданной тактовой частоте . Каждый исполнительный блок — это не отдельный процессор (или ядро, если процессор многоядерный ) , а ресурс выполнения в пределах одного ЦП, например, арифметико-логическое устройство .
Хотя суперскалярный ЦП обычно также конвейеризирован , суперскалярное и конвейерное выполнение считаются разными методами повышения производительности. Первый (суперскалярный) выполняет несколько инструкций параллельно, используя несколько исполнительных блоков, тогда как последний (конвейерный) выполняет несколько инструкций в одном и том же исполнительном блоке параллельно, разделяя исполнительный блок на разные фазы. На рисунке «Простой суперскалярный конвейер» выборка двух инструкций одновременно называется супермасштабированием, а выборка следующих двух до того, как первая пара будет записана обратно, называется конвейеризацией.
Суперскалярная техника традиционно ассоциируется с несколькими идентификационными характеристиками (в пределах данного ЦП):
CDC 6600 Сеймура Крея 1964 года часто упоминается как первая суперскалярная конструкция. IBM System/360 Model 91 1967 года была еще одним суперскалярным мэйнфреймом. Микропроцессоры Intel i960 CA (1989), [3] , AMD 29000 -серии 29050 (1990) и Motorola MC88110 (1991), [4] были первыми коммерческими однокристальными суперскалярными микропроцессорами. Подобные RISC- микропроцессоры были первыми, в которых использовалось суперскалярное исполнение, поскольку архитектура RISC освобождает транзисторы и площадь кристалла, которые можно использовать для включения нескольких исполнительных устройств, а традиционная однородность набора инструкций благоприятствует суперскалярной диспетчеризации (именно поэтому конструкции RISC были быстрее конструкций CISC в 1980-х и 1990-х годах, а выполнять множественную диспетчеризацию, когда инструкции имеют переменную длину в битах, гораздо сложнее).
За исключением процессоров, используемых в маломощных приложениях, встроенных системах и устройствах с питанием от батарей , по сути, все универсальные процессоры, разработанные примерно с 1998 года, являются суперскалярными.
P5 Pentium был первым суперскалярным процессором x86; Nx586 , P6 Pentium Pro и AMD K5 были среди первых конструкций, которые асинхронно декодировали инструкции x86 в динамические микрокодоподобные последовательности микроопераций до фактического выполнения на суперскалярной микроархитектуре ; это открыло возможности для динамического планирования буферизованных частичных инструкций и позволило извлечь больше параллелизма по сравнению с более жесткими методами, используемыми в более простом P5 Pentium ; это также упростило спекулятивное выполнение и позволило использовать более высокие тактовые частоты по сравнению с такими конструкциями, как усовершенствованный Cyrix 6x86 .
Простейшими процессорами являются скалярные процессоры. Каждая инструкция, выполняемая скалярным процессором, обычно обрабатывает один или два элемента данных за раз. Напротив, каждая инструкция, выполняемая векторным процессором, одновременно работает со многими элементами данных. Аналогией является разница между скалярной и векторной арифметикой. Суперскалярный процессор представляет собой смесь этих двух. Каждая инструкция обрабатывает один элемент данных, но в каждом ЦП есть несколько исполнительных блоков, поэтому несколько инструкций могут обрабатывать отдельные элементы данных одновременно.
Суперскалярный дизайн ЦП подчеркивает повышение точности диспетчера инструкций и позволяет ему постоянно использовать несколько исполнительных блоков. Это становится все более важным по мере увеличения числа блоков. В то время как ранние суперскалярные ЦП имели два АЛУ и один FPU , более поздняя конструкция, такая как PowerPC 970, включает четыре АЛУ, два FPU и два блока SIMD. Если диспетчер неэффективен в поддержании всех этих блоков в рабочем состоянии с инструкциями, производительность системы будет не лучше, чем у более простой и дешевой конструкции.
Суперскалярный процессор обычно поддерживает скорость выполнения более одной инструкции за машинный цикл . Но простая одновременная обработка нескольких инструкций не делает архитектуру суперскалярной, поскольку конвейерные , многопроцессорные или многоядерные архитектуры также достигают этого, но другими методами.
В суперскалярном ЦП диспетчер считывает инструкции из памяти и решает, какие из них могут быть запущены параллельно, отправляя каждую в один из нескольких исполнительных блоков, содержащихся внутри одного ЦП. Таким образом, суперскалярный процессор можно представить как имеющий несколько параллельных конвейеров, каждый из которых обрабатывает инструкции одновременно из одного потока инструкций.
Большинство современных суперскалярных процессоров также имеют логику для переупорядочивания инструкций, чтобы попытаться избежать остановок конвейера и увеличить параллельное выполнение.
Доступное улучшение производительности с помощью суперскалярных методов ограничено тремя ключевыми областями:
Существующие исполняемые двоичные программы имеют различную степень внутреннего параллелизма. В некоторых случаях инструкции не зависят друг от друга и могут выполняться одновременно. В других случаях они взаимозависимы: одна инструкция влияет либо на ресурсы, либо на результаты другой. Инструкции a = b + c; d = e + f
могут выполняться параллельно, поскольку ни один из результатов не зависит от других вычислений. Однако инструкции a = b + c; b = e + f
могут не выполняться параллельно, в зависимости от порядка, в котором инструкции завершаются при перемещении по блокам.
Хотя поток инструкций может не содержать зависимостей между инструкциями, суперскалярный процессор, тем не менее, должен проверять такую возможность, поскольку нет никаких гарантий, что это не так, а неспособность обнаружить зависимость приведет к неверным результатам.
Независимо от того, насколько продвинут полупроводниковый процесс или насколько быстра скорость переключения, это накладывает практический предел на количество инструкций, которые могут быть отправлены одновременно. В то время как усовершенствования процесса позволят использовать все большее количество исполнительных устройств (например, АЛУ), бремя проверки зависимостей инструкций быстро растет, как и сложность схемы переименования регистров для смягчения некоторых зависимостей. В совокупности энергопотребление , сложность и затраты на задержку вентиля ограничивают достижимое суперскалярное ускорение.
Однако даже при бесконечно быстрой логике проверки зависимостей на обычном суперскалярном ЦП, если поток инструкций сам по себе имеет много зависимостей, это также ограничит возможное ускорение. Таким образом, степень внутреннего параллелизма в потоке кода образует второе ограничение.
В совокупности эти ограничения стимулируют исследования альтернативных архитектурных изменений, таких как очень длинное командное слово (VLIW), явно параллельные вычисления (EPIC), одновременная многопоточность (SMT) и многоядерные вычисления .
С VLIW обременительная задача проверки зависимостей аппаратной логикой во время выполнения снимается и делегируется компилятору . Явно параллельные вычисления инструкций (EPIC) похожи на VLIW с дополнительными инструкциями предварительной выборки кэша.
Одновременная многопоточность (SMT) — это метод повышения общей эффективности суперскалярных процессоров. SMT позволяет нескольким независимым потокам выполнения лучше использовать ресурсы, предоставляемые современными архитектурами процессоров. Тот факт, что они независимы, означает, что мы знаем, что инструкция одного потока может быть выполнена вне очереди и/или параллельно с инструкцией другого потока. Кроме того, один независимый поток не создаст конвейерный пузырь в потоке кода другого потока, например, из-за ветвления.
Суперскалярные процессоры отличаются от многоядерных процессоров тем, что несколько исполнительных блоков не являются целыми процессорами. Один процессор состоит из более мелкозернистых исполнительных блоков, таких как АЛУ , целочисленный умножитель , целочисленный сдвигатель, FPU и т. д. Может быть несколько версий каждого исполнительного блока, чтобы обеспечить параллельное выполнение многих инструкций. Это отличается от многоядерного процессора, который одновременно обрабатывает инструкции из нескольких потоков, один поток на процессорный блок (называемый «ядром»). Он также отличается от конвейерного процессора , где несколько инструкций могут одновременно находиться на разных стадиях выполнения, как на конвейере .
Различные альтернативные методы не являются взаимоисключающими — они могут быть (и часто так и бывает) объединены в одном процессоре. Таким образом, возможен многоядерный ЦП, где каждое ядро является независимым процессором, содержащим несколько параллельных конвейеров, каждый конвейер является суперскалярным. Некоторые процессоры также включают векторную возможность.
{{cite book}}
: |journal=
проигнорировано ( помощь ){{cite book}}
: |journal=
проигнорировано ( помощь )