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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

В обчисленнях, Модель паралельного програмування є абстракцією архітектури паралельного комп'ютера, з допомогою якої зручно виражати алгоритми і їх компонування в програмах. Значення моделі програмування можна судити про його спільні ознаки : наскільки добре цілий ряд різних проблем може бути виражений для безлічі різних архітектур, і його продуктивність. Наскільки ефективно скомпільовані програми можуть виконуватись.[1] Реалізація паралельної програми, модель може набувати форми бібліотеки, яка викликається з послідовної мови, як доповнення до наявної мови, або як абсолютно нова мова.[2]

Класифікація паралельних моделей програмування[ред. | ред. код]

Класифікації паралельних моделей програмування можна в цілому розділити на дві області : Процес взаємодії і розкладання проблеми.[3] [4] [5]

Взаємодія процесів[ред. | ред. код]

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

Спільна пам'ять[ред. | ред. код]

Спільна пам'ять є ефективним засобом передачі даних між процесами. У моделі з пам'яттю, паралельні процеси спільно використовують глобальне адресний простір ,що вони читають і пишуть в асинхронному режимі. Асинхронний паралельний доступ може привести до умов перегонів і механізмів, таких як замки, семафори і монітори можуть бути використані , щоб уникнути таких випадків. Традиційні багатоядерні процесори безпосередньо підтримують загальну пам'ять, яка багато паралельних мов і програмні бібліотеки, такі як CilkOpenMP і Threading Building Blocks, призначені для використання.

Message Passing[ред. | ред. код]

У передачі повідомлень моделі, обмінні процеси паралельні дані через передачі повідомлень один одному. Ці зв'язки можуть бути асинхронними, коли повідомлення може бути відправлено до того, як приймач готовий, або синхронний, де приймач повинен бути готовий. Сполучені послідовні процеси (СКП) Формалізація передачі повідомлень використовує синхронні канали зв'язку для підключення процесів, а також привели до важливих мов, таких як Оккама, Лімбо і Go. На противагу цьому, модель актор використовує асинхронний передачі повідомлень і був використаний при розробці мов, таких як D, Scala і SALSA .

Неявна взаємодія[ред. | ред. код]

У неявній моделі, ніякої взаємодії процесу не видно програмісту, і замість того, щоб компілятор і / або під час виконання відповідав за його виконання. Два приклади неявного паралелізму з предметно-орієнтованих мов, де наказано паралелізм в рамках операцій на високому рівні, а також з функціональними мовами програмування, так як відсутність побічних ефектів дозволяє не-залежні функції, які будуть виконуватися паралельно.[6] Тим НЕ менше, цей вид паралельності важко управляти[7] і функціональні мови, такі як Concurrent Haskell і Concurrent ML надають можливості для управління паралелізмом в явному вигляді.

Розкладання завдання[ред. | ред. код]

Паралельна програма складається з одночасного виконання процесів. Розкладання проблеми відноситься до способу, в якому сформульовані складові процеси.[8] [9]

Завдання паралелізму[ред. | ред. код]

Завдання-паралельної моделі фокусується на процесах, або нитках виконання. Ці процеси часто відрізняються поведінкою, що підкреслює потребу в обміні інформацією. Завдання паралелізм є природним способом виразити передачі повідомлень зв'язку. У систематиці Флінна , паралелізм завдань, як правило, класифікується як MIMD / MPMD або MISD .

Паралелізм даних[ред. | ред. код]

Модель даних паралельно фокусується на виконанні операцій на наборі даних, як правило, регулярно структурованим масивом. Набір завдань буде працювати на цих даних, але незалежно один від одного на непересічних перегородками. У систематиці Флінна, паралельність дані зазвичай класифікуються як MIMD / SPMD або SIMD.

Неявні паралелізми[ред. | ред. код]

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

Термінологія[ред. | ред. код]

Паралельні моделі програмування тісно пов'язані з моделями обчислень. Модель паралельних обчислень є абстракцією, використовуваний для аналізу витрат обчислювальних процесів, але це не обов'язково повинні бути практичними, в тому, що він може бути реалізований ефективно в апаратних засобах і / або програмному забезпеченні. Модель програмування, на відміну від цього, в зокрема, це означає, практичні міркування, апаратного та програмного забезпечення реалізації.[10]

Паралельний мову програмування може бути заснована на одній або комбінації моделей програмування. Наприклад, High Performance Fortran заснований на взаємодії з загальною пам'яттю і декомпозиції проблеми даних Паралельне, і Go забезпечує механізм пам'яттю і взаємодії передачі повідомлень.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Skillicorn, Девід Б., "Моделі для практичного паралельних обчислень", Міжнародний журнал паралельного програмування, 20,2 133-158 (1991),https://www.ida.liu.se/~chrke55/papers/modelsurvey~~HEAD=dobj[недоступне посилання].
  2. Leslie G. Valiant, "мостиковой модель для паралельних обчислень", комунікацій ACM, тому 33, випуск 8, серпень, 1990, стор 103--111.
  3. Джон Е. Savage, модель обчислень: Дослідження харчування обчислювальної техніки, 2008, Глава 7 (паралельних обчислень),http://cs.brown.edu/~jes/book/ [Архівовано 5 листопада 2016 у Wayback Machine.]
  4. Ян Фостер, Проектування і будівництво паралельних програм, 1995, розділ 1.3, "Модель паралельного програмування", http://www.mcs.anl.gov/~itf/dbpp/text/node9.html [Архівовано 19 вересня 2018 у Wayback Machine.]
  5. Блез Barney Введення в паралельні обчислення, "Моделі", 2015-го, Ліверморської національної лабораторії,https://computing.llnl.gov/tutorials/parallel_comp/#Models [Архівовано 10 червня 2013 у Wayback Machine.]
  6. Хаммонд, Кевін. Паралельно функціональне програмування: Введення. У Міжнародному симпозіумі з паралельних обчислень, Символічне р. 46. тисячі дев'ятсот дев'яносто-чотири.
  7. МакБерні, DL і М. Ronan Сон. "Транспьютерномоснові експериментів з архітектурою Зепп». PARLE Паралельні Архітектури та Мови Європи. Springer Berlin Heidelberg, 1987.
  8. Ян Фостер, Проектування і будівництво паралельних програм, 1995, розділ 2.2, "Розмітка",http://www.mcs.anl.gov/~itf/dbpp/text/node16.html [Архівовано 16 вересня 2018 у Wayback Machine.]
  9. Блез Barney Введення в паралельні обчислення, "Розмітка", 2015-го, Ліверморської національної лабораторії,https://computing.llnl.gov/tutorials/parallel_comp/#DesignPartitioning [Архівовано 10 червня 2013 у Wayback Machine.]
  10. Skillicorn, Девід Б. і Доменіко Талію, моделі і мови для паралельних обчислень, ACM Computing Surveys, 30,2 123-169 (1998),https://www.cs.utexas.edu/users/browne/CS392Cf2000/ [Архівовано 31 серпня 2016 у Wayback Machine.] документи / ModelsOfParallelComputation-Skillicorn.pdf