Computación paralela y distribuida

15

¿Cuál es (son) la (s) diferencia (s) entre computación paralela y distribuida? Cuando se trata de escalabilidad y eficiencia, es muy común ver soluciones que se ocupan de los cálculos en grupos de máquinas, y a veces se lo denomina procesamiento paralelo o procesamiento distribuido.

De cierta manera, el cálculo parece ser siempre paralelo, ya que hay cosas que se ejecutan simultáneamente. Pero, ¿el cálculo distribuido está simplemente relacionado con el uso de más de una máquina, o hay más especificidades que distingan estos dos tipos de procesamiento? ¿No sería redundante decir, por ejemplo, que un cálculo es paralelo Y distribuido ?

Rubens
fuente

Respuestas:

16

Simplemente configurado, 'paralelo' significa ejecutarse simultáneamente en distintos recursos (CPU), mientras que 'distribuido' significa ejecutarse en distintas computadoras, lo que implica problemas relacionados con las redes.

La computación paralela que usa, por ejemplo, OpenMP no se distribuye, mientras que la computación paralela con el paso de mensajes a menudo se distribuye.

Estar en un entorno 'distribuido pero no paralelo' significaría infrautilizar los recursos, por lo que rara vez se encuentra, pero es conceptualmente posible.

damienfrancois
fuente
4

Los términos "computación paralela" y "computación distribuida" ciertamente tienen una gran superposición, pero pueden diferenciarse aún más. En realidad, ya hiciste esto en tu pregunta, luego preguntaste sobre "procesamiento paralelo" y "procesamiento distribuido".

Se podría considerar "computación distribuida" como el término más general que implica "procesamiento distribuido", así como, por ejemplo, "almacenamiento distribuido". El término común, "distribuido", generalmente se refiere a algún tipo de mensaje que pasa a través de una red, entre máquinas que están físicamente separadas.

El término "computación paralela" también está en proceso de definición adicional, por ejemplo, al diferenciar explícitamente entre los términos "paralelo" y "concurrente", donde, aproximadamente, el primero se refiere al paralelismo de datos y el segundo al paralelismo de tareas , aunque existe son apenas definiciones realmente estrictas y vinculantes.

Entonces se podría decir que

  • "procesamiento distribuido" generalmente (aunque no necesariamente) significa que también es "procesamiento paralelo"
  • "computación distribuida" es más general y también cubre aspectos que no están relacionados con el paralelismo
  • y obviamente, "computación paralela" / "procesamiento paralelo" no implica que esté "distribuido"
Marco13
fuente
3

Las respuestas presentadas hasta ahora son muy buenas, pero también esperaba un énfasis en una diferencia particular entre el procesamiento paralelo y distribuido: el código ejecutado. Considerando los procesos paralelos, el código ejecutado es el mismo, independientemente del nivel de paralelismo (instrucción, datos, tarea). Usted escribe un solo código , y será ejecutado por diferentes subprocesos / procesadores, por ejemplo, al calcular productos de matrices o generar permutaciones.

Por otro lado, la informática distribuida implica la ejecución de diferentes algoritmos / programas al mismo tiempo en diferentes procesadores (de una o más máquinas). Dichos cálculos se fusionan luego en resultados intermedios / finales utilizando los medios disponibles de comunicación / sincronización de datos (memoria compartida, red). Además, la informática distribuida es muy atractiva para el procesamiento de BigData, ya que permite explotar el paralelismo de disco (generalmente el cuello de botella para grandes bases de datos).

Finalmente, para el nivel de paralelismo, puede tomarse más bien como una restricción en la sincronización. Por ejemplo, en GPGPU, que es una sola instrucción de datos múltiples (SIMD), el paralelismo ocurre al tener diferentes entradas para una sola instrucción, cada par (data_i, instrucción) ejecutado por un hilo diferente. Tal es la restricción que, en el caso de ramas divergentes, es necesario descartar muchos cálculos innecesarios, hasta que los hilos vuelvan a converger. Sin embargo, para hilos de CPU, comúnmente divergen; sin embargo, uno puede usar estructuras de sincronización para garantizar la ejecución concurrente de secciones específicas del código.

Rubens
fuente