Розподілений проти паралельних обчислень


60

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

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

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

Приклад, який я використовую в своїй щоденній роботі, - це Hadoop з парадигмою Map / Reduce, чітко розподіленою системою, на якій працівники виконують завдання на різних машинах, але також повною мірою користуються кожною машиною з деякими паралельними обчисленнями.

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


5
Паралельні обчислення не обов'язково означають єдиний процесор: є системи, що мають кілька фізичних процесорів.
svick

2
Крім того, розподілені обчислення самі по собі не обмежуються діленням і підкоренням. У мене більше проблем з людьми, що плутають паралельність і паралелізм.
Рафаель

1
Якщо ви чітко звертаєтесь до розподілених обчислень, вам потрібно буде розглянути набагато глибші випадки відмов. Дуже багато речей поширюється лише з географічних причин. У деяких розподілених системах дуже мало відбувається паралельно, оскільки центральний вузол у мережі є вузьким місцем.
Роб

Пов’язано: cs.stackexchange.com/q/51099/755
DW

Відповіді:


56

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

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

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

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


2
Хороша відповідь. Слід підкреслити, що розподілені обчислення - це підмножина паралельних обчислень.
Рафаель

6
@Raphael: Я не думаю, що це точно відображає фокус двох полів. Дійсно, їх часто вважають цілком окремими сферами, оскільки вони мають справу з абсолютно різними питаннями. При програмуванні паралельного комп’ютера з використанням MPI, насправді не стосується себе часткових збоїв, оскільки вони рідше трапляються на таких комп’ютерах. З іншого боку, розподілені обчислення більше стосуються питань розподілу, таких як часткові збої, і набагато менше стурбовані витісненням кожного циклу процесора з наявних машин.
Дейв Кларк

4
@Raphael Навпаки, розподілені обчислення дуже залежать від паралельних обчислень. У дослідженні розподілених систем паралельні обчислення часто є нудною справою (немає цікавих місцевих ресурсів, немає збоїв).
Жиль

Я вживав слова буквально; занадто погано, якщо умови були присвоєні та, таким чином, розбіжними.
Рафаель

Дякуємо за вашу відповідь @Gilles, схоже, я був трохи упереджений по відношенню до розподілених обчислень, радий бачити того, хто посилається на щось відповідною умовою!
Чарльз Менгуй

17

Як вказував @Raphael, розподілене обчислення - це підмножина паралельних обчислень; у свою чергу, паралельні обчислення - це підмножина паралельних обчислень.

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

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

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

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

Тому розподілене обчислення - це підмножина паралельних обчислень, що є підмножиною одночасних обчислень.

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

  1. Швидше вирішувати обчислювальні задачі;
  2. Вирішуйте більші проблеми за стільки ж часу;
  3. Вирішуйте проблеми однакового розміру з більшою точністю за однаковий час.

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

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

Нарешті, Grid та Cloud computing - обидва підмножини розподілених обчислень. Парадигма мережевих обчислень виникла як нове поле, що відрізняється від традиційних розподілених обчислень через його спрямованість на широкомасштабний обмін ресурсами та інноваційні високопродуктивні програми. Ресурси, якими ділиться, зазвичай належать до декількох різних адміністративних доменів (так званих віртуальних організацій ). Сіткові обчислення, хоча вчені широко використовуються в останнє десятиліття, звичайно користувачі традиційно важкі. Хмарні обчислення намагаються усунути прогалину, дозволяючи звичайним користувачам легко використовувати декілька машин, які розташовані в одному центрі обробки даних і не розподіляються географічно за допомогою використання віртуальної машиниякі можуть бути зібрані користувачами для запуску своїх додатків. Через апаратне забезпечення, зокрема звичайну відсутність високоефективного мережевого взаємозв'язку (наприклад, Infiniband тощо), хмари не орієнтовані на запуск паралельних програм MPI. Розподілені програми, що працюють на хмарах, зазвичай реалізуються для використання парадигми Map / Reduce. До речі, багато хто думає про Map / Reduction як паралельну модель потоку даних.


2
Я вважаю, що ця відповідь трохи вводить в оману; він зосереджується на розподілених високоефективних обчисленнях (що дійсно тісно пов'язане з паралельними високоефективними обчисленнями), тоді як все поле розподілених обчислень набагато ширше.
Юкка Суомела

Я не погоджуюся: у відповідь також входять розподілені високоефективні обчислення, які, натомість, зазвичай залишаються поза розподіленими обчисленнями. Дійсно, я обговорював клієнт-сервер та однорангові моделі, безпеку, збої та проблеми розділів мережі, які є сферою розподілених обчислень.
Массімо Кафаро

+1. Приємна відповідь! Цікаво, чи використовуються розподілені обчислення для інших цілей, ніж паралельні обчислення? Іншими словами, чи розподілені обчислення є підмножиною паралельних обчислень, тобто чи належать розподілені обчислення до паралельних обчислень? До речі, ось моє запитання cs.stackexchange.com/questions/20064
Тім

1
@Tim, розподілені обчислення також використовуються самі по собі, незалежно від паралельних обчислень. Подумайте, наприклад, про класичні алгоритми розподілу, такі як вибори лідера, консенсус тощо.
Массімо Кафаро

7

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

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

Якщо вам потрібно обробити терабайти даних, шлях для розподілених обчислень (можливо, поєднаних з паралельними обчисленнями). Але якщо вам потрібно щось обчислити на робочому столі або смартфоні, паралельні обчислення самі, ймовірно, дадуть найкращі результати, враховуючи, що підключення до Інтернету може бути недоступним завжди, і коли воно є, воно може бути повільним.


-1, оскільки ця відповідь насправді не відповідає на питання (тобто поясніть умови).
Юкка Суомела

@JukkaSuomela, питання не в поясненні термінів, а в різниці між ними.
svick

6

Ось останній документ, який варто прочитати:

Мішель Рейнал: "Паралельні обчислення проти розподілених обчислень: велика плутанина?" , Зб. Євро-Пар 2015 , дої: 10.1007 / 978-3-319-27308-2_4

Анотація:

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


4

У розділі «Вступ» книги [1] автори подають іншу точку зору (відмінну від тієї, що є в інших відповідях) щодо порівняння розподілених обчислень та паралельних обчислень.

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

З цього погляду парадигма Map / Reduce в основному потрапляє в контекст паралельних обчислень. Однак, якщо ми хочемо, щоб залучені вузли досягли консенсусу щодо спільного лідера, використовуючи, наприклад, алгоритм Paxos (wiki) , тоді ми розглядаємо типову проблему розподілених обчислень.

[1] Розподілене обчислення. Основи, моделювання та розширені теми. Хагіт Аттія та Дженніфер Велч. 2004 рік.


0

Тут є відповідь, яка є більш доречною. В основному, parallelвідноситься до, memory-shared multiprocessorтоді як distributedвідноситься до його private-memory multicomputers. Тобто перший - це багатоядерний або надскалярний апарат, тоді як другий - це географічно розподілена мережа комп'ютерів. Останнє передбачає менше з'єднання і, таким чином, більше доступності та відмовостійкості ціною меншої продуктивності. Продуктивність страждає, тому що вам потрібна (де) серіалізація даних у кожному тупі, а також її доставка на більші відстані, тоді як ви можете просто направити об'єкт пам'яті, щоб передати його в інший процесор паралельного процесора.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.