- •Тема 1. Вступ в паралельні та розподілені обчислення.
- •Поняття паралелізму.
- •Два узагальнені підходи до досягнення паралельності.
- •3. Переваги паралельних обчислень
- •4. Найпростіша модель розпаралелення
- •Переваги розподілених обчислень.
- •6. Найпростіші моделі розподілених обчислень.
- •7. Мульти-агентні розподілені обчислення.
- •8. Основні етапи проектування паралельних та розподілених алгоритмів.
- •8.1. Декомпозиція
- •8.2. Зв'язок
- •8.3. Синхронізація
- •9. Базові рівні програмного паралелізму
- •9.1. Паралелізм на рівні інструкцій
- •9.2. Паралелізм на рівні підпрограм
- •9.3. Паралелізм на рівні об'єктів
- •9.4. Паралелізм на рівні програм
- •Тема 2. Архітектура паралельних обчислювальних систем.
- •Класифікація паралельних комп’ютерів та систем
- •Векторно-конвеєрні комп’ютери
- •Паралельні комп’ютери з спільною пам’яттю
- •Паралельні комп’ютери з розподіленою пам’яттю
- •Концепція grid або метакомп’ютеринг
- •Тема 3. Основні моделі паралельних та розподілених обчислень.
- •Основні типи паралельних програм.
- •Ітеративний паралелізм.
- •3. Рекурсивний паралелізм
- •4. Модель „виробники-споживачі"
- •5. Паралельна парадигма „клієнт - сервер"
- •6. Паралельна модель „взаємодіючі рівні"
- •Тема 4: Засоби розробки паралельних програм.
- •1.Основні підходи до розробки паралельних програм
- •2.Використання бібліотеки паралельного програмування pthreads
- •Навчальний приклад: Pthreads
- •3. Бібліотека паралельного програмування OpenMp
- •4. Бібліотека паралельного програмування мрі
- •Система програмування mpi
- •Властивості та класифікація процесу.
- •Незалежні та взаємодіючі обчислювальні процеси.
- •Види задач синхронізації паралельних процесів.
- •Синхронізація за допомогою блокування пам’яті.
- •Алгоритм деккера.
- •Команда “перевірка” та “встановлення”.
- •Використання семафорів для синхронізації та впорядкування паралельних процесів.
- •Монітороподібні засоби синхронізації паралельних процесів.
- •Поштові ящики.
- •Конвеєри.
- •Черги повідомлень.
8.2. Зв'язок
Після декомпозиції програмного рішення на ряд паралельно виконуваних частин звичайно виникає питання про зв'язок цих частин між собою. Як же реалізувати зв'язок, якщо ці частини рознесли по різних процесах або різних комп'ютерах? Чи повинні різні частини ПЗ спільно використовувати загальну область пам'яті? Яким чином одна частина ПЗ дізнається про те, що інша справилася з своїм завданням ? Яка частина повинна першою приступити до роботи? Звідки один компонент дізнається про відмову іншого компоненту? На ці і багато інші питання необхідно знайти відповіді при проектуванні паралельних і розподілених систем. Якщо окремим частинам ПЗ не потрібно зв'язуватися між собою, значить , вони насправді не утворюють єдиної програми.
8.3. Синхронізація
Декомпозиція робіт, як вже було відмічено вище, визначає, що повинні робити різні частини ПЗ. Коли безліч компонентів ПЗ працюють в рамках одного завдання , їх функціонування необхідно координувати. Певний компонент повинен "уміти" визначити, коли досягається рішення всієї задачі. Необхідно також скоординувати порядок виконання компонентів. При цьому виникає безліч питань. Чи всі частини ПЗ повинні одночасно приступати до роботи або тільки деякі, а інші можуть знаходитися поки в стані очікування ? Яким двом (або більше) компонентам необхідний доступ до одного і того ж ресурсу? Хто має право одержати його першим? Якщо деякі частини ПЗ завершать свою роботу набагато раніше за інших, то чи потрібно їм "доручати" нову роботу? Хто повинен давати нову роботу в таких випадках? ДЗС (декомпозиція, зв'язок і синхронізація) — це той мінімум питань, які необхідно вирішити , приступаючи до паралельного або розподіленого програмування. Крім суті проблем, складових ДЗС , важливо також розглянути їх прив'язку. Існує декілька рівнів паралелізму в розробці програм, і в кожному з них ДЗС-складові застосовуються по-різному.
9. Базові рівні програмного паралелізму
Тут ми досліджуємо можливості паралелізму в межах програми (на відміну паралелізму на рівні операційної системи або апаратних засобів). Не дивлячись на те що паралелізм на рівні операційної системи або апаратних засобів підтримує паралелізм програм, нас все ж таки цікавить сама програма. Отже, паралелізм можна забезпечити на рівні:
інструкцій;
підпрограм (функцій або процедур);
об'єктів;
програм.
9.1. Паралелізм на рівні інструкцій
Паралелізм на рівні інструкцій виникає, якщо декілька частин однієї інструкції можуть виконуватися одночасно. На рис. 3. показаний приклад декомпозиції однієї інструкції з метою досягнення паралелізму виконання окремих операцій.
На рис. 3 компонент (А + В) можна обчислити одночасно з компонентом (С - D). Цей вид паралелізму звичайно підтримується директивами компілятора і не потрапляє під управління С++ - програміста.
9.2. Паралелізм на рівні підпрограм
ДЗС-структуру програми можна представити у вигляді ряду функцій, тобто сума робіт, з яких складається програмне рішення , розбивається на деяку кількість функцій. Якщо ці функції розподілити по потоках, то кожну функцію в цьому випадку можна виконати на окремому процесорі, і, якщо у вашому розпорядженні буде досить процесорів, то всі функції зможуть виконуватися одночасно.
