Экскурсия по Музею Истории Компьютеров в Калифорнии, с пользой для разработки. Часть 1. ENIAC, Stretch, CDC6600, IBM/360

    Господа! Сегодня мы пройдемся с сибирской девушкой Ириной по Музею истории компьютеров в Маунтин-Вью, Калифорния. Причем пройдемся не как туристы, а для принесения пользы России. Я уже писал в предыдущем посте, что один из эффективных способов для студента изучить проектирование процессоров — это взять какой-нибудь древний, но поучительный процессор, найди документацию по его архитектуре (и какую-нибудь информацию по его микроархитектуре), и спроектировать аналог этого процессора на языке описания аппаратуры SystemVerilog (или VHDL, если он вам больше нравится), после чего реализовать процессор на плате ПЛИС / FPGA (какой именно, не важно — Altera / Intel FPGA, Xilinx или Lattice). В качестве учебника для такого упражнения вы можете начать с Харрис & Харрис, после чего продолжить с книгами для более продвинутой стадии обучения, например Шень-Липасти.

    Каким образом все это принесет пользу России? Под такие проекты мы собираемся раздавать FPGA платы на конференции которая пройдет 18-22 сентября в Томске. Туда приедут представители МГУ, МФТИ, МИЭТ, МЦСТ, Imagination Technologies, National Instruments итд. Они будет обсуждать, как обновить программу университетов, чтобы сегодняшние студенты через несколько лет проектировали росийские чипы на уровне передовых западных компаний. Там также будет школа-семинар, на которой будут обсуждать, как делать учебные процессоры — начиная от простейшего schoolMIPS от Станислава Жельнио sparf.

    Вот первая фотография из музея в Маунтин-Вью — на ней помимо Ирины и ракеты в центре виден небольшой ящичек. Это бортовой компьютер космической станции «МИР» , который проектировали инженеры советского объединения «ЭЛАС», которое трансформировалось в современную зеленоградскую компанию «ЭЛВИС»:



    Итак, темы для учебных проектов — начиная из дремучих десятилетий середины XX века:

    Перед нами — блок для хранения таблицы результатов вычисления арифметических функций теплого лампового компьютера ENIAC, разработанного в 1943-1947 Преспером Экертом и Джоном Мочли из Университета Пенсильвании. В некоторый момент их коллега Джон фон Нейман предложил использовать этот блок для хранения программ. Так родилась «архитектура фон-Немана». Вообще ее правильно было бы назвать «архитектура Экерта-Мочли-фон-Неймана», но Экерту и Мочли не повезло — их имена были засекречены, а имя фон-Неймана — нет (компьютер предназначался для расчета артиллерийских таблиц).

    Если вы хотите реализовать этот компьютер на FPGA, я нагуглил ENIAC_Operating_Manual, хотя превратить его в код на верилоге будет нетривиально:



    Транзисторный суперкомпьютер IBM 7030 Stretch. Название (stretch — «растягивать») произошло от обещаний его создателей сделать компьютер в 100 раз быстрее предшествующего IBM 704. К сожалению, Stretch получился всего в 30 раз быстрее и бизнес-коммьюнити покрыло создателей позором и презрением. Тем не менее, в процессе этой «неудачи» айбиэмовские инженеры придумали конвейерность, многозадачность и защиту памяти:



    CDC 6600 (1963). Первый «настоящий» суперкомпьютер в истории и первый процессор с внеочередным исполнением инструкций. До сих пор повсеместно используется в качестве примера scoreboarding-а на лекциях по микроархитектуре (см. напр. первые нагугленные (правда не очень свежие) слайды по CDC 6600 из Беркли ). Реализация упрощенного CDC 6600 на верилоге и FPGA — один из самых очевидных кандидатов для студенческого курсового проекта.





    Вот отрывок про общую организацию CDC 6600 из книжки Microprocessor Architecture: From Simple Pipelines to Chip Multiprocessors by Jean-Loup Baer (2009). Несколько функциональных устройств, работающих параллельно (но без конвейера) и scoreboard, отслеживающий зависимости по данным между инструкциями, и приостанавливающий запуск выполнения инструкции, пока ее операнды не будут готовы:



    IBM 360 (1964-1978). Эта линия компьютеров произвело настолько глубокое впечатление на ЦК КПСС СССР, что они, несмотря на сопротивление советских суперкомпьютерных авторитетов из ИТМиВТ (БЭСМов и Эльбрусов) насадили советские реализации IBM 360/370 по всем соцстранам под именем ЕС ЭВМ. Эти компьютеры изображены даже на рисунках советских детей брежневской эпохи «я у мамы на работе»:



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



    Впрочем проект IBM/360 принес пользу и для мира программирования. Вот видите слева от сумочки Ирины книжку «Мифический человеко-месяц» Фредерика Брукса? Автор книжки — менеджер проекта OS/360, который сделал наблюдение, что попытка исправить сорванный дедлайн добавлением в проект новых программистов часто ведет к ухудшению ситуации — дедлайн станет еще более сорванным. Книжку издали в 1975 году, тут же перевели в СССР, и местами она актуальна до сих пор:





    Также линия IBM/360 ввела в мейнстрим концепцию «микропрограммирования» и «микрокода», которые стали неактуальны в процессе «RISC-революции» 1980-х (современные микропроцессоры преимущественно hardwired из-за необходимости все конвейеризовать). Однако эти концепции настолько крепко въелись в советские и пост-советские учебники компьютерной архитектуры, что люди до сих пор задают вопрос «а что, Verilog — это микропрограммирование?» — после чего долго приходится объяснять что это _не_ микропрограммирование.

    Так зачем реализовывать IBM/360 на FPGA? Все реализовывать бессмысленно, но один аспект одной модели, а именно IBM System/360 Model 91, появляется среди современных студенческих курсовых проектов по микроархитектуре не реже, чем scoreboard от CDC 6600. Я говорю о так называемом «алгоритме Томасуло», способе организации внеочередного выполнения арифметических операций с аппаратным «переименованием регистров» и «блоками резервирования» (да, эти штуки есть и в процессорах в ваших айфонах, это не остатки мамонта). Довольно странно, что про алгоритм Томасуло нет статьи на русской википедии, хотя есть на украинской:

    Алгоритм Томасуло — це алгоритм, який використовується в комп'ютерній архітектурі апаратного забезпечення, для динамічного планування команд, яке передбачає позачергове виконання, з метою ефективного використання функціональних блоків процесора. Алгоритм був розроблений Робертом Томасуло у 1967 році, коли він працював в IBM, і вперше реалізований в IBM System/360 Model 91 в блоці операцій з рухомою комою.

    Головними нововведеннями алгоритму Томасуло є перейменування регістрів в апаратних засобах, блоки резервування[en] для всіх функціональних блоків, і спільна шина даних (СШД), по якій обчислені значення синхронно передаються в усі блоки резервування, які можуть мати потребу в них.


    В одной из самых полезных современных книжек по разработке процессоров, Modern Processor Design: Fundamentals of Superscalar Processors by John Paul Shen and Mikko H. Lipasti (2013), наглядно показано, как выглядел блок операций с плавающей точкой у IBM/360-91 до улучшения Томасуло и после него. Такое же «до и после» можно сделать и для студенческого проекта, со сравнением производительности (количества тактов на разных последовательностях операций) и максимальной тактовой частоты (при реализации на FPGA):



    После этого книжка Шен-Липасти описывает как это делается в современных процессорах с динамическим конвейером:



    А вот ранний транзисторный мейнфрейм из Японии — NEAC 2203, сделанный в 1958 году. Он никогда не продавался вне Японии. Вообще тогда к японским товарам в мире было несерьезное отношение, но японские компании подавили в себе идолопоклонничество перед Западом и занялись капитализмом по-японски. Сначала они обкатывали технологические решения на внутреннем рынке (своего рода «импортозамещение»), а потом агрессивно атаковали мировой рынок. Через пару десятилетий Япония вытеснила американские компании с рынка микросхем памяти и домашней электроники, и тот же NEC построил самый мощный суперкомпьютер 1992 года — NEC SX-3/44. Одновременно в Японии стали появляться голоса о необходимости уменьшения политической зависимости от США, и японский министр транспорта написал книжку 「NO」と言える日本 («Япония может сказать „NO“!). К сожалению, это вставание с колен подкосил последующий экономический кризис, но японский опыт 1950-1980-х интересен для изучения.



    На этом мы заканчиваем первую часть прогулки по музею. Если вам понравилось начало, я могу написать еще — про суперкомпьютеры Cray и Illiac, мини-компьюеры HP, DEC и Data General, первые микропроцессоры и микрокомпьютеры, RISC-овые рабочие станции и Лисп-машины, игровые приставки и роботов.

    Теперь мы напомним для чего все это:



    Если вас интересуют open-source проекты такого типа для повышения общественной образованности, вы готовы их писать на SystemVerilog или VHDL, выкладывать код на GitHub и писать про них статьи на Хабре (с анализом производительности), но у вас нет FPGA платы — вы можете одолжить ее (и получить насовсем если проект будет успешен) в одном из трех мест:

    1. Александр Романов из МИЭМ НИУ ВШЭ в Москве. Александр вводит курсы по Verilog для студентов, и у него в дополнение к обычным платам в университете есть разномастная коллекцию плат с Altera и Xilinx FPGA, как часто используемые платы от Terasic и Digilent, так и слабодокументированные китайские платы — именно для открытых проектов.

    2. Ярослав Вознюк из Киево-Могилянской академии. Я приезжал на их хакатоне для школьников, и оставил там несколько плат Digilent Cmod A7 35T с Xilinx Artix-7 для бартера „плата за проект с статьей на Хабре“.

    3. Владимир Макуха из Новосибирского Технического Государственного Университета. Там есть набор плат для проходящей через неделю конференции в Томске. Часть их них (Digilent Nexys DDR4) останется у Владимира, часть (Terasic DE0-CV) пойдет на такие проекты.

    В качестве вдохновления вы можете посмотреть на существующие проекты с реализованными на FPGA процессорами на Хабре от SparF, Frantony, oleh_plotnikov, Kingit, VMSS, kirill90, Boris_92 (вы можете добавлять свои в комментариях).

    Дополнение про основы современной разработки процессоров



    Древние процессоры делались из радиоламп, транзисторов, микросхем малой степени интеграции и рисования схем мышкой на экране. Сейчас это все нет так. Пару слов для тех читателей, которые не знакомы с тем, что такое Verilog, ASIC и FPGA:

    Из поста на Geektimes »Оруженосцы микроэлектроники. Видеорепортаж с конференции по проектированию электроники в Сан-Франциско":

    Пока мы обсудили кульминацию микроэлектронного проекта — изготовление микросхемы на фабрике. Но как такой проект начинается?

    В последние 25 лет дизайн микросхемы чаще всего пишется на языке описания аппаратуры Verilog ([ранее] в Европе и у военных — VHDL), после чего специальная программа (logic synthesis) превращает дизайн в граф из проводов и логических примитивов, другая программа (static timing analysis) сообщает дизайнеру, вписывается ли он в бюджет скорости, а третья программа (place-and-route) раскладывает этот дизайн по площадке микросхемы.

    Когда дизайн проходит все этапы: кодирование на верилоге, отладка, верификация, синтез, static timing analysis, floorplanning, place-n-route, parasitics extraction и т.д. — получается файл под названием GDSII, который отправляют на фабрику, и фабрика выпекает микросхемы. Самые известные фабрики этого типа принадлежат компании Taiwan Semiconductor Manufacturing Company или TSMC.


    Из поста на Habrahabr Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция:

    В самом простом варианте FPGA состоит из матрицы однородных ячеек, в функцию каждой из которых можно поменять с помощью мультиплексоров, подсоединенных к битам конфигурационной памяти. Одна ячейка может стать гейтом AND с четырьмя вводами и одним выводом, другая — однобитным регистром и т.д. Загружаем в конфигурационную память последовательность битов из памяти — и в FPGA образуется заданная электронная схема, которая может быть процессором, контроллером дисплея и т.д.

    ПЛИС-ы / FPGA — не процессоры, «программируя» ПЛИС (заполняя конфигурационную память ПЛИС-а) вы создаете электронную схему (хардвер), в то время как при программировании процессора (фиксированного хардвера) вы подсовываете ему цепочку написанных в память последовательных инструкций программы (софтвер).

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Про что писать в продолжениях?

    Поделиться публикацией

    Комментарии 20

      +6
      Поймал себя на мысли, что больше смотрел на сибирскую девушку Ирину, но не на экспонаты музея… поэтому буду пересматривать.
        +1
        Хорошо, может и до текста доберетесь!
        0
        А почему на всех фото представлен один и тот же симпотичный экспонат? Других в музее не нашлось?
          +1
          В Silicon Valley вообще напряженка с девушками
          +3
          Музей, безусловно, заслуживает внимания, но фотографии категории «я/жена на фоне …» — это для семейного альбома, а не для статьи на профильном ресурсе, по-моему.

          Для интересующихся историей вычислительной техники в старом свете есть весьма неплохой Heinz Nixdorf MuseumsForum (Падерборн).
            0
            А двум комментаторам понравилось. Вы текст читали или только на девушку смотрели? В Heinz Nixdorf MuseumsForum при возможности зайду, спасибо за наводку.
            0
            IBM 360? Помню, помню, как кодил на Коболе в далеких 90-х… Правда на советском аналоге ЕС как-то там серия.
              +1
              При всем уважении к фирме, в которой я работал, НПО «ЭЛАС» было таким монстром, что превратиться в «ЭЛВИС» ну никак не могло, ну разве что его десятая часть.
                0
                Интересно. А какая была у него структура и чем занимались в ее отделениях?
                  0
                  Если память мне не изменяет, то МИКРОН, НИИМП (7 отделений — напротив МИЭТ, в старом здании МИЭТ, на северной зоне) и ГМП (ГидроМетеоПункт — ну Вы поняли, чем там занимались — станция космической связи) и Микроприбор в Конаково.
                  А занимались много чем — конктретно я знаю о «Салют-Союз», но наверняка были и другие темы.
                    0
                    А, ну раз в него все это входило, еще и фаб Микрон, то да.
                0
                С святом месте в шортах!!!
                +2
                Про что писать в продолжениях?

                Про сибирскую девушку Ирину
                  +1
                  Рискую быть запинанным ногами, а так же покрытым вечным позором и ненормативной лексикой, однако Ирина мне понравилась значительно больше предлагаемых идей проектов. Ибо встает главный вопрос — зачем. Неужели нельзя найти какой-то совершенно реальный проект, приносящий конкретную, осязаемую пользу? Я например проектировал свой процессор один единственный раз ещё на древней Spartan 2 для устройства многоканальной высокоскоростной записи сигналов. У меня он управлял буферной памятью на 1 мегабайт и записью на жесткий диск. Процессор несложный. Стековый безадресный, 16-разрядный с 32 командами. 3 команды в машинном слове + 1 бит кодировал возврат из подпрограммы. По производительности (работал на 25 мегагерцах) рвал как тузик грелку 8-битную Atmel AVR, которую я сначала думал применить в проекте. Написал для него ассемблер с задаваемой простым текстовым файлом системой команд (проект постоянно менялся и нужно было соответствующим образом подстраивать ассемблер), выдающий выходной код прямо в виде vhdl-файла инициализированной блочной памяти. В результате был доволен как слон, ибо проект упростился вообще до безобразия. 1 FPGA, 2 микросхемы статической памяти, IDE-разъем для подключения жесткого диска. Всё. Может и студентам попрактиковаться на чём-то подобном? Ведь реальных задач для FPGA куча, а использование встроенного процессора может сильно их упрощать.
                    0
                    О, наконец комментарий по делу. Можно. Просто описанные в моем посте примеры всем более-менее известны и можно сравнивать решения разных студентов. Возможный минус вашего проекта со стековым процессором: он возможно не был конвейерным (или был?) а для студента конвейерные трюки (а также OoO, потом всякую работу кэшей, MESI итд) нужно на чем-нибудь изучить. Но это вопрос спорный — а вы можете выписать список возможных учебных проектов, который с ващей точки зрения был бы более удачным?
                      0
                      а для студента конвейерные трюки (а также OoO, потом всякую работу кэшей, MESI итд) нужно на чем-нибудь изучить.

                      С одной стороны так, с другой даже не знаю… Всё это по-моему можно изучить уже потом. Гораздо важнее перестроить логику мышления, если до этого человек на чём-то программировал. Мне например сначала трудно пришлось. Тут думать приходится совершенно по-другому, параллельными категориями. По-моему важнее этому научить.
                        0
                        Ну я пишу именно про «потом». Понятно, что сначала студенту стоит повозиться со всякими конечными автоматами (напр. калькулятор со стеком), конвейерными арифметическими блоами, протоколами шин и подобными упражнениями (было бы интересно собрать идеи на этот счет)
                    0
                    Просто описанные в моем посте примеры всем более-менее известны и можно сравнивать решения разных студентов.

                    Ну если так, тут трудно не согласиться. Действительно если задача сравнивать знания, то проекты должны быть какими-то типовыми. Реальные проекты для этого слишком разнообразны.
                    Возможный минус вашего проекта со стековым процессором: он возможно не был конвейерным (или был?)

                    Пожалуй скорее был чем не был. Не на уровне 8086 конечно, но предвыборка была. Подробности я сейчас по прошествии 14 лет не очень помню, но помню что после команды перехода у меня выполнялся слот задержки (как в MIPS). А ещё меня в те времена сильно прикалывала идея vliw (незадолго до этого пришлось поработать с так и не взлетевшим процессором NUON), и мой мог выполнять одновременно до 4-х команд (3 в машинном слове + возврат), если в одном слове задействовались соответствующие блоки. Можно сказать такой упрощенный вариант микропрограммирования.
                    Но это вопрос спорный — а вы можете выписать список возможных учебных проектов, который с ващей точки зрения был бы более удачным?

                    Честно говоря нет… Была у меня идея ещё до появления планшетов, когда только-только начались наладонники, сделать подобную машинку на FPGA. С графическим экраном, чем-то вроде uLinux на борту, и очень серьёзной хакерской закваской. Превращаемое в осциллограф, логический анализатор, средство перехвата беспроводного трафика и т.п, что пользователь сочтёт нужным. Если бы такую штуковину удалось сделать и выпустить в виде не слишком дорогого(общедоступного) устройства, то да, был бы кладезь учебных проектов на самые разные темы. Но увы, не хватило ни времени ни денег. Сейчас интересуюсь машинным зрением и анализом в реальном времени. Хотелось бы сделать что-то летающее, способное к ориентации на местности, выделению и сопровождению целей и т.п. Но тоже останавливает отсутствие времени и денег. А в плане источника учебных проектов тема тоже вполне богатая. А вообще я считаю что научиться чему-либо можно только выполняя совершенно реальные практически полезные проекты. Не знаю, может это только у меня так мозги устроены, но для меня лично это медицинский факт.
                      0
                      Это так, но

                      1) большинство практически полезных проектов делаются в компаниях, а компанейский код использовать для обучения студентов нельзя

                      2) та же самая scoreboard при правильном написании легким движением руки превращается в нечто практически полезное. Я работаю инженером в MIPS I6500, сейчас пишу кусочки логики для конвейера, до этого — арифметических блоков, и если бы я делал такие упражнения 20 лет назад, я быстрее бы пришел к тому, что делаю сейчас.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое