Архитектура и структура транспьютеров фирмы Inmos
Лекция 12.
Мультипроцессорные системы управления. Транспьютеры - элементная база мультипроцессорных систем
Основные особенности транспьютеров
Концепция параллелизма давно привлекала внимание специалистов своими потенциальными возможностями повышения производительности и надежности вычислительных систем. В нашей стране с 60-х годов выполнялись теоретические, экспериментальные и промышленные разработки в этом направлении. Именно с подобными системами связывается в настоящее время перспектива дальнейшего наращивания производительности. Исторически первой промышленной разработкой, ориентированной на массово-параллельные системы стали транспьютеры.
Транспьютер - это микрокомпьютер с собственной внутренней памятью и линками (каналами) для соединения с другими транспьютерами. Термин "транспьютер", произошедший в результате объединения слов "транзистор" и "компьютер", отражает основную область его применения - массово-параллельные вычислительные системы, в которых он играет роль базового вычислительного элемента. Некоторые специалисты понимают термин "транспьютер" как название конкретного продукта фирмы Inmos, другие трактуют его как обобщенное наименование микропроцессоров со встроенными межпроцессорными интерфейсами. Используется также термин "транспьютеро-подобный микропроцессор", чтобы, с одной стороны, подчеркнуть, что речь идет не о продукте фирмы Inmos, а, с другой стороны, указать, что микропроцессор имеет встроенные линки для образования параллельных систем. Вполне возможно, что стремительное развитие микроэлектроники не позволит термину "транспьютер" устояться, и он будет поглощен более общим -микропроцессор, так как отличительный признак транспьютера - встроенные межпроцессорные интерфейсы - появятся в том или ином виде у всех микропроцессоров.
Первый транспьютер - Т414 - был представлен фирмой Inmos, Inc. (Бристоль, Великобритания) в 1983 г. Его основные характеристики:
• разрядность - 32 бит;
• объем внутренней памяти - 2 Кбайта;
• число коммуникационных каналов (линков)- 4;
• скорость обмена по линку - 5, 10, 20 Мбит/с;
• тактовая частота - внешняя - 5МГц, внутренняя - 15 МГц;
• производительность - 10 MIPS.
Широкую доступность и известность транспьютеры получили с 1985 г. Были выпущены модификации с большим объемом памяти (4 Кбайт) и более высокой тактовой частотой - семейство Т-4: Т424, Т425 - 20, 25 и 30 МГц, 16-разрядные модификации - семейство Т-2: Т212, Т222, транспьютеры со встроенным устройством выполнения операций с плавающей точкой - семейство Т-8: Т800, Т801, Т805. Производительность этих микропроцессоров достигает 30 MIPS и 4,3 MFLOPS. Выпускается ряд периферийных устройств транспьютерных семейств, к числу которых относятся микросхемы: М212 - контроллер НЖМД стандарта ST506, G412 - графический RGB-контроллер, С004 - программируемые 32-канальные коммутаторы и др.
Высокая степень "функциональной самостоятельности" транспьютера, простота интеграции и наличие периферийных устройств позволяют в короткие сроки создавать системы на их основе. Коммуникационные каналы транспьютера могут осуществлять обмен данными одновременно с вычислениями, практически не снижая производительности процессора. Благодаря этому качеству транспьютеров системы на их основе обладают хорошей масштабируемостью и высоким значением показателя эффективности - производительность/стоимость.
^
Архитектура и структура транспьютеров фирмы Inmos
Архитектура семейств Т-2, Т-4, Т-8
Транспьютеры относятся к классу RISC- процессоров. Система команд транспьютеров ориентирована на поддержку языка высокого уровня -ОККАМ (OCCAM). Это язык параллельного программирования, позволяющий задавать параллельные вычисления в соответствии с моделью взаимодействующих последовательных процессов (CSP). Программа на языке ОККАМ представляет собой совокупность асинхронных совместно протекающих взаимодействующих процессов, выполняющихся асинхронно и параллельно. Под процессом понимается ход исполнения программного кода некоторой программы или фрагмента программы. Взаимодействие между процессами реализуется путем обмена данными по принципу "рандеву". В транспьютере данная модель параллельных вычислений поддерживается благодаря наличию аппаратно-реализованного диспетчера, обеспечивающего выполнение параллельных процессов в режиме квантования времени. Причем количество одновременно выполняемых процессов не ограничено.
Мультипроцессорная система на базе транспьютеров представляет собой совокупность транспьютеров, соединенных линиями связи (непосредственно или через коммутатор).
Существенно упростить программирование мультипроцессорных ВС на базе транспьютеров позволяет тот факт, что одинаковая модель параллельных вычислений поддерживается как внутри отдельного транспьютера, так и в рамках мультитранспьютерной системы в целом. Благодаря этому программа, разрабатываемая для мультипроцессорной системы, может быть создана и отлажена на одном единственном процессоре, а затем перенесена на сеть транспьютеров без существенных преобразований. Исключение составляет ограничение числа каналов связи процесса с процессами, протекающими на другом транспьютере. Это ограничение преодолено в транспьютере Т-9000.
Обобщенная структура транспьютера Т800 приведена на рис. 76. На этом же рисунке показаны архитектурные регистры процессора, управляющие структуры процессов и распределение их рабочих областей памяти.
В зависимости от модели, транспьютер состоит из 32- или 16-разрядного центрального процессора, интерфейса внешней памяти, 2 или 4 двунаправленных каналов - линков, программируемого блока событий (Event), таймера, внутреннего ОЗУ емкостью 2 или 4 Кбайт, блока режимов работы линков, блока системных функций. Некоторые модели могут содержать 64-разрядное устройство операций с плавающей точкой и (или) интерфейсные схемы внешних устройств, такие как НЖМД, ЭЛТ, сетевой адаптер. (Контроллеры внешних устройств обычно выполняются на кристалле вместо двух линков).
Центральный процессор
32-разрядный центральный процессор транспьютера работает на тактовой частоте до 30 МГц, формируемой из опорной внешней тактовой частоты 5 МГц внутренней схемой умножения. Внутренняя структура центрального процессора показана на рис. 77.
Аппаратный планировщик (диспетчер) центрального процессора организует одновременное (в режиме разделения времени) выполнение нескольких процессов. Каждому процессу в момент его создания в адресном пространстве транспьютера выделяется выровненная по границе слова рабочая область памяти и устанавливается приоритет. В транспьютере реализована двухуровневая схема приоритетов: 0 - высокий приоритет процесса, 1 - низкий приоритет. Объединение адреса рабочей области и приоритета образует дескриптор процесса.
Центральный процессор содержит два регистра-таймера, для низко- и высокоприоритетных процессов. Высокоприоритетный регистр инкриминируется каждую 1 мкс, низкоприоритетный - каждые 64 мкс.
Рис. 76. Структура транспьютера Т800
Регистр W транспьютера указывает на рабочую область процесса, а в регистре указателе команды находится адрес следующей выполняемой команды.
Регистры общего назначения А, В, С, образуют регистровый стек ss память с дисциплиной доступа FIFO. АЛУ выполняет логические и арифметические операции над операндами, содержащимися в регистровом стеке. Операнды помещаются в стек через его вершину - регистр А. При загрузке данных в А его содержимое переносится в В, содержимое В в С, а содержимое последнего теряется. Результаты операций также формируются в регистре А, при этом содержимое регистра С "выталкивается" в регистр В и становится неопределенным.
Система команд транспьютера
Все команды транспьютера однобайтовые и выполняются за один такт процессора. Структура команды показана на рис. 76. Старшие 4 разряда -код команды, младшие 4 разряда используются для формирования операнда команды или кода команды в регистре операнда - О.
Операции, реализуемые командами транспьютера, подразделяются на первичные и вторичные. 13 наиболее употребительных первичных операций, такие, например, как сложение с константой со значением в диапазоне 0 -15, безусловный переход, загрузка (запись) слова и т.п. Еще 3 команды (мнемокоды pfix, nfix, opr) используются для реализации вторичных операций. Код вторичной операции формируется командами pfix, nfix и opr в регистре О, а операнды содержатся в регистрах.
Выполнение команд
Команды выбираются из памяти транспьютера и помещаются в буфер команд центрального процессора. За один такт выбирается 2 команды в Т-414 и 4 команды в Т-800.
Выполнение большинства команд осуществляется в три этапа:
1. Операнд команды помещается в младшие 4 разряда регистра операнда- О;
2. Выполняется операция, задаваемая кодом команды. Содержимое регистра О интерпретируется как операнд.
3. Очищается регистр операнда - О.
Исключение составляют команды pfix, nfix и орr.
Команда pfix на этапе 2 осуществляет сдвиг содержимого О на 4 разряда влево и не очищает регистр О на этапе 3. Команда nfix выполняется так же, как и pfix, но перед сдвигом О помещает туда арифметическое дополнение его содержимого.
Поскольку после выполнения команд pfix и nfix содержимое О не очищается, последовательность команд pfix и nfix позволяет формировать в регистре О операнды с разрядностью до 32. Требуемая последовательность команд минимальной длины формируется компилятором.
Команда opr интерпретирует содержимое О как код вторичной операции. В этом случае операнды содержатся в регистрах процессора. Код вторичной операции, таким образом, задается как операнд первичной операции opr и может иметь до 232 различных значений. В существующих на сегодняшний день моделях транспьютеров используется около сотни вторичных операций.
Использование сопроцессора
В случае наличия у транспьютера встроенного сопроцессора, выполняющего операции с плавающей точкой, распознавание команд и передача их на выполнение осуществляются аппаратно в центральном процессоре, там же выполняется вычисление адреса операндов и их загрузка в регистры FPU.
Модуль операций с плавающей точкой, как показано на рис. 77, состоит из двух блоков: блока мантиссы и блока порядка со своим набором регистров (два регистровых стека). Все команды с плавающей точкой подразделяются на два класса: полностью самостоятельные команды, никак не влияющие на состояние центрального процессора, и команды, пересылающие результаты выполнения операции в центральный процессор.
После передачи команды на исполнение в сопроцессор центральный процессор продолжает выполнение потока команд, если это команда относится к первому классу, или ожидает получения результата, если это команда второго класса.
Распределение памяти транспьютера
Транспьютер может адресовать до 232 байт (4 Гбайт). Особенностью транспьютера является начало адресов в области отрицательных значений. Младший адрес в дополнительном коде соответствует значению (80000000…).
Структурно (конструктивно) вся оперативная память подразделяется на внутрикристальную и внешнюю. Объем внутрикристальной памяти составляет 4 (2) Кбайт (в зависимости от модели транспьютера). Архитектурно (с точки зрения программиста) вся память транспьютера, как внешняя, так и внутрикристальная, равнодоступна и имеет единую адресацию. Внутрикристальной памяти соответствуют младшие адреса, а внешней памяти - старшие.
Поскольку внутрикристальная память имеет меньшее время доступа (один такт процессора), в нее обычно помещаются программистом часто используемые данные и подпрограммы. Пример распределения памяти показан на рис 76.
Несколько слов в младших адресах памяти используется для специальных целей: для слов состояния аппаратных каналов - линков, блока Event, регистров таймера, в качестве рабочих областей памяти диспетчера.
Диспетчеризация процессов
Каждый из процессов в конкретный момент времени может быть выполняемым, активным (готовым к выполнению в очереди соответствующего приоритета), ожидающим сигнала таймера (в очереди к таймеру соответствующего приоритета), ожидающим ввода-вывода.
Для выполняемого процесса регистр I содержит адрес следующей команды, регистр W содержит его дескриптор.
Для организации очереди процессов на выполнение (очередь активных процессов) в диспетчере используются пары регистров FptrO, BptrO, Fptrl, Bptrl, указывающие на начало и конец очереди высоко- и низкоприоритетных процессов соответственно. В качестве элементов очередей используются рабочие области процессов, содержащие помимо данных процесса, управляющую информацию, требующуюся для сохранения и восстановления состояния процессов на этапе диспетчеризации (в том числе ссылку на рабочую область следующего процесса в очереди).
Низкоприоритетные процессы выполняются в течение не более чем 32 периодов низкоприоритетного таймера, после чего процесс (если он еще способен к выполнению) помешается в конец очереди активных низкоприоритетных процессов, а диспетчер планирует выполнение следующего процесса. Сначала просматривается очередь высокоприоритетных процессов, затем - низкоприоритетных.
Высокоприоритетный процесс не прерывается и выполняется до тех пор, пока это возможно (до завершения или до момента ожидания ввода-вывода, сигнала таймера или сигнала внешнего события, выдаваемого блоком Event). Если высокоприоритетный процесс становится активным (например, получает сигнал таймера) в момент выполнения процесса с низким приоритетом, последний прерывается, его состояние сохраняется в области зарезервированных адресов памяти транспьютера и инициируется выполнение прервавшего высокоприоритетного процесса. После его выполнения возобновляется прерванный низкоприоритетный процесс.
Ввод-вывод
Ввод-вывод для процессов в транспьютере организуется одинаковым образом как в случае использования аппаратных линков (внешний ввод-вывод), так и в случае использования виртуального линка (обмен между процессами одного транспьютера). В обмене всегда участвуют только два процесса: один вводит данные, другой выводит.
В момент выполнения команды описания канала и после завершения каждого обмена слово состояния канала (ССК) инициализируется константой Minint. Процесс, первым выполняющий команду обмена, приостанавливается и проверяется содержимое канала. Если оно Minint, то в ССК заносится дескриптор процесса, а в рабочую область процесса помещаются значение W и адрес передаваемых данных, после чего управление передается диспетчеру для планирования выполнения других процессов.
Если содержимое ССК не Minint, значит данный процесс "пришел" на "рандеву" вторым. В этом случае содержимое ССК - дескриптор процесса, используя который находятся данные в случае ввода или буфер для данных в случае вывода.
Обмен по линкам осуществляется аналогично, с той разницей, что ССК имеют фиксированные адреса в памяти 80000000 - 8000001C,g, и в процессе обмена данные не пересылаются между областями памяти, а передаются по линии связи в стартстопном режиме с квитированием байтов.
При выполнении ввода-вывода от центрального процессора требуется лишь инициализация обмена. По команде ввода-вывода вся требуемая информация об операции обмена - адрес и длина данных - помещается во внутренние регистры линка, после чего центральный процессор освобождается для дальнейших вычислений, а линк транспьютера самостоятельно управляет обменом данными.
Рис. 77. Внутренняя структура функциональных блоков транспьютера
Передача данных по линку
Все семейства транспьютеров Т-2 (Т-212, Т-222, Т-225), Т-4 (Т-414, Т-400, Т-425), Т-8 (Т-800, Т-801. Т-805) используют один и тот же протокол передачи данных по линкам. Взаимодействие между транспьютерами осуществляется посредством обмена сообщениями, состоящими из последовательности байтов. Данные передаются по одному проводу из пары проводов. По другому проводу пары передаются подтверждения приема каждого байта.
Байт передается в обрамлении служебных битов, начиная со стартового бита, далее следует управляющий бит, а затем 8 информационных битов и столовый бит. Таким образом, на 8 информационных битов приходится 3 управляющих, поддерживающих протокол передачи. На рис. 78. показан пример передачи по линку.
Рис. 78. Передача данных по линку транспьютера
После передачи байта отправитель ждет подтверждения, которое состоит из стартового и управляющего бита. Причем если при передаче информационного байта управляющий бит равен 1, то в подтверждении он равен 0. При этом байты данных и подтверждения для переданных в противоположном направлении байтов данных передаются по одному проводнику. Подтверждения имеют приоритет перед байтами данных. Можно установить режим, при котором подтверждения начинают передаваться сразу после получения стартового и управляющего битов, что приводит к передаче байтов без задержки между ними.
Если один из обменивающихся через линк процессов не готов к приему данных, байты накапливаются в регистре данных линка. При заполнении регистра подтверждение после получения очередного байта не выдается, и передающий линк приостанавливает передачу до приема данных процессом и освобождения регистра линка.
При инициации передачи первого байта сообщения существует задержка на настройку каналов прямого доступа в передающем и приемном транспьютерах, что обусловливает разную скорость при передаче коротких (от единиц до нескольких десятков байтов) и длинных (несколько тысяч байтов) сообщений. В первом случае скорость составляет 2-4 Мбит/с, во втором - максимально возможную 10-20 Мбит/с, в зависимости от настройки передающего и принимающего транспьютеров.
Передача по линку асинхронна, приемный транспьютер не чувствителен к фазе принимаемых сигналов. Единственное, что требуется - точный кварцевый генератор 5 МГц для задания тактовых сигналов транспьютеров.
Блок режимов работы линков позволяет задавать скорость передачи по линкам транспьютера (5, 10, 20 Мбит/с), причем для нулевого линка скорость устанавливается независимо от остальных. Установка осуществляется подачей соответствующих уровней на входы LinkSpecial, LinkOSpecial, Linkl23Special.
Обмены по линку программируются раздельно в передающем и принимающем транспьютерах. В передающем транспьютере программируется команда передачи по линку заданного числа байтов. В принимающем транспьютере программируется команда приема из линка задаваемого числа байтов. Реализация обмена происходит, если программы в передающем и принимающем транспьютерах выходят на команды передачи и приема. Если один транспьютер вышел на соответствующую команду, то он ждет, пока другой выйдет на свою команду обмена. Неправильно запрограммированный обмен ведет к бесконечному ожиданию. Кроме того, бесконечное ожидание возможно, если заданы разные значения количества передаваемых и принимаемых байтов.
Ожидание сигнала от блока событий
Блок событий (Event) выполняет преобразование внешних логических уровней на входе блока в байтовое сообщение со значением 0 или 1, передаваемое по внутреннему каналу. Поэтому программно блок Event воспринимается как специальный канал, отличием которого от обычного канала является то, что из этого канала можно только "читать". ССК для блока Event имеет фиксированный адрес 80000020 Ожидать ввода из канала Event может одновременно только один процесс в транспьютере.
Обычно Event используется для регистрации внешних прерывании в транспьютерной системе. Сигнал прерывания подается на вход транспьютера EventReq. Подтверждение приема сигнала прерывания (чтение из канала Event) выдается в виде уровня 1 по линии EventAck.
Ожидание сигнала от таймера
Программно таймер воспринимается как канал только для чтения, выдающий либо содержимое регистра таймера с соответствующим приоритетом, либо сигнал наступления ожидаемого момента времени.
Все процессы, ожидающие наступления некоторого момента времени (истечения временного интервала) помещаются в очередь к таймеру, соответствующему их приоритету. Очередь процессов отсортирована в порядке наступления ожидаемого момента времени и организована с помощью ссылок между служебными словами в рабочей области процессов. Адрес первого процесса в очереди соответствующего приоритета содержится в служебных словах транспьютера (TPtrLocO, TPtrLocI), в младших адресах памяти. При достижении ожидаемого момента времени диспетчеру передается дескриптор соответствующего процесса для его перевода в конец очереди активных процессов.
Инициализация системы после включения питания
Транспьютер и его ОЗУ построены по КМОП-технологии и не сохраняют своего состояния после отключения питания. Поэтому после включения питания для начала функционирования в транспьютер необходимо загрузить некоторый минимум программного обеспечения. Транспьютер может быть загружен как из внешнего ПЗУ, так и из любого линка. Для указания режима начальной загрузки используется вывод BootFromROM. Если уровень BootFromROM равен 1, то управление передается по адресу FFFFFFFE, по которому обычно содержится команда безусловного перехода на программу начальной загрузки.
Если BootFromROM равен 0, то производится загрузка из линка. После включения питания транспьютер переходит в состояние ожидания приема данных по линкам. Первый байт, принятый по любому из линков, управляет дальнейшим режимом работы транспьютера. Если его значение больше 1, то он интерпретируется как длина кода программы, принимаемой следом за ним. Принимаемые данные записываются в память транспьютера начиная с адреса MemStart, с него же и начинается выполнение программы. Как правило, первой загружается программа начальной загрузки транспьютера, которая обеспечивает загрузку остального программного обеспечения.
Если первый принятый управляющий байт равен 0 или 1, то транспьютер переходит в режим управления памятью.
Управляющий байт, равный 0, заставляет транспьютер интерпретировать следующие 4 байта как адрес памяти, по которому в память будет записано слово, поступившее как следующие 4 байта. После этого транспьютер снова переходит в режим управления памятью, из которого его может вывести лишь прием управляющего байта со значением, большим 1.
Если управляющий байт равен 1, следующие 4 байта задают адрес слова памяти, которое будет считано и передано как 4 байта по тому же линку, из которого поступили в противоположном направлении предыдущие 4 байта. После этого транспьютер остается в режиме управления памятью.
Режим управления памятью используется обычно для целей отладки.
Управление системой
Появление уровня 1 на входе Analyze переводит транспьютер, работающий по программе, в режим управления памятью. Как уже было сказано выше, в этом режиме может быть считано и изменено состояние памяти транспьютера.
Обработка ошибок
Программные ошибки, такие как арифметическое переполнение, деление на 0, выход за границы массива, вызывают установку в транспьютере флага error и появление сигнала на выходе Error. Флаг режима обработки ошибок транспьютера - HaltOnError - позволяет определять поведение транспьютера в случае ошибки (установки флага error): если был задан режим остановки (HaltOnError 1), то в случае возникновения ошибки устанавливается еденица на выходе Error и транспьютер останавливается; если была выполнена установка HaltOnError=0, то в случае ошибки устанавливается в еденицу флаг error, однако транспьютер продолжает работать.
В мультипроцессорных системах выводы Analyze, Reset, Error, Errorin всех транспьютеров обычно соединены согласно схеме, представленной на рис. 79. При такой схеме соединения появление сигнала Error на выводе любого транспьютера переводит всю систему в режим управления памятью. Соответствующие программы в хост-машине позволят определить состояние системы и пути преодоления ошибочной ситуации.