Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Концепция RISC [ править ]

И RISC, и MIPS были разработаны с осознанием того, что подавляющее большинство программ не используют подавляющее большинство инструкций процессора. В знаменитой статье 1978 года Эндрю С. Таненбаум продемонстрировал, что сложная высокоуровневая программа из 10 000 строк может быть представлена ​​с использованием упрощенной архитектуры набора команд с использованием 8-битного кода операции фиксированной длины. [3] Примерно к такому же выводу пришли в IBM , чьи исследования собственного кода, работающего на мэйнфреймах, таких как IBM 360использовала лишь небольшую часть всех доступных инструкций. Оба этих исследования показали, что можно создать гораздо более простой процессор, который по-прежнему будет выполнять большую часть реального кода. Еще одним лакомым кусочком, не полностью изученным в то время, было замечание Таненбаума о том, что 81,4 процента констант равны 0, 1 или 2. [3]

Эти реализации происходили по мере того, как рынок микропроцессоров переходил с 8 на 16-битные, и вскоре должны были появиться 32-битные конструкции. Эти процессоры были разработаны с целью воспроизвести некоторые из наиболее уважаемых ISA из мира мэйнфреймов и миникомпьютеров. Например, National Semiconductor NS32000 начинался как попытка создать однокристальную реализацию VAX-11 , которая имела богатый набор команд с большим разнообразием режимов адресации . Motorola 68000 был похож на генплане. Чтобы обеспечить этот богатый набор инструкций, процессоры использовали микрокод.для декодирования видимой пользователю инструкции в серию внутренних операций. Это , возможно , микрокод представлен 1 / 4 до 1 / 3 из транзисторов общего дизайна.

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

Для этого 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 , был опубликован на Международном симпозиуме по компьютерной архитектуре (ISCA) Ассоциации вычислительной техники (ACM) в 1981 году. В нем было 44 500 транзисторов, реализующих 31 инструкцию, и регистровый файл, содержащий 78 32-битных регистров. Это позволило создать шесть регистровых окон, содержащих 14 регистров. Из этих 14 регистров 4 были перекрыты из предыдущего окна. Итого получается: 10 * 6 регистров в окнах + 18 глобальных переменных = всего 78 регистров. Секция управления и декодирования команд занимала только 6% кристалла, тогда как в типичном дизайне той эпохи на ту же роль использовалось около 50%. Регистровый файл занимал большую часть этого места. [4]

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

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

Если бы конструкция работала на полной скорости, производительность была бы превосходной. Моделирование с использованием множества небольших программ по сравнению 4 МГц RISC I с 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. [5] Табличка гласит:

  • Студенты Калифорнийского университета в Беркли спроектировали и построили первый компьютер с сокращенным набором команд СБИС в 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 всего с 39 000 транзисторов.

Другим важным изменением было включение расширителя формата инструкций , который незаметно «преобразует» 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 , в то время как Silicon Graphics (SGI) приобрела MIPS Computer Systems . К 1986 году большинство крупных производителей микросхем последовали за ними, работая над такими проектами , как Motorola 88000 , Fairchild Clipper ,AMD 29000 и PowerPC . 13 февраля 2015 года IEEE установил мемориальную доску в корпорации Oracle в Санта-Кларе. [6] Читается

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

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

См. Также [ править ]

  • RISC-V
  • Питание ISA

Ссылки [ править ]

Цитаты [ править ]

  1. ^ Рейли, Эдвин Д. (2003). Основные этапы развития компьютерных наук и информационных технологий . п. 50 . ISBN 1573565210.
  2. ^ Чиснал, Дэвид (2010-08-23). «Понимание архитектуры ARM» . Информит . Проверено 13 октября 2015 года .
  3. ^ a b Таненбаум, Эндрю (март 1978 г.). «Влияние структурного программирования на архитектуру машин» . Коммуникации ACM . 21 (3): 237–246. DOI : 10.1145 / 359361.359454 . S2CID 3261560 . 
  4. ^ Peek, Джеймс Б. (1983-06-02). "Схема СБИС RISC I" (PDF) . Калифорнийский университет в Беркли Беркли, Калифорния, США. С. 13, 59.
  5. ^ "памятные вещи [воссоединение RISC-I]" . risc.berkeley.edu . Проверено 19 марта 2020 .
  6. Джи, Кельвин. «Oracle получит награду IEEE Milestone Award за архитектуру SPARC RISC» . blogs.oracle.com . Проверено 19 марта 2020 .

Библиография [ править ]

  • Паттерсон, Дэвид ; Дицель, Дэвид (1980). "Случай для компьютера с сокращенным набором команд" (PDF) . Новости компьютерной архитектуры ACM SIGARCH . 8 (6): 25–33. CiteSeerX  10.1.1.68.9623 . DOI : 10.1145 / 641914.641917 . S2CID  12034303 .
  • «Дизайн и реализация RISC I» - оригинальная статья в журнале CH Sequin и DA Patterson
  • Беркли RISC II
  • Табак, Даниэль (1987). Архитектура RISC . Research Studies Press. С. 19–48.