
Курсова робота
1. Парадигми паралельних обчислень
У світі паралельного програмування все відбувається по-іншому. Тут відразу декілька інструкцій можуть виконуватися в один і той же момент часу. Одна інструкція поділяється на декілька дрібних частин, які будуть виконуватися одночасно. Програма поділяється на колекцію паралельних задач. Програма може складатися із сотень або навіть тисяч підпрограм, які виконуються паралельно. У світі паралельного програмування послідовність та місцезнаходження складових ПЗ не завжди передбачувані. Декілька задач можуть одночасно почати виконання на довільному процесорі без якої то було б гарантії того, що задачі закріплені за певним процесором, або довільна задача завершиться першою, або всі вони завершаться в певному порядку. Окрім паралельного виконання задач, тут можливе паралельне виконання частин (підзадач) одної задачі. В деяких конфігураціях не виключена можливість виконання підзадач на різних
процесорах або навіть різних комп’ютерах.
На рис 1. показано три рівні паралел
ізму,
які можуть міститись в одній комп’ютерній
програмі.
Модель програми, зображеної на рис 1, відображає кардинальну зміну парадигми програмування, яка була характерна для ранньої свідомості програмістів та розробників. Тут відображено три рівні паралелізму і їх розподіл за декількома процесорами. Поєднання цих трьох рівнів з базовими паралельними конфігураціями процесорів зображено на рис. 2.
Зверніть увагу на те, що декілька задач може виконуватися на одному процесорі навіть при наявності в комп’ютері декількох процесорів. Така ситуація створюється системними стратегіями планування. На тривалість виконання задач, підзадач та інструкцій чинять вплив і вибрані стратегії планування, і приорітети процесів, і приорітети потоків, і швидкодія пристроїв вводу-виводу. На рис. 2 необхідно звернути увагу на різні архітектури. які програміст повинен враховувати при переході від послідовної моделі програмування до паралельної. Основна різниця в моделях при переході від суворо впорядкованої послідовності задач до лише частково впорядкованої (або взагалі невпорядкованої) колекції задач. Паралелізм перетворює раніше відомі величини (послідовність виконання, час виконання та місце виконання) в невідомі. Довільна комбінація цих невідомих величин є причиною зміни значень програми, причому часто непередбаченим чином.
2. Координація паралельних обчислень
Якщо програма містить підпрограми, які можуть виконуватися паралельно, і ці підпрограми разом використовують деякі файли, пристрої або область пам’яті, то неминуче виникають проблеми координації. Приймаємо, у нас є програма підтримки електронного банку, яка дозволяє знімати гроші з рахунку і класти їх на депозит. Приймаємо, ця програма розділена на три задачі (позначимо їх А, В і С), які можуть виконуватися паралельно.
Задача А отримує запити від задачі В на виконання операції знімання грошей з рахунку. Задача А також отримує запити від задачі С покласти гроші на депозит. Задача А приймає запити і опрацьовує їх за правилом першм прийшов – перший опрацьований. Приймаємо, на рахунку маємо 1000 дол., при цьому задача С вимагає покласти на рахунок 100 дол., а задача В хоче зняти з
р
ахунку
1100 дол. Що відбудеться, якщо дві задачі
В і С спробують оновити
один і той же рахунок одночасно? Яким буде залишок на рахунку? Очевидно залишок на рахунку в кожен момент часу не може мати більше одного значення Задача А стосовно до рахунку повинна виконувати одночасно тільки одну транзакцію, тобто ми зіткнулися з проблемою координації задач. Якщо запит задачі В буде виконаний на якусь долю секунди швидше, ніж запит задачі С, то рахунок приймає від’ємний баланс. Але якщо задача С отримає першою право на оновлення рахунку, то цього не відбудеться. Таким чином, залишок на рахунку залежить від того якій задачі (В або С) першій вдається зробити запит до задачі А. Більш того, ми можемо виконати задачі В і С декілька разів з одним і тими же значеннями, і при цьому інколи запит задачі В буде виконаний на якусь долю секунди швидше, ніж запит задачі С, а інколи – навпаки. Очевидно, що необхідно організувати відповідну координацію дій.
Для координації задач, які виконуються паралельно, необхідно забезпечити зв'язок між ними та синхронізацію їх робіт. При некоректному зв’язку або синхронізації як правило виникають чотири проблеми.
1. Проблема № 1: гонкі даних
2. Проблема № 2: нескінченне відтермінування
3. Проблема № 3 : взаємне блокування
4. Проблема № 4: труднощі організації зв’язку
Багато поширених паралельних середовищ (наприклад, кластери) в більшості випадків складаються з гетерогенних комп’ютерних мереж. Гетерогенні комп’ютерні мережі – це системи, які складаються з комп’ютерів різних типів, що працюють в загальному випадку під керуванням різних операційних систем і використовуються різні мережеві протоколи. Їх процесори можуть мати різну архітектуру, опрацьовувати слова різної довжини і використовувати різні машинні мови. Окрім різних операційних систем, комп’ютери можуть відрізнятися стратегіями планування і системами пріоритетів. Гірше всього, всі системи можуть розрізнятися параметрами передачі даних. Це робить обробку помилок та виключних ситуацій (виключень) особливо складною. Неоднорідність системи може ускладнюватись і іншими причинами. Наприклад, може виникнути необхідність в організації спільного використання даних програм, написаних на різних мовах, або розроблених з використанням різних моделей ПЗ. Адже загальне системне рішення може бути реалізовано по частинах, написаних на мовах Ада, С++ і Java. Це вносить проблеми міжмовного зв’язку. І навіть, якщо розподілена або паралельна система не є гетерогенною, залишається проблема взаємодії між декількома процесами або потоками. Оскільки кожен процес має власний адресний простір, то для спільного використання змінних , параметрів та значень, які повертаються функціям, необхідно застосувати технологію між процесорної взаємодії (interprocess communication - IPC), або МПВ- технологію. І хоча реалізація МПВ- методів необов’язково є самою складною частиною розробки системи ПЗ, тим не менше вони створюють додатковий рівень проектування, тестування і налагодження в створенні системи.
POSIX- специфікація підтримує п’ять базових механізмів, які використовуються для реалізації взаємодії між процесами:
файли з засобами блокування та розблокування;
канали (неіменовані, іменовані і черги FIFO);
загальна пам'ять і повідомлення;
сокети;
семафори.
Кожен з цих механізмів має переваги, недоліки, складні питання глухі кути які проектувальники і розробники ПЗ повинні обов’язково враховувати, якщо хочуть створити надійний і ефективний зв'язок між декількома процесами. Організувати взаємодію. між декількома потоками (які інколи називають полегшеними процесами) зазвичай простіше, ніж між процесами, оскільки потоки використовують загальний адресний простір. Це означає, що кожен поті в програмі може легко передавати параметри, приймати значення, які повертаються функціями, і отримувати доступ до глобальних даних. Але якщо взаємодію процесів або потоків не спроектовано відповідним чином, виникають такі проблеми, як взаємне блокування, нескінчені відтермінування та інші ситуації гонок даних. Необхідно зауважити, що подані вище проблеми характерні як для розподіленого, так і для паралельного програмування.
В табл.1 зверніть увагу на те, що існують конфігурації, в яких паралелізм досягається за рахунок використання декількох комп’ютерів. В такому випадку ефективніше скористатися бібліотеками PVM. І також існують конфігурації, в яких розподілене програмування може бути реалізоване лише на одному комп’ютері за рахунок розподілу логіки ПЗ на декілька процесів або потоків. Власне факт використання множини процесів або потоків говорить про те, що робота програми являє розподілений характер. Комбінації паралельного і розподіленого програмування, подані в табл.1, показують, що проблеми конфігурації , за звичай характерні розподіленому програмуванню, можуть виникнути в ситуаціях, обумовлених паралельним програмування, і, навпаки, проблеми конфігурації , за звичай пов’язані з паралельним програмуванням, можуть виникати в ситуаціях, обумовлених розподіленим програмуванням.
Таблиця 1. |
Комбінації паралельного і розподіленого програмування з різними конфігураціями апаратного забезпечення |
|
|
Один комп’ютер |
Багато комп’ютерів |
Паралельне програму- вання |
Мітить багато процесорів. Використовує логічне розділення на декілька потоків або процесів. Потоки або процеси можуть виконуватися на різних процесорах. Для координації задач необхідно МПВ- технології |
Використовує такі бібліотеки, як PVM. Потребує організації взаємодії за допомогою передачі повідомлень, що як правило характерно для розподіленого програмування. |
Розподілене програму-вання |
Наявність декількох процесорів не є обов’язковим. Логіка ПЗ може бути розділена на декілька процесів або потоків |
Реалізується за допомогою сокетів і таких компонентів, як CORBA ORB (Object Request Broker – брокер об’єктних запитів). Ми можемо використовувати тип взаємодії, який як правило пов'язаний з паралельним програмуванням |
Незалежно від конфігурації апаратних засобів, які використовуються, існує два базових механізми, що забезпечують взаємодію декількох задач: загальна пам'ять (пам’ять, що поділяється) і засоби передачі повідомлень. Для ефективного використання механізму загальної пам’яті програмісту необхідно передбачити рішення проблеми гонки даних, взаємне блокування і нескінчене відтермінування. Схема передачі повідомлень повинна передбачати виникнення таких проблеми, як повідомлення, що перериваються, спотворені повідомлення, втрата інформації, помилкові повідомлення, надто довгі повідомлення, порушення термінів повідомлення, дочасні повідомлення.