Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tekhnologiyi_rozpodilenikh_sistem_ta_paralelnik...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
850.43 Кб
Скачать

8.2. Зв'язок

Після декомпозиції програмного рішення на ряд паралельно виконуваних частин звичайно виникає питання про зв'язок цих частин між собою. Як же реалізувати зв'язок, якщо ці частини рознесли по різних процесах або різних комп'ютерах? Чи повинні різні частини ПЗ спільно використовувати загальну область пам'яті? Яким чином одна частина ПЗ дізнається про те, що інша справилася з своїм завданням ? Яка частина повинна першою приступити до роботи? Звідки один компонент дізнається про відмову іншого компоненту? На ці і багато інші питання необхідно знайти відповіді при проектуванні паралельних і розподілених систем. Якщо окремим частинам ПЗ не потрібно зв'язуватися між собою, значить , вони насправді не утворюють єдиної програми.

8.3. Синхронізація

Декомпозиція робіт, як вже було відмічено вище, визначає, що повинні робити різні частини ПЗ. Коли безліч компонентів ПЗ працюють в рамках одного завдання , їх функціонування необхідно координувати. Певний компонент повинен "уміти" визначити, коли досягається рішення всієї задачі. Необхідно також скоординувати порядок виконання компонентів. При цьому виникає безліч питань. Чи всі частини ПЗ повинні одночасно приступати до роботи або тільки деякі, а інші можуть знаходитися поки в стані очікування ? Яким двом (або більше) компонентам необхідний доступ до одного і того ж ресурсу? Хто має право одержати його першим? Якщо деякі частини ПЗ завершать свою роботу набагато раніше за інших, то чи потрібно їм "доручати" нову роботу? Хто повинен давати нову роботу в таких випадках? ДЗС (декомпозиція, зв'язок і синхронізація) — це той мінімум питань, які необхідно вирішити , приступаючи до паралельного або розподіленого програмування. Крім суті проблем, складових ДЗС , важливо також розглянути їх прив'язку. Існує декілька рівнів паралелізму в розробці програм, і в кожному з них ДЗС-складові застосовуються по-різному.

9. Базові рівні програмного паралелізму

Тут ми досліджуємо можливості паралелізму в межах програми (на відміну паралелізму на рівні операційної системи або апаратних засобів). Не дивлячись на те що паралелізм на рівні операційної системи або апаратних засобів підтримує паралелізм програм, нас все ж таки цікавить сама програма. Отже, паралелізм можна забезпечити на рівні:

інструкцій;

підпрограм (функцій або процедур);

об'єктів;

програм.

9.1. Паралелізм на рівні інструкцій

Паралелізм на рівні інструкцій виникає, якщо декілька частин однієї інструкції можуть виконуватися одночасно. На рис. 3. показаний приклад декомпозиції однієї інструкції з метою досягнення паралелізму виконання окремих операцій.

На рис. 3 компонент (А + В) можна обчислити одночасно з компонентом (С - D). Цей вид паралелізму звичайно підтримується директивами компілятора і не потрапляє під управління С++ - програміста.

9.2. Паралелізм на рівні підпрограм

ДЗС-структуру програми можна представити у вигляді ряду функцій, тобто сума робіт, з яких складається програмне рішення , розбивається на деяку кількість функцій. Якщо ці функції розподілити по потоках, то кожну функцію в цьому випадку можна виконати на окремому процесорі, і, якщо у вашому розпорядженні буде досить процесорів, то всі функції зможуть виконуватися одночасно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]