Системы, управляемые потоком данных. Язык Dataflow Graph Language
Категория реферата: Рефераты по информатике, программированию
Теги реферата: реферат на тему современные, диплом государственного образца
Добавил(а) на сайт: Kulesh.
Предыдущая страница реферата | 1 2 3 4 | Следующая страница реферата
Из входа 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.
Написание тела для каждого процесса
Для каждого процесса нунжно создать файл-шаблон. Имя такого файла совпадает
с именем процесса и имеет расширение frm (можно воспользоваться файлом
Process.frm). В нашем случае имеем три файла: Manager.frm, Worker.frm и
Summer.frm. В каждом файле есть процедура, имя которой заканчивается на
Body. Внутри нее записывается тело процесса.
10 PROCEDURE ManagerBody;
11 VAR
12 Task : RECORD N:cardinal; a,b:real; END;
13 i,WrkId : cardinal;
14 CONST
15 N : cardinal = 10;
16 BEGIN
17 exportNumIter[0].Send (N, SizeOf(N));
18 Task.N := 10*N;
19 Task.b := 0;
20 FOR i := 1 TO N DO BEGIN
21 Task.a := Task.b;
22 Task.b := i * 1.0 / N;
23 importDemandList.Receive (WrkId, SizeOf(WrkId));
24 exportWorker[WrkId].Send (Task, SizeOf(Task));
25 END;
26 Task.N := 0;
27 FOR i := 1 TO exportWorker.NChannels DO
28 exportWorker[i-1].Send (Task, SizeOf(Task));
29 END;
Файл Manager.frm : тело процесса Manager
Переменная Task описывает задание для рабочего процесса: a,b - границы, N
- число интервалов. Константа N, описанная в строке 15, равна числу
разбиений отрезка [0;1].
В начале работы посылаем процессу Summer число разбиений N (строка 17) . В строке 23 ждем запроса от одного из рабочих процессов. Запрос представляет собой идентификатор запрашивающего процесса. Получив запрос, отсылаем очередное задание соответствующему рабочему (строка 24).
После того, как задания распределены, нужно сообщить об этом всем рабочим процессам. Для этого служат строки 26-28: по всем каналам порта exportWorker посылаем задание с нулевым числом интервалов - сигнал о завершении работы.
30 PROCEDURE WorkerBody;
31 VAR
32 Task : RECORD N:word; a,b:real; END;
33 S : real;
34 i : word;
35 FUNCTION f(x:real):real;
36 BEGIN
37 Result := 4 / (1 + x*x);
38 END;
39 BEGIN
40 exportDemand[0].Send (FloLib.CopyNumber, SizeOf(cardinal));
41 WHILE (true) DO WITH Task DO BEGIN
42 importArg.Receive (Task, SizeOf(Task));
43 IF (Task.N = 0) THEN EXIT;
44 h := (b-a)/N;
45 S := 0;
46 FOR i := 1 TO N DO
47 S := S + f(a+(i-0.5)*h);
48 S := h*S;
49 exportPartSum[0].Send (S, SizeOf(S));
50 exportDemand[0].Send (FloLib.CopyNumber,SizeOf(cardinal));
51 END;
52 END;
Файл Worker.frm : тело процесса Worker
Бесконечный цикл 41-51 обеспечивает работу процесса до получения сигнала завершения от распределителя работ Manager.
В строке 42 ждем очередное задание Task. Если число интервалов в задании
равно 0, то завершаем работу. В противном случае вычисляем частичную сумму
на интервале (Task.a; Task.b) и отсылаем ее суммирующему процессу (строки
44-49). В строке 50 обращаемся к распределителю работ за очередным
заданием.
53 PROCEDURE SummerBody;
54 VAR
55 N, i : cardinal;
56 F : TextFile;
57 TotalSum, S : real;
58 BEGIN
59 importNumIter.Receive (N, SizeOf(N));
60 TotalSum := 0;
61 FOR i := 1 TO N DO BEGIN
62 importPartSum.Receive (S, SizeOf(S));
63 TotalSum := TotalSum + S;
64 END;
65 AssignFile (F, ‘Pi.result’);
66 Rewrite (F);
67 WriteLn (F, ‘Pi = ’, TotalSum);
68 CloseFile (F);
69 END;
Файл Summer.frm : тело процесса Summer
В строках 61-64 собираются частичные суммы от всех рабочих процессов и суммируются в переменной TotalSum. Число частичных сумм записываем в переменну N из порта importNumIter (строка 59).
Компиляция узловых процессов
После того, как созданы шаблоны, нужно получить из них файлы, пригодные для
компиляции. Для этого используется компилятор с языка DGL: dglc Pi.dgl
Компилятор, если нет ошибок, сгенерирует следующие файлы: Pi.dpr,
Manager.pas, Worker.pas, Summer.pas.
Загрузка и выполнение программы
Рекомендуем скачать другие рефераты по теме: сочинения по картинам, изложение на тему.
Предыдущая страница реферата | 1 2 3 4 | Следующая страница реферата