Системи,
керовані потоком даних. Мова b> Dataflow Graph
Language. B> p>
Курсова
робота Андрєєва М.В. h2>
р. Ульяновськ, 1999 h2>
Вступ h2>
Одним з
методів організації паралельних обчислень є метод, заснований
заснований на принципі управління потоком даних. Зазвичай в обчислювальних
системах, керованих потоком даних, команди машинного рівня управляються
доступністю даних, що проходять по дуг графа потоку даних (ГПД). Такому
принципом керування потоком даних на рівні операцій можна протиставити
принцип управління укрупнених потоком даних (Large-Grain Data Flow), в якому одиниця планування обчислень крупніше
(можливо, набагато більше), ніж один машинна команда. p>
ГПД - одна з
найбільш поширених форм представлення програми в даній моделі
обчислень. Вершини ГПД відповідають окремим процесам, а дуги задають
відносини між ними. Точка вершини, до якої входить дуга, називається вхідним
портом (портом імпорту або входом), а точка, з якої вона виходить, - вихідним
(портом експорту або виходом). За дуг передаються дані з одного процесу в
інший. p>
Даний метод
змушує програміста прийняти поетапний підхід до програмування, але, з
іншого боку, позбавляє від складнощів синхронізації, притаманних большенство
на інші моделі паралелізму. p>
Програмне
забезпечення h2>
Система
призначена для роботи в мережі, в якій будь-які два комп'ютери можуть
обмінюватися даними один з одним. На будь-якому комп'ютері може бути запушенно кілька
процесів. Кожен процес отримує дані через порти імпорту і може отслать
дані через порти експорту по дугах даних іншим процесам. p>
Запуск
програми здійснюється під управлінням диспетчера, який розподіляє
процеси по комп'ютерах і встановлює зв'язки між процесами. Для нормальної
роботи диспетчера на всіх комп'ютерах повинна бути запущена спеціальна
програма - монітор. Монітор за запитом диспетчера запускає процес, вказаний
у запиті, на своєму комп'ютері. p>
Порти імпорту
використовуються як черги, і вони, подібно до каналах в ОС UNIX, буферизує одне або неколько повідомлень
до тих пір, поки їх не отримає адресат. Обсяг буфера обмежений часточки доступною
ємністю пам'яті. Кожен порт імпорту може бути пов'язаний з декількома портами
експорту. p>
Порти експорту
можуть мати кілька каналів, число яких визначається диспетчером після
аналізу графа даних на етапі запуску процесу. Кожен канал обов'язково пов'язаний
тільки з одним портом імпорту. p>
Підготовка
прикладної програми до виконання состоіз з наступних кроків: p>
конструювання
графа потоку даних програми p>
запис графа
потоку даних на мові графів даних DGL p>
обробка
запису на мові DGL p>
написання
прикладних програм для вузлових процесів p>
компіляція
вузлових процесів у формат DLL p>
запуск вузлових
процесів диспетчером на основі DGL p>
Приклад
паралельної програми h2>
Як
прикладу розглянемо задачу наближеного обчислення числа Пі з використанням
правила прямокутників для обчислення певного інтеграла p>
p>
де p>
Згідно
правилом прямокутників, p>
p>
де , а . p>
Слід
відзначити, що це «процесорна» програма. Вона не зачіпає багато проблем
паралельного програмування, наприклад критичний вплив процесів
вводу-виводу. Проте це завдання допоможе ознайомиться з основними
принципами побудови програм, що працюють відповідно до методу управління
потоком даних. p>
Існує
безліч підходів до розв'язання контрольної задачі. Рішення, наведене нижче,
ілюструє всі основні кроки розробки програми. p>
Конструювання
графа потоку даних програми h2>
Граф потоку
даних програми (або граф даних) визначає зв'язки між процесами та дуги
даних. Граф даних специфікує все последуещее конструювання програми
прикладної задачі. Його створення може зажадати чимало зусиль для визначення
того, як розбити програму на керуючі даними процеси, щоб досягти
максимального збільшення швидкості виконання. p>
У межі
розробляється програма може бути створена у вигляді одного процесу, але при
цьому втрачається параллелелізм. Можна створити безліч дрібних процесів, таких
як один оператор або навіть одна арифметична операція, що призведе до різкого
збільшення витрат, пов'язаних із запуском кожного процесу і обміном даних
між ними. Слід зазначити, що
структура розв'язуваної задачі часто наводить на гарне перше наближення. p>
Після того, як
граф даних намальований, кожен процес, початок і кінець кожної дуги позначаються
буквено-цифровим ім'ям, яке використовується в мові DGL. Якщо вихід out має кілька каналів, то його i-й канал позначається на схемі рядком out [i]. P>
p>
Для підрахунку
числа Пі використовується кілька робочих процесів, які обчислюють свої частини інтеграла і пересилають результат
підсумовує процесу. Робочі процеси звертаються за черговим завданням до
процесу розподілу робіт. Вся робота не розподіляється рівномірно заздалегідь
між процесами: один робочий процес, якщо він запущений на більш швидкій
машині, може виконати левову частку роботи. p>
З входу num_iter процес Summer зчитує число часткових сум,
які він повинен підсумувати до завершення своєї роботи. На вхід arg процесу Worker надходить завдання: кордони і число
інтервалів. Якщо число інтервалів у завданні дорівнює нулю, то процес завершує
роботу. Пересилаючи свій ідентифікатор через вихід demand робочий процес звертається за черговим
завданням. p>
Запис графа
потоку даних на мові b> Data b> b> Graph b> b> Language b> p>
Переклад графа
потоку даних у мову DGL здійснюється однозначним чином. У записі на DGL кожен процес представлений заголовком і
списком вхідних та вихідних портів. При описі процесу можна використовувати
числові константи, які визначаються на початку програми. Ряд констант
задається диспетчером - константа nprocs, наприклад, дорівнює числу доступних процесорів в системі. Синтаксис
мови DGL наведено в
додатку А. p>
p>
11 DATAFLOW GRAPH Pi; p>
12 p>
13 NW = nprocs - 2 p>
14 p>
15 PROCESS Manager p>
16 EXPORT: p>
17 worker
[NW] -> Worker [c]: arg; p>
18
num_iter ->
Summer: num_iter; p>
19 IMPORT: p>
20
demand_list; p>
21 END p>
22 p>
23 PROCESS Worker [NW] p>
24 EXPORT: p>
25 demand
-> Manager: demand_list; p>
26 result
-> Summer: part_sum; p>
27 IMPORT: p>
28 arg; p>
29 END p>
30 p>
31 PROCESS Summer p>
32 IMPORT: p>
33
num_iter; p>
34
part_sum; p>
35 END p>
Запис
програми обчислення Пі мовою b> DGL b> p>
У рядку 13
визначається константа NW - число робочих процесів. Її значення вибирається так, щоб
використовувати для вирішення задачі всі комп'ютери мережі. p>
У рядку 23
описується процес Worker.
Константа NW,
розташована в квадратних дужках після імені процесу, дає вказівку
диспетчеру створити NW
копій даного процесу. Причому, якщо значення NW менше 1, то все одно створюється одна
копія. Всі копії нумеруються, номер копії записується в константу p, яка може бути використана при
описі виходів процесу. Розглянемо приклад. P>
result