- •Тема 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
- •Властивості та класифікація процесу.
- •Незалежні та взаємодіючі обчислювальні процеси.
- •Види задач синхронізації паралельних процесів.
- •Синхронізація за допомогою блокування пам’яті.
- •Алгоритм деккера.
- •Команда “перевірка” та “встановлення”.
- •Використання семафорів для синхронізації та впорядкування паралельних процесів.
- •Монітороподібні засоби синхронізації паралельних процесів.
- •Поштові ящики.
- •Конвеєри.
- •Черги повідомлень.
4. Модель „виробники-споживачі"
Процес-виробник виконує обчислення і виводить потік результатів. Процес-споживач вводить і аналізує потік значень. Багато програм в тій або іншій формі є виробниками і/або споживачами. Поєднання стає особливо цікавим, якщо виробники і споживачі об'єднані в конвеєр — послідовність процесів, в якій кожний з них споживає дані виходу попередника і проводить дані для наступного процесу. Класичним прикладом є конвеєри в операційній системі Unix.
Звичайно прикладний процес в ОС Unix зчитує дані із стандартного файлу вводу stdin і записує в стандартний файл виводу stdout. Звичайно файл вводу— це клавіатура терміналу, з якого викликано програму, а файл виводу — дисплей цього терміналу. Але однієї з найбільш могутніх функцій, запропонованих в ОС Unix, була можливість прив'язки стандартних "пристроїв" вводу-виводу до різних типів файлів. Зокрема, файли stdin і/або stdout можуть бути пов'язані з файлом даних або з "файлом" особливого типу, який називається каналом.
Канал — це буфер (черга типу FIFO, що працює за принципом "First in — first out", тобто "першим увійшов, першим вийшов") між процесом-виробником і процесом-споживачем. Він містить зв'язану послідовність символів. Нові значення дописуються до неї, коли виробник виконує запис в канал. Символи виаляються, коли процес-споживач зчитує їх з каналу.
Прикладна програма в ОС Unix тільки читає дані з файлу stdin, не піклуючись про те, звідки насправді вони туди потрапили. Якщо файл stdin пов'язаний з клавіатурою - на вхід поступають символи, набрані на клавіатурі. Якщо файл stdin пов'язаний з певним файлом - вводиться послідовність символів з цього файлу. Якщо файл stdin пов'язаний з каналом - то вводиться послідовність символів, записаних в цей канал. Аналогічно програма виконує запис у файл stdout, не піклуючись про те, куди насправді поступають дані.
Канали ОС Unix звичайно визначаються за допомогою однієї з командних мов, наприклад csh (С shell — "оболонка С "). Приклад мови csh:
sed -f Script $* | tbl |eqn | groff Macros -
Цей конвейєр містить чотири команди: 1) sed, потоковий текстовий редактор; 2) tbl, процесор таблиць; 3) eqn, процесор рівнянь і 4) groff, програма, що створює дані у форматі Postscript з початкових файлів у форматі troff. Кожна пара команд розділена вертикальною межею, що позначає канал в С shell.
На малюнку 2 показана структура цього конвейєра. Кожна команда є процесом-фільтром. Вхід фільтру sed утворений файлом редагуючих команд (Script) і аргументами командного рядка ($*), якими в даному випадку є відповідні початкові файли тексту книги. Вихід редактора sed передається програмі tbl, направляючій свої вихідні дані програмі eqn, а та передає свій вихід програмі groff. Фільтр groff читає файл Macros для цієї книги, прочитує і обробляє свій стандартний вхід, а потім посилає вихід на принтер в офісі автора.
Мал.2. Конвейєр процесів
Кожен потік на мал. 2 реалізований зв'язаним буфером: синхронізованою чергою значень типу FIFO. Процес-виробник чекає (при необхідності), поки в буфері з'явиться вільне місце, потім додає в кінець буфера новий рядок. Процес-споживач чекає (при необхідності), поки в буфері не з'явиться рядок даних, потім забирає її.
