- •Тема 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
- •Властивості та класифікація процесу.
- •Незалежні та взаємодіючі обчислювальні процеси.
- •Види задач синхронізації паралельних процесів.
- •Синхронізація за допомогою блокування пам’яті.
- •Алгоритм деккера.
- •Команда “перевірка” та “встановлення”.
- •Використання семафорів для синхронізації та впорядкування паралельних процесів.
- •Монітороподібні засоби синхронізації паралельних процесів.
- •Поштові ящики.
- •Конвеєри.
- •Черги повідомлень.
5. Паралельна парадигма „клієнт - сервер"
Між виробником і споживачем існує однонаправлений потік інформації. Цей вид міжпроцесорної взаємодії часто зустрічається в паралельних програмах і не має аналогів в послідовних, оскільки в послідовній програмі тільки один потік управління, тоді як виробники і споживачі — незалежні процеси з власними потоками управління і власними швидкостями виконання.
Ще однією типовою схемою в паралельних програмах є взаємозв'язок типу клієнт-сервер. Процес-клієнт запрошує сервіс, потім чекає обробки запиту. Процес-сервер багато разів чекає запит, обробляє його, потім посилає відповідь. Як показано на мал.3, існує двонаправлений потік інформації: від клієнта до серверу і назад. Відносини між клієнтом і сервером в паралельному програмуванні аналогічні відносинам між програмою, що викликає підпрограму, і самою підпрограмою в послідовному програмуванні. Більш того, як підпрограма може бути викликана з декількох місць програми, так і у серверу звичайно є багато клієнтів. Запити кожного клієнта повинні оброблятися незалежно, проте паралельно може оброблятися декілька запитів, подібно тому, як одночасно можуть бути активні декілька викликів однієї і тієї ж процедури.
Мал.3. Клієнти і сервери
Взаємодія типу клієнт-сервер зустрічається в операційних системах, об'єктно-орієнтованих системах, мережах, базах даних і багатьох інших програмах. Типовий приклад — читання і запис файлу. Для визначеності припустимо, що є модуль файлового серверу, що забезпечує дві операції з файлом: read (читати) і write (писати). Коли процес-клієнт хоче отримати доступ до файлу, він викликає операцію читання або запису у відповідному модулі файлового серверу.
На однопроцесорній машині або в іншій системі з пам'яттю, що розділяється, файловий сервер звичайно реалізується набором підпрограм (для операцій read, write і т.д.) і структурами даних, що представляють файли (наприклад, дескрипторами файлів). Отже, взаємодія між процесом-клієнтом і файлом звичайно реалізується викликом відповідної процедури. Проте, якщо файл розділяється, важливо щоб запис в нього вівся одночасно тільки одним процесом, а читатися він може одночасно декількома процесами. Цей різновид завдання — приклад так званого завдання про "читачів і письменників", класичного завдання паралельного програмування.
У розподіленій системі клієнти і сервери звичайно розташовані на різних машинах. Наприклад, розглянемо запит по World Wide Web, який виникає коли користувач відкриває нову адресу URL у вікні програми-броузера. Web-броузер є клієнтським процесом, що виконується на машині користувача. Адреса URL побічно указує на іншу машину, на якій розташована Web-сторінка. Сама Web-сторінка доступна для процесу-серверу, що виконується на іншій машині. Цей процес-сервер може вже існувати або може бути створений; у будь-якому випадку він читає Web-сторінку, визначувану адресою URL, і повертає її на машину клієнта. Насправді при перетворенні адреси URL можуть використовуватися або створюватися додаткові процеси на проміжних машинах по шляху проходження.
Клієнти і сервери програмуються одним з двох способів залежно від того виконуються вони на одній або на різних машинах. У обох випадках клієнти є процесами. На машині з пам'яттю що розділяється сервер звичайно реалізується набором підпрограм. Для захисту критичних секцій і визначення черговості виконання ці підпрограми звичайно реалізуються з використанням взаємних виключень і умовної синхронізації. На мережевих машинах або машинах з розподіленою пам'яттю сервер реалізується одним або декількома процесами які звичайно виконуються не на клієнтських машинах. У обох випадках сервер часто являється багатопотоковою програмою з одним потоком для кожного клієнта.
