home   contents  previous      next        up

Программирование с помощью пакета INMOS toolset

Инструментальный пакет INMOS toolset предназначен для разработки параллельных Си-программ, которые должны работать в сети транспьютеров. В пакет входят следующие программы:

  1. Компилятор icc языка ANSI Си, расширенный таким набором понятий для параллельного программирования, как процесс, канал и семафор.
  2. Редактор связей ilink, библиотекарь ilibr, программы icvlink, ilist для работы с объектными модулями, в частности, позволяющие использовать объектные модули, генерируемые компиляторами 3L Parallel C, Occam 2.
  3. Конфигуратор icconf, обрабатывающий описание отображения процессов программы на транспьютерную сеть.
  4. Сборщик процессов icollect, формирующий загружаемые в транспьютерную сеть программы.
  5. Служебный процессор iserver, осуществляющий пересылку параллельной программы в транспьютерную сеть, а затем обеспечивающий е§ взаимодействие с ОС внешнего компьютера.
  6. Интерактивный символьный отладчик idebug.
  7. Программаторы программируемого ПЗУ ieprom, iemit, icvemit.
  8. Программы, облегчающие разработку и отладку транспьютерных программ idump, isim, imakef, iskip.

Средства пакета INMOS toolset позволяют строить прикладные программы из произвольного числа независимо выполняющихся процессов, использующих как одно и тоже виртуальное адресное пространство (легковесные процессы или сопроцессы), так и разные виртуальные адресные пространства (полновесные процессы или задачи). Задачи можно распределить по транспьютерам сети. Распределение задач по транспьютерам, установление связи между ними называется конфигурированием прикладной программы. Информация о конфигурировании программы записывается на Си-подобном языке, называемом языком конфигурирования программ. Описание конфигурации программы (или сгенерированный на его основе конфигурационный файл) используется сборщиком процессов для построения загружаемой в транспьютерную сеть программы.

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

Итак, схема построения транспьютерной программы с помощью пакета INMOS toolset состоит в следующем.

  1. Объектные модули раздельно откомпилированных программ собираются в исполняемые модули (образы задач) с помощью редактора связей.
  2. На языке конфигурирования транспьютерных программ описывается транспьютерная сеть (транспьютеры и их соединения), задачи, их распределение по транспьютерам и взаимодействие с помощью каналов.
  3. Конфигуратор и сборщик программы обрабатывают описание конфигурации транспьютерной программы и из указанных модулей формирует загружаемую по сети транспьютерную программу. Каждая транспьютерная программа содержит код, осуществляющий начальную загрузку сети и обеспечивающий начало выполнения процессов.

При построении транспьютерной программы необходимо решить ряд проблем:

  1. Разбить программу на множество параллельных процессов.
    Выделяя в программе параллельные процессы, можно заранее спланировать, в каком режиме они будут выполняться - параллельном или в квазипараллельном (в режиме разделения времени). Образы процессов (задач), которые должны выполняться параллельно, формируются из раздельно компилируемых модулей с помощью редактора связей и размещаются на разных транспьютерах. Если задачи поместить на один и тот же транспьютер, то они, естественно, будут выполняться в квазипараллельном режиме. Каждый процесс-задача обладает защищенным регионом памяти, содержащим собственные области кода и данных.
    Квазипараллельные процессы можно реализовать с помощью сопроцессор. Сопроцесс - это процесс, порождаемый некоторым процессом и работающий одновременно с ним в мультипрограммном режиме. Оба процесса работают в адресном пространстве задачи-родителя. Сопроцесс описывается как обычная функция, которая может использовать статические данные программы. Обмен между сопроцессами можно реализовать как через общие переменные, так и через каналы (внутренние каналы), а синхронизацию выполнения - с помощью каналов и семафоров.
  2. Организовать взаимодействие процессов с помощью каналов.
    Задачи не имеют общих данных. Они могут обмениваться информацией только с помощью однонаправленных каналов. Канал может передавать данные только в одном направлении. Чтобы передавать данные в обоих направлениях, необходимо использовать два канала. Каналы синхронные - отправив сообщение по каналу, передающий процесс ожидает от принимающего подтверждение о приеме сообщения прежде, чем послать следующее сообщение, т.е. принимающий процесс не выполняется, пока не получит данные, а передающий - пока не получит подтверждение о приеме данных. Каналы, связывающие задачи, (внешние каналы) являются параметрами программ. Связь задач описывается при конфигурировании программы. Каналами можно связать задачи, размещенные как на одном и том же транспьютере, так и на транспьютерах, связанных линией связи.
  3. Распределить задачи между транспьютерами.
    Распределение задач по транспьютерам задается в описании конфигурации программы. С одной стороны желательно как можно больше задач разместить на разных транспьютерах, чтобы уменьшить время выполнения программы, а с другой стороны требуется организовать обмен данными между ними, однако взаимодействующие процессы должны быть размещены на транспьютерах, связанных линиями связи.
  4. Реализовать передачу сообщений между задачами, расположенными на транспьютерах, несвязанных линиями связи.
    Передачу сообщений между задачами, размещенными на удаленных друг от друга транспьютерах, можно осуществить одним из следующих способов:
    1. Реконфигурированием имеющейся транспьютерной сети, что требует специальной аппаратной поддержки (например, IMS B008) и не всегда возможно.
    2. Перераспределением задач, что может привести к той же проблеме, но только с другими задачами.
    3. Программированием дополнительных процессов, которые размещаются на транспьютерах, находящихся на пути между рассматриваемыми двумя, и которые реализуют передачу сообщений между ними. Это требует специального программирования и может привести к построению программы маршрутизации сообщений.
    4. Используя программу маршрутизации сообщений (маршрутизатор), которая состоит из процессов, размещаемых на каждом транспьютере сети вместе с процессами прикладной программы и реализующих передачу сообщений. Маршрутизатор может организовывать соединение каждого процесса с каждым другим, а может настраиваться на конфигурацию конкретной программы. Построить маршрутизатор не так просто, поскольку необходимо следить за тем, чтобы в процессе работы не возникала блокировка процессов, причем работа маршрутизатора замедлит работу прикладной программы и может изменить картину ее выполнения.
    5. Комбинируя вышеуказанные способы.

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

Язык Си пакета INMOS toolset расширен следующими понятиями параллельного программирования:

  1. Сопроцесс.
    Объекты структурного типа Process сохраняют информацию о сопроцессах, создаваемых задачей и выполняющихся одновременно с ней. Имеется набор подпрограмм манипулирования сопроцессами.
  2. Канал.
    Понятие канала вводится в язык с помощью типа данных Channel и пакета подпрограмм для работы с объектами этого типа. Каналы используются для передачи сообщений в одном направлении и только между двумя процессами.
  3. Семафор.
    Для синхронизации процессов, обращающихся к разделяемым данным, можно использовать переменные структурного типа Semaphore, значения которых можно опрашивать и менять с помощью специальных операций.


home   contents  previous      next        up