Что такое risc процессоры

Обновлено: 03.07.2024

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

Замысел RISC - процессора (Reduced Instruction Set Computer , компьютер с сокращенным набором команд ) родился в результате практических исследований частоты использования команд программистами, проведенных в 70-х годах в США и Англии. Их непосредственный итог - известное "правило 80/20": в 80% кода типичной прикладной программы используется лишь 20% простейших машинных команд из всего доступного набора.

Первый "настоящий" RISC - процессор с 31 командой был создан под руководством Дэвида Паттерсона из Университета Беркли, затем последовал процессор с набором из 39 команд. Они включали в себя 20-50 тыс. транзисторов. Плодами трудов Паттерсона воспользовалась компания Sun Microsystems, разработавшая архитектуру SPARC с 75 командами в конце 70-х годов. В 1981 г. в Станфордском университете стартовал проект MIPS по выпуску RISC -процессора с 39 командами. В итоге была основана корпорация Mips Computer в середине 80-х годов и сконструирован следующий процессор уже с 74 командами.

По данным независимой компании IDC , в 1992 году архитектура SPARC занимала 56% рынка, далее следовали MIPS - 15% и PA-RISC - 12,2%

Примерно в то же время Intel разработала серию 80386, последних "истинных" CISC-процессоров в семействе IA-32 . В последний раз повышение производительности было достигнуто только за счет усложнения архитектуры процессора: из 16-разрядной она превратилась в 32-разрядную, дополнительные аппаратные компоненты поддерживали виртуальную память , и добавился целый ряд новых команд.

Основные особенности RISC -процессоров:

  1. Сокращенный набор команд (от 80 до 150 команд).
  2. Большинство команд выполняется за 1 такт.
  3. Большое количество регистров общего назначения.
  4. Наличие жестких многоступенчатых конвейеров.
  5. Все команды имеют простой формат, и используются немногие способы адресации.
  6. Наличие вместительной раздельной кэш-памяти.
  7. Применение оптимизирующих компиляторов, которые анализируют исходный код и частично меняют порядок следования команд.

RISC-процессоры 3-го поколения

Самыми крупными разработчиками RISC -процессоров считаются Sun Microsystems ( архитектура SPARC - Ultra SPARC ), IBM (многокристальные процессоры Power , однокристальные PowerPC - PowerPC 620), Digital Equipment ( Alpha - Alpha 21164), Mips Technologies (семейство Rxx00 -- R 10000), а также Hewlett-Packard ( архитектура PA-RISC - PA-8000).

Все RISC -процессоры третьего поколения:

  • являются 64-х разрядными и суперскалярными (запускаются не менее 4-х команд за такт);
  • имеют встроенные конвейерные блоки арифметики с плавающей точкой;
  • имеют многоуровневую кэш-память. Большинство RISC-процессоров кэшируют предварительно дешифрованные команды;
  • изготавливаются по КМОП-технологии с 4 слоями металлизации.

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

Повышение производительности RISC -процессоров достигается за счет повышения тактовой частоты и усложнения схемы кристалла. Представителями первого направления являются процессоры Alpha фирмы DEC , наиболее сложными остаются процессоры компании Hewlett-Packard. Рассмотрим процессоры этих фирм более подробно.

Структура процессоров Alpha: 21064, 21264

Структура процессора Alpha 21064 представлена на рис. 10.1.

Основные функциональные блоки процессора Alpha 21064:

  • I-cache - кэш команд.
  • IRF - регистровый файл целочисленной арифметики.
  • F-box - устройство арифметики с плавающей точкой.
  • E-box - устройство целочисленной арифметики (7 ступеней конвейера ).
  • I-box - командное устройство (управляет кэш команд, выборкой и дешифрацией команд).
  • A-box - устройство управления загрузкой/сохранением данных. Управляет процессом обмена данными м/у IRF, FRF , кэш данных и внешней памятью.
  • Write Buffer - буфер обратной записи.
  • D-cache - КЭШ данных.
  • BIU - интерфейсный блок, с помощью которого подключаются внешняя кэшпамять, размером 128 Кб-8 Мб.

Сравнительные характеристики Alpha 21164 и 21264

Процессор Alpha 21264 отличается значительной новизной по сравнению с предшественником 21164. Он обладает кэш-памятью первого уровня большего объема, дополнительными функциональными блоками, более эффективными средствами предсказания ветвлений, новыми инструкциями обработки видеоданных и широкой шиной.

Alpha 21264 читает до четырех инструкций за один такт и может одновременно исполнять до шести инструкций. Самое большое его отличие от модели 21164 - это способность выполнять команды (впервые для Alpha) с изменением их очередности (Out-of-Order).

Эффективность выполнения Out-of-Order определяется количеством инструкций, которыми может манипулировать ЦП в целях определения оптимального порядка выполнения команд. Чем больше инструкций ЦП может для этого использовать, тем лучше, тем дальше он может заглядывать вперед. Процессоры Intel класса Р6 ( Pentium Pro , Pentium II, Xeon) могут одновременно обращаться не менее чем с 40 командами. У других процессоров данный показатель значительно больше: PA-8000 фирмы HP оперирует 56 командами, а процессор Alpha справляется с 80 командами.

Как и большинство RISC-процессоров, Alpha содержит набор из 32 целочисленных и 32 регистров с плавающей запятой, все они имеют разрядность 64 бита. Для повышения эффективности внеочередного выполнения команд процессор 21264 дополнительно к обычному набору регистров снабжен еще 48 целочисленными регистрами и 40 регистрами с плавающей запятой.

Каждый регистр может временно хранить значения текущих команд. Если обрабатывается какая-либо инструкция, нет необходимости перегружать результат в целевой регистр - вместо этого ЦП просто переименовывает временный регистр ( Register Renaming ).

Подобное переименование регистров есть и в других процессорах. Однако в 21264 реализована уникальная "хитрость" - он имеет задублированный набор целочисленных регистров, каждый из 80 целочисленных регистров дублируется еще раз. Таким образом, на чипе в целом - 160 целочисленных регистров. Это одна из причин, почему, несмотря на сложность выполнения Out-of-Order, допустима высокая частота процессора 21264.

Блоки целочисленных операций в обеих группах идентичны не полностью. Одна из них содержит блок умножения, а вторая - специальную логику для обработки движущихся изображений (MPEG). Для этого набор команд Alpha был дополнен пятью новыми командами. Самая интересная из них - PERR - служит для оценки движения, т.е. выполнения задачи, возникающей как при сжатии, так и декомпрессии MPEG. Команда PERR выполняет работу девяти обычных инструкций. Таким образом, процессор 21264 может декодировать видеопоследовательности MPEG-2, а также DVD-аудиоданные AC-3 в режиме реального времени без использования дополнительных периферийных устройств.


RISC (англ. Restricted (reduced) Instruction Set Computer — «компьютер с сокращённым набором команд») — архитектура процессора, в котором быстродействие увеличивается за счёт упрощения инструкций, чтобы их декодирование было более простым, а время выполнения — меньшим. Термин «сокращённый» в названии описывает тот факт, что сокращён объём (и время) работы, выполняемый каждой отдельной инструкцией — как максимум один цикл доступа к памяти.

Широко известные семейства RISC включают в себя DEC Alpha, AMD Am29000, ARC, ARM, Atmel AVR, BlackFin, Intel i860 и i960, MIPS, Motorola 88000, PA-RISC, RISC-V, SuperH и SPARC. В 21-м веке, использование архитектуры ARM процессоров смартфонов и планшетных компьютеров , таких как IPad и Android устройств обеспечили широкую базу пользователей для систем на базе RISC. Процессоры RISC также используются в суперкомпьютерах, таких как компьютер K, самый быстрый из TOP500 в 2011 году, и четвертый в списке 2013 года.

Содержание

Характерные особенности RISC-процессоров

  • Элемент маркированного списка.
  • Фиксированная длина машинных инструкций, простой формат команды.
  • Специализированные команды для операций с памятью — чтения или записи. Операции вида Read-Modify-Write («прочитать-изменить-записать») отсутствуют. Любые операции «изменить» выполняются только над содержимым регистров (т.н. архитектура load-and-store).
  • Большое количество регистров общего назначения (32 и более).
  • Отсутствие поддержки операций вида «изменить» над укороченными типами данных — байт, 16-битное слово. Так, например, система команд DEC Alpha содержала только операции над 64-битными словами, и требовала разработки и последующего вызова процедур для выполнения операций над байтами, 16- и 32-битными словами.
  • Отсутствие микропрограмм внутри самого процессора.

Преимущества RISC

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

История RISC

Предпосылки развития RISC архитектур:

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

Начало исследований

Первая система, которая может быть названа системой «RISC», — суперкомпьютер «CDC 6600», который был создан в 1964 году, за десять лет до появления соответствующего термина. CDC 6600 имел архитектуру «RISC» всего с двумя режимами адресации («регистр+регистр» и «регистр+непосредственное значение») и 74 кодами команд (тогда как 8086 имел 400 кодов команд). В «CDC 6600» было 11 конвейерных устройств арифметической и логической обработки, а также пять устройств загрузки и два устройства хранения. Память была много блочной, поэтому все устройства загрузки-хранения могли работать одновременно. Базовая тактовая частота/частота выдачи команд была в 10 раз выше, чем время доступа к памяти. Джим Торнтон и Сеймур Крэй, разработчики «CDC 6600», создали для него мощный процессор, позволявший быстро обрабатывать большие объёмы цифровых данных. Главный процессор поддерживался десятью простыми периферийными процессорами, выполнявшими операции ввода-вывода и другие функции ОС. Позднее появилась шутка, что термин «RISC» на самом деле расшифровывается как «Really invented by Seymour Cray» (пер. с англ.: «на самом деле придуман Сеймуром Крэем»).


Если быть уж совсем точным, то первой компанией, начавшей разработку RISC-архитектуры, стала IBM. Еще в 1974 году стартовала разработка процессора IBM 801, которая и заложила первые основы для этой платформы. А проект Berkeley RISC окончательно сформировал архитектуру. Все х86-процессоры, решения компании Motorola и подавляющее большинство выпущенных в 1980-е годы кристаллов имели архитектуру CISC (Complex Instruction Set Computing). Совокупность всех особенностей привела к тому, что чипы стали не только сложными и дорогими в производстве, но и достигли своего потолка производительности. Для дальнейшего увеличения быстродействия требовалось наращивать количество транзисторов, однако освоенные технологические нормы не позволяли создавать более сложные решения. С этим столкнулась Intel при выпуске семейства i486. Для поднятия производительности они внесли изменения в архитектуру процессоров, добавив кэш-память, множители и конвейеры. Словом, 486-е «камни» получили некоторые «фишки» архитектуры RISC. Тем не менее к созданию RISC-платформы американская компания никакого отношения не имеет. Своим созданием архитектура обязана американскому инженеру Дэвиду Паттерсону, который руководил проектом Berkeley RISC с 1980 по 1984 годы.

Первоначальной идеей, которая затем воплотилась в столь масштабный проект Berkeley RISC, стало исследование работы Motorola 68000. В ходе наблюдений выяснилось, что программы попросту не использовали подавляющее большинство инструкций, заложенных в процессор. Например, система Unix при компиляции использовала лишь 30% команд. Поэтому в рамках проекта Berkeley RISC планировалось создать такой процессор, который бы содержал лишь самые необходимые инструкции.

Дебютными решениями стали RISC I и RISC II — детища Паттерсона и проекта Berkeley RISC. Первый содержал более чем 44 000 транзисторов и работал на частоте 4 МГц. Такой процессор при выполнении небольших программ был в среднем в два раза быстрее VAX 11/780 и примерно в четыре раза производительнее, чем «камень» Zilog Z8000. RISC II отличался от предшественника большим количеством инструкций: 39 против 32. Он был более быстрым. Его преимущество над процессором VAX достигало 200%, а Motorola 68000 в некоторых программах был медленнее примерно в четыре раза.

Практически в то же время, в 1981 году, Джон Хеннесси начал аналогичный проект, названный «архитектура „MIPS“» в Стэнфордском университете. Создатель «MIPS» практически полностью сфокусировался на конвейерной обработке, попытавшись «выжать всё» из этой технологии. Конвейерная обработка использовалась и в других продуктах, некоторые идеи, реализованные в MIPS, позволили разработанному чипу работать значительно быстрее аналогов. Наиболее важным было требование выполнения любой из инструкций процессора за один такт. Это требование позволило конвейеру работать на гораздо больших скоростях передачи данных и привело к значительному ускорению работы процессора. С другой стороны, исполнение этого требования имело негативный побочный эффект в виде удаления из набора инструкций таких полезных операций, как умножение или деление. В первые годы попытки развития архитектуры «RISC» были хорошо известны, однако оставались в рамках породивших их университетских исследовательских лабораторий. Многие в компьютерной индустрии считали, что преимущества процессоров «RISC» не проявятся при использовании в реальных продуктах из-за низкой эффективности использования памяти в составных инструкциях. Однако с 1986 года исследовательские проекты «RISC» начали выпускать первые работающие продукты.

Последние разработки

В 1985 году IBM начала разработку RISC-архитектуры следующего поколения. Проект получил название America Project. Разработка процессора и набора инструкций для него закончилась в 1990 году. Сам кристалл получил название POWER1 и использовался в серверах и рабочих станциях IBM. Он обладал достаточно высоким уровнем производительности, но имел многочиповую компоновку и состоял из 11 различных микросхем. В 1992 году IBM представила бюджетный вариант процессора POWER1, который умещался в одном чипе.

Как оказалось в начале 1990-х годов, RISC-архитектуры позволяют получить большую производительность, чем CISC, за счёт использования суперскалярного и VLIW-подхода, а также за счёт возможности серьёзного повышения тактовой частоты и упрощения кристалла с высвобождением площади под кэш, достигающий огромных ёмкостей. Также RISC-архитектуры позволили сильно снизить энергопотребление процессора за счёт уменьшения числа транзисторов. Первое время RISC-архитектуры с трудом принимались рынком из-за отсутствия программного обеспечения для них. Эта проблема была решена переносом UNIX-подобных операционных систем (SunOS) на RISC-архитектуры.

В настоящее время многие архитектуры процессоров являются RISC-подобными, к примеру, ARM, DEC Alpha, SPARC, AVR, MIPS, POWER и PowerPC. Наиболее широко используемые в настольных компьютерах процессоры архитектуры x86 ранее являлись CISC-процессорами, однако новые процессоры, начиная с Intel Pentium Pro, являются CISC-процессорами с RISC-ядром. Они непосредственно перед исполнением преобразуют CISC-инструкции x86-процессоров в более простой набор внутренних инструкций RISC. После того, как процессоры архитектуры x86 были переведены на суперскалярную RISC-архитектуру, можно сказать, что большинство существующих ныне процессоров основаны на архитектуре RISC.

Использование RISC - архитектур

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

Мобильные системы

  • Архитектура ARM доминирует на рынке малой мощности и низкой стоимости встраиваемых систем (обычно 200-1800 МГц в 2014 году). Он используется в ряде систем, таких как большинство Android систем, в Apple, iPhone и IPad, Microsoft Windows Phone (бывший Windows Mobile ), RIM устройства, Nintendo Game Boy Advance и Nintendo DS, и т.д. (напр. Рис. 3)
  • В PlayStation, PlayStation 2, Nintendo 64, PlayStation Portable.
  • Hitachi 's SuperH, первоначально широко используется в Сега Супер 32X, Saturn и Dreamcast, в настоящее время разработаны и продаются Renesas как SH4.
  • Atmel AVR используется в различных продуктах, начиная от Xbox контроллеров до BMW автомобилей.
  • SPARC, с помощью Oracle (ранее Sun Microsystems ) и Fujitsu.

Суперкомпьютеры

  • IBM 's Power Architecture, используется во многих суперкомпьютерах, серверах среднего уровня и рабочих станций IBM.
  • Hewlett-Packard's PA-RIS, также известный как HP-PA (снят с производства в конце 2008 года).

Характеристики

Распространенное заблуждение "компьютер с сокращенным набором команд" ошибочно наводит на мысль, что инструкции просто устранены, в результате меньшего набора инструкций. На самом деле, на протяжении многих лет, наборы команд RISC выросли в размерах, и сегодня многие из них имеют больший набор инструкций, чем многие CISC процессоры. Некоторые процессоры RISC, такие как PowerPC имеют наборы инструкций, большие, чем в CISC IBM System/370.

Термин "пониженная" в этой фразе предназначался, для описания тот факта, что объем работы какой-либо одной инструкции снижается, по сравнению со «сложными инструкциями» от CISC - процессоров, которые могут потребовать десятки данных циклов памяти, чтобы выполнить одну команду. В частности, процессоры RISC обычно имеют отдельные инструкции для ввода/вывода и обработки данных.

Процессоры также имели относительно небольшое число регистров, по нескольким причинам:

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

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

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

Сегодня нам понадобятся знания, которые мы получили ранее из статей:

Что такое RISC и CISC

Эти аббревиатуры вы, скорее всего, уже встречали. RISС это Reduced Instruction Set Computer или, по русски, компьютер с усеченным набором команд. CISC это Complex Instruction Set Computer или, по русски компьютер с комплексным набором команд.

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

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

От простого к сложному

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

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

Но довольно скоро выяснилось, что ЭВМ могут успешно решать не только вычислительные задачи и началась гонка технологий. Производители ЭВМ, с одной стороны, выясняли запросы пользователей и старались их удовлетворять при разработке новых машин. А с другой, обращались в академические круги с запросом"а что еще ЭВМ могут"?

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

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

Анализируй это

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

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

От сложного к простому

Было предложено исключить из системы команд ЭВМ редко используемые команды и упростить оставшиеся. Это позволит упростить схемотехнику и снизить стоимость ЭВМ, но позволит и повысить быстродействие.

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

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

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

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

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

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

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

Убираем лишние команды

Как я уже говорил, не все команды одинаково востребованы. Давайте более подробно разберем это на примере команд пересылки данных. Чаще всего команды пересылки данных имеют аббревиатуру MOV.

В процессорах 80х86 однако имеются не только команды пересылки данных общего назначения, но и специфичные для работы со строками. Я говорю о командах MOVS, LODS, STOS. От обычной команды MOV они, по большому счету, отличаются лишь использованием специальных регистров и автоматическим увеличением указателей, для команд MOVS. А LODS и STOS задают одним из операндов регистр аккумулятор.

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

У процессоров 80х86 есть отдельные команды для установки некоторых флагов состояния процессора, например, команда, STC для установки флага переноса. Мы можем исключить эту команду и использовать вместо нее универсальные команды установки/сброса заданного бита в байте/слове. Или пойти еще дальше и оставить только побитовые команды OR, AND, XOR.

Подобным образом можно сократить количество доступных команд очень сильно. Так в BaseLine PIC есть всего 33 команды, в MidRange 35 команд, в PIC18 порядка 70 команд. В STM8 есть порядка 80 команд. Это гораздо меньше, чем у 80х86.

Вводим аккумуляторную архитектуру и делаем команды одноадресными

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

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

Влияние изменений и сокращений в наборе команд на память программ

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

В качестве примера, далеко забегая вперед, я приведу формат команд для MidRange PIC

Формат команд процессора 8 битных PIC Microchip семейства MidRange Формат команд процессора 8 битных PIC Microchip семейства MidRange

Нас в данной иллюстрации интересует лишь поле OPCODE и общее количество бит занимаемое командами. А общая длина команды всего 14 бит (для BaseLine 12 бит). При этом поле операции занимает 3, 4 или 6 разрядов. То есть, менее байта.

И для считывания полной команды из памяти программ нам нужна 14-битная шина данных. Рассказ о памяти PIC еще впереди, но результаты оптимизации и использования RISC подхода у Microchip впечатляют. Менее двух байт на команду! У AVR Atmel команды занимают 2 байта, а у STM8 до 5 байт.

Внимательный читатель может заметить, "но позвольте, ведь мы теперь не всегда можем обойтись одной командой, мы иногда вынуждены использовать несколько команд для получения нужного результата, а значит, требуемый объем памяти будет больше и вся эта экономия ничего не даст!"

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

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

Исключение сложных методов адресации

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

Давайте вспомним косвенную индексную адресацию в STM8 из предыдущей статьи

Косвенная индексная адресация в STM8 из 9 статьи цикла. Иллюстрация моя Косвенная индексная адресация в STM8 из 9 статьи цикла. Иллюстрация моя

Что бы получить собственно данные нам нужно:

  1. Загрузить в процессор содержимое ячейки, адрес которой задан косвенной частью адресации операнда. В данном случае это ячейка с адресом strtbl+2
  2. Сложить полученное значение и содержимое индексного регистра (индексная часть адресации операнда)
  3. Загрузить в процессор собственно обрабатываемые командой данные из ячейки памяти с адресом полученным на шаге 2

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

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

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

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

Более гибкая и простая адресация в командах перехода

Программа должна иметь возможность передать управление в любую доступную точку памяти программ. Этот постулат сомнению не подвергается.

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

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

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

Итоговый результат оптимизаций и сокращений

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

Заключение

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

И CISC и RISC архитектуры имеют право на жизнь. Нельзя сказать, какая из них однозначно лучше, а какая хуже. Все зависит от конкретной ситуации. Причем RISC архитектура применяется не только в микроконтроллерах, но и в других процессорах. Примером могут служить Sun SPARK.

А вот теперь мы готовы приступить к более подробному рассмотрению микроконтроллеров PIC, как это сделано в предыдущей статье для STM8.

Lorem ipsum dolor

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

Конвейер в RISC практически постоянно заполнен инструкциями, а микрооперации в CISC не могут организовать постоянное заполнение конвейера, поэтому возникало очень много «пустот». Из-за этого разработчики CISC пошли на дополнительный трюк, так называемый гипертрединг. Гипертрединг позволил CISC-процессору выполнять сразу несколько потоков инструкций. В этом случае если один поток не способен «наполнить» конвейер, то для этого берутся инструкции из других потоков.

Разработчики RISC заметили, что гипертрединг — это хорошо. А в их архитектуре редко, но иногда проскакивает «пустота» в конвейере, поэтому они внедрили гипертрединг и в своих процессорах.

Такое «копирование функционала» сделало свое дело: архитектура RISC и архитектура CISC стали очень похожи. Но при этом многие специалисты пророчат светлое будущее именно архитектуре RISC.

Мы будем очень благодарны

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

Читайте также: