Составители:
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
- …
- следующая ›
- последняя »