Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ekzamen kozak .docx
Скачиваний:
27
Добавлен:
20.12.2018
Размер:
280.44 Кб
Скачать

46. Поняття про паралельне програмування.

Паралельне програмування може бути складним, Воно включає в себе всі риси більш традиційного, послідовного програмування, але в паралельному програмуванні є три додаткових, чітко визначених етапи.

  • Визначення паралелізму: аналіз завдання з метою виділити підзадачі, які можуть виконуватися одночасно

  • Виявлення паралелізму: зміна структури завдання таким чином, щоб можна було ефективно виконувати підзадачі. Для цього часто потрібно знайти залежності між підзадачами і організувати вихідний код так, щоб ними можна було ефективно управляти

  • Вираз паралелізму: реалізація паралельного алгоритму в вихідному коді за допомогою системи позначень паралельного програмування

Код, що виконується на одиночному процесорі паралельного комп’ютера, знаходиться в деякому ж програмному середовищі, що і середовище однопроцесорного комп’ютера з мультипрограмною операційною системою, тому й у контексті паралельного комп’ютера так само говорять про процеси чи задачі, посилаючись на код, що виконується всередині захищеного регіону пам’яті операційної системи. Багато дій паралельної програми включають звертання до віддалених процесорів чи комірок загальної пам’яті. Для виконання цих дій може бути необхідна суттєва затрата часу, особливо, стосовно часу виконання звичайних команд процесора. Тому більшість процесорів виконує більше одного процесу одночасно, і, отже, у програмному середовищі окремо узятого процесора паралельного комп’ютера використовуються звичайні методи мультипрограмування:

· процеси блокуються, коли їм необхідно звернутися до віддалених ресурсів;

· процеси готові продовжити роботу, якщо отримана відповідна відповідь.

Виконання процесів паралельної програми переривається значно частіше, ніж процесів, що працюють у послідовному середовищі, тому що процеси паралельної програми виконують ще дії, пов’язані з обміном даними між процесорами. Маніпулювання повноваговими процесами у мультипрограмному середовищі є надто дорогим заняттям, оскільки воно тісно пов’язане з управлінням і захистом пам’яті. Внаслідок цього більшість паралельних комп’ютерів використовує легковагові процеси, що називаються нитками (threads) або потоками (streams) управління, а не повновагові процеси. Легковагові процеси не мають власних захищених областей пам’яті (хоча можуть володіти власними локальними даними), що в результаті дуже сильно спрощує маніпулювання ними. Більш того, їхнє використання більш безпечне.

Щоб уникнути плутанини, використовують наступні терміни, що позначають різні варіанти процесів виконання програм:

· легковагові процеси іменують нитками, потоками управління, співпроцесами;

· задачі будуть вказувати на повновагові процеси, тобто процеси операційної системи, що володіють власними захищеними регіонами пам’яті.

Процес використовується там, де поділ на легковагові і повновагові процеси несуттєвий і можна використовувати як ті, так і інші.

Відповідно до можливостей паралельного комп’ютера, процеси взаємодіють між собою одним з наступних способів:

· Обмін повідомленнями (message passing). Процес, що посилає, формує повідомлення з заголовком, у якому вказує, який процесор повинний прийняти повідомлення, і передає повідомлення в мережу, що з’єднує процесори. Якщо після передачі повідомлення у мережу процес, що посилає, продовжує роботу, то такий вид відправлення повідомлення називається неблокуючим (non-blocking send). Якщо ж процес, що посилає чекає, поки приймаючий процес не прийме повідомлення, то такий вид відправлення повідомлення називається блокуючим (blocking send). Приймаючий процес повинен знати, що йому необхідні дані і повинен вказати, що він готовий одержати повідомлення, виконавши відповідну команду прийому повідомлення. Якщо очікуване повідомлення ще не надійшло, то приймаючий процес припиняється доти, поки повідомлення не надійде.

· Обмін через загальну пам’ять (Transfers through shared memory). В архітектурах із загальнодоступною пам’яттю процеси зв’язуються між собою через загальну пам’ять - процес, що посилає, поміщає дані у відомі комірки пам’яті, з яких приймаючий процес може зчитувати їх. При такому обміні складність представляє процес виявлення того, коли безпечно поміщати дані, а коли видаляти їх. Найчастіше для цього використовуються стандартні методи операційної системи, такі семафори (semaphore) або блокування процесів. Однак це дорого і сильно ускладнює програмування. Деякі архітектури надають біти зайнято/вільно, зв’язані з кожним словом загальної пам’яті, що забезпечує легкий та високоефективний спосіб синхронізації відправників і приймачів.

· Прямий доступ до вилученої пам’яті (Direct remote-memory access). У перших архітектурах з розподіленою пам’яттю робота процесорів переривалася щораз, коли надходив який-небудь запит від мережі, що з’єднує процесори. У результаті процесор погано використовувався. Потім у таких архітектурах у кожному процесорному елементі стали використовувати пари процесорів - один процесор (обчислювальний), виконує програму, а іншої (процесор обробки повідомлень) обслуговує повідомлення, що надходять з мережі чи у мережу. Така організація обміну повідомленнями дозволяє розглядати обмін повідомленнями як прямий доступ до віддаленої пам’яті, до пам’яті інших процесорів. Така гібридна форма зв’язку, що застосовується в архітектурах з розподіленою пам’яттю, має багато властивостей архітектур із загальною пам’яттю.

Розглянуті механізми зв’язку необов’язково використовуються тільки безпосередньо на відповідних архітектурах. Так легко промоделювати обмін повідомленнями, використовуючи загальну пам’ять, з іншої сторони можна змоделювати загальну пам’ять, використовуючи обмін повідомленнями. Останній підхід відомий як віртуальна загальна пам’ять.

Найбільш бажаними (навіть скоріше обов’язковими) ознаками паралельних алгоритмів і програм є:

· паралелізм – вказує на здатність виконання безлічі дій одночасно, що істотно для програм, які виконуються на декількох процесорах;

· маштабованість – інша найважливіша ознака паралельної програми, що вимагає гнучкості програми стосовно зміни числа процесорів, оскільки найбільше ймовірно, що їх кількість буде постійно збільшуватися у більшості паралельних середовищ і систем;

· локальність – характеризує необхідність того, щоб доступ до локальних даних був більш частим, чим доступ до віддалених даних. Важливість цієї властивості визначається відношенням вартості віддаленого і локального звертань до пам’яті. Воно є ключовим до підвищення ефективності програм на архітектурах з розподіленою пам’яттю;

· модульність – відбиває ступінь розкладання складних об’єктів на більш прості компоненти. У паралельних обчисленнях це настільки ж важливий аспект розробки програм, як і в послідовних обчисленнях.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]