Berkeley RISC

редактировать
Исследовательский проект по разработке микропроцессоров на основе RISC

Berkeley RISC - один из двух основополагающих исследовательских проектов в Разработка микропроцессора на основе RISC осуществляется в рамках проекта VLSI ARPA. RISC возглавлял Дэвид Паттерсон (который ввел термин RISC) в Калифорнийском университете в Беркли в период с 1980 по 1984 год. Другой проект проходил неподалеку, в Стэнфордский университет в рамках проекта MIPS, начавшегося в 1981 году и продолжавшегося до 1984 года.

Проект Беркли был настолько успешным, что стал именем для всех последующих подобных проектов; даже MIPS станет известен как «процессор RISC». Позднее проект Berkeley RISC был коммерциализирован компанией Sun Microsystems как архитектура SPARC и послужил источником вдохновения для архитектуры ARM.

Содержание
  • 1 Концепция RISC
  • 2 RISC I
  • 3 RISC II
  • 4 Дополнения
  • 5 См. Также
  • 6 Примечания
  • 7 Ссылки
Концепция RISC

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

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

С другой стороны, удаляемые инструкции обычно выполняли несколько "подкоманд". Например, команда ADDтрадиционного дизайна обычно бывает нескольких видов: одна, которая складывает числа в двух регистрах и помещает их в третий, другая, которая добавляет числа, найденные в основной памяти, и помещает результат в регистре и т. д. RISC-проекты, с другой стороны, включали только один вариант любой конкретной инструкции, например, ADDвсегда будет использовать регистры для всех операндов. Это вынудило программиста написать дополнительные инструкции для загрузки значений из памяти, если это необходимо, делая программу RISC «менее плотной».

В эпоху дорогой памяти это было серьезной проблемой, особенно потому, что память также была намного медленнее, чем ЦП. Поскольку для RISC-дизайна ADDфактически потребовалось бы четыре инструкции (две загрузки, добавление и сохранение), машине пришлось бы делать гораздо больше доступа к памяти для чтения дополнительных инструкций, что потенциально могло бы значительно замедлить ее. Это было в некоторой степени компенсировано тем фактом, что в новых разработках использовалось то, что тогда было очень большим командным словом 32-бит, что позволяло добавлять небольшие константы непосредственно в инструкцию вместо того, чтобы загружать их отдельно.. Кроме того, результаты одной операции часто используются вскоре после этого другой, поэтому, пропуская запись в память и сохраняя результат в регистре, программа не стала намного больше и теоретически могла бы работать намного быстрее. Например, строка инструкций, выполняющих серию математических операций, может потребовать лишь нескольких загрузок из памяти, в то время как большинство используемых чисел будут либо константами в самих инструкциях, либо промежуточными значениями, оставшимися в регистрах после предыдущих вычислений. В некотором смысле, в этом методе некоторые регистры используются для «теневого копирования» ячеек памяти, так что регистры используются в качестве заместителей для ячеек памяти до их окончательных значений после определения группы инструкций.

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

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

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

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

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

RISC I

Первая попытка реализовать концепцию RISC изначально была известна как Gold . Работа над дизайном началась в 1980 году как часть курса проектирования СБИС, но тогда сложный дизайн разрушил почти все существующие инструменты проектирования. Команде пришлось потратить значительное количество времени на улучшение или переписывание инструментов, и даже с этими новыми инструментами потребовалось чуть меньше часа, чтобы извлечь дизайн на VAX-11/780.

Окончательный дизайн, известный как RISC I, был опубликован в ACM ISCA в 1981 году. В нем было 44 500 транзисторов, реализующих 31 инструкцию, и регистровый файл, содержащий 78 32-битных регистров. Это позволило иметь шесть регистровых окон, содержащих 14 регистров. Из этих 14 регистров 4 были перекрыты из предыдущего окна. Итого получается: 10 * 6 регистров в окнах + 18 глобальных переменных = всего 78 регистров. Секция управления и декодирования инструкций занимала только 6% кристалла, тогда как в типичном дизайне той эпохи на эту же роль использовалось около 50%. Регистровый файл занимал большую часть этого места.

RISC I также имел двухступенчатый конвейер команд для увеличения скорости, но без сложного переупорядочения команд, как в более современных разработках. Это создает проблему с условными переходами, потому что компилятор должен заполнить инструкцию, следующую за условным переходом (так называемый «слот задержки перехода »), чем-то, выбранным как «безопасный» (т. Е. Не зависимым по исходу условный). Иногда единственная подходящая инструкция в этом случае - NOP . Заметное количество более поздних проектов в стиле RISC все еще требует учета задержки перехода.

После месяца проверки и отладки 22 июня 1981 года проект был отправлен в инновационную службу MOSIS для производства с использованием процесса 2 мкм (2000 нм). Разнообразные задержки вынудили их четыре раза отказаться от масок, и пластины с работающими образцами не были доставлены обратно в Беркли до мая 1982 года. Первый рабочий «компьютер» RISC I (фактически контрольная плата) заработал 11 июня., чипы показали меньшую производительность, чем ожидалось. Как правило, выполнение инструкции занимает 2 мкс, в то время как в исходной конструкции отводилось около 0,4 мкс (в пять раз быстрее). Точные причины этой проблемы так и не были полностью объяснены. Однако в ходе тестирования было ясно, что некоторые инструкции выполняются с ожидаемой скоростью, что свидетельствует о физической, а не логической проблеме.

Если бы дизайн работал на полной скорости, производительность была бы превосходной. Моделирование с использованием различных небольших программ сравнивало RISC I 4 МГц с 5 МГц 32-битным VAX 11/780 и 5 МГц 16-битным Zilog Z8000 ясно показал это. Размер программы был примерно на 30% больше, чем у VAX, но очень близок к размеру Z8000, подтверждая аргумент о том, что более высокая плотность кода в проектах CISC на самом деле не так уж впечатляет. Что касается общей производительности, RISC I был вдвое быстрее VAX и примерно в четыре раза быстрее Z8000. В итоге программы выполняли примерно такой же общий объем доступа к памяти, потому что большой регистровый файл значительно увеличивал вероятность того, что необходимый операнд уже был на кристалле.

Важно поместить это выступление в контекст. Несмотря на то, что дизайн RISC работал медленнее, чем VAX, это не повлияло на важность дизайна. RISC позволил создать настоящий 32-битный процессор на реальном кристалле чипа, используя то, что уже было старой фабрикой. Традиционные конструкции просто не могли этого сделать; с такой большой площадью поверхности микросхемы, предназначенной для логики декодера, настоящая 32-разрядная конструкция, такая как Motorola 68020, требовала более новых фабрик, прежде чем стала практичной. Используя те же фабрики, RISC I мог бы значительно превзойти конкурентов.

12 февраля 2015 года IEEE установил мемориальную доску в Калифорнийском университете в Беркли в ознаменование вклада RISC-I. На табличке написано:

  • Студенты Калифорнийского университета в Беркли спроектировали и построили первый компьютер с сокращенным набором команд СБИС в 1981 году. Упрощенные инструкции RISC-I уменьшили количество оборудования для декодирования и управления инструкциями, что позволило получить плоское 32-битное адресное пространство, большой набор регистров и конвейерное исполнение. RISC-I хорошо сочетается с программами на языке C и операционной системой Unix и повлиял на широко используемые сегодня наборы инструкций, в том числе для игровых консолей, смартфонов и планшетов.
RISC II

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

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

Благодаря новому дизайну была огромная экономия. В то время как Gold содержал всего 78 регистров в 6 окнах, Blue содержал 138 регистров, разбитых на 8 окон по 16 регистров в каждом, с еще 10 глобальными объектами. Такое расширение файла регистров увеличивает вероятность того, что данная процедура может уместить все свое локальное хранилище в регистры, а также увеличивает глубину вложенности. Тем не менее, для большего размера регистрового файла требовалось меньше транзисторов, и окончательный вариант Blue, получивший название RISC II, реализовал весь набор команд RISC всего с 39000 транзисторов.

Другим важным изменением было включение «расширителя формата инструкций», который незаметно «преобразует» 16-битные инструкции в 32-битный формат. Это позволяло хранить в памяти более мелкие инструкции, обычно с одним операндом или без него, такие как NOP, в меньшем 16-битном формате, а две такие инструкции упаковывать в одно машинное слово. Инструкции будут незаметно расширены до 32-битных версий, прежде чем они достигнут ALU, что означает, что никаких изменений в основной логике не требуется. Этот простой метод привел к удивительному увеличению плотности кода на 30%, в результате чего идентичная программа на Blue работала быстрее, чем на Gold, из-за меньшего количества обращений к памяти.

RISC II оказался намного более успешным в кремнии и при тестировании превзошел почти все миникомпьютеры почти по всем задачам. Например, производительность варьировалась от 85% скорости VAX до 256% при различных нагрузках. RISC II также уступил место знаменитому Motorola 68000, который тогда считался лучшей коммерческой реализацией чипа, и превзошел его по производительности на 140–420%.

Дальнейшие разработки

Работа над оригинальными проектами RISC завершилась RISC II, но сама концепция продолжалась в Беркли. Базовое ядро ​​было повторно использовано в SOAR в 1984 году, в основном RISC преобразован для выполнения Smalltalk (таким же образом, как можно было бы заявить, что RISC запускает C), а позже в аналогичный VLSI-BAM, который запускал PROLOG вместо Smalltalk. Еще одним усилием был SPUR, представлявший собой полный набор микросхем, необходимых для создания полноценной 32-разрядной рабочей станции..

RISC менее известен, но более влиятелен, поскольку является основой коммерческого Процессор SPARC от Sun Microsystems. Именно SPARC первым ясно продемонстрировал мощь концепции RISC; когда они поставили первые Sun-4, они превзошли все на рынке. Это привело к тому, что практически каждый поставщик Unix спешил создать собственную RISC-архитектуру, что привело к созданию таких проектов, как DEC Alpha и PA-RISC, тогда как SGI приобрела MIPS Computer Systems. К 1986 году большинство крупных производителей микросхем последовали за ними, работая над такими проектами, как Motorola 88000, Fairchild Clipper, AMD 29000 и PowerPC. 13 февраля 2015 года IEEE установил мемориальную доску в корпорации Oracle в Санта-Кларе. Он гласит:

  • Sun Microsystems представила SPARC (Scalable Processor Architecture) RISC (Reduced Instruction-Set Computing) в 1987 году. Основываясь на разработках компиляторов и операционных систем UC Berkeley RISC и Sun, архитектура SPARC была легко адаптирована к развивающимся полупроводникам, программному обеспечению и системные технологии и потребности пользователей. Эта архитектура обеспечивала высочайшую производительность, масштабируемость рабочих станций и серверов для инженерных, бизнес-приложений, Интернета и облачных вычислений.

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

См. Также
Примечания
Ссылки
Последняя правка сделана 2021-05-12 12:59:55
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте