Составители:
  91
простых.  Из-за  такой  «замены»  возникали  абсурдные  ситуации,  когда, 
например,  инструкция  INDEX  выполнялась  на  VAX  медленнее,  чем 
вручную написанный цикл, выполняющий ровно тот же объем работы. 
Это  происходило из-за  того,  что разработчики  тратили гораздо меньше 
времени на улучшение сложных команд, чем на улучшение простых. 
В результате все CISC-процессоры оказались весьма трудоемкими 
в  проектировании  и  изготовлении.  Но  что  самое  важное,  к  1980-м гг. 
исследования показали, что все сложные конструкции изобретались зря 
– и компиляторы языков высокого уровня, и программисты, пишущие на 
ассемблере, все эти «сверхвозможности» почти никогда не использовали. 
§5.3. Архитектура RISC (1975–1983) [5.1] 
Идея создания RISC процессоров пришла после того, как в 1970-х 
годах  исследователи  из  IBM  обнаружили,  что многие функциональные 
особенности процессоров игнорируются программистами.  Этот  эффект 
лишь  отчасти  объяснялся  сложностью  компиляторов,  которые  могли 
использовать  лишь  часть  из  набора  команд  процессора,  и  тем,  что 
некоторые  сложные  операции  выполнялись  медленнее,  чем  те  же 
действия, выполняемые набором простых команд.  
Исследователи провели анализ недостатков CISC, к числу которых 
были отнесены сложность блока дешифровки, конвейера, и «раздутый» 
блок  микрокода.  Также  было  проведено  статистическое  исследование 
частоты использования в программном коде инструкций и переменных. 
80–90%  переменных  оказались  локальными,  при  этом  в  94–100% 
программ использовалось менее 12 переменных, а в 97–100% – менее 6-
ти. Большинство используемых констант оказались существенно меньше 
двух  байт,  которые  отводились  под  них  (98%  констант  ≤  |511|,  56%  ≤ 
|15|),  а  сложные операции,  такие  как mul/div,  составляли 3–5%  от  всех 
математических операций
. 
RISC-процессоры  проектировались  в  расчете  на  типовой  код, 
генерируемый  компиляторами.  Разработчики  свели  к  минимуму  набор 
инструкций и количество режимов адресации памяти, создав простой и 
удобный для декодирования регулярный машинный код. В частности, из 
инструкций, работающих с памятью, оставлены только две – загрузки и 
выгрузки  (архитектура Load/Store),  а  все  сложные инструкции разбиты 
на  ортогональные.  Удалены  инструкции  вроде  вычисления  синуса, 
косинуса или квадратного корня (их  можно реализовать «вручную»). В 
нескольких ранних экспериментальных моделях предпринимались даже 
попытки отказаться от аппаратного умножения и деления.  
Второе  важное  усовершенствование  RISC-процессоров,  целиком 
вытекающее  из  Load/Store-архитектуры,  –  увеличение  числа  регистров 
общего  назначения  (до  нескольких  десятков).  Эти  регистры 
равноправны,  что  позволяет  сохранять  большую  часть  промежуточных 
Страницы
- « первая
- ‹ предыдущая
- …
- 87
- 88
- 89
- 90
- 91
- …
- следующая ›
- последняя »
