Модель паралельних обчислень

Моделі паралельних обчислень

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

Методи паралельного програмування

Процес\канал

В цій моделі програми складаються з одного та більше процесів, розподілених по процесорах. Процеси виконуються одночасно, їх кількість може змінюватись протягом часу виконання програми. Процеси обмінюються даними через канали, які представляють собою одно направлені комунікаційні лінії, які з’єднують тільки два процеси. Канали можна створювати та видаляти. Модель процес\канал характеризується наступними властивостями: 1. Паралельне обчислення складається з одного та більше одночасно виконуваних процесів, число яких може змінюватись під час виконування програми 2. Процес – це послідовна програма з локальними даними. Процес має вхідні та вихідні порти, які служать інтерфейсом до середовища процесу. 3. В додаток до звичайних операцій процес може виконувати наступні дії: Надіслати повідомлення через вихідний порт, отримати повідомлення з вхідного порту, створити новий процес та завершити процес. 4. Операція відправлення асинхронна – вона завершується відразу, не очікуючи того, коли данні будуть отримані. Операція отримання синхронна – вона блокує процес до моменту отримання повідомлення. 5. Пари з вхідного та вихідного портів з’єднуються чергами повідомлень, які називаються каналами. Канали можна створювати та видаляти. Посилання на канали можна включати в повідомлення, так що зв’язність може змінюватись динамічно. 6. Процеси можна розподілю вати по фізичним процесорам різними способами, при чому відображення (розподілення) не впливає на семантику програми.

Поняття процесу дозволяє говорити про місцезнаходження даних : дані, які зберігаються в локальній пам’яті процесу – розміщуються «близько», інші дані «віддалені». Поняття каналу забезпечує механізм для вказування того, зо для того, щоб продовжити обчислення одному процесу необхідні дані іншого процесу (залежність по даним).


Обмін повідомленнями (Massage Passing)

В цій моделі програми, написані на традиційній послідовній мові виконуються процесорами комп’ютера. Кожна програма має доступ до пам’яті виконуючого процесора. Програми обмінюються між собою даними, використовуючи підпрограми прийома\передачі даних деякої комунікаційної системи. Програми, які використовують обмін повідомленнями можуть виконуватись тільки на MIMD комп’ютерах. На сьогоднішній день модель обмін повідомленнями є найбільш широко використовуваною моделлю паралельного програмування. Програми цієї моделі подібно програмам моделі процес\канал, створюють множину процесів, з кожним з котрих асоційовані локальні дані. Кожен процес ідентифікуються унікальним іменем. Процеси взаємодіють, посилаючи та отримуючи повідомлення. З цієї точки зору модель «обмін повідомленнями» є різновидом моделі «процес\канал» і відрізняється лише механізмом, який використовується при передачі даних. Наприклад, замість відправки повідомлення в канал «channel 2» можна відправити повідомлення процесу «process 3». Модель «обмін повідомленнями» не накладає обмежень ні на динамічне створення процесів, ні на виконування декількох процесів одним процесором, ні на використання різних програм для різних процесів. Просто, формальний опис систем «обміну повідомленнями» не розглядає питань, які пов’язані з маніпулюванням процесами, однак при реалізації таких систем доводиться приймати якісь рішення в цьому відношенні. На практиці склалось так, що більшість систем «обміну повідомленнями» при запуску паралельної програми створює фіксоване число ідентичних процесів і не дозволяє створювати і знищувати процеси протягом роботи програми. В таких системах кожен процес виконує одну і ту саму програму(параметризовану відносно ідентифікатора процесу або процесора), але працює з різними даними, тому о таких системах кажуть, що вони реалізують SPMD(single program multiple data – одна програма багато даних) модель програмування. SPMD модель достатньо зручна для широкого діапазону додатків паралельного програмування, але вона ускладнює розробку деяких типів паралельних алгоритмів.

Паралелізм даних( Data Parallel)

В цій моделі єдина програма задає розподілення даних між усіма процесорами комп’ютера і операції над ними. Розподілюваними даними зазвичай є масиви. Як правило, мови програмування, які підтримують дану модель допускають операції над масивами, дозволяють використовувати в виразах цілі масиви або окремі їх частинки. Розпаралелювання операцій над масивами, циклів обробки масивів дозволяє збільшити продуктивність програми. Компілятор відповідає за генерації коду, який розподіляє елементи масивів і обчислень між процесорами. Кожен процесор відповідає за ту підмножину елементів масиву, яка знаходиться в його локальній пам’яті. Програми з паралелізмом даних можуть бути трансльовані і виконуватись як на MIMD, так і на SIMD комп’ютерах. Модель паралелізм даних також часто використовується. Назва моделі походить від того, що вона експлуатує паралелізм, який полягає в використанні однієї операції до багатьох елементів структур даних. Програма з паралелізмом даних складається з послідовностей подібних операцій. Оскільки операції над кожним елементом даних можна розглядати як незалежні процеси, то ступінь деталізації таких обчислень дуже велика, а поняття «локальності» відсутнє. Тому компілятори мов з паралелізмом даних часто вимагають, щоб програміст надавав інформацію відносно того, як дані повинні бути розподілені між процесорами, іншими словами, як програма має бути розбита на процеси. Компілятор транслює програму з паралелізмом даних в SPMD програму, генеруючи комунікаційний код автоматично.

Загальна пам'ять (Shared Memory)

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

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.