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]
Группа, работающая над этим проектом в Исследовательском центре Томаса Дж. Ватсона , включая Джона Кока , разработала процессор для этой цели. Чтобы достичь требуемой производительности, они рассмотрели, какие операции требуются такой машине, и удалили все, что не подходило. Это привело, например, к удалению модуля с плавающей запятой , который не понадобился бы в этом приложении. Что еще более важно, они также удалили многие инструкции, которые работали с данными в основной памяти, и оставили только те инструкции, которые работали с регистрами внутреннего процессора , поскольку они были намного быстрее в использовании (фактически с нулевым временем) и простой код в телефоне. switch можно написать для использования только этих типов инструкций. Результатом этой работы стал концептуальный проект упрощенного процессора с требуемой производительностью. [1]
Проект телефонного коммутатора был отменен в 1975 году, но команда добилась значительного прогресса в реализации концепции, и в октябре IBM решила продолжить его как проект общего назначения. Не имея очевидного проекта, к которому можно было бы прикрепить его, команда решила назвать его «801» в честь здания, в котором они работали. Для роли общего назначения команда начала рассматривать реальные программы, которые будут выполняться на типичном мини-компьютере . IBM собрала огромное количество статистических данных о производительности реальных рабочих нагрузок на своих машинах, и эти данные продемонстрировали, что более половины времени в типичной программе тратится на выполнение только пяти инструкций; загружать значение из памяти, сохранять значение в памяти, переходить, сравнивать числа с фиксированной точкой и складывать числа с фиксированной точкой. Это предполагало, что такая же упрощенная конструкция будет работать как для миникомпьютера общего назначения, так и для переключателя специального назначения. [3]
Этот вывод противоречил современной конструкции процессоров, основанной на концепции использования микрокода . IBM была одной из первых, кто широко использовал эту технику в своей знаменитой серии System / 360 . Модели 360 и 370 имели разные уровни производительности, и все они выполняли один и тот же код машинного языка. На высокопроизводительных машинах многие из этих инструкций были реализованы непосредственно аппаратно, тогда как низкопроизводительные машины могли вместо этого имитировать эти инструкции, используя последовательность других инструкций. Это позволяло единому двоичному интерфейсу приложения работать по всей линии и позволяло пользователям быть уверенными в том, что, если когда-либо потребуется большая производительность, они смогут перейти на более быструю машину без каких-либо других изменений. [4]
Микрокод позволял простому процессору предлагать множество инструкций, которые использовались разработчиками для реализации широкого диапазона режимов адресации . Например, такая инструкция ADD
может иметь дюжину версий: одна добавляет два числа во внутренние регистры, одна добавляет регистр к значению в памяти, третья добавляет два значения из памяти и т. Д. Это позволяло программисту выбрать точное вариации, необходимые для решения конкретной задачи. Процессор прочитает эту инструкцию и использует микрокод, чтобы разбить ее на серию внутренних инструкций. Например, добавление двух чисел в память можно реализовать, загрузив эти два числа в регистры, сложив их, а затем снова сохранив. [3]
Команда заметила побочный эффект этой концепции; Столкнувшись с множеством возможных версий данной инструкции, авторы компилятора почти всегда выбирали единственную версию. Это почти всегда было реализовано аппаратно на младших машинах. Это гарантировало, что машинный код, сгенерированный компилятором, будет работать как можно быстрее во всей линейке. Хотя использование других версий инструкций могло работать даже быстрее на машине, которая реализовала другие версии инструкции на аппаратном уровне, сложность понимания того, какую из них выбрать в постоянно меняющемся списке машин, делала это крайне непривлекательным, и авторы компиляторов в значительной степени игнорировали эти возможности. [3]
В результате большинство инструкций, доступных в наборе инструкций, никогда не использовались в скомпилированных программах. И именно здесь команда осуществила ключевую реализацию проекта 801:
Установление микрокода между компьютером и его пользователями накладывает дорогостоящие накладные расходы на выполнение наиболее часто выполняемых инструкций. [3]
Микрокоду требуется ненулевое время для проверки инструкции перед ее выполнением. Тот же базовый процессор с удаленным микрокодом устранит эти накладные расходы и быстрее выполнит эти инструкции. А поскольку микрокод, по сути, запускал небольшие подпрограммы, предназначенные для конкретной аппаратной реализации, он в конечном итоге выполнял ту же базовую задачу, что и компилятор, реализуя инструкции более высокого уровня как последовательность машинно-зависимых инструкций. Простое удаление микрокода и его реализация в компиляторе может привести к более быстрой машине. [3]
Одна проблема заключалась в том, что программы, написанные для такой машины, занимали бы больше памяти; некоторые задачи, которые могут быть выполнены с помощью одной инструкции на 370, должны быть выражены как несколько инструкций на 801. Например, добавление двух чисел из памяти потребует двух инструкций загрузки в регистр, добавления регистра в регистр , а затем сохранение в памяти. Это могло потенциально замедлить работу системы в целом, если бы ей приходилось тратить больше времени на чтение инструкций из памяти, чем раньше на их декодирование. По мере того, как они продолжали работу над дизайном и улучшали свои компиляторы, они обнаружили, что общая длина программы продолжала сокращаться, в конечном итоге становясь примерно такой же, как у написанных для 370. [5]
Первоначально предложенная архитектура представляла собой машину с шестнадцатью 24-битными регистрами и без виртуальной памяти . [6] [7] Он использовал формат с двумя операндами в инструкции, так что инструкции обычно имели форму A = A + B
. Получившийся в результате ЦП был введен в эксплуатацию к лету 1980 г. и был реализован с использованием технологии дискретных компонентов Motorola MECL-10K [8] на больших заказных платах с проволочной оболочкой . ЦП работал с тактовой частотой 66 нс (примерно 15,15 МГц) и мог выполнять вычисления с высокой скоростью примерно 15 MIPS .
Архитектура 801 использовалась во множестве устройств IBM, включая контроллеры каналов для их мэйнфреймов S / 370 (например, IBM 3090 ), [9] : 377 различных сетевых устройств и, в конечном итоге, самого ядра мэйнфрейма IBM 9370 . [10] Первоначальная версия архитектуры 801 была основой для архитектуры микропроцессора IBM ROMP [9] : 378 использовались в компьютере рабочей станции IBM RT PC и нескольких экспериментальных компьютерах от IBM Research .
Более поздние модификации
Первоначально конструкция 801 была разработана для системы с ограниченными функциями, но в ней отсутствовал ряд функций, характерных для более крупных машин. Среди них следует отметить отсутствие аппаратной поддержки виртуальной памяти , которая не была нужна для роли контроллера и была реализована в программном обеспечении в системах начала 801 года, которые в ней нуждались. Для более широкого использования поддержка оборудования была обязательной функцией. Вдобавок к 1980-м годам компьютерный мир в целом двигался в сторону 32-битных систем, и было желание сделать то же самое с 801. [11]
Переход на 32-битный формат имел еще одно существенное преимущество. На практике было обнаружено, что формат с двумя операндами трудно использовать в типичном математическом коде. В идеале оба входных операнда должны оставаться в регистрах, где их можно было бы повторно использовать в последующих операциях, но поскольку выходные данные операции перезаписывали один из них, часто приходилось перезагружать одно из значений из памяти. . При переходе к 32-битному формату дополнительные биты в командных словах позволяли указывать дополнительный регистр, так что вывод таких операций мог быть направлен в отдельный регистр. Более крупное командное слово также позволило увеличить количество регистров с шестнадцати до тридцати двух, изменение, которое явно было предложено при изучении кода 801. Несмотря на расширение командных слов с 24 до 32 разрядов, программы не выросли на соответствующие 33% из-за избежания загрузок и сохранений из-за этих двух изменений. [11]
Другие желательные дополнения включают инструкции для работы со строковыми данными, которые были закодированы в "упакованном" формате с несколькими символами ASCII в одном слове памяти, и дополнения для работы с двоично- десятичными числами, включая сумматор, который может переносить четырехбитовые десятичные числа. . [11]
Когда новая версия 801 была запущена в качестве симулятора на 370, команда была удивлена, обнаружив, что код, скомпилированный для 801 и запускаемый в симуляторе, часто работал быстрее, чем тот же исходный код, скомпилированный непосредственно на 370 машинный код с использованием Компилятор 370 PL / 1 . [12] Когда они перенесли свой экспериментальный язык «PL.8» обратно на 370 и скомпилировали приложения с его использованием, они также работали быстрее, чем существующий код PL / 1, в три раза быстрее. Это было связано с тем, что компилятор принимал RISC-подобные решения о том, как компилировать код во внутренние регистры, тем самым оптимизируя как можно больше обращений к памяти, что было бы дорого на 801, что привело к гораздо лучшему повторному использованию регистров и, следовательно, к более высокому производительность даже на процессоре CISC. [12]
Америка проект
В начале 1980-х уроки, извлеченные из 801-го, были возвращены в новый «американский» дизайн. Это был набор процессоров с тремя микросхемами, включая процессор инструкций, который выбирает и декодирует инструкции, процессор с фиксированной точкой, который разделяет обязанности с процессором инструкций, и процессор с плавающей запятой для тех систем, которым это необходимо. Разработанный командой 801, окончательный проект был отправлен в офис IBM в Остине, который разработал его в систему IBM RS / 6000 . RS / 6000, работающий на частоте 25 МГц, был одним из самых быстрых компьютеров своего времени. Он превзошел другие RISC-машины в два-три раза в обычных тестах и тривиально превзошел более старые системы CISC. [10]
После RS / 6000 компания обратила внимание на версию концепта 801, которую можно было эффективно производить в различных масштабах. Результатом стала архитектура набора команд IBM POWER и ответвление PowerPC . За свою работу над 801 Джон Кок был награжден премией Тьюринга в 1987 году, Национальной медалью технологий в 1991 году и Национальной медалью науки в 1994 году [13].
Майкл Дж. Флинн рассматривает проект IBM 801 как первую компьютерную систему с сокращенным набором команд (RISC). [14]
Рекомендации
Цитаты
- ^ a b Кок и Маркштейн 1990 , стр. 4.
- ^ Савард, Джон. «На 370/165 и 360/85» .
- ^ a b c d e Cocke & Markstein 1990 , стр. 5.
- ^ Мешок, Харальд (7 апреля 2016 г.). «микрокод в системе 360» . SciHub .
- ^ Кок & Маркштейн 1990 , стр. 6-7.
- ^ «Миникомпьютер 801 - Обзор» (PDF) . 8 октября 1976 г. с. 9.
- ^ «Принципы работы системы 801» (PDF) . 16 января 1976 г.
- Перейти ↑ Radin 1982 .
- ^ а б Дьюар, Роберт Б.К .; Смосна, Мэтью (1990). Микропроцессоры: взгляд программиста . Макгроу-Хилл.
- ^ a b Кок и Маркштейн 1990 , стр. 9.
- ^ a b c Кок и Маркштейн 1990 , стр. 7.
- ^ a b Кок и Маркштейн 1990 , стр. 8.
- ^ «NSTMF» . NSTMF . Проверено 12 мая 2020 .
- ^ Флинн, Майкл Дж. (1995). Архитектура компьютера: конвейерный и параллельный процессор . С. 54–56. ISBN 0867202041.
Библиография
- Кок, Джон; Маркштейн, Виктория (январь 1990 г.). «Эволюция технологии RISC в IBM» (PDF) . Журнал исследований и разработок IBM . 34 (1): 4–11. DOI : 10.1147 / rd.341.0004 .
- Кок, Джон (март 1988). «Поиск производительности в научных процессорах» . Коммуникации ACM . 31 (3): 252. DOI : 10,1145 / 1283920,1283945 . ISBN 978-1-4503-1049-9.
- Радин, Г. (1982). Миникомпьютер 801 . АСПЛОС -I. Материалы первого международного симпозиума по архитектурной поддержке языков программирования и операционных систем . С. 39–47. DOI : 10.1145 / 800050.801824 . ISBN 0-89791-066-4.
дальнейшее чтение
- «Изменение компьютерной архитектуры - способ повысить пропускную способность, - предлагают исследователи IBM». Электроника, т. 49, № 25 (23 декабря 1976 г.), стр. 30–31.
- В. Маклеллан: «IBM Mini - радикальный отход». Datamation V. 25, N 11 (октябрь 1979 г.), стр. 53–55.
- Дьюар, Роберт Б.К .; Смосна, Мэтью (1990). Микропроцессоры: взгляд программиста . Макгроу-Хилл. С. 258–264.
- Табак, Даниэль (1987). Архитектура RISC . Research Studies Press. С. 69–72.
Внешние ссылки
- Миникомпьютер 801 - Обзор
- Принципы работы IBM System 801, версия 2
- 801 Определение подсистемы ввода / вывода
- Архивы IBM: Краткая история RISC, IBM RS / 6000 и IBM eServer pSeries