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:
- Resuelva problemas de computación intensiva más rápido;
- Resolver problemas mayores en la misma cantidad de tiempo;
- 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 xTX5 xTXXpero 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.