- •Тема 1. Вступ Лекція 1. Характеристика і зміст дисципліни
- •Тема 2. Паралелізм обчислень. Архітектури паралельних ос Лекція 2. Види і засоби обчислень
- •Лекція 3. Поняття і види паралелізму обчислень
- •Лекція 4. Традиційна класифікація паралельних ос
- •4.1. Послідовні і паралельні архітектури
- •4.2. Основні типи паралельних архітектур
- •Лекція 5. Сучасні паралельні ос і суперкомп'ютери
- •5.1. Класифікації сучасних паралельних ос
- •5.1.1. Зв'язок "пам'ять-процесори"
- •5.1.2. Топологія зв'язків між процесорами
- •5.2. Суперкомп'ютери
- •6.3. Архітектура кластерів
- •Тема 3. Загальна характеристика рс Лекція 6. Розподілені системи: особливості, характеристики
- •1. Мережа газопроводів
- •2. Електромережі
- •3. Мережі зв'язку
- •4. Логістичні системи
- •5. Банківська система
- •6. Корпорації
- •7. Державне та муніципальне управління
- •Лекція 7. Надійність і безпека розподілених систем
- •Тема 4. Розподілена обробка інформації Лекція 8. Розподілені задачі і алгоритми
- •Лекція 9. Мова Triad моделювання розподілених систем
- •Лекція 10. Хвильові алгоритми розповсюдження інформації
- •Лекція 11. Хвильові алгоритми обходу сайтів
- •Лекція 12. Хвильові алгоритми вибору сайтів
- •13.1. Загальні поняття
- •9.2. Мультиагентні системи
- •9.3. Технологія організації мультиагентних систем
- •13.4. Технологія програмної реалізації інтелектуальних мас
- •Лекція 14. Розподілені бази даних
- •Тема 5. Заключення Лекція 15. Огляд матеріалу по курсу
- •Література
Лекція 3. Поняття і види паралелізму обчислень
Способи організації паралельної обробки інформації. Види паралелізму: природний, незалежних гілок, об'єктів та/або даних; конвеєрна обробка, рівні конвеєризації. [2, с. 7-23]
Один з основних факторів, що визначають розвиток ОС, – це висока продуктивність. Загальний метод збільшення продуктивності полягає в паралельній обробці даних при одночасному рішенні декількох задач або етапів однієї задачі. З усього різноманіття способів такої організації можна виділити три основних напрямки:
1) поєднання в часі різних етапів різних задач;
2) одночасне рішення частин (етапів) однієї задачі;
3) конвеєрна обробка даних.
Перший напрямок – це мультипрограмна обробка інформації. Мультипрограмна обробка можлива навіть в однопроцесорній ЕОМ і широко використовується в сучасних системах обробки даних (СОД). Це – одночасність обробки, але не зовсім паралельність.
Другий напрямок можливий тільки при наявності кількох обробних пристроїв (арифметико-логічних пристроїв – АЛП). При цьому використовуються особливості задач або потоків задач, що дозволяє здійснити той або інший вид дійсного паралелізму.
Можна виділити кілька типів паралелізму, що відображають ці особливості.
Природний паралелізм незалежних задач полягає в тому, що в систему надходить безперервний потік не пов'язаних між собою задач, тобто рішення будь даної задачі не залежить від результатів вирішення інших задач. У цьому разі використання декількох АЛП при будь-якому способі комплексування підвищує продуктивність системи.
Паралелізм незалежних гілок – один з найбільш поширених типів паралелізму в обробці інформації. Суть його полягає в тому, що при вирішенні задачі можуть бути виділені окремі незалежні частини – гілки програми, які при наявності декількох обробних пристроїв можуть виконуватися паралельно і незалежно один від одного.
Незалежними гілками програми будемо вважати такі частини задачі, при виконанні яких реалізуються наступні умови:
• ні одна з вхідних для гілки програми величин не є вихідною величиною іншої гілки програми (відсутність функціональних зв'язків);
• для будь-яких двох гілок програми не повинна проводитися запис в одні і ті ж комірки пам'яті (недопустимість використання одних і тих же полів оперативної пам'яті);
• можливість виконання однієї гілки не залежить від результатів або ознак, отриманих при виконанні іншої гілки (незалежність по управлінню);
• гілки повинні виконуватися в різних блоках програми (програмна незалежність).
Гарне уявлення про паралелізм незалежних гілок дає ярусно-паралельна форма програми.
Приклад 3.1. Програма представлена у вигляді сукупності гілок, розташованих в декількох рівнях – ярусах (рис. 3.1). Кружками з цифрами всередині позначені гілки. Довжина гілки представляється цифрою поруч із кружком. Стрілками показані вхідні дані і результати обробки. Вхідні дані позначаються символом х, вихідні дані – символом y. Символи х мають нижні цифрові індекси, що означають номери вхідних величин; символи у мають цифрові індекси і внизу, і вгорі; цифра вгорі відповідає номеру гілки, при виконанні якої отримано цей результат, а цифра внизу означає порядковий номер результату, отриманого при реалізації даної гілки програми.
Зображена на рис. 3.1 програма містить 14 гілок, розташованих на п'яти ярусах. Гілки кожного ярусу не пов'язані один з одним, тобто результати вирішення якої-небудь гілки даного ярусу не є вхідними даними для іншої гілки цього ж ярусу. На цьому же графі можуть бути зображені і зв'язки по управлінню або пам'яті. У цьому випадку граф дозволяє наочно показати повністю незалежні гілки. Для простоти зображення ми цього не робимо.
На прикладі цієї досить простої програми можна виявити переваги ОС, що включає кілька процесорів, і проблеми, які при цьому виникають.
Приймемо, що довжина i-ї гілки представляється числом тимчасових одиниць ti, які потрібні для її виконання. Тоді неважко підрахувати, що для виконання всієї програми знадобиться ti одиниць часу. Якщо уявити, що програма виконується двома обробними пристроями, що працюють незалежно один від одного, то час вирішення завдання скоротиться. Проте цей час, як неважко бачити, буде різним у залежності від послідовності виконання незалежних гілок.
Розглянемо 3 варіанти виконання програми ярусно-паралельної форми для т. а.
Варіант 1. Процесор 1 виконує гілки 1-4-5-9-10-13, процесор 2 – гілки 2-6-3-7-8-11-12-14. При цьому процесор 1 витрачає 260 одиниць часу, з яких 55 простоює, так як не готові дані для гілки 13. Процесор 2 витрачає 230 одиниць часу.
Варіант 2. Процесор 1 виконує гілки 1-4-5-9-10-11-13, процесор 2 - гілки 2-6-3-7-8-12-14. При цьому процесор 1 витрачає 245 одиниць часу, з яких 25 простоює з тієї ж причини, що і у варіанті 1. Процесор 2 витрачає 215 одиниць часу.
Варіант 3. Процесор 1 виконує гілки 1-4-8-12-11-13, процесор 2 – гілки 2-5-6-3-7-9-10-14. При цьому процесор 1 витрачає 235, а процесор 2 – 205 одиниць часу, з яких 5 він простоює.
Порівняння цих
варіантів показує, що у всіх варіантах
час, через яке багатопроцесорна ОС
видає результати, істотно скорочується:
замість 375
одиниць часу при послідовному вирішенні
результати видаються у першому варіанті
через 260, у другому – через 245 і в третьому
– через 235 одиниць часу.
Виграш у часі може
істотно коливатися в залежності від
послідовності виконання гілок кожним
процесором, тому процесор повинен
вибирати
нову гілку
з урахуванням цієї обставини.
При вирішенні
задачі кожен процесор перед початком
виконання чергової гілки повинен мати
інформацію про готовність
даних для нього.
Рис. 3.1. Приклад програми в ярусно-паралельній формі
Таким чином, для того щоб за допомогою декількох процесорів вирішити задачу, що має незалежні паралельні гілки, необхідна відповідна організація процесу, яка визначає шляхи вирішення задачі і виробляє необхідну інформацію про готовність кожної гілки. Зауважимо, що все це відносно легко реалізувати тоді, коли відома досить точно тривалість виконання кожної гілки. На практиці це буває рідко: в кращому випадку відома наближена довжина гілок. Тому організація оптимального або близького до оптимального графіка роботи є достатньо складною проблемою.
Зауважимо, що, як правило, важко уникнути деяких простоїв, що виникають із-за відсутності вихідних даних для виконання тієї чи іншої гілки. Все це призводить у кінцевому рахунку до того, що виграш в продуктивності системи знижується, нерідко – істотно. Слід відзначити також і певні труднощі, пов'язані з виділенням незалежних гілок при розробці програм. Разом з тим, при вирішенні багатьох складних задач лише програмування з виділенням незалежних гілок дозволяє істотно скоротити час рішення. Зокрема, добре піддаються паралельній обробці такого типу задачі матричної алгебри, лінійного програмування, спектральної обробки сигналів, прямі і зворотні перетворення Фур'є та ін.
Паралелізм об'єктів або даних має місце тоді, коли по одній й тій ж (або майже по одній і тій же) програмі повинна оброблятися деяка сукупність даних, що надходять у систему одночасно. Це можуть бути, наприклад, задачі обробки сигналів від радіолокаційної станції: всі сигнали обробляються по одній і тій же програмі. Інший приклад – обробка інформації від датчиків сигналізації в системі протипожежної безпеки, які вимірюють одночасно один і той же параметр і які встановлені на кількох однотипних об'єктах. Програми обробки даних можуть бути різного обсягу й складності, починаючи від дуже простих, що містять кілька операцій, до великих програм в сотні і тисячі операцій.
Це можуть бути і чисто математичні задачі, наприклад задача векторної алгебри – операції над векторами і матрицями, які характеризуються деякою сукупністю чисел. Рішення задачі при цьому в основному зводиться до виконання однакових операцій над парами чисел. Так, додавання двох матриць C=A+B розмірністю mхn заключається у складанні відповідних елементів цих матриць: cij=aij+bij. Добуток матриці розмірністю mхn на скаляр зводиться до виконання множень елементів матриці A на скаляр : cij=aij, і т. д. Очевидно, всі ці операції можуть виконуватися паралельно і незалежно одна від одної кількома обробними пристроями.
Приклад 3.2. Розглянемо паралельну організацію перемноження блочних матриць. Нехай матриця А розбита на дві підматриці А =[А1 А2], а матриця В розбита на 4 підматриці, так що перший «рядок» матриці дорівнює [B1 B2], а другий – [В3 В4]. Тоді результуюча матриця дорівнює С =[А1В1+А2В3 А1В2+А2B4], і обчислення її елементів можна покласти на 4 процесори. При цьому на першому етапі всі 4 процесора перемножують підматриці, а на другому етапі два з них виробляють складання результуючих підматриць, отриманих на першому етапі.
Третій напрямок паралельної обробки даних – конвеєрна обробка – може бути реалізовано в системі і з одним процесором, але розділеним на деяке число послідовно включених операційних блоків (ОБ), кожен з яких спеціалізується на виконанні певної частини операції. Конвеєр обробки даних може бути проілюстровано наступним прикладом.
Приклад 3.3. Розглянемо складання на конвеєрі двох векторів A і B, що містять по n елементів з плаваючою комою. Операцію додавання двох чисел з плаваючою запятою Ах•2x + By•2y = Cz•2z можна розділити на чотири послідовно виконуваних етапи: порівняння порядків (СП); вирівнювання порядків – зсув мантиси з меншим порядком для вирівнювання з мантиссой з більшим порядком (ВП); складання мантисс (Сум); нормалізація результату (Норм). Відповідно з цим у складі процесора передбачені чотири ОБ, з'єднаних послідовно і реалізуючих чотири перерахованих вище етапів операції додавання: блоки СП, ВП, Сум та Норм (рис. 3.2 а).
Етап |
1 |
2 |
3 |
4 |
5 |
6 |
... |
n |
n+1 |
n+2 |
n+3 |
СП |
a1b1 |
a2b2 |
a3b3 |
a4b4 |
a5b5 |
a6b6 |
|
anbn |
|
|
|
ВП |
|
a1b1 |
a2b2 |
a3b3 |
a4b4 |
a5b5 |
|
an-1bn-1 |
anbn |
|
|
СМ |
|
|
a1b1 |
a2b2 |
a3b3 |
a4b4 |
|
an-2bn-2 |
an-1bn-1 |
anbn |
|
НР |
|
|
|
a1b1 |
a2b2 |
a3b3 |
|
an-2bn-3 |
an-2bn-2 |
an-1bn-1 |
anbn |
<---------------------> <---------------------->
розгін гальмування
б
Рисунок 3.2. Структурна схема (а) і часова діаграмма (б) конвеєра даних
Розглянемо організацію обчислювального процесу.
Нехай час виконання кожного етапу дорівнює відповідно 60 нс, 100 нс, 140 нс, 100 нс. Тоді операція додавання пари чисел буде виконуватися послідовністю ОБ за час Т0=i=400 нс; тут i – час виконання i-го етапу обробки.
Далі припустимо, що виникає задача складання двох векторів А і В довжиною n. Ясно, що для вирішення цієї задачі потрібно n разів скласти пару чисел: a1 і b1, a2 і b2, ...
Якщо ОБ працюють послідовно, то час векторного додавання складе Тпосл= nТ0 = 400n нс.
Виконаємо ці операції на конвеєрному процесорі, організувавши обробку даних наступним чином. Після того, як блок СП виконає свою частину операції над першою парою чисел, він передає результат в наступний блок – ВП, а в блок СП буде завантажена чергова пара чисел. На наступному кроці блок ВП передає результат виконання своєї частини операції в блок Сум і починає обробляти другу пару чисел, а блок СП обробляє 3-ю пару чисел, і т. д. Щоб не створювалися черги операндів на обробку, цикл конвеєра повинен бути розрахований на гірший випадок, тобто на максимальну затримку =max(i). Приймемо, що час виконання кожного із етапів обробки однаковий і дорівнює максимальному значенню =140 нс. Перший результат на виході конвеєра буде отримано через 140•4 = 560 нс, тобто трохи пізніше, ніж якщо б час виконання всіх етапів не вирівнювався. Проте всі наступні результати будуть видаватися через кожні 140 нс.
На рис. 3.2 б представлена часова діаграма процесу векторного додавання. Відзначимо дві особливості роботи конвеєра: розгін конвеєра за час tрозг=(m-1), m – число операційних блоків, і його гальмування tгал за такий же час.
Загальний час складання двох векторів за допомогою описаного конвеєра є Tконв = (n+m-1), де n – кількість елементів вектора, m-1 враховує час розгону конвеєра. Якби конвеєр не використовувався, то цей час було б равно Tпосл = 400n. Якщо застосувати конвеєрну обробку до векторів, що складається з 32-х елементів, то отримаємо Tконв = (32 + 4 – 1)•140 = 4900 нc, Тпосл = 32•400 = 12 800 нс. Виграш становить = Тпосл/Tконв = 12,8103/4,9103=2,61 рази.
При однакових затримках всіх блоків виграш становить величину =mn/(n+m). У разі великих значень n виграш наближається до величини m: lim=m.
Висновок. Чим довше ланцюжок даних і чим на більшу кількість етапів, а отже, і операційних блоків, розбивається операція при тій же тривалості її виконання, тим більший ефект від використання конвеєра може бути отриманий.
У наведеному вище прикладі було розглянуто конвеєрне виконання арифметичних операцій, але ідея конвеєра може бути поширена і на виконання команд. Треба сказати, що конвеєр команд застосовується вже давно в звичайних ЕОМ. При цьому цикл виконання команди розбивається на ряд етапів.
Приклад 3.4. Нехай виконання команди, що реалізує деяку операцію програми, може бути розбита на наступні етапи: формування адреси команди (ФАК), вибірка команди з оперативної пам'яті (ВК), розшифровка коду операції (РКО), формування адреси операнда (ФАО), вибірка операндів з пам'яті (У) і, нарешті, арифметична або логічна операція (АЛО). У пристрої керування повинні бути передбачені блоки, які незалежно один від одного і паралельно можуть виконувати вказані етапи. Тимчасова діаграма показана на рис. 3.3.
Этап |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
... |
ФАК |
K1 |
K2 |
K3 |
K4 |
K5 |
K6 |
K7 |
K8 |
... |
ВК |
|
K1 |
K2 |
K3 |
K4 |
K5 |
K6 |
K7 |
... |
РКО |
|
|
K1 |
K2 |
K3 |
K4 |
K5 |
K6 |
... |
ФАО |
|
|
|
K1 |
K2 |
K3 |
K4 |
K5 |
... |
ВО |
|
|
|
|
K1 |
K2 |
K3 |
K4 |
... |
АЛО |
|
|
|
|
|
K1 |
K2 |
K3 |
... |
Рисунок 3.3. Часова діаграма конвеєра команд
Для простоти час виконання кожного етапу прийнято однаковим (що, взагалі кажучи, не обов'язково і не завжди робиться).
Таким чином, якщо в конвеєрі арифметичних операцій, який обробляє поток даних, відбувається паралельна обробка n пар операндів, то в конвеєрі команд відбувається суміщення у часі l операцій (l – число етапів, на яке розбите виконання команди), що дозволяє істотно збільшити продуктивність такої конвеєрної системи. Однак виграш по продуктивності в l раз практично неможливий, так як може бути одержаний тільки при виконанні лінійної програми, тобто програми без умовних переходів. Наявність умовних переходів одразу порушує роботу конвеєра і призводить до «холостих» пробігів конвеєра, коли по виробленої в команді Ki ознаки результату треба перейти до виконання не Ki+1-ї команди, а до зовсім іншої, Kj, що викликає необхідність очищення всіх блоків і завантаження їх іншою операцією. У реальних ЕОМ та системах застосовуються різні прийоми, що дозволяють визначати ознаку переходу можливо раніше, однак зовсім виключити вплив умовних переходів не вдається.
Тим не менш, для певних задач, де мають місце ланцюжки команд без таких переходів, виграш в продуктивності конвеєрного процесора команд виходить значним. Як і в конвеєрі даних, виграш в продуктивності виходить тим більше, чим довше ділянки програми без умовних переходів і чим більше передбачається незалежних етапів (і, отже, блоків пристрою управління) при виконанні команди.
Зазначимо, що історично раніше з'явилися конвеєри команд.
Зрозуміло, у ВС можна одночасно використовувати і конвеєр команд, і конвеєр даних, і навіть декілька паралельно працюючих конвеєрів команд і конвеєрів даних. В останньому випадку може бути отримана дуже висока продуктивність системи. Саме за таким принципом побудовані найбільш швидкодіючі ВС (суперЕОМ або суперкомп'ютери), які будуть розглянуті далі.
Принцип конвеєрної (магістральної по вітчизняній термінології) обробки може застосовуватися на різних ієрархічних рівнях обчислювального процесу, починаючи з логічного вентиля. Можна виділити наступні рівні: рівень пристроїв, що виконують елементарні операції над бітами даних; рівень арифметико-логічних пристроїв; рівень керуючих пристроїв. Цим рівням відповідають арифметико-магістральна, командно-магістральна і макромагистральная обробки.
Принцип конвеєрної (магістральної) обробки знайшов широке застосування в більшості найбільш потужних ОС, розроблених в кінці 70-х років ХХ століття (STAR100, CRAY1 та ін). Але вже в ЕОМ CDC 6600 (1964 р., Control Data Corp), у вітчизняній ЕОМ БЕСМ-6 (1964 р.) і деяких інших були блоки магістральної обробки команд.
Магістральні системи можна розрізняти не тільки за способом обробки, але і за типом конфігурації магістралі – статичної чи динамічної, з апаратної/програмної перебудовою, а також за типом команд – із звичайними (скалярними) або векторними командами.
