Паралельні обчислення

Не слід плутати з Розподілені обчислення.

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

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

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


1. Види паралельного взаємодії

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

  • Взаємодія через поділювану пам'ять (наприклад, в Java або C #). Даний вид паралельного програмування зазвичай вимагає якоїсь форми захоплення управління ( мьютекс, семафори, монітори) для координації потоків між собою.
  • Взаємодія c допомогою передачі повідомлень (наприклад, в Erlang або occam). Обмін повідомленнями може відбуватися асинхронно, або c використанням методу "рандеву", при якому відправник блокований до тих пір, поки його повідомлення не буде доставлене. Асинхронна передача повідомлень може бути надійною (з гарантією доставки) або ненадійною.

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

У паралелізму з пам'яттю, і з передачею повідомлень різні характеристики продуктивності. Зазвичай (але не завжди), накладні витрати пам'яті на процес і часу на перемикання завдань у систем з передачею повідомлень нижче, однак передача самих повідомлень більш накладна, ніж виклики процедур. Ці відмінності часто перекриваються іншими факторами, що впливають на продуктивність.


2. Програмні інструменти паралелізму

  • OpenMP - стандарт інтерфейсу додатків для паралельних систем зі спільною пам'яттю.
  • POSIX Threads - стандарт реалізації потоків (ниток) виконання.
  • Windows API - багатопотокові програми для C + +.
  • PVM (Parallel Virtual Machine) дозволяє об'єднати різнорідний (але пов'язаний мережею) набір комп'ютерів в загальний обчислювальний ресурс.
  • MPI (Message Passing Interface) - стандарт систем передачі повідомлень між паралельно виконуваними процесами.

Примітки

  1. Словник з кібернетики / Під редакцією академіка В. С. Михалевича. - 2-е. - Київ: Головна редакція Української Радянської Енциклопедії імені М. П. Бажана, 1989. - 751 с. - (С48). - 50 000 прим. - ISBN 5-88500-008-5

Література

  • Воєводін В. В., Воєводін Вл. В. Паралельні обчислення. - СПб: БХВ-Петербург, 2002. - 608 с. - ISBN 5-94157-160-7