Оскільки підзадачі не можуть бути абсолютно незалежними, наступним етапом розробки паралельного алгоритму є проектування обмінів даними між ними, яке полягає в визначенні структури каналів зв’язку і повідомлень, якими повинні обмінюватися підзадачі.
Канали зв’язку можуть програмуватися явно і неявно. Якщо на першому етапі виконувалась декомпозиція даних, тоді проектувати комунікації дуже важко. При функціональній декомпозиції проектування комунікацій простіше – вони відповідають потокам даних між підзадачами.
Комунікації класифікуються за такими ознаками: розміщення, структурованості, за відношенням до зміни в часі, за відношенням до засобів синхронізації.
За розміщенням комунікації поділяються на:
- локальні (кожна підзадача зв’язана з невеликою кількістю інших підзадач);
- глобальні (кожна підзадача зв’язана з великою кількістю інших підзадач).
За ознакою структурованості комунікації поділяються на:
- структуровані (кожна підзадача і підзадачі, що зв’язані з нею утворюють регулярну структуру);
|
|
- неструктуровані (підзадачі зв’язані довільним графом).
За відношенням до зміни в часі комунікації поділяються на:
- статичні (схема комунікації з часом не змінюється);
- динамічні (схема комунікації змінюється в процесі виконання програми).
За відношенням до засобів синхронізації комунікації є:
- синхронні (відправник і отримувач даних координують обмін між собою).
- асинхронні (обмін даними не координується).
Рекомендації з проектування комунікацій:
- кількість комунікацій у підзадачах повинна бути приблизно однаковою (в іншому випадку буде погана масштабованість);
- ефективніше використовувати локальні комунікації;
- комунікації повинні бути паралельними.
Крім того, при проектуванні комунікацій необхідно уникати тупикових ситуацій, які можуть бути зв’язані з неправильною послідовністю обміну даними між процесами (Наприклад, перший процес очікує дані від другого, другий від третього, а останньому потрібні результати роботи першого).
Обмін повідомленнями може бути реалізований по різному: за допомогою потоків, міжпроцесорних комунікацій, тощо. Найрозповсюдженіший спосіб програмування комунікацій – використання бібліотек, що реалізують обмін повідомленнями, наприклад, бібліотеки PVM i MPI дозволяють створити паралельні програми для різних платформ. CORBA (Common Object Reguest Broker Architecture) визначає протокол взаємодії між процесами, незалежний від мови програмування і операційної системи. Для опису інтерфейсу використовується декларативна мова IDL (Interface Definition Language).