Если смотреть на показатель эффективность за цент, то в 70-ых годах когда оперативная память стоила дорого, а следовательно необходимо было писать как можно более короткий код, и соответственно нужны сложные инструкции процессора, которые производят много действий. Большинство людей писало на ассемблере (пока не появилось языков высокого уровня), что тоже способствовало уменьшению объёма кода. Тогда CISC был наиболее эффективным решением для большинства пользователей. Так как уже в 60 годах существовали Суперкомпьютеры со всеми отличительными чертами RISC (или в зачаточном виде IBM Stretch, а также в виде прямого предка CDC 6600) которые были значительно эффективнее своих обычных конкурентов. Позднее появилась шутка, что термин «RISC» на самом деле расшифровывается как «Really invented by Seymour Cray» («на самом деле придуман Сеймуром Крэем»).
Со временем проектирование декодеров для таких команд стало существенной проблемой. Изначально ее решили с помощью микрокода (аналог процедур в программировании). Для каждой инструкции из набора создается подпрограмма, которая состоит из простых инструкций и хранится в специальной памяти внутри микропроцессора.
Таким образом, процессор имеет небольшой набор коротких инструкций. На их основе можно создать множество сложных инструкций из набора команд с помощью добавления подпрограмм в микрокод. Он хранится в ROM-памяти (Read-Only Memory, только для чтения), которая значительно дешевле оперативной памяти. Следовательно, уменьшение использования оперативной памяти через увеличение использования постоянной памяти — выгодный компромисс.
По началу данный подход был решением, но со временем начались проблемы, связанные с появлением многочисленных ошибок подпрограммам в микрокоде. А так как исправления в микрокоде реализовать сложнее чем в обычной программе из-за специфики получения доступа, а, следовательно, тестирования, то разработчики стали искать другие пути решения данных проблем.
В то же время оперативная память стала дешеветь, сложность программ значительно увеличилась, а, следовательно, начали появляться высокоуровневые языки программирования. Тогда преимущества RISC процессоров стали неоценимы.
Архитектура Load / Store
Тем более, что RISC архитектура позволяла зафиксировать количество тактов, необходимых для каждой инструкции, для удобства конвейеризации. По тем же причинам набор инструкций RISC четко отделяет загрузку из памяти и сохранение в память от остальных инструкций. Как и было показано на примере выше, в CISC есть инструкция, которая загружает данные из памяти, производит сложение, умножение, что-нибудь еще и записывает результат обратно в память.
В мире RISC такого быть не может. Операции типа сложения, сдвига и умножения выполняются только с регистрами. Они не имеют доступа к памяти. Это очень важный момент для конвейеризации. Иначе инструкции в конвейере могут выходить за рамки одного такта.
Большое количество регистров
Большая проблема для RISC — это упрощение инструкций, что ведет к увеличению их количества. Больше инструкций требуют больше памяти — недорогой, но медленной. Если программа RISC потребляет больше памяти, чем программа CISC, то она будет медленнее, так как процессор будет постоянно ждать медленного чтения из памяти [6].
Проектировщики RISC предусмотрели это и увеличили количество регистров, таким образом сократив количество обращений к памяти.
Это потребовало улучшений в компиляторах. Они должны хорошо анализировать программы, чтобы понимать, когда переменные можно хранить в регистре, а когда их стоит записать в память. Работа с множеством регистров стала важной задачей для компиляторов, позволяющей ускорить работу на RISC-процессорах.
Подход CISC пытается свести к минимуму количество инструкций на программу, жертвуя количеством циклов на инструкцию. RISC делает обратное, сокращая количество циклов на инструкцию за счет количества инструкций на программу.
Таким образом моно сделать выводы, при том же количестве транзисторов, а, следовательно, и цене компьютеры, построенные на основе RISC архитектуры, в разы пре восходят своих CISC аналогов. На заре развития RISC архитектуры процессор «RISC-I» выпущенный в 1982 году и имеющий 44 420 транзисторов (для сравнения: в процессорах «CISC» того времени их было около 100 тыс.). «RISC-I» имел всего 32 инструкции, но превосходил по скорости работы любой одночиповый процессор того времени. Через год, в 1983 году, был выпущен «RISC-II», который состоял из 40 760 транзисторов, использовал 39 инструкций и работал в три раза быстрее «RISC-I».
Большинство современных потребительских устройств оснащены процессорами на ARM, по сути преемнице RISC.Конечно существуют и другие ответвления от RISC, например, суперскалярный подход и VLIW.
Таблица 1
Основные различия архитектур RISC и CISC
RISC |
CISC |
Транзисторы используются для регистров |
Транзисторы используются для хранения сложных иструкций |
Инструкции фиксированного размера |
Инструкции переменного размера |
Размер кода большой |
Размер кода малый(Переформулировать) |
Инструкция, выполняемая за один такт |
Выполнение инструкции может требовать более одного такта(то есть не фиксирована) |
Инструкция помещается в одном слове |
Инструкции больше, чем размер одного слова |
Сложно писать на ассемблере |
Легко писать на ассемблере |
Компилятор выполняет много работы |
Компилятор не нужен все пишут на ассемблере |
Занимает много памяти для хранения кода |
Занимает мало памяти для хранения кода |
Любые операции «изменить» выполняются только над содержимым регистров (т. н. архитектура load-and-store). |
Существуют специализированные команды для операций с памятью — чтения или записи. Операции вида Read-Modify-Write («прочитать-изменить-записать») |
Список литературы
- Stanford University. RISC architecture. // https://cs.stanford.edu/people/eroberts/courses/soco/projects/risc/risccisc/
- Medium. What Does RISC and CISC Mean in 2020 // https://medium.com/swlh/what-does-risc-and-cisc-mean-in-2020-7b4d42c9a9de
- Computer Organization and Design — The Hardware-Software Interface, 5th Ed (ISBN 0124077269): 4.16 Historical Perspective and Further Reading, 2013
- Уринцов А.И. СИСТЕМА ФОРМИРОВАНИЯ И ПРИНЯТИЯ РЕШЕНИЙ В УСЛОВИЯХ ИНФОРМАТИЗАЦИИ ОБЩЕСТВА Москва, 2008
- Barroso L, Hölzle U. The case for energy-proportional computing. IEEE Computer. 2007