Сравнение архитектуры risc и cisc процессоров. Аргументы в поддержку RISC как стиля для свободной, открытой ISA


Не можешь заставить других - работай сам. Когда-то давно попросил я Константина Афанасьева рассказать читателям о тех процессорах, которые не Pentium. "Сделаем," - ответил Афанасьев. Вот и делаем.

Как известно, сердцем любой современной персоналки является микропроцессор. У многих это слово однозначно ассоциируется с фирмой Intel, которая некогда выпустила получивший широкое распространение процессор 8086 и с тех пор почивает на лаврах, создавая все более мощные его версии. Однако на этом семействе свет клином не сошелся, и процессор Pentium II - отнюдь не венец эволюции, промежуточной ступенью перед которым якобы является человек.

Недолгое, но бурное развитие микрокомпьютеров привело к появлению двух доминирующих ветвей эволюции - Intel X86 и RISC. Первые появились раньше и успели занять значительную долю рынка, но разработанные в середине 80-х RISC-компьютеры оказались гораздо мощнее и оттяпали нишу высокопроизводительных систем.

Процессоры, не принадлежащие к классу RISC (Reduced Instruction Set Computing, вычисления с сокращенным набором команд), принято называть CISC (Complex ISC, вычисления со сложным набром команд). Так получилось, что из них пережило конкурентную борьбу только семейство X86 с его багажом накопленных программ, да и то современные представители семейства X86 (Pentium Pro, Pentium II, K5, K6) используют внутри себя все ту же архитектуру RISC. А потому RISC можно назвать новым, или, за давностью лет, очередным этапом развития процессоров.

А дело было так. В 80-е годы на пути роста производительности микропроцессоров стало сложное устройство центрального управления, связанное с доставшимся в наследство от традиционных ЭВМ большим набором команд. Теоретические исследования показали, что сведение набора команд до минимума наболее часто используемых позволит за счет незначительного увеличения объема программы добиться значительного упрощения процессора.

Тогда были сформулированы основные принципы RISC:

  1. Каждая команда независимо от ее типа выполняется за один такт.
  2. Все команды должны иметь одинаковую длину и использовать минимум адресных форматов.
  3. Вся обработка данных осуществляется в регистрах процессора, обращение к памяти происходит только при выполнении операций записи и чтения.
  4. Система команд должна обеспечивать поддержку языков высокого уровня.

Освободившаяся в результате площадь кристалла была пущена на увеличение разрядности и производительности процессоров. Например, выпущенный в 1985 году 32-разрядный процессор ARM (Advanced RISC Machine) при значительно большем быстродействии по степени интеграции был сопоставим с 8-разрядным Intel 8080 (25 тыс. транзисторов). И теперь 64 разряда для RISC-процессоров норма, а для X86 - далекое будущее.

То же сэкономленное место на кристалле было пущено на всевозможные ухищрения, позволяющие увеличить скорость обработки данных. За полвека существования компьютеров было разработано множество таких наворотов, которые разместить в CISC-процессоре было просто негде.

Преимущество RISC не только в экономии места. Активное использование регистров уменьшает число обращений к памяти до минимума. Загрузка регистров, то есть обмен между регистрами и памятью, осуществляется двумя различными способами - аппаратным и программным.

Аппаратный, применяющийся в процессорах SPARC, подразумевает реализацию 138 регистров, десять из которых видны всегда, а оставшиеся 128 разбиваются на восемь перекрывающихся окон, которые сменяют друг друга при вызове подпрограмм. Такая схема называется MORS (Multiple Overlapping Register Sets) или Rolodex.

В этом случае вызов процедуры происходит без обращения к памяти, передача параметров осуществляется через общие регистры двух окон, но для вызова девятой процедуры приходится прибегать к сложным техническим решениям, а сохранение 138 регистров в памяти при контекстном переключении процессов в многозадачной системе и вовсе вызывает непредсказуемую задержку.

Поэтому в большинстве RISC-процессоров применяется программное управление обращениями к памяти. Число регистров невелико (обычно 32), вызов процедур использует обычный стековый механизм. Предполагается, что обращения к памяти все равно поглощаются кэшем. Задача рационального использования регистров возлагается на компилятор.

Для архитектуры RISC вообще характерно возложение всех и всяческих задач на компилятор. Скорость работы одной и той же программы на RISC-процессоре может различаться в несколько раз в зависимости от компилятора, а ручная оптимизация позволяет сократить время работы фрагмента программы еще вдвое.

Еще один недостаток RISC - увеличение размера кода приблизительно в полтора раза из-за сокращенного набора команд и их фиксированной длины. Впрочем, в наше время немеренных мегабайтов это не слишком критично-развитие мультимедии привело к тому, что объем обрабатыаемых данных стал заведомо больше размера кода, а быстродействия не хватает по определению (см. эпиграф).

Дмитрий БОРОДАЕНКО,
[email protected]

Кому нужны 64-битные вычисления

Не успели мы освоиться с Windows 95 и 32-разрядными вычислениями, как оказалось, что и этого недостаточно. Гонка за числом разрядов продолжается, и дело тут не только и не столько в доступном адресном пространстве. Просто еще во времена больших машин было доказано, что для целочисленных вычислений оптимально 32-битовое представление, а для чисел с плавающей запятой необходимо и достаточно 64 бита.

Поэтому 32-разрядный процессор с действительными числами полной точности может управиться только в два захода, что для RISC-архитектуры с ее требованием минимизации форматов по крайней мере неудобно. Увеличение разрядности обрабатываемых данных вдвое требует увеличения либо разрядности процессора вдвое, либо тактовой частоты - вчетверо. Отчасти поэтому 32-разрядный PowerPC так отстает в вычислениях с плавающей запятой от полноценных 64-разрядных собратьев.

Это устройство, представляющее собой одну или несколько больших интегральных схем(БИС), выполняющих функции процессора ЭВМ.Классическое вычислительное устройство состоит из арифметического устройства (АУ), устройства управления (УУ), запоминающего устройства (ЗУ) и устройства ввода-вывода (УВВ).

Существуют процессоры различной архитектуры.

CISC (англ. Complex Instruction Set Computing) - концепция проектирования процессоров, которая характеризуется следующим набором свойств:

· большим числом различных по формату и длине команд;

· введением большого числа различных режимов адресации;

· обладает сложной кодировкой инструкции.

Процессору с архитектурой CISC приходится иметь дело с более сложными инструкциями неодинаковой длины. Выполнение одиночной CISC-инструкции может происходить быстрее, однако обрабатывать несколько таких инструкций параллельно сложнее.

Облегчение отладки программ на ассемблере влечет за собой загромождение узлами микропроцессорного блока. Для повышения быстродействия следует увеличить тактовую частоту и степень интеграции, что вызывает необходимость совершенствования технологии и, как следствие, более дорогого производства.

Достоинства архитектуры CISC

  1. Компактность наборов инструкций уменьшает размер программ и уменьшает количество обращений к памяти.
  2. Наборы инструкций включают поддержку конструкций высокоуровневого программирования.

Недостатки архитектуры CISC

  1. Нерегулярность потока команд.
  2. Высокая стоимость аппаратной части.
  3. Сложности с распараллеливанием вычислений.

RISC (Reduced Instruction Set Computing). Процессор с сокращенным набором команд. Система команд имеет упрощенный вид. Все команды одинакового формата с простой кодировкой. Обращение к памяти происходит посредством команд загрузки и записи, остальные команды типа регистр-регистр. Команда, поступающая в CPU, уже разделена по полям и не требует дополнительной дешифрации.

Часть кристалла освобождается для включения дополнительных компонентов. Степень интеграции ниже, чем в предыдущем архитектурном варианте, поэтому при высоком быстродействии допускается более низкая тактовая частота. Команда меньше загромождает ОЗУ, CPU дешевле. Программной совместимостью указанные архитектуры не обладают. Отладка программ на RISC более сложна. Данная технология может быть реализована программно-совместимым с технологией CISC (например, суперскалярная технология).

Поскольку RISC-инструкции просты, для их выполнения нужно меньше логических элементов, что в конечном итоге снижает стоимость процессора. Но большая часть программного обеспечения сегодня написана и откомпилирована специально для CISC-процессоров фирмы Intel. Для использования архитектуры RISC нынешние программы должны быть перекомпилированы, а иногда и переписаны заново.

Достоинства архитектуры RISC

1.снижение нерегулярности потока команд

2.обогащение пространственным параллелизмом

Недостатки архитектуры RISC

MISC (Multipurpose lnstruction Set Computer). Элементная база состоит из двух частей, которые либо выполнены в отдельных корпусах, либо объединены. Основная часть – RISC CPU, расширяемый подключением второй части – ПЗУ микропрограммного управления. Система приобретает свойства CISC. Основные команды работают на RISC CPU, а команды расширения преобразуются в адрес микропрограммы. RISC CPU выполняет все команды за один такт, а вторая часть эквивалентна CPU со сложным набором команд. Наличие ПЗУ устраняет недостаток RISC, выраженный в том, что при компиляции с языка высокого уровня микрокод генерируется из библиотеки стандартных функций, занимающей много места в ОЗУ. Поскольку микропрограмма уже дешифрована и открыта для программиста, то времени выборки из ОЗУ на дешифрацию не требуется.

RISC-архитектура предполагает реализацию в ЭВМ сокра­щенного набора простейших, но часто употребляемых команд, что позволяет упростить аппаратурные средства процессора и благодаря этому получить возможность повысить его быстро­действие.

При использовании RISC-архитектуры выбор набора команд и структуры процессора (микропроцессора) направлены на то, чтобы команды набора выполнялись за один машинный цикл процессора. Выполнение более сложных, но редко встречающих­ся операций обеспечивают подпрограммы..

В ЭВМ с RISC машинным циклом называют время, в течение которого производится выборка двух операндов из регистров, выполнение операции в АЛУ и запоминание результата в регист­ре. Большинство команд в RISC являются быстрыми командами типа «регистр - регистр» и выполняются без обращений к ОП. Обращения к ОП сохраняются лишь в командах загрузки регистров из памяти и запоминания в ОП. Чтобы это было возможным, про­цессор должен содержать достаточно большое число общих регистров.

Благодаря характерным для RISC-архитектуры особенно­стям - сокращенному набору команд (обычно не более 50-100), небольшому числу (обычно 2-3) простых способов адре­сации (в основном регистровой), небольшому числу простых форматов команд с фиксированными размерами и функциональ­ным назначением их полей - упрощается управляющее устрой­ство процессора, который в этом случае обходится без микро­программного уровня управления и управляющей памяти, и его УУ может быть выполнено на «схемной логике».

Уменьшение количества выполняемых команд и другие отме­ченные выше особенности RISC-архитектуры приводят к столь значительному упрощению структуры процессора, что становит­ся возможной его реализация на одном кристалле вместе с большим регистровым файлом и кэшем.

Большое число регистров, особенно при наличии обеспечива­ющего их эффективное использование «оптимизирующего ком­пилятора», позволяет до предела сократить обращение к ОП пу­тем сохранения нарегистрах промежуточных результатов, передачи через регистры операндов из одних программ в другие программы или подпрограммы, отказа от передач на сохранение в ОП содержимого регистров при прерываниях.

Особенностью RISC-архитектуры является механизм пере­крывающихся регистровых окон, предназначенный для уменьше­ния числа обращений к ОП и межрегистровых передач, что способствует повышению производительности ЭВМ.

Процедурам динамически выделяются небольшие группы регистров фиксированной длины (регистровые окна). Окна по­следовательно выполняемых процедур перекрываются, благода­ря чему возможна передача параметров от одной процедуры к другой При вызове процедуры процессор переключается на работу с другим регистровым окном, при этом не возникает необходимости в передаче содержимого регистров в память.



Окно состоит из трех подгрупп регистров (рис. 9.21). Первая подгруппа содержит параметры, переданные данной процедуре от ее вызвавшей, и результаты для вызывающей процедуры при возврате в нее. Вторая подгруппа содержит локальные перемен­ные процедуры. Третья, являясь буфером для двустороннего обмена между данной и ею вызываемой следующей процедура­ми, передает последней параметры от данной, которая, в свою очередь, получает через этот буфер результаты от ею вызванной процедуры. Таким образом, одна и та же подгруппа для данной процедуры является регистрами временного хранения, а для следующей - регистрами параметров. Отдельное окно, доступ­ное всем процедурам программы, выделяется для ее глобальных переменных.

В настоящее время за рубежом выпущен ряд микропроцессоров с RISC-архитектурой. Примером являются высокопроизводительные станции на базе микропроцессора Alpha 21264, микропроцессор для WindowsCE Intel StrongARM.

Несмотря на начавшееся использование RISC-архитектуры в выпускаемой промышленностью ЭВМ, продолжаются дискус­сии вокруг достоинств и недостатков этой архитектуры. К по­следним, в частности, относят большую длину кода программы после компиляции по сравнению с длиной кода машин обычной архитектуры. Например, при эмуляции команд x86 в среднем на каждую его команду требу­ется пять-шесть команд машины с RISC-архитектурой. Однако, как показали исследования, выигрыш в скорости выполнения команд перекрывает проигрыш от удлинения объектного кода программы.

В 1989 фирме Intel удалось на основе RISC-архитектуры создать однокри­стальный микропроцессор 80860, который практически представ­ляет собой кремниевый эквивалент суперЭВМ Gray-1.

Классификация архитектур микропроцессоров

Развитие архитектуры ЭВМ, направленное на повышение их производительности, во многих случаях идет по пути усложне­ния процессоров путем расширения системы (набора) команд, введения сложных команд, выполняющих процедуры, приближа­ющиеся к примитивам языков высокого уровня, увеличения числа используемых способов адресации и т. д.

Однако расширение и усложнение набора команд порожда­ют и ряд нежелательных побочных эффектов.

Расширение набора команд, увеличение числа способов ад­ресации, введение сложных команд сопровождаются увеличени­ем длины кода команды, в первую очередь, кода операции, что может приводить к использованию «расширяющегося кода опе­рации», увеличению числа форматов команд. Это вызывает ус­ложнение и замедление процесса дешифрации кода операции и других процедур обработки команд. Возрастающая сложность процедур обработки команд заставляет прибегать к микропрог­раммным управляющим устройствам с управляющей памятью вместо более быстродействующих УУ с «жесткой» («схемной») логикой.

Усложнение процессора делает более трудным или даже невыполнимым реализацию его на одном кристалле интеграль­ной микросхемы, что благодаря сокращению длин межсоеди­нений могло бы облегчить достижение высокой производи­тельности.

Анализ кода программ, генерируемого компиляторами языков высокого уровня, показал, что практически используется только ограниченный набор простых команд форматов "регистр, регистр -> регистр" и "регистр <-> па­мять". Компиляторы не в состоянии эффективно использовать сложные ко­манды. Именно это наблюдение способствовало формированию концепции процес­соров с сокращенным набором команд, так называемых RISC-процессоров.

Другим обстоятельством, фактически приведшим к появлению RISC-процессоров, было развитие архитектуры конвейерных процессоров типа Cray. В этих процессорах используются отдельные наборы команд для ра­боты с памятью и отдельные наборы команд для преобразования информа­ции в регистрах процессора. Каждая такая команда единообразно разбива­ется на небольшое количество этапов с одинаковым временем исполнения (выборка команды, дешифрация команды, исполнение, запись результата), что позволяет построить эффективный конвейер процессора, способный каждый такт выдавать результат исполнения очередной команды.

Однако конвейерность исполнения команд породила проблемы, свя­занные с зависимостями по данным и управлению между последовательно запускаемыми в конвейер командами. Например, если очередная команда использует результат предыдущей, то ее исполнение невозможно в тече­ние нескольких тактов, необходимых для получения этого результата. Аналогичные проблемы возникают при исполнении команд перехода по условию, когда данные, по которым производится переход, к моменту де­шифрации команды условного перехода еще не готовы.

Эти проблемы решаются либо компилятором, устанавливающим оче­редность запуска команд в конвейере и вставляющим команды "Нет опе­рации" при невозможности запуска очередной команды, либо специаль­ной аппаратурой процессора, отслеживающей зависимости между коман­дами и устраняющей конфликты.

После обособления RISC-процессоров в отдельный класс, процессоры с традиционными наборами команд стали называться CISC-процессорами с полным набором команд. Как правило, в этих процессорах команды имеют много разных форматов и требуют для своего представления раз­личного числа ячеек памяти. Это обусловливает определение типа коман­ды в ходе ее дешифрации при исполнении, что усложняет устройство управ­ления процессора и препятствует повышению тактовой частоты до уров­ня, достижимого в RISC-процессорах на той же элементной базе.

Очевидно, что RISC-процессоры эффективны в тех областях примене­ния, в которых можно продуктивно использовать структурные способы уменьшения времени доступа к оперативной памяти. Если программа ге­нерирует произвольные последовательности адресов обращения к памяти и каждая единица данных используется только для выполнения одной ко­манды, то фактически производительность процессора определяется вре­менем обращения к основной памяти. В этом случае использование сокра­щенного набора команд только ухудшает эффективность, так как требует пересылки операндов между памятью и регистром вместо выполнения команд "память, память - память". Программист должен учитывать необ­ходимость локального размещения обрабатываемых данных, чтобы при пересылках между уровнями памяти по возможности все данные пересы­лаемых блоков данных принимали участие в обработке. Если программа будет написана так, что данные будут размещены хаотично и из каждого пересылаемого блока данных будет использоваться только небольшая их часть, то скорость обработки замедлится в несколько раз до скорости ра­боты основной памяти. В качестве примера приведем в таблице 1.1 ре­зультаты замеров производительности микропроцессора Alpha 21066 233 Мгц при реализации преобразования Адамара при n = 8 - 20.

Таблица 1.1 Производительность микропроцессора Alpha 2I066 при выполнении преобразования Адамара

Пример показывает, что, пока данные размещаются во внутрикристальной кэш-памяти, производительность высока. Как только объем данных превышает размер кэш-памяти и обращения в память идут в "равномер­но" распределенные по объему адреса, производительность падает более, чем в 7 раз.

Развитие микропроцессоров происходит при постоянном стремлении со­хранения преемственности программного обеспечения (ПО) и повышения производительности за счет совершенствования архитектуры и увеличения тактовой частоты. Сохранение преемственности ПО и повышение произво­дительности, вообще говоря, противоречат друг другу. Процессоры с сис­темой команд х86, относящиеся к классу CISC-процессоров, имеют более низкие тактовые частоты по сравнению с микропроцессорами ведущих ком­паний-изготовителей RISC-процессоров. Существуют приложения, на ко­торых производительность х86 микропроцессоров значительно ниже, чем у RISC-процессоров, реализованных на той же элементной базе. Однако воз­можность использования совместимого ПО для различных поколений х86 процессоров, выпущенных в течение последнего десятилетия, обеспечивает им устойчивое доминирующее положение на рынке.

В настоящее время на основе пионерских разработок компаний NexGen и AMD, подхваченных компанией Intel, предпринята попытка решить пробле­му повышения производительности в рамках архитектуры х86. Эти компа­нии в последних разработках, сохраняя преемственность по системе команд с CISC-микропроцессорами семейства х86, создают новые устройства с исполь­зованием элементов RISC-архитектуры. Примером такого подхода могут слу­жить микропроцессоры Nx586 (NexGen), K5, К6 (AMD), Pentium PRO, Pentium II (Intel), использующие концепцию разделенной (decoupled) архи­тектуры и RISC ядра. В микропроцессор встраивается аппаратный трансля­тор, превращающий команды х86, в команды RISC-процессора. При этом одна команда х86 может порождать до четырех команд RISC-процессора. Исполнение команд происходит как в развитом суперскалярном процессоре. Компания Intel использовала этот подход в своем микропроцессоре Pentium Pro, что весьма укрепило ее позиции на фоне достижений RISC-архитектур.

Суперскалярные процессоры

сокращенным набором команд ) складывалась в конце 1970-х - начале 1980-х годов, когда потребовались новые идеи для повышения производительности процессоров. Выводы различных групп исследователей были обобщены в виде так называемого правила "80/20": 80 % времени выполнения программ занимает выполнение 20 % команд, входящих в состав системы команд. То есть в определении производительности процессора основную роль играет лишь пятая часть всех команд, остальные же команды встречаются достаточно редко, и время их выполнения существенного влияния на производительность процессора не оказывает. Исходя из этого было принято решение построить процессор , в котором выделенная небольшая группа команд выполнялась бы максимально быстро за счет ее аппаратной реализации, а остальные команды либо вообще удалялись из системы команд, либо реализовывались на микропрограммном уровне.

Сложившаяся в результате этого идеология RISC-архитектуры опиралась на следующие принципы :

  • набор команд сокращен до 70-100 команд (вместо нескольких сотен у CISC -микропроцессоров);
  • большинство команд выполняется за 1 такт, и лишь немногие - за несколько или даже несколько десятков тактов;
  • все команды обработки данных оперируют только содержимым регистров процессора, а для обращения к более медленной оперативной памяти предусмотрены исключительно инструкции вида "загрузить в регистр" и "записать в память";
  • команды имеют простой, четко заданный формат;
  • из набора команд исключены редко используемые инструкции, а также команд, не вписывающихся в принятый формат;
  • состав системы команд должен быть удобным для применения оптимизирующих компиляторов с языков высокого уровня.

Такой подход позволил уменьшить объем аппаратуры процессора за счет сокращения блока управления примерно в 10 раз, существенно увеличить тактовую частоту работы процессора и снизить его тепловыделение.

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

Так как вся обработка проходит в регистрах, отпадает необходимость в большом количестве режимов адресации операндов, а в системе команд можно применять трехадресные команды, наиболее эффективные с точки зрения организации вычислительного процесса и в то же время не имеющие их главного недостатка - большой длины команды. Простой формат команды легко поддается декодированию на соответствующей ступени работы конвейера. Вспомним, что длина команды в CISC -архитектуре IA-32 меняется в пределах от 1 до 15 байт , а наличие, формат и назначение многих полей команды неоднозначны и определяются структурой других полей.

Естественно, что этот подход потребовал использования в микропроцессоре регистровой памяти большого объема (до 128 регистров). А для обеспечения согласованной работы быстрых внутренних конвейеров и относительно медленной оперативной памяти в RISC -микропроцессорах предусматривается кэш - память большой емкости.

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

Простой формат команды и ориентация на регистровую обработку позволили безболезненно внедрить в RISC -процессорах конвейерный принцип обработки информации.

Такая организация обеспечила существенное повышение производительности RISC -микропроцессоров по сравнению с микропроцессорами CISC -архитектуры. Это привело к преобладанию МП данного типа в тех областях, где производительность являлась основополагающим фактором, например, в серверах. В то же время они не нашли своего места на наиболее развитом рынке вычислительной техники - рынке персональных компьютеров. Тому есть несколько причин:

  • дороговизна RISC -процессоров и систем на их основе: изначально эти процессоры были ориентированы на мощные рабочие станции и серверы, поэтому разработчики использовали в них решения, слишком дорогие для персональных компьютеров; даже специальные, "дешевые" варианты RISC -компьютеров стоили гораздо дороже сравнимых с ними ПК на базе процессоров Intel по причине малых объемов производства;
  • отсутствие широких наработок в области программного обеспечения: традиционной операционной системой для персональных компьютеров была DOS, к ней впоследствии присоединились 16разрядные версии WINdows, под которые написано огромное количество популярных и хорошо знакомых пользователям программ. Различные RISC -платформы обычно использовали несовместимые между собой разновидности Unix, для которыхсуществовало значительно меньше программ, главным образом научно-технических (для рабочих станций) либо сетевых приложений (для серверов);
  • RISC -процессоры по своему основополагающему положению обладают несовместимыми с х86 наборами команд, поэтому единственным способом исполнения кода х86 была эмуляция, которая снижала производительность от десятков до сотен процентов, что сводило на нет скоростные преимущества RISC -процессоров;
  • отсутствие интереса к проникновению на этот рынок у самих производителей RISC -систем: многие "серьезные" фирмы вроде DEC или Sun полагали, что нет нужды удешевлять свои RISC -станции, потому что пользователи все равно выберут их системы из-за очевидных технических преимуществ.

Развитие архитектуры RISC -микропроцессоров шло по нескольким направлениям. За счет повышения технологических возможностей производства микропроцессоров смягчились требования к составу и форматам используемых команд. В настоящее время их системы команд расширились с первоначальных 70-100 до 100-120. Увеличилось также и количество используемых форматов команд. Однако основной принцип RISC -архитектуры остается неизменным: обработка данных выполняется только над содержимым внутренних регистров МП без обращения к оперативной памяти.

Вместо требования выполнения команды за один такт используется требование получения очередного результата в очередном такте работы, то есть фактически закреплен принцип конвейерной обработки данных.

Для обработки данных микропроцессоры получили не один, а несколько конвейеров со своими исполнительными устройствами.

Наиболее известными RISC -микропроцессорами в настоящее время являются МП семейства SPARC фирмы Sun Microsystems, Alpha 21х64 фирмы Digital EquIPment и Rx000 фирмы MIPS Computer Systems . За последние годы активно внедряются в различную аппаратуру RISC -микропроцессоры семейства PowerPC . Среди фирм, выпускающих RISC -микропроцессоры, находятся также Intel, Hewlett Packard.

Совместный проект компаний Apple, Motorola и IBM - микропроцессор PowerPC ( Performance Optimization With Enhanced RISC ) - был ориентирован на создание недорогого, но мощного RISC -процессора и платформы для него. До появления архитектуры Intel NetBurst процессоры PowerPC почти всегда превосходили чипы Intel в скорости вычислений с плавающей точкой на десятки процентов, при этом потребляя намного меньшую мощность . По различным причинам на заключительной стадии этого проекта среди разработчиков осталась лишь компания IBM .

Рассмотрим организацию работы RISC -микропроцессора на примере МП Power4 фирмы

При проектировании суперминикомпьютеров на базе последних достижений СБИС-технологии оказалось невозможным полностью перенести в нее архитектуру удачного компьютера, выполненного на другой элементной базе. Такой перенос был бы очень неэффективен из-за технических ограничений на ресурсы кристалла: площадь, количество транзисторов, мощность рассеивания и т. д.

Для снятия указанных ограничений в Беркли (США, Калифорния) была разработана RISC(Restricted (reduced) instruction set computer)-архитектура (регистро-ориентированная архитектура). Компьютеры с такой архитектурой иногда называют компьютерами с сокращенным набором команд. Суть ее состоит в выделении наиболее употребительных операций и создании архитектуры, приспособленной для их быстрой реализации. Это позволило в условиях ограниченных ресурсов разработать компьютеры с высокой пропускной способностью.

2.1. Основные принципы RISC-архитектуры

В компьютерной индустрии наблюдается настоящий бум систем с RISC-архитектурой. Рабочие станции и серверы, созданные на базе концепции RISC, завоевали лидирующие позиции благодаря своим исключительным характеристикам и уникальным свойствам операционных систем типа UNIX, используемых на этих платформах.

В самом начале 80-х годов почти одновременно завершились теоретические исследования в области RISC-архитектуры, проводившиеся в Калифорнийском, Стэнфордском университетах, а также в лабораториях фирмы IBM. Особую значимость имеет проект RISC-1, который возглавили профессора Давид Паттерсон и Карло Секуин. Именно они ввели в употребление термин RISC и сформулировали четыре основных принципа RISC-архитектуры:

* каждая команда независимо от ее типа выполняется за один машинный цикл, длительность которого должна быть максимально короткой;

* все команды должны иметь одинаковую длину и использовать минимум адресных форматов, что резко упрощает логику центрального управления процессором;

* обращение к памяти происходит только при выполнении операций записи и чтения, вся обработка данных осуществляется исключительно в регистровой структуре процессора;

* система команд должна обеспечивать поддержку языка высокого уровня. (Имеется в виду подбор системы команд, наиболее эффективной для различных языков программирования.)

Со временем трактовка некоторых из этих принципов претерпела изменения. В частности, возросшие возможности технологии позволили существенно смягчить ограничение состава команд: вместо полусотни инструкций, использовавшихся в архитектурах первого поколения, современные RISC-процессоры реализуют около 150 инструкций. Однако основной закон RISC был и остается незыблемым: обработка данных должна вестись только в рамках регистровой структуры и только в формате команд "регистр – регистр –регистр".

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

Аппаратная поддержка выбранных операций, безусловно, сокращает время их выполнения, однако критерием такой реализации является повышение общей производительности компьютера в целом и его стоимость. Поэтому при разработке архитектуры необходимо проанализировать результаты компромиссов между различными подходами, различными наборами операций и на их основе выбрать оптимальное решение.

Развитие RISC-архитектуры в значительной степени определяется успехами в области проектирования оптимизирующих компиляторов. Только современная технология компиляции позволяет эффективно использовать преимущества большого регистрового файла, конвейерной организации и высокой скорости выполнения команд. Есть и другие свойства процесса оптимизации в технологии компиляции, обычно используемые в RISC-процессорах: реализация задержанных переходов и суперскалярная обработка, позволяющие в один и тот же момент времени посылать на выполнение несколько команд.

2.2. Отличительные черты RISC - и CISC - архитектур

Двумя основными архитектурами набора команд, используемыми компьютерной промышленностью на современном этапе развития вычислительной техники, являются архитектуры CISC и RISC. Основоположником CISC-архитектуры – архитектуры с полным набором команд (CISC – Complete Instruction Set Computer) можно считать фирму IBM с ее базовой архитектурой IBM/360, ядро которой используется с 1964 г. и дошло до наших дней, например, в таких современных мейнфреймах, как IBM ES/9000.

Лидером в разработке микропроцессоров с полным набором команд считается компания Intel с микропроцессорами X86 и Pentium. Это практически стандарт для рынка микропроцессоров.

Простота архитектуры RISC-процессора обеспечивает его компактность, практическое отсутствие проблем с охлаждением кристалла, чего нет в процессорах фирмы Intel, упорно придерживающейся пути развития архитектуры CISC. Формирование стратегии CISC-архитектуры произошло за счет технологической возможности перенесения "центра тяжести" обработки данных с программного уровня системы на аппаратный, так как основной путь повышения эффективности для CISC-компьютера виделся, в первую очередь, в упрощении компиляторов и минимизации исполняемого модуля. На сегодняшний день CISC-процессоры почти монопольно занимают на компьютерном рынке сектор персональных компьютеров, однако RISC-процессорам нет равных в секторе высокопроизводительных серверов и рабочих станций.

Основные черты RISC-архитектуры с аналогичными по характеру чертами CISC-архитектуры отображаются следующим образом (табл. 2.1):

Таблица 2.1. Основные черты архитектуры

CISC‑архитектура

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

Многобайтовые команды

Однобайтовые команды

Малое количество регистров

Большое количество регистров

Сложные команды

Простые команды

Одна или менее команд за один цикл процессора

Несколько команд за один цикл процессора

Традиционно одно исполнительное устройство

Несколько исполнительных

устройств

Одним из важных преимуществ RISC-архитектуры является высокая скорость арифметических вычислений. RISC-процессоры первыми достигли планки наиболее распространенного стандарта IEEE 754, устанавливающего 32-разрядный формат для представления чисел с фиксированной точкой и 64-разрядный формат "полной точности" для чисел с плавающей точкой. Высокая скорость выполнения арифметических операций в сочетании с высокой точностью вычислений обеспечивает RISC-процессорам безусловное лидерство по быстродействию в сравнении с CISC-процессорами.

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

Организация регистровой структуры – основное достоинство и основная проблема RISC. Практически любая реализация RISC-архитектуры использует трехместные операции обработки, в которых результат и два операнда имеют самостоятельную адресацию – R1: = R2, R3. Это позволяет без существенных затрат времени выбрать операнды из адресуемых оперативных регистров и записать в регистр результат операции. Кроме того, трехместные операции дают компилятору большую гибкость по сравнению с типовыми двухместными операциями формата "регистр – память" архитектуры CISC. В сочетании с быстродействующей арифметикой RISC-операции типа "регистр – регистр" становятся очень мощным средством повышения производительности процессора.

Вместе с тем опора на регистры является ахиллесовой пятой RISC-архитектуры. Проблема в том, что в процессе выполнения задачи RISC-система неоднократно вынуждена обновлять содержимое регистров процессора, причем за минимальное время, чтобы не вызывать длительных простоев арифметического устройства. Для CISC-систем подобной проблемы не существует, поскольку модификация регистров может происходить на фоне обработки команд формата "память – память".

Существуют два подхода к решению проблемы модификации регистров в RISC-архитектуре: аппаратный, предложенный в проектах RISC-1 и RISC-2, и программный, разработанный специалистами IВМ и Стэндфордского университета. Принципиальная разница между ними заключается в том, что аппаратное решение основано на стремлении уменьшить время вызова процедур за счет установки дополнительного оборудования процессора, тогда как программное решение базируется на возможностях компилятора и является более экономичным с точки зрения аппаратуры процессора.

2.3. Некоторые задачи реализации RISC-процессоров

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

При профилировании программы определяется доля общего времени центрального процессора, затрачиваемого на выполнение каждого оператора (операции) программы. Анализ полученных результатов позволит выявить характерные особенности профилируемой программы.

При статических или динамических измерениях подсчитывается, сколько раз в программе встречается тот или иной оператор (операция) или как часто признаки принимают положительные или отрицательные значения в тексте программы (статика) либо в результате выполнения (динамика).

Сочетание результатов, полученных в ходе предложенных исследований, дает общую картину анализируемой программы. Вот результаты одного из таких измерений в статике, проведенные для программ-компиляторов: операторы присваивания – 48 %; условные операторы – 15; циклы – 16; операторы вызова-возврата – 18; прочие операторы – 3 %.

Измерение трехсот процедур, используемых в программах – операционных системах в динамике показали следующие измерения типов операндов: константы – 33 %; скаляры – 42; массивы (структуры) – 20 и прочие – 5 %.

При этом статистика среди команд управления потоком данных следующая. В разных тестовых пакетах программ команды условного перехода занимают от 66 до 78 %, команды безусловного перехода – от 12 до 18 %, частота переходов на выполнение составляет от 10 до 16 %.

Отсюда можно сделать вывод, что операторы присваивания занимают основную часть в программах-компиляторах, а операнды типа константа и локальные скаляры составляют основную часть операндов в процедурах, к которым происходит обращение в процессе выполнения программы.

Подобные количественные и качественные измерения образуют основу для оптимизации процессорной архитектуры.

Так, если операторы присваивания занимают 48 % всех операторов, то ясно, что операцию доступа к операндам следует реализовать аппаратно. Особенно это важно, если речь идет о нечисловых задачах, в которых операции вычислительного плана, как правило, просты. В условных операторах, операторах цикла и вызова-возврата производятся манипуляции над множеством операндов, что также подтверждает необходимость аппаратной реализации операции доступа к операндам.

При анализе типов операндов мы учитывали три категории:

* константы – не меняются во время выполнения программы и имеют, как правило, небольшие значения;

* скаляры – обращение к ним происходит, как правило, явно по их имени. Их обычно немного, и они описываются в процедурах как локальные;

* обращение к элементам массивов и структур происходит посредством индексов и указателей, т. е. через косвенную адресацию. Этих элементов, как правило, много.

Для осуществления доступа к операнду необходимо вначале определить физический адрес ячейки, где хранится операнд, а затем осуществить доступ к операнду. Если операнд – константа, ее можно указать в команде. Доступ к ней может быть осуществлен немедленно после обращения. В других случаях все зависит от типа памяти, где хранится операнд. Регистровые блоки и кэш-память мало отличаются по емкости, скорости доступа и стоимости, однако существенно отличаются по накладным расходам на адресацию. Обращение к кэш-памяти осуществляется при помощи адресов полной длины, которые требуют более высокой полосы пропускания каналов обмена. Как правило, этот адрес приходится формировать во время выполнения программы, что как минимум требует полноразрядного сложения или обращения к регистру либо и того, и другого. Регистровые блоки адресуются короткими номерами регистров, которые обычно указываются в команде, что упрощает их декодирование. Однако регистровая память может хранить только определенные типы данных, в то время как кэш-память может использоваться и как основная. В связи с этим распределение скалярных переменных по регистрам необычайно важно, ибо существенно влияет на скорость обработки.

Необходимо решить вопрос с размером регистровых окон, ибо в обычной архитектуре окна однорегистровые, что требует операции запоминания-восстановления при каждом вызове-возврате.

При вызовах процедур необходимо запоминать содержимое регистров, а при возвращении – восстанавливать их, на что тратится значительное время. Вызовы процедур в современных структурированных программах делаются довольно часто, при этом суммарные накладные расходы на выполнение команд вызова и возврата из процедур на стандартных процессорах доходит до 50 % всех обращений к памяти в программе. Чтобы уменьшить время передачи данных между процедурами-родителями и процедурами-дочерьми (в случае, когда глубина их вложенности больше единицы), можно создать блок регистров, предоставив и родителям, и дочерям доступ к некоторым из них. Другими словами, необходимо создать перекрывающиеся блоки регистров. Такая возможность реализуется через перекрывающиеся "окна", накладываемые на блок регистров. Этот механизм реализован в RISC-архитектуре. Многие измерения показывают, что около 97 % процедур имеют не более шести параметров, что требует, чтобы перекрытие соседних окон шло где-то на пять регистров.

Процессор всегда содержит указатель текущего окна с возможностью его модификации в рамках реализованной глубины вложения процедур. Если глубина переполняется, часть содержимого окон направляется в основную память, чтобы иметь место для новых процедур. Для простоты реализации в ОП направляется содержимое целого окна. Это говорит о целесообразности введения многооконного механизма с заданным размером окна. Размер окна определяется количеством передаваемых параметров, а количество окон – допустимой вложенностью процедур.

Среди достоинств применения больших регистровых блоков можно выделить высокую скорость доступа к блокам и увеличение частоты вызова процедур. Среди недостатков – высокая стоимость большого регистрового блока, организуемого в ущерб другим функциональным блокам на кристалле.

Аппаратная реализация механизма перекрытия окон должна вводиться, если получаемый выигрыш перекрывает затраты.

Так как значительная часть процедур требует от трех до шести параметров, то следует подумать об оптимизации использования окон. Во-первых, пересылать в ОП в случае переполнения регистрового блока можно не все окна, а только содержимое регистров, используемых для данной процедуры, и, во-вторых, применять механизм с окнами переменных размеров, определяемых во время выполнения.

Перспективной разновидностью RISC-архитектуры явилась архитектура SPARC (Scalable Processor Architecture).

Замечание. Scaling – масштабирование, т. е. способность представлять данные таким образом, чтобы и они, и результат проводимых с ними вычислений находились в диапазоне чисел, которые могут обрабатываться в рамках данного процесса или на данном оборудовании.

Новая серия SPARCSTATIONS фирмы Sun Microsystems базируется на SPARC-архитектуре. Первые модели этой фирмы были изготовлены уже в 1989 г. Операционной средой для всех станций фирмы Sun является SunOS – разновидность OS Unix, снабженная многооконным графическим интерфейсом Open Look.

Для повышения скорости обработки данных используются компьютеры с VLIW (Very Long Instruction Word)-архитектурой. Структура команды таких компьютеров наряду с кодом операции и адресами операндов включает теги и дескрипторы. Наряду с существенным ускорением обработки данных такая архитектура позволяет экономить память при достаточном количестве обращений к командам и сокращать общее количество команд в системе команд.

2.4. Методы адресации и типы команд

В машинах с регистрами общего назначения метод (или режим) адресации объектов, с которыми манипулирует команда, может задавать константу, регистр или ячейку памяти.

В табл. 2.2 представлены основные методы адресации операндов, которые реализованы в компьютерах, рассмотренных в настоящей книге.

Таблица 2.2. Методы адресации

Метод
адресации

Пример
команды

Смысл
команды

Использование команды

Регистровая

Для записи требуемого значения в регистр

Непосредственная или литерная

Для задания констант

Базовая со смещением

R4= R4+M(100+R1)

Для обращения к локальным переменным

Косвенная регистровая

Для обращения по указателю к вычисленному адресу

Индексная

R3 = R3+M(R1+R2)

Прямая или абсолютная

Полезна для обращения
к статическим данным

Косвенная

R1 = R1+M(M(R3))

Если R3 – адрес указателя р, то выбирается значение по этому указателю

Автоинкрементная

Полезна для прохода в цикле по массиву с шагом: R2 – начало массива. В каждом цикле R2 получает приращение d

Автодекрементная

Аналогична предыдущей. Обе могут использоваться для реализации стека

Базовая индексная со смещением и масштабированием

R1=R1+M(100)+R2+R3*d

Для индексации массивов

Адресация непосредственных данных и литерных констант обычно рассматривается как один из методов адресации памяти (хотя значения данных, к которым в этом случае производятся обращения, являются частью самой команды и обрабатываются в общем потоке команд).

В табл. 2.2 на примере команды сложения (Add) приведены наиболее употребительные названия методов адресации, хотя при описании архитектуры в документации производители компьютеров и ПО используют разные названия для этих методов. В табл. 2.2. знак "=" используется для обозначения оператора присваивания, а буква M обозначает память (Memory). Таким образом M(R1) обозначает содержимое ячейки памяти, адрес которой определяется содержимым регистра R1.

Использование сложных методов адресации позволяет существенно сократить количество команд в программе, но при этом значительно увеличивается сложность аппаратуры.

Команды традиционного машинного уровня можно разделить на несколько типов, которые показаны в табл. 2.3.

Таблица 2.3. Основные типы команд

Тип операции

Арифметические
и логические

Целочисленные арифметические и логические операции: сложение, вычитание, логическое сложение, логическое умножение и т. д.

Пересылки данных

Операции загрузки/записи

Управление потоком команд

Безусловные и условные переходы, вызовы процедур и возвраты

Системные операции

Системные вызовы, команды управления виртуальной памятью и т. д.

Операции с плавающей точкой

Операции сложения, вычитания, умножения и деления над вещественными числами

Десятичные операции

Десятичное сложение, умножение, преобразование форматов и т. д.

Операции над строками

Пересылки, сравнения и поиск строк

Тип операнда может задаваться либо кодом операции в команде, либо с помощью тега, который хранится вместе с данными и интерпретируется аппаратурой во время обработки данных.

Обычно тип операнда (целый, вещественный, символ) определяет и его размер. Как правило, целые числа представляются в дополнительном коде. Для задания символов компания IBM использует код EBCDIC, другие компании применяют код ASCII. Для представления вещественных чисел с одинарной и двойной точностью придерживаются стандарта IEEE 754.

В ряде процессоров применяют двоично кодированные десятичные числа, которые представляют в упакованном и неупакованном форматах. Упакованный формат предполагает, что для кодирования цифр 0 – 9 используют 4 разряда и две десятичные цифры упаковываются в каждый байт. В неупакованном формате байт содержит одну десятичную цифру, которая обычно изображается в символьном коде ASCII.

2.5. Компьютеры со стековой архитектурой

При создании компьютера одновременно проектируют и систему команд (СК) для него. Существенное влияние на выбор операций для их включения в СК оказывают:

* элементная база и технологический уровень производства ком-пьютеров;

* класс решаемых задач, определяющий необходимый набор операций, воплощаемых в отдельные команды;

* системы команд для компьютеров аналогичного класса;

* требования к быстродействию обработки данных, что может породить создание команд с большой длиной слова (VLIW-команды).

Анализ задач показывает, что в смесях программ доминирующую роль играют команды пересылки и процессорные команды, использующие регистры и простые режимы адресации.

На сегодняшний день наибольшее распространение получили следующие структуры команд: одноадресные (1A), двухадресные (2A), трехадресные (3A), безадресные (БА), команды с большой длиной слова (VLIW – БДС) (рис. 2.1):

Дескрипторы

Рис. 2.1. Структуры команд

Причем операнд может указываться как адресом, так и непосредственно в структуре команды.

В случае БА-команд операнды выбираются и результаты помещаются в стек (магазин, гнездо). Типичными первыми представителями БА-компьютеров являются KDF-9 и МВК "Эльбрус". Их характерной особенностью является наличие стековой памяти.

Стек – это область оперативной памяти, которая используется для временного хранения данных и операций. Доступ к элементам стека осуществляется по принципу FILO (first in, last out) – первым вошел, последним вышел. Кроме того, доступ к элементам стека осуществляется только через его вершину, т. е. пользователю "виден" лишь тот элемент, который помещен в стек последним.

Рассмотрим функционирование процессора со стековой организацией памяти.

При выполнении различных вычислительных процедур процессор использует либо новые операнды, до сих пор не выбиравшиеся из памяти компьютера, либо операнды, употреблявшиеся в предыдущих операциях. В процессорах с классической структурой обращение к любому операнду (1A-ЭВМ) требует цикла памяти.

Рассмотрим пример.

Пусть процессор вычисляет значение выражения

DIV_ADBLOCK142">

Номер
команды

Комментарии

рабочая ячейка

– рабочая ячейка

Замечание. Выполнение команды типа https://pandia.ru/text/78/406/images/image016_43.gif" width="28" height="28">

Как следует из приведенной программы, операнд a выбирается из памяти 2 раза (команды 4 и 5), b – 3 раза (команды 2, 7 и 8). Кроме того, потребовались дополнительные обращения к памяти для запоминания и вызова из памяти результатов промежуточных вычислений (команды 3, 6, 9, 10).

Если главным фактором, ограничивающим быстродействие компьютера, является время цикла памяти, то необходимость в дополнительных обращениях к памяти значительно снижает скорость его работы. Очевидно, что принципиально необходимы только обращения к памяти за данными в первый раз. В дальнейшем они могут храниться в триггерных регистрах или СОЗУ.

Указанные соображения получили свое воплощение в ряде логических структур процессора. Одна из них – процессор со стековой памятью. Принцип ее работы поясняет схема, представленная на рис. 2.2.

Стековая память представляет собой набор из n регистров, каждый из которых способен хранить одно машинное слово. Одноименные разряды регистров P1, P2, ..., Pn соединены между собой цепями сдвига. Поэтому весь набор регистров может рассматриваться как группа n‑разрядных сдвигающих регистров, составленных из одноименных разрядов регистров P1, P2, ..., Pn. Информация в стеке может продвигаться между регистрами вверх и вниз.

Движение вниз: (P1) ® P2, (P2) ® P3, ..., а P1 заполняется данными из главной памяти.

Движение вверх: (Pn) ® Pn‑1, (Pn‑1) ® Pn‑2, а Pn заполняется нулями.



Рис. 2.2. Стековая организация процессора

Регистры P1 и P2 связаны с АЛУ, образуя два операнда для выполнения операции. Результат операции записывается в P1. Следовательно, АЛУ выполняет операцию .

Одновременно с выполнением арифметической операции (АО) осуществляется продвижение операндов вверх, не затрагивая P1, т. е. (P3) ® P2, (P4) ® P3 и т. д.

Таким образом, АО используют подразумеваемые адреса, что уменьшает длину команды. В принципе, в команде достаточно иметь только поле, определяющее код операции. Поэтому компьютеры со стековой памятью называют безадресными. В то же время команды, осуществляющие вызов или запоминание информации из главной памяти, требуют указания адреса операнда. Поэтому в ЭВМ со стековой памятью используются команды переменной длины. Например, в KDF-9 команды АО – однослоговые, команды обращения к памяти и передач управления – трехслоговые, остальные – двуслоговые.

Команды располагаются в памяти в виде непрерывного массива слогов независимо от границ ячеек памяти. Это позволяет за один цикл обращения к памяти вызвать несколько команд.

Для эффективного использования возможностей такой памяти в ЭВМ вводятся спецкоманды:

· дублирование ~ (P1) ® P2, (P2) ® P3, ... и т. д., а (P1) остается при этом неизменным;

· реверсирование ~ (P1) ® P2, а (P2) ® P1, что удобно для выполнения некоторых операций.

Рассмотрим тот же пример для новой ситуации (табл. 2.5):

0 " style="border-collapse:collapse;border:none">

Вызов b

Дублирование

Вызов c

Сложение

Реверсирование

Дублирование

Умножение

Вызов a

Дублирование

Умножение

Сложение

Как следует из табл. 2.5, понадобились лишь три обращения к памяти для вызова операндов (команды 1, 3, 8). Меньше обращений принципиально невозможно. Операнды и промежуточные результаты поступают для операций в АУ из стековой памяти; 9 команд из 12 являются безадресными.

Вся программа размещается в трех 48-разрядных ячейках памяти.

Главное преимущество использования магазинной памяти состоит в том, что при переходе к подпрограммам (ПП) или в случае прерывания нет необходимости в специальных действиях по сохранению содержимого арифметических регистров в памяти. Новая программа может немедленно начать работу. При введении в стековую память новой информации данные, соответствующие предыдущей программе, автоматически продвигаются вниз. Они возвращаются обратно, когда новая программа закончит вычисления.

Наряду с указанными преимуществами стековой памяти отметим также:

* уменьшение количества обращений к памяти;

* упрощение способа обращения к ПП и обработки прерываний.

Недостатки стековой организации памяти:

· большое число регистров с быстрым доступом;

· необходимость в дополнительном оборудовании, чтобы следить за переполнением стековой памяти, ибо число регистров памяти конечно;

· приспособленность главным образом для решения научных задач и в меньшей степени для систем обработки данных или управления технологическими процессами.

2.6. Оптимизация системы команд

Важным вопросом построения любой системы команд является оптимальное кодирование команд. Оно определяется количеством регистров и применяемых методов адресации, а также сложностью аппаратуры, необходимой для декодирования. Именно поэтому в современных RISC-архитектурах используются достаточно простые методы адресации, позволяющие резко упростить декодирование команд. Более сложные и редко встречающиеся в реальных программах методы адресации реализуются с помощью дополнительных команд, что, вообще говоря, приводит к увеличению размера программного кода. Однако такое увеличение программы с лихвой окупается возможностью простого увеличения частоты RISC-процессоров. Этот процесс мы можем наблюдать сегодня, когда максимальные тактовые частоты практически всех RISC-процессоров (Alpha, R4400, HyperSPARC и Power2) превышают тактовую частоту, достигнутую процессором Pentium.

Общую технологию проектирования системы команд для новой ЭВМ можно обозначить так: зная класс решаемых задач, выбираем некоторую типовую СК для широко распространенного компьютера и исследуем ее на предмет присутствия всего разнообразия операций в заданном классе задач. Вовсе не встречающиеся или редко встречающиеся операции не покрываем командами. Все частоты встреч операций для задания их в СК всякий раз можно определить из соотношений "стоимость затрат – сложность реализации – получаемый выигрыш".

Второй путь проектирования СК состоит в расширении имеющейся системы команд. Один из способов такого расширения – создание макрокоманд, второй – используя имеющийся синтаксис языка СК, дополнить его новыми командами с последующим переассемблированием, через расширение функций ассемблера. Оба эти способа принципиально одинаковы, но отличаются в тактике реализации аппарата расширения.

Так, система команд для ПК IBM покрывает следующие группы операций: передачи данных, арифметические операции, операции ветвления и циклов, логические операции и операции обработки строк.

Разработанную СК следует оптимизировать. Один из способов оптимизации состоит в выявлении частоты повторений сочетаний двух или более команд, следующих друг за другом в некоторых типовых задачах для данного компьютера, с последующей заменой их одной командой, выполняющей те же функции. Это приводит к сокращению времени выполнения программы и уменьшению требуемого объема памяти.

Мы можем исследовать и часто генерируемые компилятором некоторые последовательности команд, убирая из них избыточные коды.

Оптимизацию можно проводить и в пределах отдельной команды, исследуя ее информационную емкость. Для этого можно применить аппарат теории информации, в частности для оценки количества переданной информации – энтропию источника. Тракт "процессор – память" можно считать каналом связи.

Замечание. Энтропия – это мера вероятности пребывания системы в данном состоянии (в статистической физике).

2.7. Процессоры с микропрограммным управлением

Известны два подхода к построению логики формирования функциональных импульсов. Один из них: каждой операции процессора соответствует набор логических схем, выполненных на диодах, транзисторах и т. д. и определяющих, какой функциональный импульс (ФИ) и в каком такте должен быть возбужден. Пусть некоторый ФИ должен появиться в такте j операции m при условии наличия переполнения сумматора или в такте i операции n. Требуемое действие будет выполнено, если подать сигналы, соответствующие указанным кодам операции, тактам и условиям на входы схем И, а выходы последних через схему ИЛИ соединить с формирователем ФИ (рис. 2.3).



Такой принцип управления операциями получил название "жесткой" или "запаянной" логики и широко применяется во многих компьютерах.

Рис. 2.3. Формирование функционального импульса

Другой принцип организации управления : каждой микрооперации (МИО) ставится в соответствие слово (или часть слова), называемое микрокомандой и хранимое в памяти подобно тому, как хранятся в памяти команды обычного компьютера. Здесь команде соответствует микропрограмма, т. е. набор микрокоманд (МИК), указывающих, какие ФИ и в какой последовательности необходимо возбуждать для выполнения данной операции. Такой подход получил название микропрограммирования или "хранимой логики". Это подчеркивает тот факт, что в микропрограммном компьютере логика управления реализуется не в виде электронной схемы , а в виде закодированной информации, находящейся в каком-то регистре.

Идея микропрограммирования, высказанная в 1951 г. Уилксом, до недавнего времени не находила широкого применения, ибо:

· не было надежных и быстродействующих ЗУ для хранения микропрограммы;

· неправильно понимались задачи и выгоды микропрограммирования.

Поясним второй аргумент. Считалось, ценность микропрограммирования в том, что каждый потребитель может сконструировать себе из МИК нужный ему набор операций в данной конкретной задаче. Замена наборов команд достигалась бы заменой информации в ЗУ без каких-либо переделок в аппаратуре. Однако в этом случае программисту необходимо было бы знать все тонкости работы инженера-разработчика компьютера. А основная тенденция развития ЭВМ в связи с автоматизацией программирования состоит в том, чтобы освободить программиста от детального изучения устройств компьютера и в максимальной степени приблизить язык компьютера к языку человека. Поэтому микропрограммные компьютеры считали трудными для пользователя.

В последнее время интерес к микропрограммному принципу возродился, так как:

· созданы односторонние (читающие) быстродействующие ЗУ с малым циклом памяти;

· микропрограммирование рассматривается не как средство повышения гибкости программирования, а как метод построения системы управления процессором, удобный для инженера-разработчика компьютера.

Программист в своей работе может и не подозревать о микропро-граммной структуре компьютера и использовать все средства ПО и языки программирования самого высокого уровня. Использование микропрограммного принципа позволяет облегчить разработку и изменение логики процессора.

С появлением программного доступа к состоянию процессора после выполнения каждой МИК обеспечивается возможность создания экономичной системы автоматической диагностики неисправностей и появляется способность к эмуляции, т. е. к выполнению на данной ЭВМ программы, составленной в кодах команд другого компьютера. Это достигается введением дополнительного набора МИК, соответствующих командам эмулируемого компьютера.

Эти возможности способствуют распространению методов микропрограммирования при построении УУ в современных компьютерах.

2.7.1. Горизонтальное микропрограммирование



Существуют два вида микропрограммного управления: горизонтальное и вертикальное. При горизонтальном – каждому разряду МИК соответствует определенная МИО, выполняемая независимо от содержания других разрядов. Микропрограмма может быть представлена в виде матрицы n ´ m, где n – число ФИ, m – количество МИК, т. е. строка соответствует одной МИК, а столбец – одной МИО (рис. 2.4).

Рис.2.4. Микропрограмма при горизонтальном
микропрограммировании

Примерные значения разрядов МИК приведены на рис. 2.5.

Рис.2.5. Значение разрядов МИК (МИО):

1 – гашение сумматора; 2 – гашение указателя переполнения; 3 – обратный код сумматора; 4 – гашение регистра множителя частного; 5 – инвертирование знака; 6 – сдвиг содержимого сумматора влево; 7 – сдвиг содержимого сумматора вправо; 8 – увеличение содержимого сумматора на 1; 9

чтение из ЗУ в сумматор; …

Наличие "1" в пересечении какой-либо строки и столбца означает посылку ФИ в данную МИК, а наличие "0" – его отсутствие.

Размещение "1" в нескольких разрядах МИК означает выполнение нескольких МИО одновременно. Конечно, возбуждаемые МИО должны быть совместимы.

Пусть, например, разряды 9-разрядной МИК принимают следующие значения: . Тогда, если заданные разряды соответствуют семантике, указанной на рис. 2.5, то МИО, определяемые разрядами 9, 7 и 6, несовместимы.

Для расширения возможностей МИК иногда используют многотактный принцип исполнения МИК. При этом каждому разряду присваивается номер такта, в котором выполняется соответствующая ему МИО, т. е. здесь все совместимые МИО имеют один номер такта. Все остальные такты нумеруются в порядке их естественного выполнения. Однако универсальную нумерацию МИО в МИК указать затруднительно.

Достоинства горизонтального микропрограммирования:

· возможность одновременного выполнения нескольких МИО;

· простота формирования ФИ (без схем дешифрации).

Недостатки:

· большая длина МИК, так как число ФИ в современных компьютерах достигает нескольких сот, и соответственно большой объем ЗУ для
хранения МИК;

· из-за ограничений совместимости операций, а также из-за последовательного характера выполнения алгоритмов операций лишь небольшая часть разрядов МИК будет содержать "1". В основном матрица будет состоять из нулей. Неэффективное использование ЗУ привело к малому распространению горизонтального микропрограммирования.

2.7.2. Вертикальное микропрограммирование

При вертикальном микропрограммировании каждая МИО определяется не состоянием одного разряда, а двоичным кодом, содержащимся в определенном поле МИК. Микрокоманда несколько напоминает формат обычных команд. Отличие состоит в том, что:

· выполняется более элементарное действие – МИО вместо операции;

· адресная часть (в большинстве случаев) определяет не ячейку памяти, а операционный регистр процессора.



Формат МИК при вертикальном микропрограммировании приведен на рис. 2.6.

Рис. 2.6. Формат вертикальной МИК

Поля Р1 и Р2 в адресной части МИК указывают двоичные номера операционных регистров, содержимое которых участвует в одной операции. Одно из полей является одновременно и адресом результата. Таким образом, реализация арифметической или логической МИО, указанной в данной МИК,

может быть выражена формулой

(P1) Ä (P2) ® P1, или (P2) ®P1,

где Ä – символ МИО.

Для МИК обращения к памяти поле P1 указывает регистр, куда принимается информация, а P2 – регистр, содержимое которого является адресом обращения к ЗУ. Указанный формат МИК не единственный.

Каждая МИК выполняет следующие функции:

· указывает выполняемую МИО;

· указывает следующую МИО через задание "следующего адреса";

· задает продолжительность МИК;

· указывает дополнительные действия – контроль и т. д.

Обычно в слове МИК имеются четыре зоны, соответствующие указанным функциям. Вообще говоря, некоторые из зон могут указываться неявно, например выбор очередной МИК может осуществляться из следующей ячейки, продолжительность МИК может быть определена одинаковой для всех МИК и т. д.

Первыми компьютерами с микропрограммным управлением среди отечественных ЭВМ были МИР, НАИРИ, среди зарубежных – IBM/360,
Spectra 70.

Упражнения

1. Проанализируйте особенности RISC‑ и CISC‑архитектур компьютеров.

2. Приведите конкретные примеры воплощения RISC‑архитектур в реальных компьютерах.

3. Промоделируйте работу RISC‑программы на CISC-компьютере.

4. Проанализируйте и сравните по различным параметрам (быстродействию, памяти, сложности программирования) программы для одно‑, двух‑, трех‑ и безадресных компьютеров.

5. Проведите оптимизацию системы команд, если задан конкретный набор решаемых задач.

6. Разработайте микропрограммы выполнения заданных операций для реального компьютера. Проанализируйте целесообразность микропрограм-мной поддержки операций.

7. Разработайте систему команд для компьютера с VLIW‑архитектурой.








2024 © gtavrl.ru.