Параллельные и распределенные вычисления

15

В чем разница между параллельными и распределенными вычислениями? Когда речь идет о масштабируемости и эффективности, очень часто можно увидеть решения, связанные с вычислениями, в кластерах машин, а иногда это называется параллельной обработкой или распределенной обработкой.

В определенном смысле вычисления кажутся всегда параллельными, поскольку есть вещи, выполняющиеся одновременно. Но связано ли распределенное вычисление просто с использованием более чем одной машины, или есть какие-то дополнительные особенности, которые отличают эти два вида обработки? Не было бы лишним сказать, например, что вычисления параллельны и распределены ?

Рубенс
источник

Ответы:

16

Проще говоря, «параллельный» означает одновременную работу на разных ресурсах (ЦП), а «распределенный» означает работу на разных компьютерах, включая проблемы, связанные с сетями.

Параллельные вычисления с использованием, например, OpenMP не распространяются, в то время как параллельные вычисления с передачей сообщений часто распространяются.

Нахождение в «распределенной, но не параллельной» настройке означало бы недоиспользование ресурсов, поэтому с ним редко сталкиваются, но это концептуально возможно.

damienfrancois
источник
4

Термины «параллельные вычисления» и «распределенные вычисления», безусловно, имеют большое совпадение, но могут быть дополнительно дифференцированы. На самом деле, вы уже сделали это в своем вопросе, позже спросив о «параллельной обработке» и «распределенной обработке».

Можно рассматривать «распределенные вычисления» как более общий термин, который включает в себя «распределенную обработку», а также, например, «распределенное хранение». Общий термин «распределенный» обычно относится к некоторому виду передачи сообщений по сети между физически разделенными машинами.

Термин «параллельные вычисления» также находится в процессе дальнейшего определения, например, путем явного разграничения между терминами «параллельный» и «параллельный», где - примерно - первый относится к параллелизму данных, а последний к параллелизму задачи , хотя существует вряд ли действительно строгие и обязательные определения.

Так что можно сказать, что

  • «распределенная обработка» обычно (хотя и не обязательно) означает, что это также «параллельная обработка»
  • «распределенные вычисления» носят более общий характер и охватывают аспекты, не связанные с параллелизмом
  • и очевидно, что «параллельные вычисления» / «параллельная обработка» не означают, что они «распределены»
Marco13
источник
3

Ответы, представленные до сих пор, очень хороши, но я также ожидал акцента на особой разнице между параллельной и распределенной обработкой: выполняемый код. С учетом параллельных процессов выполняемый код одинаков, независимо от уровня параллелизма (инструкция, данные, задача). Вы пишете один код , и он будет выполняться разными потоками / процессорами, например, при вычислении продуктов матриц или при генерации перестановок.

С другой стороны, распределенные вычисления включают в себя одновременное выполнение различных алгоритмов / программ на разных процессорах (с одной или нескольких машин). Такие вычисления позже объединяются в промежуточные / окончательные результаты с использованием доступных средств передачи / синхронизации данных (общая память, сеть). Кроме того, распределенные вычисления очень привлекательны для обработки BigData, поскольку они позволяют использовать параллелизм диска (обычно узкое место для больших баз данных).

Наконец, для уровня параллелизма это может быть принято скорее как ограничение на синхронизацию. Например, в GPGPU, который представляет собой множественные данные с одной инструкцией (SIMD), параллелизм имеет место благодаря наличию разных входов для одной инструкции, причем каждая пара (data_i, инструкция) выполняется другим потоком. Таково ограничение, что в случае расходящихся ветвей необходимо отбросить множество ненужных вычислений, пока потоки не сойдутся. Однако для потоков ЦП они обычно расходятся; тем не менее, можно использовать структуры синхронизации для предоставления одновременного выполнения определенных разделов кода.

Рубенс
источник