Computación paralela
* Definición: Una forma de cálculo donde múltiples procesadores ejecutan instrucciones simultáneamente dentro de un espacio de memoria compartido único o nodos muy acoplados. El objetivo es acelerar la ejecución de una sola tarea grande dividiéndola en subasinas más pequeñas e independientes.
* Hardware: Típicamente involucra procesadores de múltiples núcleos, sistemas de multiprocesamiento simétrico (SMP) o hardware especializado como GPU dentro de una sola máquina o un clúster pequeño. El hardware generalmente está físicamente unido y se comunica directamente a través de la memoria compartida o las interconexiones de alta velocidad.
* memoria: La memoria compartida es común. Los procesadores pueden acceder directamente a las mismas ubicaciones de memoria. El paso de mensajes también es posible, pero menos común que con los sistemas distribuidos.
* Comunicación: Rápido y eficiente debido a la memoria compartida o las interconexiones de alto ancho de banda.
* Modelo de programación: A menudo utiliza modelos de programación de memoria compartida (por ejemplo, OpenMP) o un mensaje que pasa dentro de una sola máquina (por ejemplo, MPI dentro de un solo servidor). Centrarse en el acceso eficiente de datos y la sincronización.
* Enfoque: Principalmente tiene como objetivo reducir el * tiempo de ejecución * de una tarea computacionalmente intensiva.
Computación distribuida
* Definición: Una forma de cálculo donde múltiples computadoras independientes (nodos), conectadas a través de una red , trabajan juntos para lograr un objetivo común. Estos nodos tienen su propio espacio de memoria y sistemas operativos. El objetivo es resolver problemas complejos que son demasiado grandes para una sola máquina o para proporcionar servicios de manera geográficamente dispersa.
* Hardware: Involucra una red de computadoras, que podría ser cualquier cosa, desde computadoras personales hasta servidores, hardware especializado, a menudo distribuido geográficamente.
* memoria: Cada nodo tiene su propia memoria independiente. Los datos deben pasar explícitamente entre nodos.
* Comunicación: Se basa en la comunicación de red (por ejemplo, TCP/IP, HTTP, colas de mensajes) para intercambiar datos y coordinar las tareas. Esta comunicación es típicamente más lenta y más propensa a la latencia y las fallas que en los sistemas paralelos.
* Modelo de programación: Emplea la aprobación de mensajes o la memoria compartida distribuida (que se implementa a través de una red e introduce modelos de programación de complejidad). Concéntrese en la tolerancia a fallas, la consistencia de los datos y la comunicación de la red.
* Enfoque: Su objetivo es aumentar *escalabilidad *, *disponibilidad *, *tolerancia a fallas *y la capacidad de manejar conjuntos de datos grandes. Si bien la mejora del rendimiento es un objetivo, a menudo es secundario a estas otras preocupaciones.
Diferencias clave en una tabla:
| Característica | Computación paralela | Computación distribuida |
| --------------------- | -------------------------------------------
| Hardware | GPU múltiple, SMP, GPU dentro de una sola máquina | Red de computadoras independientes |
| memoria | Memoria compartida (común) o pase de mensajes (menos común) | Memoria independiente por nodo |
| comunicación | Memoria rápida, compartida o interconexiones de alta velocidad | Comunicación de red más lenta (TCP/IP, HTTP) |
| Programación | Memoria compartida (OpenMP), MPI (máquina única) | Paso de mensajes (MPI, GRPC, etc.), marcos distribuidos |
| Objetivo primario | Reducir el tiempo de ejecución de una sola tarea | Aumentar la escalabilidad, disponibilidad, tolerancia a fallas |
| acoplamiento | Bien acoplado | Aparentemente acoplado |
| Complejidad | Más bajo, especialmente con memoria compartida. | Mayor, debido a problemas de red, tolerancia a fallas. |
Impacto en la escalabilidad de rendimiento
* Escalabilidad informática paralela:
* ventajas: Excelente escalabilidad para problemas que se pueden dividir y paralelizar fácilmente, especialmente cuando se utilizan arquitecturas de memoria compartidas. La comunicación rápida permite compartir datos eficientes y sincronización.
* Limitaciones: La escalabilidad está limitada por el número de núcleos o procesadores dentro de una sola máquina. La ley de AMDAHL afecta significativamente el rendimiento:la parte del código que no puede ser paralelizado eventualmente limitará la aceleración total. Además, el ancho de banda de memoria puede convertirse en un cuello de botella a medida que aumenta el número de núcleos. El acceso a la memoria compartida también puede introducir contención.
* Escalabilidad informática distribuida:
* ventajas: Puede escalar a problemas y conjuntos de datos mucho más grandes porque no está limitado por los recursos de una sola máquina. La escala horizontal es posible agregando más nodos a la red. Más tolerante de fallas; Si un nodo cae, los otros pueden continuar funcionando.
* Limitaciones: La escalabilidad está limitada por el ancho de banda de la red, la latencia y la sobrecarga de comunicación. La transferencia de datos entre nodos puede ser lenta y costosa. Lograr una fuerte consistencia en los datos distribuidos puede ser el rendimiento complejo y el impacto. La complejidad de la gestión de sistemas distribuidos (tolerancia a fallas, consistencia de datos, coordinación) puede aumentar significativamente los costos operativos y de desarrollo. La sobrecarga de coordinación puede ser significativa a medida que crece el número de nodos.
En resumen:
* Computación paralela Excelente para acelerar las tareas computacionalmente intensivas dentro de una sola máquina o un clúster pequeño, bien acoplado. Es ideal cuando necesita el tiempo de ejecución más rápido posible para un problema específico.
* Computación distribuida Excelente en el manejo de problemas a gran escala, proporcionando alta disponibilidad y gestionar datos dispersos geográficamente. Es ideal cuando necesita procesar conjuntos de datos masivos, crear sistemas tolerantes a fallas o proporcionar servicios a una gran cantidad de usuarios en diferentes ubicaciones.
Elegir entre la computación paralela y distribuida (o una combinación de ambos) depende en gran medida del problema específico que está tratando de resolver, los recursos disponibles y las características de rendimiento deseadas. Un enfoque común es utilizar la computación paralela * dentro de * cada nodo de un sistema distribuido para maximizar la utilización de recursos. Por ejemplo, una base de datos distribuida podría usar procesadores de múltiples núcleos para paralelizar consultas dentro de cada servidor de base de datos.