stringtranslate.com

Беркли RISC

Berkeley RISC — один из двух плодотворных исследовательских проектов по разработке микропроцессоров на базе компьютеров с сокращенным набором команд (RISC), реализуемых в рамках проекта VLSI Агентства перспективных исследовательских проектов Министерства обороны . 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% констант равны 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-программу «менее плотной».

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

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

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

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

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

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

РИСК I

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

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

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

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

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

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

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

РИСЦ II

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

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

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

Другим важным изменением было включение расширителя формата инструкций , который незаметно «преобразовывал» 16-битные инструкции в 32-битный формат. [ нужна цитация ] Это позволило хранить инструкции меньшего размера, обычно с одним операндом или без него, например NOP, в меньшем 16-битном формате, а также упаковывать две такие инструкции в одно машинное слово. Инструкции будут незаметно расширяться обратно до 32-битных версий до того, как они достигнут арифметико-логического устройства (АЛУ), а это означает, что никаких изменений в базовой логике не потребуется. Этот простой метод позволил удивительно повысить плотность кода на 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 в Санта-Кларе. [7] Там написано

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

Смотрите также

Рекомендации

Цитаты

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

Библиография