Найти в Дзене
Александр Шуравин.

Организация ЭВМ и систем. Урок 2. Классификация архитектур систем команд по составу и сложности (CISC, RISC, VLIW).

Современная технология программирования ориентирована на языки высокого уровня, главная цель которых – облегчить процесс программирования. Переход к языкам высокого уровня породил серьезную проблему – сложные операторы, характерные для языка высокого уровня, существенно отличаются
Изображение взято из открытых источников
Изображение взято из открытых источников

Предыдущая глава: Организация ЭВМ и систем. Урок 1. Принципы фон Неймана.

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

  • Использовать архитектуру с полным наборов команд. Такая архитектура получила название CISC (Complex Instruction Set Computer).
  • Использовать архитектуру с сокращенным наборов команд. Она получила название RISC (Reduced Instruction Set Computer).
  • Наконец, архитектура с командами сверхбольшой длины VLIW (Very Long Instruction Word).

Рассмотрим по очереди каждый из этих подходов. Начнем с архитектуры CISC . Тут проблема семантического разрыва решается за счет расширения системы команд, дополнения ее сложными командами, семантически аналогичными операторам языка высокого уровня. Первой CISC- архитектуру стала применять фирма IBM , в частности, такая архитектура команд характерна для процессора IBM 360 и для более своих мощных современных универсальных вычислительных машинах, таких как IBM ES/9000. Аналогичный подход применяет и компания Intel в ее микропроцессорах серии 8086 и Pentium. К типу CISC можно отнести практически все вычислительные, выпускавшиеся до середины 1980-х годов, и значительную часть производящихся в настоящее время. Для CISC-архитектуры характерно

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

Однако у такого подхода есть серьезные недостатки:

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

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

Как следствие, реализация сложных команд за счет последовательности из простых, но быстрых RISC-команд оказывается более эффективной, чем аппаратный вариант сложных команд в CISC-архитектуре. Элементы RISC-архитектуры впервые появились в вычислительных машинах CDC 6600 и суперЭВМ компании Cray Research. Достаточно успешно реализуется RISC-архитектура и в современных вычислительных машинах, например в процессорах Alpha фирмы DEC, серии РА фирмы Hewlett-Packard, семействе PowerPC и т.п.

Другой вариант - это совмещение CISC и RISC архитектуры. В последних микропроцессорах фирмы Intel и AMD широко используются идеи, свойственные RISC-архитектуре, так что многие различия между CISC и RISC постепенно стираются. В частности, начиная с Intel Pentium Pro, появились CISC-процессорами с RISC-ядром. Они непосредственно перед исполнением преобразуют CISC-инструкции процессоров x86 в более простой набор внутренних инструкций RISC. В микропроцессор встраивается аппаратный транслятор, превращающий команды x86 в команды внутреннего RISC-процессора. При этом одна команда x86 может порождать несколько RISC-команд (в случае процессоров типа P6 — до четырёх RISC-команд в большинстве случаев). Исполнение команд происходит на суперскалярном конвейере одновременно по несколько штук. Это потребовалось для увеличения скорости обработки CISC-команд, так как известно, что любой CISC-процессор уступает RISC-процессорам по количеству выполняемых операций в секунду. В итоге, такой подход и позволил поднять производительность CPU.

Теперь рассмотрим
VLIW . Архитектура с командными словами сверхбольшой длины (VLIW) базируется на RISC-архитектуре, где несколько простых RISC-команд объединяются в одну сверхдлинную команду и выполняются параллельно. В плане архитектуры системы команд архитектура VLIW сравнительно мало отличается от RISC. Появился лишь дополнительный уровень параллелизма вычислений, в силу чего архитектуру VLIW логичнее адресовать не к вычислительным машинам, а к вычислительным системам. Фактически это «видимое программисту» микропрограммное управление, когда машинный код представляет собой лишь немного свёрнутый микрокод для непосредственного управления аппаратурой.

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

VLIW можно считать логическим продолжением идеологии RISC, расширяющей её на архитектуры с несколькими вычислительными модулями. Так же, как в RISC, в инструкции явно указывается, что именно должен делать каждый модуль процессора. Из-за этого длина инструкции может достигать 128 или даже 256 бит.

Рассмотрим пример. Пусть у нас есть VLIW-процессор с двумя арифметико-логическими устройствами (АЛУ). Нам надо сложить четыре числа, находящиеся в регистрах R1, R2, R3 и R4. Тогда псевдокод может выглядеть так:

R5=R1+R2, R6=R3+R4 ; каждое АЛУ складывает свою пару чисел
R0=R5+R6, NOP ; первое АЛУ находит сумму, второе простаивает

Преимущества и недостатки VLIW.

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

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

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

Архитектуру
системы команд также можно классифицировать по способу хранения операторов и доступа к ним:

  • стековая;
  • аккумуляторная;
  • регистровая;
  • с выделенным доступом к памяти.

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

Рассмотрим, по очереди, эти виды архитектур.

Стековая архитектура. Верхнюю ячейку называют вершиной стека. Для работы со стеком предусмотрены две операции: push (проталкивание данных в стек) и pop (вытаскивание данных из стека). Запись возможна только в верхнюю ячейку стека, при этом вся хранящаяся в стеке информация предварительно проталкивается на одну позицию вниз. Чтение допустимо также только из вершины стека. Извлеченная информация удаляется из стека, а оставшееся его содержимое продвигается вверх. В вычислительных машинах, где реализована АСК на базе стека (их обычно называют стековыми), операнды перед обработкой помещаются в две верхних ячейки стековой памяти.

Аккумуляторная архитектура.
Архитектура на базе аккумулятора возникла одной из первых. Для нее характерно хранение одного из операндов арифметической или логической операции в специальном регистре процессора, который называется аккумулятор . Туда же заносится и результат операции. Поскольку адрес одного из операндов предопределен, в командах обработки достаточно явно указать местоположение только второго операнда. Изначально оба операнда хранятся в основной памяти, и до выполнения операции один из них нужно загрузить в аккумулятор. После выполнения команды обработки результат находится в аккумуляторе и, если он не является операндом для последующей команды, его требуется сохранить в ячейке памяти.

Регистровая архитектура. Пожалуй, это самый распространенный тип архитектуры. Хотя, конечно, в современных процессорах перечисленные типы архитектуры зачастую объединяются. И так, в машинах регистрового типа процессор включает в себя массив регистров (регистровый файл), известных как регистры общего назначения (РОН). Эти регистры, в каком-то смысле, можно рассматривать как явно управляемый кэш для хранения недавно использовавшихся данных. Размер регистров обычно фиксирован и совпадает с размером машинного слова. К любому регистру можно обратиться, указав его номер. Количество РОН в архитектурах типа CISC обычно невелико (от 8 до 32), и для представления номера конкретного регистра необходимо не более пяти разрядов, благодаря чему в адресной части команд обработки допустимо одновременно указать номера двух, а зачастую и трех регистров (двух регистров операндов и регистра результата). RISC-архитектура предполагает использование существенно большего числа РОН (до нескольких сотен), однако типичная для таких ВМ длина команды (обычно 32 разряда) позволяет определить в команде до трех регистров. Регистровая архитектура допускает расположение операндов в одной из двух запоминающих сред: основной памяти или регистрах.

С учетом возможного размещения операндов в рамках регистровых АСК выделяют три подвида команд обработки: регистр-регистр; регистр-память; память-память. В варианте «регистр-регистр» операнды могут находиться только в регистрах. В них же засылается и результат. Подтип «регистр-память» предполагает, что один из операндов размещается в регистре, а второй в основной памяти. Результат обычно замещает один из операндов. В командах типа «память-память» оба операнда хранятся в основной памяти. Результат заносится в память. Каждому из вариантов свойственны свои достоинства и недостатки. Ниже приведено сравнение достоинств и недостатков этих операций:

-2

Наконец, архитектура с выделенным доступом к памяти. В архитектуре с выделенным доступом к памяти обращение к основной памяти возможно только с помощью двух специальных команд: load и store. В английской транскрипции данную архитектуру называют Load/Store architecture. Команда load (загрузка) обеспечивает считывание значения из основной памяти и занесение его в регистр процессора (в команде обычно указывается адрес ячейки памяти и номер регистра). Пересылка информации в противоположном направлении производится командой store (сохранение). Операнды во всех командах обработки информации могут находиться только в регистрах процессора (чаще всего в регистрах общего назначения). Результат операции также заносится в регистр. В архитектуре отсутствуют команды обработки, допускающие прямое обращение к основной памяти. Допускается наличие в АСК ограниченного числа команд, где операнд является частью кода команды.