Суперскалярность

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Плата CRAY T3E-136/ac (1995 год)

Суперскалярный процессор (англ. superscalar processor) — процессор, поддерживающий так называемый параллелизм на уровне инструкций (то есть, процессор, способный выполнять несколько инструкций одновременно) за счёт включения в состав его вычислительного ядра нескольких одинаковых функциональных узлов (таких как АЛУ, FPU, умножитель (integer multiplier), сдвигающее устройство (integer shifter) и другие устройства). Планирование исполнения потока инструкций осуществляется динамически вычислительным ядром (не статически компилятором).

Использование конвейера (англ. pipelining), увеличение количества функциональных узлов процессора (суперскалярность), увеличение количества ядер (многоядерность) и увеличение количества процессоров (многопроцессорность) — разные способы увеличения производительности, которые могут использоваться совместно. При использовании конвейера количество узлов остаётся прежним; увеличение производительности достигается за счёт одновременной работы узлов, ответственных за разные стадии обработки инструкций одного потока. При использовании суперскалярности увеличение производительности достигается за счёт одновременной работы большего количества одинаковых узлов, независимо обрабатывающих инструкции одного потока (в том числе, и большего количества конвейеров). При использовании нескольких ядер каждое ядро выполняет инструкции отдельного потока, может быть суперскалярным и/или конвейерным. При использовании нескольких процессоров каждый процессор может быть многоядерным.

Иллюстрация работы суперскалярного двухконвейерного процессора, за один такт одновременно обрабатывающего две независимые инструкции. Функциональные узлы (модули, устройства, составные части) процессора:
  • IF (англ. instruction fetch) — узел, ответственный за получение инструкции;
  • ID (англ. instruction decode) — узел, ответственный за раскодирование инструкции;
  • EX (англ. execute) — узел, ответственный за выполнение инструкции;
  • MEM (англ. memory access) — узел, ответственный за доступ к памяти;
  • WB (англ. register write back) — узел, ответственный за запись в регистр.
Обозначения:
  • i — номер инструкции;
  • t — время в тактах

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

По классификации Флинна одноядерные суперскалярные процессоры относят к группе процессоров SISD (англ. single instruction stream, single data stream — один поток инструкций, один поток данных). Подобные процессоры, поддерживающие инструкции для работы с короткими векторами, могут быть отнесены к группе SIMD (англ. single instruction stream, multiple data streams — один поток инструкций, несколько потоков данных). Многоядерные суперскалярные процессоры относят к группе MIMD (англ. multiple instruction streams, multiple data streams — несколько потоков инструкций, несколько потоков данных).

История[править | править вики-текст]

Существует спор относительно того, какую ЭВМ можно считать первой суперскалярной. В иностранной литературе чаще всего указывается CDC 6600 (1964 года), разработанная Сеймуром Крэем[1]. В СССР первой суперскалярной ЭВМ считался компьютер «Эльбрус», разработка которого велась в 1973-1979 годах в ИТМиВТ. Основным структурным отличием Эльбруса от CDC 6600 (кроме совершенно другой видимой программисту системы команд — стекового типа) являлось то, что все узлы в нём были конвейеризованы, как в современных суперскалярных микропроцессорах. На основании этого факта Б. А. Бабаян заявлял о приоритете советских ЭВМ в вопросе построения суперскалярных вычислительных машин, однако уже следующая за CDC 6600 машина фирмы Control Data, CDC 7600 (англ.) 1969 года имела конвейеризацию исполнительных устройств. Кроме того, несколько ранее (в 1967 году) фирмой IBM была выпущена машина IBM 360/91, использующая внеочередное исполнение, переименование регистров и конвейеризацию исполнительных устройств[2].

Первыми промышленными суперскалярными однокристальными (англ. single-chip) микропроцессорами стали микропроцессор MC88100 1988 года фирмы Motorola, микропроцессор Intel i960CA 1989 года и микропроцессор 29050 серии AMD 29000 1990 года. Первым же коммерчески широкодоступным суперскалярным микропроцессором стал i960, вышедший в 1988 году. В 1990-е годы основным производителем суперскалярных микропроцессоров стала фирма Intel.

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

Процессоры Pentium с микроархитектурой P5 (англ.) стали первыми суперскалярными процессорами архитектуры x86. Микропроцессоры Nx586, P6 Pentium Pro и AMD K5 стали первыми суперскалярными процессорами, преобразующими инструкции x86 во внутренний код, который затем исполняли.

Описание[править | править вики-текст]

Если в процессе работы процессора несколько инструкций, обрабатываемых конвейером, независимы, то ядро может выполнить их одновременно. В суперскалярных системах решение о запуске инструкции на исполнение принимает само ядро процессора, что требует много ресурсов. В более поздних системах, таких, как Эльбрус-3 и Itanium, используется статпланирование, то есть решение о том, какие инструкции выполнять одновременно, принимает компилятор; компилятор находит независимые инструкции и объединяет их в одну длинную инструкцию (архитектура VLIW).

Узел суперскалярного процессора, называемый диспетчером инструкций (англ. instruction dispatcher, ID), ответственен:

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

Узел ID должен распределять инструкции между узлами так, чтобы узлы работали без простоев. Первые суперскалярные процессоры имели по два АЛУ и по одному FPU. Современные процессоры содержат больше узлов. Например, процессор PowerPC 970 содержит четыре АЛУ, два FPU и два узла SIMD. Если узел ID не справится со своей работой (не нагрузит работой все узлы), производительность суперскалярного процессора будет не лучше производительности скалярного процессора.

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

Реализации[править | править вики-текст]

Процессоры, поддерживающие суперскалярность:

Архитектура Первая реализация Год Разработчик Другие разработчики суперскалярных ЭВМ на данной архитектуре Примечание
CDC 6600 CDC 6600 1964 Control Data Corporation Конвейер исполнения команд, несколько исполнительных устройств (но не конвейеризованных).
CDC 7600[источник не указан 2661 день] CDC 7600 1969 Control Data Corporation Полная конвейеризация — и исполнения команд, и самих исполнительных устройств.
IBM 360/91[источник не указан 2661 день] IBM 360/91 1967 IBM Полная конвейеризация с динамическим переименованием регистров, исполнением команд не в очередности их поступления и предсказанием переходов
Эльбрус Эльбрус-1 1979 ИТМиВТ
i960 i960 1988 Intel
Am29000 Am29050 1990 AMD
SPARC SuperSPARC 1992 Sun Microsystems Fujitsu, МЦСТ
m88k MC88110 1992 Motorola
x86 Pentium 1993 Intel AMD, VIA
MIPS R8000 1994 MIPS Technologies Toshiba
ARM Cortex A8 ARM

Ускорение вычислений[править | править вики-текст]

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

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

Скалярные и суперскалярные процессоры[править | править вики-текст]

При выполнении одной инструкции скалярным процессором обрабатывается одно или два числа (скаляра). При выполнении одной инструкции векторным процессором обрабатывается несколько чисел (вектор). При единовременном выполнении нескольких инструкций суперскалярным процессором одновременно обрабатывается несколько чисел (несколько скаляров).

Ограничения[править | править вики-текст]

Увеличение производительности суперскалярных процессоров ограничивается следующими факторами:

  1. степенью внутреннего параллелизма инструкций;
  2. сложностью поиска зависимостей между инструкциями и затратами времени на этот поиск; сложностью схемы переименования регистров и затратами времени на переименование;
  3. обработкой инструкций ветвления.

Возможность одновременного выполнения инструкций зависит от степени внутреннего параллелизма инструкций — от того, насколько одни инструкции зависят от других. Одна инструкция зависит от другой инструкции, если использует ресурсы, также используемые другой инструкцией, или использует результат работы другой инструкции. Одновременное выполнение возможно в случаях, когда инструкции программы не зависят друг от друга. Например, инструкция «a = b + c» и инструкция «d = e + f» могут быть выполнены одновременно, так как результат вычисления ни одной из них не зависит от результата вычисления другой. Инструкция «a = b + c» и инструкция «b = e + f» взаимозависимы и не могут выполняться одновременно, так как результат их выполнения зависит от того, какая из них выполнится первой.

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

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Классификация Хендлера. Parallel.ru - Информационно-аналитический центр по параллельным вычислениям:. Проверено 16 августа 2009. Архивировано 26 февраля 2012 года.
  2. См. http://domino.research.ibm.com/tchjr/journalindex.nsf/ResVolumes!OpenView&Start=1&Count=1000&Expand=42.1#42.1.

Литература[править | править вики-текст]

  • Modern Processor Design: Fundamentals of Superscalar Processors. 2004. ISBN 0070570647.
  • Sorin Cotofana, Stamatis Vassiliadis, "On the Design Complexity of the Issue Logic of Superscalar Machines", EUROMICRO 1998: 10277-10284.
  • Steven McGeady, "The i960CA SuperScalar Implementation of the 80960 Architecture", IEEE 1990, стр. 232-240.
  • Steven McGeady, et al., "Performance Enhancements in the Superscalar i960MM Embedded Microprocessor," ACM Proceedings of the 1991 Conference on Computer Architecture (Compcon), 1991, стр. 4–7.