- •Глава 23. Сравнение архитектур cisc и risc
- •23.1. Особенности cisc-архитектур
- •23.2. Особенности risc-архитектур
- •23.3. Влияние конвейерной обработки
- •23.4. Суперскалярность и внеочередное выполнение команд
- •Предсказание переходов
- •23.5. Регистровые окна
- •23.6. Основные принципы разработки современных компьютеров
- •23.7. Контрольные вопросы
23.2. Особенности risc-архитектур
В начале 80-х годов 20-го века в одной микросхеме процессора было всего несколько десятков тысяч транзисторов. Этого количества транзисторов было недостаточно для создания полноценного процессора. В связи с этим разработчики процессоров начали искать, что же можно упростить в архитектуре процессора для того, чтобы реализовать ее в одной микросхеме.
Для начала разработчики свели к минимуму набор команд и их форматов, количество режимов адресации оперативной памяти.
В классическом варианте RISC из команд, обращающихся к оперативной памяти, были оставлены только две (LOAD - загрузить данные в регистр и STORE - сохранить данные из регистра; так называемая LOAD/STORE-архитектура), и не было ни одной «сложной» команды вроде вычисления синуса, косинуса или квадратного корня. В некоторых первых RISC-процессорах пытались отказаться даже от трудно реализуемого аппаратного умножения и деления. В дальнейшем от этих намерений отказались.
Второе важное усовершенствование RISC-процессоров, целиком вытекающее из LOAD/STORE-архитектуры, - увеличение числа регистров общего назначения. Варианты, у которых меньше шестнадцати регистров общего назначения - большая редкость, причем почти все эти регистры были полностью равноправны, что позволяло компилятору свободно распоряжаться ими, сохраняя большую часть промежуточных данных именно там, а не в стеке или оперативной памяти. В некоторых более поздних RISC-архитектурах, типа SPARC, EPIC "регистровость" была возведена в абсолют, в некоторых - оставлена на разумном уровне; однако почти любой RISC-процессор обладает куда большим набором регистров, чем даже самый продвинутый CISC-процессор. Для сравнения, в СISC-архитектуре IA-32 было всего 8 регистров общего назначения, причем некоторым из них приписано то или иное "специальное назначение" (скажем, в регистре ЕSP хранится указатель стека) затрудняющее или делающее невозможным его использование.
Среди прочих усовершенствований, внесенных в RISC-архитектуры, - такие нетривиальные идеи, как условные команды или режимы работы команд. Например, некий модификатор в команде показывает, должна ли команда фиксировать по результатам своего выполнения определенные флаги, которые потом может использовать команда условного перехода, или не должна. Это позволяет разнести в пространстве команду, выполняющую вычисление условия, и команду собственно условного перехода - что в конвейерных структурах зачастую позволяет ядру процессора не "гадать", будет совершен переход или нет, а сразу достоверно это знать. "В чистом виде" идею "легкого" RISC-процессора можно встретить у фирмы ARM с ее простыми и весьма эффективными 32-разрядными процессорами. Но простота далеко не главный показатель процессора, и как самоцель подход RISC в целом себя, наверное, не оправдал бы - резко уменьшившаяся сложность процессоров и сопутствующее увеличение частоты и ускорение выполнения команд хорошо уравновешивались возросшими размерами программ и сильно упавшей их вычислительной плотностью (среднее количество вычислений на единицу длины машинной программы.
