Системы, управляемые потоком данных. Язык "Dataflow Graph Language" — страница 3

  • Просмотров 1442
  • Скачиваний 146
  • Размер файла 49
    Кб

канал обозначается на схеме строкой out[i]. Для подсчета числа Пи используется несколько рабочих процессов, которые вычисляют свои части интеграла и пересылают результат суммирующему процессу. Рабочие процессы обращаются за очередным заданием к процессу распределения работ. Вся работа не распределяется заранее равномерно между процессами: один рабочий процесс, если он запущен на более быстрой машине, может выполнить львиную

долю работы. Из входа num_iter процесс Summer считывает число частичных сумм, которые он должен просуммировать до завершения своей работы. На вход arg процесса Worker поступает задание: границы и число интервалов. Если число интервалов в задании равно нулю, то процесс завершает работу. Пересылая свой идентификатор через выход demand рабочий процесс обращается за очередным заданием. Запись графа потока данных на языке Data Graph Language Перевод

графа потока данных в язык DGL совершается однозначным образом. В записи на DGL каждый процесс представлен заголовком и списком входных и выходных портов. При описании процесса можно использовать числовые константы, которые определяются в начале программы. Ряд констант задается диспетчером - константа nprocs, например, равна числу доступных процессоров в системе. Синтаксис языка DGL приведен в приложении А. 11 DATAFLOW GRAPH Pi; 12 13 NW = nprocs - 2 14

15 PROCESS Manager 16 EXPORT: 17 worker [NW] --> Worker [c]:arg; 18 num_iter --> Summer:num_iter; 19 IMPORT: 20 demand_list; 21 END 22 23 PROCESS Worker [NW] 24 EXPORT: 25 demand --> Manager:demand_list; 26 result --> Summer:part_sum; 27 IMPORT: 28 arg; 29 END 30 31 PROCESS Summer 32 IMPORT: 33 num_iter; 34 part_sum; 35 END Запись программы вычисления Пи на языке DGL В строке 13 определяется константа NW - число рабочих процессов. Ее значение выбирается так, чтобы использовать для решения задачи все компьютеры сети. В строке 23 описывается процесс Worker. Константа NW,

расположенная в квадратных скобках после имени процесса, дает указание диспетчеру создать NW копий данного процесса. Причем, если значение NW меньше 1, то все равно создается одна копия. Все копии нумеруются, номер копии записывается в константу p, которая может быть использована при описании выходов процесса. Рассмотрим пример. result à filter[2*p+1]:arg Данная запись означает, что выход result р-й копии процесса будет связан со входом arg

(2р+1)-й копии процесса filter. Запись в строке 17 означает, что выход worker процесса Manager будет иметь NW каналов. Причем, если значение NW меньше 1, то все равно будет создан один канал. Все каналы нумеруются, номер канала записывается в константу С. В примере С-й канал выхода worker связан со входом arg С-ой копии процесса Worker. Написание тела для каждого процесса Для каждого процесса нунжно создать файл-шаблон. Имя такого файла совпадает с именем