Программирование с помощью пакета INMOS toolset
Инструментальный пакет
INMOS toolset предназначен для разработки
параллельных Си-программ, которые должны работать в сети транспьютеров.
В пакет входят следующие программы:
- Компилятор icc
языка ANSI Си, расширенный таким набором понятий для параллельного
программирования, как процесс, канал и семафор.
- Редактор связей ilink,
библиотекарь ilibr, программы icvlink, ilist
для работы с объектными модулями, в частности, позволяющие использовать
объектные модули, генерируемые компиляторами 3L Parallel C,
Occam 2.
- Конфигуратор icconf,
обрабатывающий описание отображения процессов программы на транспьютерную
сеть.
- Сборщик процессов
icollect, формирующий загружаемые в транспьютерную сеть
программы.
- Служебный процессор
iserver, осуществляющий пересылку параллельной программы
в транспьютерную сеть, а затем обеспечивающий е§ взаимодействие
с ОС внешнего компьютера.
- Интерактивный символьный
отладчик idebug.
- Программаторы программируемого
ПЗУ ieprom, iemit, icvemit.
- Программы, облегчающие
разработку и отладку транспьютерных программ idump, isim,
imakef, iskip.
Средства пакета INMOS
toolset позволяют строить прикладные программы из произвольного
числа независимо выполняющихся процессов, использующих как одно
и тоже виртуальное адресное пространство (легковесные процессы
или сопроцессы), так и разные виртуальные адресные пространства
(полновесные процессы или задачи). Задачи можно распределить по
транспьютерам сети. Распределение задач по транспьютерам, установление
связи между ними называется конфигурированием прикладной программы.
Информация о конфигурировании программы записывается на Си-подобном
языке, называемом языком конфигурирования программ. Описание конфигурации
программы (или сгенерированный на его основе конфигурационный
файл) используется сборщиком процессов для построения загружаемой
в транспьютерную сеть программы.
Описание конфигурации
программы состоит из описаний сети взаимодействующих задач и сети
процессоров, связанных отображением первой сети на вторую. Сеть
задач - это описание задач и их взаимодействия через каналы. В
описание задачи входит описание его входных параметров, каналов
внешней связи, с помощью которых задачи связываются друг с другом
(канал языка конфигурирования так же, как и канал языка Си, -
это однонаправленная двухточечная "коммуникационная линия").
Сеть процессоров описывает имеющиеся в сети процессоры и физические
соединения между ними.
Итак, схема построения
транспьютерной программы с помощью пакета INMOS toolset состоит
в следующем.
- Объектные модули раздельно
откомпилированных программ собираются в исполняемые модули (образы
задач) с помощью редактора связей.
- На языке конфигурирования
транспьютерных программ описывается транспьютерная сеть (транспьютеры
и их соединения), задачи, их распределение по транспьютерам и
взаимодействие с помощью каналов.
- Конфигуратор и сборщик
программы обрабатывают описание конфигурации транспьютерной программы
и из указанных модулей формирует загружаемую по сети транспьютерную
программу. Каждая транспьютерная программа содержит код, осуществляющий
начальную загрузку сети и обеспечивающий начало выполнения процессов.
При построении транспьютерной
программы необходимо решить ряд проблем:
- Разбить программу
на множество параллельных процессов.
Выделяя в программе параллельные процессы, можно заранее спланировать,
в каком режиме они будут выполняться - параллельном или в квазипараллельном
(в режиме разделения времени). Образы процессов (задач), которые
должны выполняться параллельно, формируются из раздельно компилируемых
модулей с помощью редактора связей и размещаются на разных транспьютерах.
Если задачи поместить на один и тот же транспьютер, то они, естественно,
будут выполняться в квазипараллельном режиме. Каждый процесс-задача
обладает защищенным регионом памяти, содержащим собственные области
кода и данных.
Квазипараллельные процессы можно реализовать с помощью сопроцессор.
Сопроцесс - это процесс, порождаемый некоторым процессом и работающий
одновременно с ним в мультипрограммном режиме. Оба процесса работают
в адресном пространстве задачи-родителя. Сопроцесс описывается
как обычная функция, которая может использовать статические данные
программы. Обмен между сопроцессами можно реализовать как через
общие переменные, так и через каналы (внутренние каналы),
а синхронизацию выполнения - с помощью каналов и семафоров.
- Организовать взаимодействие
процессов с помощью каналов.
Задачи не имеют общих данных. Они могут обмениваться информацией
только с помощью однонаправленных каналов. Канал может передавать
данные только в одном направлении. Чтобы передавать данные в обоих
направлениях, необходимо использовать два канала. Каналы синхронные
- отправив сообщение по каналу, передающий процесс ожидает от
принимающего подтверждение о приеме сообщения прежде, чем послать
следующее сообщение, т.е. принимающий процесс не выполняется,
пока не получит данные, а передающий - пока не получит подтверждение
о приеме данных. Каналы, связывающие задачи, (внешние каналы)
являются параметрами программ. Связь задач описывается при конфигурировании
программы. Каналами можно связать задачи, размещенные как на одном
и том же транспьютере, так и на транспьютерах, связанных
линией связи.
- Распределить задачи
между транспьютерами.
Распределение
задач по транспьютерам задается в описании конфигурации программы.
С одной стороны желательно как можно больше задач разместить на
разных транспьютерах, чтобы уменьшить время выполнения программы,
а с другой стороны требуется организовать обмен данными между
ними, однако взаимодействующие процессы должны быть размещены
на транспьютерах, связанных линиями связи.
- Реализовать передачу
сообщений между задачами, расположенными на транспьютерах, несвязанных
линиями связи.
Передачу сообщений
между задачами, размещенными на удаленных друг от друга транспьютерах,
можно осуществить одним из следующих способов:
- Реконфигурированием
имеющейся транспьютерной сети, что требует специальной аппаратной
поддержки (например, IMS B008) и не всегда возможно.
- Перераспределением
задач, что может привести к той же проблеме, но только с другими
задачами.
- Программированием
дополнительных процессов, которые размещаются на транспьютерах,
находящихся на пути между рассматриваемыми двумя, и которые реализуют
передачу сообщений между ними. Это требует специального программирования
и может привести к построению программы маршрутизации сообщений.
- Используя программу
маршрутизации сообщений (маршрутизатор), которая состоит
из процессов, размещаемых на каждом транспьютере сети вместе с
процессами прикладной программы и реализующих передачу сообщений.
Маршрутизатор может организовывать соединение каждого процесса
с каждым другим, а может настраиваться на конфигурацию конкретной
программы. Построить маршрутизатор не так просто, поскольку необходимо
следить за тем, чтобы в процессе работы не возникала блокировка
процессов, причем работа маршрутизатора замедлит работу прикладной
программы и может изменить картину ее выполнения.
- Комбинируя вышеуказанные
способы.
Транспьютерная программа
загружатся в вычислительную сеть с помощью программы iserver,
использующей для этого информацию из файла образа транспьютерной
программы. Программа iserver загружает в головной транспьютер
первичный загрузчик, которому затем пересылает транспьютерную
программу, содержащую вторичный загрузчик. Вторичный загрузчик
помещает в память код процессов, сопоставленных текущему транспьютеру,
загружает в смежные транспьютеры первичный загрузчик, а затем
пересылает им соответствующие участки кода программы, так же содержащие
вторичный загрузчик и так далее. После того как в код программа
будет распределен по сети, начинается ее выполнение. С началом
выполнение параллельной программы iserver функционирует
как процессор, который обеспечивает для одного процесса (называемого
головным процессом) взаимодействие с операционной системой внешнего
компьютера, предоставляя ему доступ к файлам и видеомонитору
и т.п. Какой процесс является головным, какие его каналы служат
для связи внешним компьютером, указывается в конфигурационном
файле.
Язык Си пакета INMOS
toolset расширен следующими понятиями параллельного программирования:
- Сопроцесс.
Объекты структурного типа Process сохраняют информацию
о сопроцессах, создаваемых задачей и выполняющихся одновременно
с ней. Имеется набор подпрограмм манипулирования сопроцессами.
- Канал.
Понятие
канала вводится в язык с помощью типа данных Channel
и пакета подпрограмм для работы с объектами этого типа. Каналы
используются для передачи сообщений в одном направлении и только
между двумя процессами.
- Семафор.
Для синхронизации
процессов, обращающихся к разделяемым данным, можно использовать
переменные структурного типа Semaphore, значения которых
можно опрашивать и менять с помощью специальных операций.