Запис графа потоку даних на мові 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. br/>
Запис у рядку 17 означає, що вихід worker процесу Manager буде мати NW каналів. Причому, якщо значення NW менше 1, то все одно буде створений один канал. Всі канали нумеруються, номер каналу записується в константу С. У прикладі С-й канал виходу worker пов'язаний зі входом arg С-ой копії процесу Worker.
Після обробки графа програмою dglc, на диску будуть створені наступні файли: Manager.dpr, Worker.dpr, Summer.dpr, ManagerUnit.pas, WorkerUnit.pas, SummerUnit.pas. Чергова завдання полягає в написанні прикладних задач для всіх вузлових процесів. Для цього потрібно створити файли ManagerBody.pas, WorkerBody.pas, SummerBody.pas. br/>
Написання тіла для кожного процесу
Кожен процес записується у вигляді процедури на мові Паскаль. Ім'я процедури - Body - фіксоване і не може бути змінено. Файл програми починається з імені процесу і закінчується словом Body.
10 PROCEDURE Body;
11 VAR
12 Task: RECORD N: word; a, b: real; END;
13 i, Wrk...