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

61

Я часто слышу, как люди говорят о параллельных вычислениях и распределенных вычислениях, но у меня сложилось впечатление, что четкой границы между этими двумя понятиями нет, и люди склонны запутывать это довольно легко, хотя я считаю, что это совсем другое:

  • Параллельные вычисления более тесно связаны с многопоточностью, или как в полной мере использовать один процессор.
  • Распределенные вычисления относятся к понятию «разделяй и властвуй», выполняя подзадачи на разных машинах, а затем объединяя результаты.

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

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

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

Чарльз Менгу
источник
5
Параллельные вычисления не обязательно означают один ЦП: существуют системы с несколькими физическими ЦП.
svick
2
Кроме того, распределенные вычисления не ограничиваются разделением и завоеванием как таковым. У меня больше проблем с людьми, которые путают параллелизм и параллелизм.
Рафаэль
1
Если вы явно обращаетесь к распределенным вычислениям, вам придется обрабатывать гораздо более глубокие случаи сбоев. Многие вещи распространяются только по географическим причинам. Некоторые распределенные системы работают очень мало параллельно, потому что узким местом является центральный узел в сети.
Роб
Связанный: cs.stackexchange.com/q/51099/755
DW

Ответы:

57

Отчасти это вопрос терминологии, и поэтому требуется, чтобы вы и человек, с которым вы разговариваете, уточнить это заранее. Однако есть разные темы, которые более тесно связаны с параллелизмом , параллелизмом или распределенными системами .

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

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

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

Жиль "ТАК - перестань быть злым"
источник
2
Хороший ответ. Следует подчеркнуть, что распределенные вычисления являются подмножеством параллельных вычислений.
Рафаэль
6
@ Рафаэль: Я не думаю, что это точно представляет фокус двух полей. Действительно, их часто считают совершенно отдельными областями, потому что они имеют дело с совершенно разными проблемами. При программировании параллельного компьютера с использованием MPI, на самом деле не нужно беспокоиться о частичных сбоях, так как они менее вероятны на таких компьютерах. С другой стороны, распределенные вычисления в большей степени связаны с проблемами распределения, такими как частичные сбои, и гораздо меньше заботятся о том, чтобы выжать каждый цикл ЦП из имеющихся машин.
Дейв Кларк
4
@Raphael Напротив, распределенные вычисления очень независимы от параллельных вычислений. При изучении распределенных систем параллельные вычисления часто являются скучным случаем (без интересных локальных ресурсов, без сбоев).
Жиль "ТАК - перестань быть злым"
Я использовал слова буквально; очень плохо, если условия были присвоены и таким образом разошлись.
Рафаэль
Спасибо за ваш ответ @Gilles, похоже, я был немного склонен к распределенным вычислениям, рад видеть кого-то, кто ссылается на что-то по соответствующим терминам!
Чарльз Менгю
17

Как указывает @Raphael, распределенные вычисления являются подмножеством параллельных вычислений; в свою очередь, параллельные вычисления являются подмножеством параллельных вычислений.

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

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

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

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

Следовательно, распределенные вычисления являются подмножеством параллельных вычислений, которое является подмножеством параллельных вычислений.

Конечно, это правда, что в целом параллельные и распределенные вычисления рассматриваются как разные. Параллельные вычисления связаны с тесно связанными приложениями и используются для достижения одной из следующих целей:

  1. Быстрее решать вычислительные проблемы;
  2. Решите большие проблемы за то же время;
  3. Решайте проблемы одинакового размера с более высокой точностью за одно и то же время.

В прошлом главной целью параллельных вычислений была первая цель: ускорение решения проблемы. Прямо сейчас и, когда это возможно, ученые в основном используют параллельные вычисления для достижения любой второй цели (например, они готовы тратить столько же времени сколько они потратили в прошлом, на параллельное решение проблемы размера чтобы решить теперь проблему). размером ) или третий (т. е. они готовы тратить столько же времени сколько потратили в прошлом, параллельно решая проблему размера чтобы решить теперь проблему размерах 5 х Т х хTx5xTxxно с более высокой точностью, используя гораздо более сложную модель, больше уравнений, переменных и ограничений). Параллельные вычисления могут использовать совместно используемую память, передачу сообщений или оба (например, внутриузел совместно используемой памяти, использующий OpenMP, межузел передачи сообщений, использующий MPI); он также может использовать ускорители графических процессоров. Поскольку приложение выполняется на одном параллельном суперкомпьютере, мы обычно не учитываем такие проблемы, как сбои, сетевое разделение и т. Д., Поскольку вероятность этих событий для практических целей близка к нулю. Тем не менее, крупные параллельные приложения, такие как моделирование изменения климата, которые могут выполняться в течение нескольких месяцев, обычно связаны со сбоями и используют механизм контрольной точки / перезапуска, чтобы избежать повторного запуска моделирования с самого начала в случае возникновения проблемы.

Распределенные вычисления связаны со слабосвязанными приложениями, в которых цель (для распределенных суперкомпьютеров ) состоит в том, чтобы решить проблемы, которые слишком велики или выполнение которых может быть разделено на разные компоненты, которые могут выиграть от выполнения на разных архитектурах. Существует несколько моделей, в том числе клиент-сервер, одноранговая сеть и т. Д. Проблемы, возникающие в распределенных вычислениях, такие как безопасность, сбои, сетевое разделение и т. Д., Должны приниматься во внимание во время разработки, поскольку в этом контексте сбои являются правилом и не исключение.

Наконец, Grid и облачные вычисления являются подмножеством распределенных вычислений. Парадигма грид-вычислений возникла как новая область, отличающаяся от традиционных распределенных вычислений, поскольку она сосредоточена на широкомасштабном распределении ресурсов и инновационных высокопроизводительных приложениях. Совместно используемые ресурсы обычно принадлежат нескольким различным административным доменам (так называемые виртуальные организации ). Grid Computing, в то время как интенсивно использовались учеными в последнее десятилетие, традиционно трудны для обычных пользователей. Облачные вычисления пытаются восполнить этот пробел, позволяя обычным пользователям легко эксплуатировать несколько машин, которые расположены в одном центре обработки данных и не географически распределены, за счет использования виртуальных машин.которые могут быть собраны пользователями для запуска своих приложений. Благодаря аппаратному обеспечению, в частности обычному отсутствию высокопроизводительного сетевого соединения (такого как Infiniband и т. Д.), Облака не предназначены для запуска параллельных приложений MPI. Распределенные приложения, работающие в облаках, обычно реализуются для использования парадигмы Map / Reduce. Кстати, многие люди считают Map / Reduction параллельной моделью потока данных.

Массимо Кафаро
источник
2
Я думаю, что этот ответ немного вводит в заблуждение; он сосредоточен на распределенных высокопроизводительных вычислениях (которые действительно тесно связаны с параллельными высокопроизводительными вычислениями), тогда как вся область распределенных вычислений намного шире.
Юкка Суомела
Я не согласен: ответ также включает в себя распределенные высокопроизводительные вычисления, которые вместо этого обычно исключают из распределенных вычислений. В самом деле, я обсуждал клиент-серверные и одноранговые модели, безопасность, сбои и проблемы сетевых разделов, которые являются областью распределенных вычислений.
Массимо Кафаро
+1. Хороший ответ! Интересно, используются ли распределенные вычисления в целях, отличных от параллельных вычислений? Другими словами, является ли распределенное вычисление подмножеством параллельных вычислений, т.е. относится ли распределенное вычисление к параллельным вычислениям? Кстати, вот мой вопрос cs.stackexchange.com/questions/20064
Тим
1
@Tim, распределенные вычисления также используются сами по себе, независимо от параллельных вычислений. Подумайте, например, о классических распределенных алгоритмах, таких как выборы лидера, консенсус и т. Д.
Массимо Кафаро,
7

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

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

Если вам нужно обрабатывать терабайты данных, лучше всего использовать распределенные вычисления (возможно, в сочетании с параллельными вычислениями). Но если вам нужно что-то вычислить на настольном компьютере или смартфоне, параллельные вычисления, вероятно, дадут вам наилучшие результаты, учитывая, что подключение к Интернету может быть доступно не всегда, а когда оно есть, оно может быть медленным.

svick
источник
1
-1, так как этот ответ на самом деле не отвечает на вопрос (т.е. объясняет термины).
Юкка Суомела
@JukkaSuomela, вопрос не в объяснении терминов, а в различии между ними.
svick
6

Вот недавняя статья, которую стоит прочитать:

Мишель Рейнал: «Параллельные вычисления против распределенных вычислений: большая путаница?» , Учеб. Euro-Par 2015 , дои: 10.1007 / 978-3-319-27308-2_4

Абстрактные:

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

Юкка Суомела
источник
4

В разделе «Введение» книги [1] авторы предлагают другую точку зрения (отличную от представленных в других ответах) на сравнение между распределенными вычислениями и параллельными вычислениями.

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

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

[1] Распределенные вычисления. Основы, симуляции и продвинутые темы. Хагит Аттия и Дженнифер Уэлч. 2004.

Hengxin
источник
0

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

Маленький Чужой
источник