Computación distribuida vs computación paralela

61

A menudo escucho a personas hablando de computación paralela y computación distribuida , pero tengo la impresión de que no hay un límite claro entre los 2, y las personas tienden a confundirlo con bastante facilidad, aunque creo que es muy diferente:

  • La computación paralela está más estrechamente acoplada a subprocesos múltiples o cómo hacer uso completo de una sola CPU.
  • La computación distribuida se refiere a la noción de dividir y conquistar, ejecutar subtareas en diferentes máquinas y luego fusionar los resultados.

Sin embargo, desde que entramos en la era de Big Data , parece que la distinción se está derritiendo, y la mayoría de los sistemas actuales utilizan una combinación de computación paralela y distribuida.

Un ejemplo que uso en mi trabajo diario es Hadoop con el paradigma Map / Reduce, un sistema claramente distribuido con trabajadores que ejecutan tareas en diferentes máquinas, pero que también aprovechan al máximo cada máquina con algo de computación paralela.

Me gustaría obtener algunos consejos para entender cómo hacer exactamente la distinción en el mundo de hoy, y si todavía podemos hablar de computación paralela o ya no hay una distinción clara. Para mí, parece que la computación distribuida ha crecido mucho en los últimos años, mientras que la computación paralela parece estancarse, lo que probablemente podría explicar por qué escucho mucho más hablar sobre la distribución de computaciones que la paralelización.

Charles Menguy
fuente
55
La computación paralela no significa necesariamente una sola CPU: hay sistemas que tienen múltiples CPU físicas.
svick
2
Además, la informática distribuida no se limita a dividir y conquistar per se. Tengo más problemas con personas que confunden concurrencia y paralelismo.
Raphael
1
Si está abordando explícitamente la informática distribuida, deberá manejar casos de falla mucho más profundos. Muchas cosas solo se distribuyen por razones geográficas. Algunos sistemas distribuidos tienen muy poca actividad en paralelo porque un nodo central en la red es un cuello de botella.
Rob

Respuestas:

57

Esto es en parte una cuestión de terminología y, como tal, solo requiere que usted y la persona con la que está hablando lo aclaren de antemano. Sin embargo, hay diferentes temas que están más fuertemente asociados con paralelismo , concurrencia o sistemas distribuidos .

El paralelismo generalmente se ocupa de realizar un cálculo particular lo más rápido posible, explotando múltiples procesadores. La escala de los procesadores puede variar desde múltiples unidades aritméticas dentro de un único procesador, hasta múltiples procesadores que comparten memoria, hasta distribuir el cálculo en muchas computadoras. Del lado de los modelos de cómputo, el paralelismo generalmente se trata de usar múltiples hilos simultáneos de cómputo internamente, para calcular un resultado final. El paralelismo también se usa a veces para sistemas reactivos en tiempo real , que contienen muchos procesadores que comparten un solo reloj maestro; tales sistemas son completamente deterministas .

La concurrencia es el estudio de los cálculos con múltiples hilos de cálculo. La concurrencia tiende a provenir de la arquitectura del software más que de la arquitectura del hardware. El software puede escribirse para utilizar la concurrencia a fin de explotar el paralelismo del hardware, pero a menudo la necesidad es inherente al comportamiento del software, para reaccionar a diferentes eventos asincrónicos (por ejemplo, un hilo de cómputo que funciona independientemente de un hilo de interfaz de usuario, o un programa que reacciona a interrupciones de hardware cambiando a un subproceso de controlador de interrupciones).

La informática distribuida estudia procesadores separados conectados por enlaces de comunicación. Mientras que los modelos de procesamiento paralelo a menudo (pero no siempre) asumen memoria compartida, los sistemas distribuidos dependen fundamentalmente del paso de mensajes. Los sistemas distribuidos son inherentemente concurrentes. Al igual que la concurrencia, la distribución es a menudo parte del objetivo, no solo parte de la solución: si los recursos se encuentran en ubicaciones geográficamente distintas, el sistema está inherentemente distribuido. Los sistemas en los que son posibles fallas parciales (de nodos de procesador o de enlaces de comunicación) se incluyen en este dominio.

Gilles 'SO- deja de ser malvado'
fuente
2
Buena respuesta. Uno debe enfatizar que la computación distribuida es un subconjunto de la computación paralela.
Raphael
66
@Raphael: No creo que eso represente con precisión el enfoque de los dos campos. De hecho, a menudo se los considera campos completamente separados, porque se ocupan de cuestiones completamente diferentes. Cuando se programa una computadora paralela usando MPI, uno realmente no se preocupa por fallas parciales, ya que es menos probable que ocurran en tales computadoras. Por otro lado, la informática distribuida está más preocupada por los problemas de distribución, como fallas parciales, y mucho menos preocupada por exprimir cada ciclo de CPU de las máquinas disponibles.
Dave Clarke
44
@Raphael Por el contrario, la informática distribuida es muy independiente de la informática paralela. En el estudio de los sistemas distribuidos, la computación paralela es a menudo el caso aburrido (sin recursos locales interesantes, sin fallas).
Gilles 'SO- deja de ser malvado'
Estaba usando las palabras literalmente; Lástima que los términos se hayan apropiado y, por lo tanto, hayan divergido.
Raphael
Gracias por su respuesta @Gilles, parece que estaba un poco sesgado hacia la informática distribuida, ¡me alegra ver a alguien que se refiere a algo con los términos apropiados!
Charles Menguy
17

Como señaló @Raphael, la Computación Distribuida es un subconjunto de la Computación Paralela; a su vez, la computación paralela es un subconjunto de la computación concurrente.

La concurrencia se refiere a compartirde recursos en el mismo período de tiempo. Por ejemplo, varios procesos comparten la misma CPU (o núcleos de CPU) o comparten memoria o un dispositivo de E / S. Los sistemas operativos gestionan recursos compartidos. Las máquinas multiprocesador y los sistemas distribuidos son arquitecturas en las que el control de concurrencia juega un papel importante. La concurrencia ocurre tanto a nivel de hardware como de software. Varios dispositivos funcionan al mismo tiempo, los procesadores tienen paralelismo interno y trabajan en varias instrucciones simultáneamente, los sistemas tienen múltiples procesadores y los sistemas interactúan a través de la comunicación de red. La concurrencia se produce a nivel de aplicaciones en el manejo de señales, en la superposición de E / S y el procesamiento, en la comunicación y en el intercambio de recursos entre procesos o entre subprocesos en el mismo proceso.

Dos procesos (o subprocesos) que se ejecutan en el mismo sistema para que su ejecución se entrelace a tiempo son concurrentes: los procesos (subprocesos) comparten el recurso de la CPU. Me gusta la siguiente definición: dos procesos (hilos) que se ejecutan en el mismo sistema son concurrentes si y solo si el segundo proceso (hilo) comienza a ejecutarse cuando el primer proceso (hilo) aún no ha terminado su ejecución.

La concurrencia se convierte en paralelismo cuando los procesos (o subprocesos) se ejecutan en diferentes CPU (o núcleos de la misma CPU). El paralelismo en este caso no es "virtual" sino "real".

Cuando esas CPU pertenecen a la misma máquina, nos referimos al cálculo como "paralelo"; cuando las CPU pertenecen a diferentes máquinas , pueden estar distribuidas geográficamente, nos referimos al cálculo como "distribuido".

Por lo tanto, la computación distribuida es un subconjunto de la computación paralela, que es un subconjunto de la computación concurrente.

Por supuesto, es cierto que, en general, la computación paralela y distribuida se considera diferente. La computación paralela está relacionada con aplicaciones estrechamente acopladas y se utiliza para lograr uno de los siguientes objetivos:

  1. Resuelva problemas de computación intensiva más rápido;
  2. Resolver problemas mayores en la misma cantidad de tiempo;
  3. Resuelva problemas del mismo tamaño con mayor precisión en la misma cantidad de tiempo.

En el pasado, el primer objetivo era la razón principal de la computación paralela: acelerar la solución del problema. En este momento, y cuando es posible, los científicos utilizan principalmente la computación paralela para lograr el segundo objetivo (por ejemplo, están dispuestos a pasar la misma cantidad de tiempo que pasaron en el pasado resolviendo en paralelo un problema de tamaño para resolver ahora un problema de tamaño ) o el tercero (es decir, están dispuestos a pasar la misma cantidad de tiempo que pasaron en el pasado resolviendo en paralelo un problema de tamaño para resolver ahora un problema de tamañox 5 x T x xTx5xTxxpero con mayor precisión utilizando un modelo mucho más complejo, más ecuaciones, variables y restricciones). La computación paralela puede usar memoria compartida, pasar mensajes o ambos (p. Ej., Intranodos de memoria compartida usando OpenMP, internodos de paso de mensajes usando MPI); También puede usar aceleradores de GPU. Dado que la aplicación se ejecuta en una supercomputadora paralela, generalmente no tenemos en cuenta problemas como fallas, particiones de red, etc., ya que la probabilidad de estos eventos es, para fines prácticos, cercana a cero. Sin embargo, las grandes aplicaciones paralelas, como las simulaciones de cambio climático, que pueden ejecutarse durante varios meses, generalmente se preocupan por fallas y utilizan mecanismos de verificación / reinicio para evitar comenzar la simulación nuevamente desde el principio si surge un problema.

La computación distribuida se relaciona con aplicaciones poco acopladas, en las cuales el objetivo (para la supercomputación distribuida ) es resolver problemas que de otro modo serían demasiado grandes o cuya ejecución podría dividirse en diferentes componentes que podrían beneficiarse de la ejecución en diferentes arquitecturas. Hay varios modelos que incluyen cliente-servidor, peer-to-peer, etc. Los problemas que surgen en la informática distribuida, como seguridad, fallas, partición de red, etc. deben tenerse en cuenta en el momento del diseño, ya que en este contexto las fallas son la regla y No es la excepción.

Finalmente, la computación Grid y Cloud son un subconjunto de la computación distribuida. El paradigma de la computación en cuadrícula surgió como un nuevo campo que se distingue de la computación distribuida tradicional debido a su enfoque en compartir recursos a gran escala y aplicaciones innovadoras de alto rendimiento. Los recursos que se comparten, generalmente pertenecen a dominios administrativos múltiples y diferentes (las llamadas Organizaciones Virtuales ). La computación en cuadrícula, si bien los científicos la utilizaron mucho en la última década, es tradicionalmente difícil para los usuarios comunes. La computación en la nube intenta cerrar la brecha, permitiendo a los usuarios comunes explotar fácilmente múltiples máquinas, que se ubican en el mismo centro de datos y no se distribuyen geográficamente, mediante el uso de máquinas virtualesque los usuarios pueden ensamblar para ejecutar sus aplicaciones. Debido al hardware, en particular a la falta habitual de una interconexión de red de alto rendimiento (como Infiniband, etc.), las nubes no están destinadas a ejecutar aplicaciones MPI paralelas. Las aplicaciones distribuidas que se ejecutan en nubes generalmente se implementan para explotar el paradigma de Mapa / Reducir. Por cierto, muchas personas piensan en Map / reduce como un modelo de flujo de datos paralelo.

Massimo Cafaro
fuente
2
Creo que esta respuesta es un poco engañosa; se centra en la informática distribuida de alto rendimiento (que de hecho está estrechamente relacionada con la informática paralela de alto rendimiento), mientras que todo el campo de la informática distribuida es mucho más amplio.
Jukka Suomela
No estoy de acuerdo: la respuesta también incluye la computación distribuida de alto rendimiento, que, en cambio, generalmente queda fuera de la computación distribuida. De hecho, hablé sobre modelos cliente-servidor y punto a punto, seguridad, fallas y problemas de partición de red, que son el ámbito de la informática distribuida.
Massimo Cafaro
+1. Buena respuesta! Me pregunto si la informática distribuida se utiliza para fines distintos de la informática paralela. En otras palabras, ¿la computación distribuida es un subconjunto de la computación paralela, es decir, la computación distribuida pertenece a la computación paralela? Por cierto, aquí está mi pregunta cs.stackexchange.com/questions/20064
Tim
1
@Tim, la informática distribuida también se utiliza per se, independientemente de la informática paralela. Piense, por ejemplo, en algoritmos distribuidos clásicos como elección de líderes, consenso, etc.
Massimo Cafaro
7

No estoy seguro de entender la pregunta. La distinción entre procesamiento paralelo y distribuido sigue ahí. El hecho de que pueda aprovechar ambos en el mismo cálculo no cambia el significado de los conceptos.

Y no sé qué noticias está siguiendo, pero estoy bastante seguro de que el procesamiento paralelo no se estanca, especialmente porque creo que es útil con mucha más frecuencia.

Si necesita procesar terabytes de datos, la computación distribuida (posiblemente combinada con la computación paralela) es el camino a seguir. Pero si necesita calcular algo en una computadora de escritorio o teléfono inteligente, la computación paralela por sí sola probablemente le dará mejores resultados, teniendo en cuenta que la conexión a Internet puede no estar siempre disponible y, cuando lo está, puede ser lenta.

svick
fuente
1
-1, ya que esta respuesta realmente no responde la pregunta (es decir, explica los términos).
Jukka Suomela
@JukkaSuomela, la pregunta no es sobre explicar los términos, sino la distinción entre ellos.
svick
6

Aquí hay un artículo reciente que vale la pena leer:

Michel Raynal: "Computación paralela versus Computación distribuida: ¿una gran confusión?" , Proc. Euro-Par 2015 , doi: 10.1007 / 978-3-319-27308-2_4

Resumen:

Este breve documento de posición discute el hecho de que, desde el punto de vista de la enseñanza, el paralelismo y la computación distribuida a menudo se confunden, mientras que, al observar su naturaleza profunda, abordan cuestiones fundamentales distintas. Por lo tanto, los planes de estudio apropiados deben diseñarse por separado para cada uno de ellos. La actitud de "todo está en todo (y recíprocamente)" no parece ser un enfoque relevante para enseñar a los estudiantes los conceptos importantes que caracterizan el paralelismo por un lado, y la computación distribuida por el otro lado.

Jukka Suomela
fuente
4

En la sección Introducción del libro [1], los autores proporcionan otra perspectiva (diferente de las de otras respuestas) sobre la comparación entre la computación distribuida y la computación paralela.

En términos generales, el objetivo del procesamiento paralelo es emplear a todos los procesadores para realizar una tarea grande. En contraste, cada procesador en un sistema distribuido generalmente tiene su propia agenda semi-independiente, pero por varias razones, incluyendo el intercambio de recursos, la disponibilidad y la tolerancia a fallas, los procesadores necesitan coordinar sus acciones.

Desde esta perspectiva, el paradigma Map / Reduce cae principalmente en el contexto de computación paralela. Sin embargo, si queremos que los nodos involucrados lleguen a un consenso sobre un líder común, usando, por ejemplo, el algoritmo Paxos (wiki) , entonces estamos considerando un problema típico en la computación distribuida.

[1] Computación distribuida. Fundamentos, simulaciones y temas avanzados. Hagit Attiya y Jennifer Welch. 2004

hengxina
fuente
0

Existe la respuesta que es más apropiada aquí. Básicamente, se parallelrefiere a memory-shared multiprocessormientras que se distributedrefiere a su private-memory multicomputers. Es decir, la primera es una sola máquina multinúcleo o superescalar, mientras que otra es una red de computadoras distribuidas geográficamente. Esto último implica menos acoplamiento y, por lo tanto, más disponibilidad y tolerancia a fallas a costa de un menor rendimiento. El rendimiento se ve afectado porque necesita la (des) serialización de datos en cada viaje de ida y vuelta y su entrega a distancias más largas, mientras que simplemente puede referir un objeto en memoria para pasarlo a otra CPU en un procesador paralelo.

Pequeño alien
fuente