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.
fuente
Respuestas:
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.
fuente
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:
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 xT X 5 x T X X pero 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.
fuente
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.
fuente
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:
fuente
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.
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
fuente
Existe la respuesta que es más apropiada aquí. Básicamente, se
parallel
refiere amemory-shared multiprocessor
mientras que sedistributed
refiere a suprivate-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.fuente