Що значить ім'я троянда пахне трояндою

RISC-архітектура

Постановка завдання була абсолютно правильна і як завжди на багато років випереджала те, що в результаті було зроблено на Заході. Літератури російською мовою по RISC-процесорів я не зустрічав ні тоді, ні зараз. Довідкова система науково-технічної бібліотеки (ДПНТБ), "круті" на ЄС ЕОМ, видала мені список з трьох десятків журнальних статей. Сьогодні завдяки Інтернет все стало набагато простіше. і складніше. Ви отримуєте море посилань, але щоб знайти потрібне опис, доведеться витратити чимало часу.

Готуючи тематичний огляд, присвячений сучасним процесорам, я згадав про вишукування тих років і подумав, що непогано було б, не вдаючись у численні деталі, просто розповісти про те, що таке RISC-архітектура.

Отже, що означає ім'я?

Термін RISC - акронім англійської назви цієї архітектури "комп'ютер зі скороченим набором команд" і антонім терміна CISC, що позначає комп'ютер зі складним набором команд.

До 80-х років більшість процесорів будувалося на базі CISC-архітектури. Це означало, що вони мали великий набір команд різної довжини. Так, в системі команд міні-ЕОМ М-7000, що випускалася в Сєвєродонецьку, наскільки я пам'ятаю, складався з декількох тисяч машинних команд. У ній можна було самому складним чином закодувати інструкцію з різних комбінацій зрушень. При написанні відладчика для цієї машини мені довелося зробити спеціальний інтерпретатор таких інструкцій. Однак для набору машинних команд діє горезвісний закон 80:20, т. Е. З усього набору програміст використовує трохи більше 20% команд.

Цей факт і бажання здешевити процесор і підвищити його продуктивність привели до створення архітектури з дуже невеликим числом команд. Класичний приклад: в перших процесорах SPARC використовувалося всього 32 команди.

Часто говорять про ортогональності (симетричності) набору команд. Це коли кожна операція може мати будь-який операнд, наприклад, в команді може бути вказаний будь-який з регістрів. Зрозуміло, що набір команд CISC-процесорів неортогонален, так як певні команди використовують фіксований набір регістрів, який не можна змінити. Це викликає додаткові складності при розробці компіляторів для CISC-процесорів. Компілятори для RISC-процесорів писати набагато простіше. Але через те, що набір команд у них менше, виходить в результаті компіляції об'єктний код займає більший (до 50%) обсяг. Однак при цьому співвідношення ефективності скомпільованій на Сі і програми, написаної на асемблері, становить близько 90%, а для CISC-процесорів воно може бути нижче 45%.

Нагадаю, що всі операції всередині процесора, як і в комп'ютері, синхронізовані з допомогою генератора тактової частоти, що видає трапецієподібної форми синхросигнали. Тільки зазвичай внутрішня тактова частота процесора в 2-4 рази вище, ніж зовнішня. Це пов'язано з тим, що при високих тактових частотах (більше 20 МГц) починають різко зростати перешкоди, доводиться боротися з довжиною провідників на платі, робити плату багатошарової і т. Д. Слово "синхронізовані" означає, що кожна операція починається в строго певний момент часу, наприклад під час вступу переднього фронту хвилі синхросигналу.

Зауважу, що програміст має справу з процесором як з деякою математичною машиною, заданої описом реєстрового файлу і набору машинних команд, при цьому йому немає необхідності думати, яким чином цей пристрій реалізовано фізично. Насправді ж через перехідних процесів у кожної схеми може бути ще безліч проміжних станів, і тільки в моменти синхронізації ми впевнені в тому, що стан процесора повністю відповідає його математичної моделі.

Відповідно до синхросигналами вся робота процесора розбита на такти: на кожному такті в звичайному процесорі виконується певна робота або очікування. За кількістю тактів, яке потрібно для виконання машинних команд, останні діляться на довгі і короткі. Рідко вдається написати програму, яка була б і короткою і займала мало місця в пам'яті, зазвичай чимось доводиться жертвувати. Так, програмуючи системи реального часу, ми користувалися таблицею довжин команд і вибирали ті з них, час виконання яких було коротше.

По суті, кожен процесор - інтерпретатор. Коли він зчитує з програми чергову команду, спочатку виконується її розбір, так зване декодування. Після того як декодировщик виділив з команди код операції і визначив, що команда допустима, управління передається відповідній мікропрограмі, яка виконує дану команду. Мікропрограма пишеться на зовсім іншому мові, що оперує внутрішніми регістрами і прапорами процесора, розрядами його арифметико-логічного пристрою і іншими пристроями, зазвичай відомими тільки розробникам даного кристала.

Виграшів в скороченому наборі команд багато. Чим менше набір команд, тим менше часу потрібно витратити на декодування команди, т. Е. На виділення її коду операції і перехід на мікропрограму, яка цю інструкцію виконує. Чим менше команд і чим вони простіше, тим простіше мікропрограмування, т. Е. Програмування мікропрограм, що виконують машинні команди. Тим відповідно простіше тестування мікропрограм. Вимога сумісності знизу вгору всіх процесорів 80x80 корпорації Intel вбиває мене необхідністю зберігати величезний обсяг мікропрограм. Мікрокод займає у деяких CISC-процесорів до 70% площі кристала. У всіх на пам'яті постійні повідомлення про те, що в черговому CISC-процесорі знайдена чергова помилка. В RISC-процесорах для підвищення продуктивності зазвичай не використовується мікрокод, виконання інструкцій реалізується апаратно, тому зона управління займає на кристалі менше 1% його площі. Зменшення ж площі самого кристала дозволило майже в два рази підняти тактову частоту RISC-процесорів.

Для підвищення швидкодії в процесорах використовується конвейеризация (pipelining). Вона дозволяє процесору обробляти відразу кілька команд. Поки одна команда виконується, наступна вже декодируется, третя вибирається з пам'яті. Існує безліч складних схем конвейеризации. Але це більш вузька тема. Зазначу тільки, що процесори, в яких це реалізовано, називаються суперскалярного.

Насправді RISC-архітектура - це не тільки скорочена кількість машинних команд. (Зауважу, що в більш пізніх процесорах, наприклад в PowerPC корпорації IBM, їх число перевалило за сотню).

Є кілька ознак процесора з RISC-архітектурою.

Найцікавіше, що виробники CISC-процесорів для підвищення їх швидкодії широко використовують всередині них RISC-архітектуру (наприклад, в K6).

crs / papers / postrisc2 /. а також talks / postrisc /.

Сьогодні практично всі виробники комп'ютерів докладають великих зусиль для виробництва RISC-процесорів.

Історія, з якої я почав ці замітки, завершилася вельми банально: у замовника - великого автомобільного заводу - в той момент виникли труднощі з грошима, і договір на розробку не був підписаний. Але може бути, пощастить комусь із прочитали ці рядки?