ИБМ 801
801 (ЦП) , — экспериментальный центральный процессор разработанный IBM в 1970-х годах. Это считается первой современной RISC- схемой, основанной на регистрах процессора для всех вычислений и исключающей множество вариантов режимов адресации, присутствующих в конструкциях CISC . Первоначально разработанный как процессор для телефонного коммутатора , позже он был использован в качестве основы для мини-компьютера и ряда продуктов для линейки мейнфреймов . Первоначальная конструкция представляла собой 24-битный процессор; вскоре он был заменен 32-битными реализациями тех же концепций, а оригинальный 24-битный 801 использовался только в начале 1980-х годов.
Модель 801 имела огромное влияние на компьютерном рынке. [ нужна ссылка ] Вооружившись огромными объемами данных о производительности, IBM смогла продемонстрировать, что простая конструкция способна легко превзойти по производительности даже самые мощные классические конструкции ЦП, в то же время создавая машинный код , который лишь незначительно больше, чем сильно оптимизированные инструкции CISC. Применение этих же методов даже к существующим процессорам, таким как System/370, обычно приводило к удвоению производительности этих систем. Это продемонстрировало ценность концепции RISC, и все будущие системы IBM были основаны на принципах, разработанных в ходе проекта 801.
За свою работу над 801 Джон Кок был отмечен несколькими наградами и медалями, в том числе Премией Тьюринга в 1987 году, Национальной медалью технологий в 1991 году и Национальной медалью науки в 1994 году.
История [ править ]
Оригинальная концепция [ править ]
В 1974 году IBM начала изучать возможность создания телефонного коммутатора, способного обрабатывать один миллион вызовов в час, или около 300 вызовов в секунду. Они подсчитали, что для выполнения каждого вызова потребуется 20 000 инструкций, а с учетом временных затрат и других соображений такой машине требовалась производительность около 12 MIPS. [1] Это потребует значительного улучшения производительности; их нынешняя лучшая машина, IBM System/370 Model 168, выпущенная в конце 1972 года, предлагала около 3 MIPS. [2]
Группа, работающая над этим проектом в Исследовательском центре Томаса Дж. Уотсона , в том числе Джон Кок , разработала для этой цели процессор. Чтобы достичь требуемой производительности, они рассмотрели виды операций, которые требуются такой машине, и удалили все неподходящие. к удалению модуля с плавающей запятой Это привело , например, , который не понадобился бы в этом приложении. Что еще более важно, они также удалили многие инструкции, которые работали с данными в основной памяти , и оставили только те инструкции, которые работали с внутренними регистрами процессора , поскольку их было гораздо быстрее использовать, а простой код в телефонном коммутаторе можно было написать для использования. только такие инструкции. Результатом этой работы стал концептуальный проект упрощенного процессора с необходимой производительностью. [1]
Проект телефонного коммутатора был отменен в 1975 году, но команда добилась значительного прогресса в этой концепции, и в октябре IBM решила продолжить его как проект общего назначения. Не имея очевидного проекта, к которому можно было бы прикрепить его, команда решила назвать его «801» в честь здания, в котором они работали. В качестве универсальной роли команда начала рассматривать реальные программы, которые можно было бы запускать на типичном миникомпьютере. . IBM собрала огромные объемы статистических данных о производительности реальных рабочих нагрузок на своих машинах, и эти данные показали, что более половины времени типичной программы тратится на выполнение всего пяти инструкций: загрузка значения из памяти, сохранение значения в памяти, переход , сравнивать числа с фиксированной точкой и складывать числа с фиксированной точкой. Это предполагало, что одна и та же упрощенная конструкция процессора будет работать как для мини-компьютера общего назначения, так и для коммутатора специального назначения. [3]
микрокода использования Обоснование против
Этот вывод противоречил современной конструкции процессоров, основанной на концепции использования микрокода . IBM была одной из первых, кто широко использовал эту технику в своей серии System/360 . Модели 360 и 370 имели разные уровни производительности, и все они выполняли один и тот же код машинного языка . На высокопроизводительных машинах многие из этих инструкций были реализованы непосредственно в аппаратном обеспечении, например, в устройствах с плавающей запятой, в то время как младшие машины вместо этого могли имитировать эти инструкции, используя последовательность других инструкций, закодированных в микрокоде. Это позволило использовать единый двоичный интерфейс приложения во всей линейке и позволило клиентам быть уверенными в том, что, если когда-либо потребуется повышение производительности, они смогут перейти на более быструю машину без каких-либо других изменений. [4]
Микрокод позволял простому процессору предлагать множество инструкций, которые использовались разработчиками для реализации широкого спектра режимов адресации . Например, инструкция типа ADD
могло иметь дюжину версий: одна добавляет два числа во внутренние регистры, другая добавляет регистр к значению в памяти, третья добавляет два значения из памяти и т. д. Это позволяло программисту выбирать именно тот вариант, который ему нужен для любого конкретная задача. Процессор читал эту инструкцию и использовал микрокод, чтобы разбить ее на серию внутренних инструкций. Например, сложение двух чисел в памяти можно реализовать путем загрузки этих двух чисел в регистры, их сложения и последующего сохранения суммы обратно в память. [3] Идея предложить все возможные режимы адресации для всех инструкций стала целью разработчиков процессоров, и эта концепция стала известна как ортогональный набор команд .
Команда 801 заметила побочный эффект этой концепции; Столкнувшись с множеством возможных версий данной инструкции, авторы компиляторов почти всегда выбирали одну версию. Почти всегда это было реализовано аппаратно на младших машинах. Это гарантировало, что машинный код, сгенерированный компилятором, будет работать как можно быстрее во всей линейке. Хотя использование других версий инструкций могло бы работать еще быстрее на машине, которая реализовала их аппаратно, сложность выбора из постоянно меняющегося списка машин делала это крайне непривлекательным, и авторы компиляторов по большей части игнорировали эти возможности. [3]
В результате большинство инструкций, доступных в наборе команд, никогда не использовались в скомпилированных программах. И именно здесь команда осуществила ключевую реализацию проекта 801:
Навязывание микрокода между компьютером и его пользователями приводит к дорогостоящим накладным расходам при выполнении наиболее часто выполняемых инструкций. [3]
Микрокоду требуется ненулевое время для проверки инструкции перед ее выполнением. Тот же базовый процессор с удаленным микрокодом устранит эти накладные расходы и быстрее выполнит эти инструкции. Поскольку микрокод, по сути, запускал небольшие подпрограммы, предназначенные для конкретной аппаратной реализации, он в конечном итоге выполнял ту же основную задачу, что и компилятор, реализуя инструкции более высокого уровня в виде последовательности машинно-специфичных инструкций. Простое удаление микрокода и реализация его в компиляторе может привести к более быстрой работе машины. [3]
Одна из проблем заключалась в том, что программы, написанные для такой машины, будут занимать больше памяти; некоторые задачи, которые можно было бы выполнить с помощью одной инструкции на 370, должны быть выражены в виде нескольких инструкций на 801. Например, для сложения двух чисел из памяти потребуются две инструкции загрузки в регистр, а сложение из регистра в регистр. , а затем сохранение в память. Это потенциально могло бы замедлить работу системы в целом, если бы ей приходилось тратить больше времени на чтение инструкций из памяти, чем раньше требовалось для их декодирования. Продолжая работу над дизайном и совершенствуя свои компиляторы, они обнаружили, что общая длина программы продолжала падать и в конечном итоге стала примерно такой же, как у программ, написанных для 370. [5]
Первые реализации [ править ]
Первоначально предложенная архитектура представляла собой машину с шестнадцатью 24-битными регистрами и без виртуальной памяти . [6] [7] В инструкциях использовался формат двух операндов, поэтому инструкции обычно имели вид A = A + B
, в отличие от формата с тремя операндами, A = B + C
. Полученный процессор был введен в эксплуатацию к лету 1980 года и был реализован с использованием технологии дискретных компонентов Motorola MECL-10K. [8] на больших платах, обмотанных проволокой. Процессор работал с тактовой частотой 66 нс (приблизительно 15,15 МГц) и мог выполнять вычисления на высокой скорости примерно 15 MIPS .
Архитектура 801 использовалась во множестве устройств IBM, включая контроллеры каналов для их мэйнфреймов S/370 (таких как IBM 3090 ), [9] : 377 различные сетевые устройства, а также в качестве устройства вертикального выполнения микрокода в процессорах 9373 и 9375 семейства мэйнфреймов IBM 9370 . [10] [11] Исходная версия архитектуры 801 легла в основу архитектуры IBM ROMP. микропроцессора [9] : 378 используется в IBM RT PC рабочей станции и нескольких экспериментальных компьютерах от IBM Research . Производная от архитектуры 801 с 32-битной адресацией под названием Iliad была предназначена для использования в качестве основного процессора в неудачном проекте системы среднего уровня в Форт-Ноксе . [12]
Поздние модификации [ править ]
Изначально проектировавшийся для системы с ограниченными функциями, в конструкции 801 отсутствовал ряд функций, присущих более крупным машинам. Примечательным среди них было отсутствие аппаратной поддержки виртуальной памяти , которая не требовалась для роли контроллера и была реализована в программном обеспечении на ранних системах 801, которые в ней нуждались. Для более широкого использования аппаратная поддержка была обязательной функцией. Кроме того, к 1980-м годам компьютерный мир в целом переходил к 32-битным системам, и появилось желание сделать то же самое с 801. [13]
Переход на 32-битный формат имел еще одно существенное преимущество. На практике выяснилось, что формат с двумя операндами сложно использовать в типичном математическом коде. В идеале оба входных операнда должны оставаться в регистрах, где их можно будет повторно использовать в последующих операциях. В формате с двумя операндами одно из двух значений перезаписывалось результатом, и часто случалось, что одно из значений приходилось повторно загружать из памяти. При переходе на 32-битный формат дополнительные биты в командных словах позволили указать дополнительный регистр, так что выходные данные таких операций можно было направить в отдельный регистр. Увеличенное командное слово также позволило увеличить количество регистров с шестнадцати до тридцати двух, изменение, которое было очевидно при изучении кода 801. Несмотря на расширение командных слов с 24 до 32 бит, программы не выросли на соответствующие 33% из-за исключенных загрузок и сохранений за счет этих двух изменений. [13]
Другие желательные дополнения включают инструкции для работы со строковыми данными, которые были закодированы в «упакованном» формате с несколькими символами в одном слове памяти, а также дополнения для работы с двоично-десятичными числами , включая сумматор, который может переносить четырехбитные десятичные числа. [13]
Когда новая версия 801 была запущена в качестве симулятора на 370, команда с удивлением обнаружила, что код, скомпилированный для 801 и запущенный в симуляторе, часто работал быстрее, чем тот же исходный код, скомпилированный непосредственно в машинный код 370 с использованием 370-х . PL/I Компилятор [14] Когда они перенесли свой экспериментальный язык «PL.8» обратно на 370 и скомпилировали с его помощью приложения, эти приложения работали в три раза быстрее, чем версии PL/I. Это произошло из-за того, что компилятор принял RISC-подобные решения о том, как сгенерированный код использует регистры процессора, тем самым оптимизируя как можно больше обращений к памяти. Они были такими же дорогими для 370, как и для 801, но эта стоимость обычно была скрыта за простотой одной строки кода CISC. Компилятор PL.8 гораздо более агрессивно избегал загрузки и сохранения, что привело к более высокой производительности даже на процессоре CISC. [14]
, «Пантера» и « Америка » Проекты «Гепард »
В начале 1980-х годов уроки, извлеченные из 801, были объединены с уроками проекта IBM Advanced Computer Systems , в результате чего был создан экспериментальный процессор под названием Cheetah. Cheetah был двухпроцессорным суперскалярным процессором , который в 1985 году превратился в процессор под названием «Panther» и, наконец, в 4-процессорный суперскалярный процессор под названием «America» в 1986 году. [15] Это был набор процессоров из трех микросхем, включающий процессор инструкций, который извлекает и декодирует инструкции, процессор с фиксированной запятой, который выполняет обязанности совместно с процессором инструкций, и процессор с плавающей запятой для тех систем, которые в этом нуждаются. Окончательный проект, разработанный командой 801, был отправлен в офис IBM в Остине в 1986 году, где он был преобразован в систему IBM RS/6000 . RS/6000, работавший на частоте 25 МГц, был одной из самых быстрых машин своего времени. В обычных тестах он превосходил другие машины RISC в два-три раза и легко превосходил старые системы CISC. [10]
После RS/6000 компания обратила свое внимание на версию концепта 801, которую можно было эффективно производить в различных масштабах. Результатом стала архитектура набора команд IBM POWER и ответвление PowerPC .
Признание [ править ]
За работу над 801 Джон Кок был награжден несколькими наградами и медалями:
- 1985: Премия Эккерта-Мокли [16]
- 1987: Премия Тьюринга [17]
- 1989: Премия пионера компьютеров [18]
- 1991: Национальная медаль технологий. [19]
- 1994: Медаль Джона фон Неймана IEEE [20]
- 1994: Национальная медаль науки. [19]
- 2000: Медаль Бенджамина Франклина (Институт Франклина) [21]
Майкл Дж. Флинн рассматривает 801 как первый RISC. [22]
Ссылки [ править ]
Цитаты [ править ]
- ^ Jump up to: Перейти обратно: а б Кок и Маркштейн 1990 , с. 4.
- ^ Савард, Джон. «На 370/165 и 360/85» .
- ^ Jump up to: Перейти обратно: а б с д и Кок и Маркштейн 1990 , с. 5.
- ^ Зак, Харальд (7 апреля 2016 г.). «IBM System/360 и использование микрокода» . СайХаб .
- ^ Кок и Маркштейн 1990 , стр. 6–7.
- ^ «Миникомпьютер 801 — обзор» (PDF) . 8 октября 1976 г. с. 9.
- ^ «Принципы работы системы 801» (PDF) . 16 января 1976 года.
- ^ Радин 1982 .
- ^ Jump up to: Перейти обратно: а б Дьюар, Роберт Б.К.; Смосна, Мэтью (1990). Микропроцессоры: взгляд программиста . МакГроу-Хилл.
- ^ Jump up to: Перейти обратно: а б Кок и Маркштейн 1990 , с. 9.
- ^ Митчелл, Джеймс (сентябрь 1988 г.). «Реализация архитектуры мэйнфрейма в процессоре 9370». Информационный бюллетень ACM SIGMICRO . 19 (3): 3–10. дои : 10.1145/62185.62186 . ISSN 1050-916X . S2CID 14602753 .
- ^ Фрэнк Г. Солтис (1997). Внутри AS/400, второе издание . Дьюк Пресс. ISBN 978-1882419661 .
- ^ Jump up to: Перейти обратно: а б с Кок и Маркштейн 1990 , с. 7.
- ^ Jump up to: Перейти обратно: а б Кок и Маркштейн 1990 , с. 8.
- ^ Смотерман, Марк (2005). «Обзор суперскалярных процессоров». Проектирование современных процессоров: основы суперскалярных процессоров . Шен, Джон Пол; Липасти, Микко Х. МакГроу-Хилл.
- ^ «Джон Кок» . Награды.acm.org . Проверено 29 августа 2022 г.
- ^ «Джон Кок — лауреат премии А. М. Тьюринга» . amturing.acm.org . Проверено 29 августа 2022 г.
- ^ «Женщины компьютерного общества IEEE на премии ENIAC Computer Pioneer» . 9 апреля 2018 года . Проверено 29 августа 2022 г.
- ^ Jump up to: Перейти обратно: а б «НСТМФ» . НСТМФ . Проверено 12 мая 2020 г.
- ^ «Получатели медали Джона фон Неймана IEEE» (PDF) . Институт инженеров по электротехнике и электронике (IEEE) .
- ^ «Джон Кок» . Институт Франклина . 10 января 2014 г. Проверено 29 августа 2022 г.
- ^ Флинн, Майкл Дж. (1995). Архитектура компьютера: конвейерное и параллельное проектирование процессоров . стр. 54–56. ISBN 0867202041 .
Библиография [ править ]
- Кок, Джон; Маркштейн, Виктория (январь 1990 г.). «Эволюция технологии RISC в IBM» (PDF) . Журнал исследований и разработок IBM . 34 (1): 4–11. дои : 10.1147/rd.341.0004 .
- Кок, Джон (март 1988 г.). «В поисках производительности научных процессоров» . Коммуникации АКМ . 31 (3): 252. дои : 10.1145/1283920.1283945 . ISBN 978-1-4503-1049-9 .
- Радин, Г. (1982). Миникомпьютер 801 . АСПЛОС -И. Материалы первого международного симпозиума по архитектурному обеспечению языков программирования и операционных систем . стр. 39–47. дои : 10.1145/800050.801824 . ISBN 0-89791-066-4 .
Дальнейшее чтение [ править ]
- «Изменение компьютерной архитектуры — способ повысить производительность, — полагают исследователи IBM». Электроника . Том. 49, нет. 25. 23 декабря 1976. стр. 0–31.
- Маклеллан, В. (октябрь 1979 г.). «IBM Mini: радикальный уход». Датаматизация . Том. 25, нет. 11. С. 53–55.
- Дьюар, Роберт Б.К.; Смосна, Мэтью (1990). Микропроцессоры: взгляд программиста . МакГроу-Хилл. стр. 258–264.
- Табак, Дэниел (1987). РИСЦ Архитектура . Пресса научных исследований. стр. 69–72.