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

Разработчики


Изобретателем транспьютеров является британская компания INMOS, штаб-квартира которой располагалась в городе с красивым названием Бристоль. Фирма была основана в 1978 году в рамках усилий британского правительства по развитию отечественной полупроводниковой промышленности. Правительство через Национальный совет по предпринимательству (NEB) выделило 50 миллионов фунтов стерлингов: эти инвестиции рассматривались как стратегический шаг, призванный обеспечить конкурентоспособность Великобритании в быстро растущей мировой электронной промышленности. Основная задача, которую ставили перед собой отцы-основатели — Ян Бэррон, Ричард Петритц и Пол Шредер — бросить вызов доминированию американских и японских производителей на британском рынке полупроводников.

Ян Марчант Бэррон, инженер с опытом работы в области компьютерных архитектур, стал основной движущей силой INMOS. Ранее он трудился в компаниях Elliott Brothers и Computer Technology Limited, где разработал транзисторный компьютер Elliott 803 и 16-битный компьютер, построенный на основе эмиттерно-связанной логики Modular One. В основе концепции INMOS лежала параллельная обработка данных — подход, который, по мнению Бэррона, должен был произвести революцию в вычислительной технике, преодолев ограничения традиционной последовательной обработки на процессорах существующих архитектур. Ричард Петриц, один из основателей компании, был опытным экспертом в области полупроводников. Он привнес ценный опыт из своей работы в RCA и General Electric, который очень пригодился в дальнейших проектах INMOS.

Первыми продуктами INMOS стали микросхемы статической оперативной памяти, за которыми последовали динамические RAM и EEPROM. Но главной разработкой компании стал транспьютер, который и вывел ее в лидеры британского рынка производителей полупроводников.

Рождение транспьютера


Поскольку технические возможности существовавших в начале 80-х процессоров уже были близки к исчерпанию, считалось, что единственный путь развития — это более широкое использование параллелизма, то есть, использования нескольких процессоров, которые будут работать вместе для одновременного решения задач. Предыдущие поколения микропроцессоров не подразумевали такой вариант применения, поэтому индустрия нуждалась в новых архитектурах, которым это было бы под силу. Увеличение тактовой частоты существовавших чипов уже не приводило к приросту быстродейсвия, что было особенно критично для приложений, требующих высокопроизводительных вычислений. Ян Бэррон небезосновательно полагал, что в будущем параллелизм и многозадачность станут поддерживать все операционные системы.

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



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

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

Анатомия транспьютера


Внешне транспьютер мало чем отличался от других микропроцессоров того времени: прямоугольный керамический корпус и металлические контакты для подключения к печатным платам. Самая известная модель, INMOS T414, была упакована в 32-контактный корпус DIL (dual in-line), который был распространенным форм-фактором для микропроцессоров в 1980-х годах. Однако внутри корпуса транспьютера скрывалась сложная архитектура, которая и отличала его от конкурентов.



Технически транспьютеры можно отнести даже не к микропроцессорам общего назначения, а к микроконтроллерам, поскольку они имели собственную оперативную память и были оборудованы практически всем необходимым для автономной работы. В микросхему встроили контроллер ОЗУ и даже микропрограмму, играющую роль операционной системы реального времени (RTOS). Таким образом, транспьютер представлял собой ранний прообраз тогда еще не существовавшего в природе устройства System-on-Chip (SoC).

Каждый транспьютер имел оперативную память на кристалле объемом от 2 до 4 килобайт в зависимости от модели. Эта локальная память была очень важна для уменьшения задержек при доступе к данным и минимизации необходимости поддерживать постоянную связь с внешней памятью. Включение локальной памяти позволяло каждому транспьютеру работать над задачами независимо, не полагаясь на общую оперативную память или шины, которые часто становились узким местом в многопроцессорных системах.

Чип работал на частоте 20 МГц, которая считалась довольно высокой для того времени, настолько, что конструкторы были очень обеспокоены возможностью реализации такого высокочастотного тактового сигнала на плате. Поэтому внешняя тактовая частота была намного ниже: 5 МГц, а для ее увеличения применялся умножитель. Ядро микросхемы использовало четыре непересекающиеся фазы, и разработчики могли задействовать любую их комбинацию. Поэтому можно с определенной долей приближения утверждать, что транспьютер на самом деле работал на частоте 80 МГц.

Основным инструментом управления передачей данных был микрокод: коды операций инструкций использовались в качестве точек входа в постоянное запоминающее устройство, а выходная информация из ПЗУ передавалась непосредственно в тракт данных. Для многотактных инструкций микрокод декодировал четыре возможных варианта для второго цикла в то время, пока тракт данных выполнял первый. Решение о том, какой из этих вариантов будет фактически использоваться, принималось ближе к концу первого цикла, что позволило обеспечить очень высокую производительность.

Самой уникальной и инновационной особенностью транспьютеров были последовательные аппаратные коммуникационные линии, которые назывались «os-link». Каждый транспьютер имел четыре высокоскоростных двунаправленных последовательных канала связи, которые позволяли ему напрямую связываться с другими транспьютерами со скоростью передачи данных 5, 10 или 20 Мбит/с. Любое количество транспьютеров могло быть соединено вместе по каналам связи (которые могли простираться на десятки метров), образуя одну вычислительную ферму. Правда, передача данных между транспьютерами осуществлялась по цепочке, что неизбежно вызывало задержки в больших системах. Для решения этой проблемы INMOS разработала коммутатор с нулевой задержкой, который подключал до 32 транспьютеров (или коммутаторов) к еще более крупным сетям.



Транспьютеры могли загружаться как из памяти, так и через os-link — для выбора источника загрузки использовался специальный вывод микросхемы BootFromROM. Для этого была задействована двухбайтовая команда из верхней части памяти, с помощью которой обычно выполняется обратный переход к загрузочному коду. Если команда не поступила при подаче питания, микросхема будет ожидать получения данных по любому сетевому каналу. Это позволяло создавать многопроцессорные устройства, на которых один транспьютер всегда загружается из ПЗУ, а затем начнет отправлять загрузочный код другим транспьютерам, и сможет передавать разный код для разных чипов. Например, в транспьютер, выполняющий на устройстве функцию контроллера жестких дисков или дисководов, таким образом можно загрузить соответствующий драйвер.

Транспьютер имел всего три регистра данных и указатель рабочей области на обычный стек памяти, доступный с помощью инструкций. Это позволяло очень быстро переключать контекст, просто изменяя указатель рабочей области на память, используемую другим процессом. Набор команд состоял из восьмибитных инструкций, состоящих из опкода и полубайтов операндов. Это сделало транспьютер одним из немногих коммерческих процессоров с архитектурой MISC (Minimal instruction set computer).

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

Язык Occam
Чтобы облегчить использование параллелизма, INMOS разработала специальный язык программирования для транспутеров под названием Occam, названный в честь Уильяма Оккама и его принципа простоты («бритва Оккама»). Occam был основан на модели CSP (Communicating Sequential Processes), в которой процессы обменивались сообщениями по каналам, подобно коммуникационным каналам самого транспьютера.

Occam позволял программистам определять процессы и указывать, как они взаимодействуют друг с другом, обеспечивая эффективные параллельные вычисления. Межпроцессное взаимодействие на основе каналов стало фундаментальной частью языка. Так, например, написание кода для контроллеров устройств стало тривиальной задачей: даже самая простая программа могла отслеживать последовательные порты в ожидании ввода-вывода и автоматически переходить в режим сна при отсутствии активности.

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

Как и большинство языков программирования, Occam поддерживает последовательное выполнение операторов с использованием оператора SEQ. Последовательность операторов выполняется в том порядке, в котором они появляются. Параллельность выражается с помощью конструкции PAR. Когда несколько процессов или операторов помещаются в блок PAR, они выполняются одновременно, параллельно. Связь между параллельными процессами в Occam осуществляется с помощью односторонних каналов. Процесс может отправить данные другому процессу по каналу, а процесс-получатель будет ждать, пока данные придут. Вот пример кода, в котором один процесс отправляет значение другому процессу по каналу:

CHAN INT c:        -- объявляем целочисленный канал 'c' 
PAR
  c ! 42           -- Процесс 1 посылает integer-число  42 по каналу 'c'
  INT x:
  c ? x            -- Процесс 2 получает значение из 'c' и сохраняет его в переменной 'x'


Occam был языком-первопроходцем, который ввел ключевые понятия в параллельное программирование, актуальные и сегодня. Упор на простоту помог ему стать эффективным инструментом для программирования транспьютеров.

Закат эпохи


Несмотря на инновационную архитектуру, транспьютеры так и не добились широкого коммерческого успеха. С появлением процессоров общего назначения с несколькими ядрами и растущим доминированием таких известных игроков, как Intel и Motorola, INMOS стало непросто удержаться на рынке. Кроме того, сложность программирования параллельных систем и нишевый характер многих приложений для транспьютеров ограничивали их более широкое применение.

В 1989 году INMOS была приобретена компанией SGS-Thomson (ныне STMicroelectronics), и разработка транспьютеров в итоге прекратилась. Однако наследие британцев продолжает жить. Многие из концепций, заложенных в транспьютеры, такие как параллелизм и распределенная обработка данных, повлияли на развитие многоядерных процессоров, графических чипов и современных технологий параллельных вычислений.

Статья поддерживается командой Serverspace.

Serverspace — провайдер облачных сервисов, предоставляющий в аренду виртуальные серверы с ОС Linux и Windows в 8 дата-центрах: Россия, Беларусь, Казахстан, Нидерланды, Турция, США, Канада и Бразилия. Для построения ИТ-инфраструктуры провайдер также предлагает: создание сетей, шлюзов, бэкапы, сервисы CDN, DNS, объектное хранилище S3.

IT-инфраструктура | Удвоение первого платежа по коду HABR

Комментарии (31)


  1. czz
    20.09.2024 14:40
    +14

    Помню такую книгу. Получается, что она вышла в России слишком поздно, когда "закат эпохи" уже произошел.

    Скрытый текст


  1. checkpoint
    20.09.2024 14:40
    +13

    Честно говоря, не совсем понятно почему так рано настал закат транспьютеров, ведь до первого многоядерного процессора от Intel оставалось еще более 10 лет. Подозреваю, что проблема скорее в полном отсутствии программного обеспечения и нежелании программистов того времени осваивать изотерические языки с еще более изотерическими методиками программирования. Всем хотелось писать на C, C++ и Fortran-е. Распространение сетей, и TCP/IP в частности, привело к появлению технологии распаралленивания заданий MPI не требующие знания специфических языков. Собсно это и похоронило идею транспьютеров.

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

    Еще один фактор - к моменту появления многоядерных микропроцессоров, в ядрах операцинных систем уже всё было готово для параллельных вычислений: облегченные процессы, threads, shared memory, spinlocks, и т.д. Так,что транспьютеры появились несколько раньше времени - ни задач, ни инфраструктуры под них создано не было. Современные GPU и нейроаскелераторы, помоему, очень близки к британским транспьютерам по архитектуре.


    1. Yuri0128
      20.09.2024 14:40
      +4

      Современные GPU и нейроаскелераторы, помоему, очень близки к британским транспьютерам по архитектуре.

      А ASIC для майнинга - так чуть-ли не повторяют.


      1. sim31r
        20.09.2024 14:40

        А ASIC для майнинга - так чуть-ли не повторяют.

        Майнить проще же, хеши перебираются независимо, быстрый обмен между процессорами не нужен.


        1. Yuri0128
          20.09.2024 14:40

          Там медленный обмен же реализован.


    1. saege5b
      20.09.2024 14:40

      Общая шина данных как гиря висела.

      Да и не все задачи параллелизируются.

      Это в начале восьмидесятых как-то было всё равно в текстовом режиме, а для графических оболочек девяностых - адцкий ад.


      1. checkpoint
        20.09.2024 14:40
        +1

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


        1. saege5b
          20.09.2024 14:40
          +1

          Ага, и у Интела на некоторых процессорах можно было сделать вычисления чуть быстрее и немного потенционально опасней, или безопасней - но медленней.

          И это сейчас, когда кэши десятками гигабит плюются с собственным объёмом в десятки и сотни мегабайт.

          Процессы же не автономно в вакууме работают. Я тут не спец, но краем уха слышал про косяки межмодульного взаимодействия у разных производителей современности.

          А так то, этот транспьютер напоминает NUMA (англ. Non-Uniform Memory Access «неравномерный доступ к памяти» или Non-Uniform Memory Architecture «архитектура с неравномерной памятью»).


    1. victor_1212
      20.09.2024 14:40
      +3

      почему не влетело - относительно высокая цена, в первую очередь делали для embedded systems, а это узкий рынок, SGS Thompson их использовал, поэтому купил в подходящий момент, в момент разработки T414 - TI DSP (32-bit типа TMS320C32 и др.) еще не были в продаже, когда стали доступны Inmos конкуренции не выдержал


  1. vglaser
    20.09.2024 14:40

    Ничего, искусственный интеллект вдохнёт вторую жизнь в такие системы. Еще и аналоговые процессоры снова появятся.


  1. vanxant
    20.09.2024 14:40
    +1

    Сама идея не то чтобы была неизвестна. Существовали, например, суровые советские аппараты размером со шкаф. В этом шкафу была "стандартная обвязка", отвечавшая за ввод-вывод и пр., и огромная коммутационная плата с "кроватками" для микросхем. А основной алгоритм "программировался" путём втыкания в нужные кроватки микросхем с нужными арифметическими блоками - сумматорами, умножителями, источниками констант и т.д. Для расчётов всяких там траекторий ракет это было вполне себе решение для тех лет.


    1. Zenitchik
      20.09.2024 14:40

      Где про них можно почитать?


  1. Uint32
    20.09.2024 14:40
    +2

    Нынче славное дело транспьютеров продолжает https://www.xmos.com/


    1. Kudesnick33
      20.09.2024 14:40

      Туда же: https://www.parallax.com/propeller/ и https://en.wikichip.org/wiki/rapport/kilocore. Тоже интересные эксперименты на подобную тематику.


      1. Yuri0128
        20.09.2024 14:40

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


        1. sim31r
          20.09.2024 14:40

          Кому нужно такое распаралеливание проще FPGA поставить, которые сейчас копейки стоят и набросать там нужных модулей под задачу.


          1. Yuri0128
            20.09.2024 14:40

            Ну, как сказать. Есть дешевые тайваньские контроллеры, в которохы такое применяется и вполне ничего, - применяются. Они по 10-20 баксоцентов.


    1. pda0
      20.09.2024 14:40
      +2

      А я думал, что http://www.multiclet.com/ :)


      1. checkpoint
        20.09.2024 14:40

        Кстати, кто нибудь вкурсе как обстоят дела у Мультиклета ? Я лет 12 назал купил было платку с ихним процом о четырех клетках (P1), немного побаловался и бросил за отсутствием практического применения. Компилятора к нему тогда не было, что сильно понижало практическую ценность.


        1. IvGrad2
          20.09.2024 14:40

          Появилось SDK и компилятор в его составе

          http://multiclet.com/support/software-and-technical-documents


          1. checkpoint
            20.09.2024 14:40

            Ок, спасибо.


    1. Yuri0128
      20.09.2024 14:40

      Там вроде RISC а не MISC. Да и архитектура уже сильно не такая.


  1. SIISII
    20.09.2024 14:40
    +1

    20 МГц -- не ахти какая частота. Задающий генератор процессора СМ-1420 как раз на ней работал (дальше частота делилась, и такт процессора составлял 200 или 300 нс в зависимости от микрокоманды, но генератор -- таки 20 МГц, как ни крути). У AMD был тактовый генератор, работавший от исходной частоты до 30 МГц и генерирующий четыре фазы, причём всё это дело более-менее программировалось; у нас его содрали как К1804ГГ1. И, замечу, это ТТЛ, а не ЭСЛ, где частоты могли быть сильно-сильно выше.

    Далее, четыре фазы синхронизации. А реально ли они что-то распараллеливали? Многофазная синхронизация в процессорах (ещё не микро-) 1960-70-х -- вполне нормальное явление, да и микропроцессоры такие были -- вспоминаем 8080, например. Так что я не уверен, что четыре фазы понадобились им для повышения скорости -- но в тему не вникал, поэтому утверждать что-либо не могу.

    Что же касается параллельных вычислений и т.п. вещей, то всё это появилось раньше. Многопроцессорные машины уже в 1960-х существовали, и то, что каждый процессор занимал 1-2-3 шкафа, сути дела не меняло. Векторные процессоры тоже были, ну и т.д. и т.п. (И Интел, кстати, ничего принципиально нового с появлением многоядерных процессоров не изобрела -- просто вогнала на один кристалл несколько процессоров, но многопроцессорные машины уже очень давно не были редкостью).


    1. victor_1212
      20.09.2024 14:40

      надо заметить, что сделал Inmos это не просто много процессорная машина, было интересней, недаром Okkam пережил Inmos, они скорее объединили функции i/o процесора и cpu, + разработали удачный протокол взаимодействия процессоров с соседями через четыре канала, включая прерывания друг друга (pin=analyze), + rtos и язык высокого уровня (Okkam), + environment (TDS) чтобы программировать все это, идея была собирать системы нужного размера как лего, т.к. все реализовано в виде процессов обменивающихся сообщениями min разница как именно размещены процессы - на одном cpu, или нескольких (по крайней мере в теории)

      из руководства по TDS, пример загрузки sw на 1 и на 8 процессоров


  1. bak
    20.09.2024 14:40
    +1

    Если кто-то хочет потыкать - есть классная игра называется TIS-100, там как раз надо программировать вычислители с архитектурой описанной в статье, очень увлекательно!


  1. sim2q
    20.09.2024 14:40

    Что бы кто не говорил, но второе фото платы с чипами потрясающе красиво!)
    Даже если бы только и удалось, что помигать 42/кстати/ диодами :)


  1. sim2q
    20.09.2024 14:40

    Что бы кто не говорил, но второе фото платы с чипами потрясающе красиво!)
    Даже если бы только и удалось, что помигать 42/кстати/ диодами :)


  1. aragont
    20.09.2024 14:40
    +2

    В 1995 году в России серийно выпускались суперкомпьютеры МВС-100 на основе транспьютеров в качестве сети передачи данных и интеловских векторных процессоров i860 в качестве вычислительных ядер. Статья из тех лет -https://www.avalanche.vip/papers/2001super.htm.

    Потом появился 100Мб Ethernet, Pentium, и проект супердешёвого суперкомпьютера Beowulf на их основе. В результате, следующий российский суперкомпьютер МВС-1000 представлял из себя просто стойку со стандартными стоечными компьютерами.


  1. CitizenOfDreams
    20.09.2024 14:40

    Самая известная модель, INMOS T414, была упакована в 32-контактный корпус DIL

    Да ладно. T414 упаковывался в 84-ногие корпуса PGA и PLCC. Тридцати двух ног ему бы даже на шину данных/адреса не хватило.


  1. Kostas68
    20.09.2024 14:40

    Представляете, я в начале 91-го года писал тестовые программы для советского транспьютера-аналогаТ-800. Потом случился август и всё само рассосалось. Эх, молодость.)


    1. CitizenOfDreams
      20.09.2024 14:40

      для советского транспьютера-аналога Т-800

      Это вот такой?

      Скрытый текст