з наступних кроків:
В· конструювання графа потоку даних програми
В· запис графа потоку даних на мові графів даних DGL
В· обробка запису мовою DGL
В· написання прикладних програм для вузлових процесів
В· компіляція вузлових процесів у формат DLL
В· запуск вузлових процесів диспетчером на основі DGL
Приклад паралельної програми
Як приклад розглянемо задачу наближеного обчислення числа Пі з використанням правила прямокутників для обчислення визначеного інтеграла
В
де
Згідно з правилом прямокутників,
В
де, аВ . p> Слід зазначити, що це В«процесорнаВ» програма. Вона не зачіпає багато проблем паралельного програмування, наприклад критичний вплив процесів введення-виведення. Проте це завдання допоможе ознайомиться з основними принципами побудови програм, що працюють відповідно до методу управління потоком даних.
Існує безліч підходів до вирішення контрольної завдання. Рішення, наведене нижче, ілюструє всі основні кроки розробки програми.
Конструювання графа потоку даних програми
Граф потоку даних програми (або граф даних ) визначає зв'язку між процесами і дугами даних. Граф даних специфікує все последуещее конструювання програми прикладної задачі. Його створення може зажадати чимало зусиль для визначення того, як розбити програму на керуючі даними процеси, щоб досягти максимального збільшення швидкості виконання.
У межі розробляється програма може бути створена у вигляді одного процесу, але при цьому втрачається параллелелізм. Можна створити безліч дрібних процесів, таких як один оператор або навіть одна арифметична операція, що призведе до різкого збільшення витрат, пов'язаних із запуском кожного процесу і обміном даних між ними. Слід зазначити, що структура розв'язуваної задачі часто наводить на гарне перше наближення.
Після того, як граф даних намальований, кожен процес, початок і кінець кожної дуги позначаються буквено-цифровим ім'ям, яке використовується в мові DGL. Якщо вихід out має кілька каналів, то його i-й канал позначається на схемі рядком out [i].
В
Для підрахунку числа Пі використовується кілька робочих процесів, які обчислюють свої частини інтеграла і пересилають результат суммирующему процесу. Робочі процеси звертаються за черговим завданням до процесу розподілу робіт. Вся робота не розподіляється заздалегідь рівномірно між процесами: один робочий процес, якщо він запущений на більш швидкій машині, може виконати левову частку роботи.
З входу num_iter процес Summer зчитує число часткових сум, які він повинен підсумувати до завершення своєї роботи. На вхід arg процесу Worker надходить завдання: межі і число інтервалів. Якщо число інтервалів у завданні дорівнює нулю, то процес завершує роботу. Пересилаючи свій ідентифікатор через вихід demand робочий процес звертається за черговим завданням....