Definición de computación en paralelo
La computación en paralelo es un tipo de arquitectura de computación en la que varios procesadores ejecutan simultáneamente múltiples cálculos más pequeños desglosados a partir de un problema general más grande y complejo.
preguntas frecuentes
¿Qué es la Computación en Paralelo?
La computación paralela se refiere al proceso de descomponer problemas más grandes en partes más pequeñas, independientes y a menudo similares que pueden ejecutarse simultáneamente por múltiples procesadores que se comunican a través de memoria compartida, cuyos resultados se combinan al completarse como parte de un algoritmo general. El objetivo principal de la computación paralela es aumentar la potencia de cálculo disponible para un procesamiento de aplicaciones y resolución de problemas más rápidos.
La infraestructura de computación paralela normalmente se aloja en un único centro de datos donde se instalan varios procesadores en un rack de servidores; las solicitudes de computación se distribuyen en pequeños trozos por el servidor de aplicaciones que luego se ejecutan simultáneamente en cada servidor.
Generalmente hay cuatro tipos de computación paralela, disponibles tanto de proveedores de computación paralela propietarios como de código abierto: paralelismo a nivel de bits, paralelismo a nivel de instrucción, paralelismo de tareas o paralelismo a nivel de superword:
- paralelismo a nivel de bits: aumenta el tamaño de la palabra del procesador, lo que reduce la cantidad de instrucciones que el procesador debe ejecutar para realizar una operación en variables mayores que la longitud de la palabra.Paralelismo a nivel de instrucción: el enfoque de hardware funciona sobre paralelismo dinámico, en el que el procesador decide en tiempo de ejecución qué instrucciones ejecutar en paralelo; el enfoque de software funciona sobre paralelismo estático, en el que el compilador decide qué instrucciones ejecutar en paralelo
- Paralelismo de tareas: una forma de paralelización de código informático a través de varios procesadores que ejecuta varias tareas diferentes al mismo tiempo en los mismos datos
- Paralelismo a nivel de Superword: una técnica de vectorización que puede explotar el paralelismo de código en línea
Las aplicaciones paralelas se clasifican típicamente como paralelismo de grano fino, en el que las subtareas se comunican varias veces por segundo; paralelismo de grano grueso, en el que las subtareas no se comunican varias veces por segundo; o paralelismo embarazoso, en el que nunca te comuniques. El mapeo en computación paralela se utiliza para resolver problemas embarazosamente paralelos mediante la aplicación de una operación simple a todos los elementos de una secuencia sin necesidad de comunicación entre las subtareas.
La popularización y evolución de la computación paralela en el siglo XXI se produjo en respuesta a la escala de frecuencia del procesador que golpeó la pared de alimentación. Los aumentos de frecuencia aumentan la cantidad de energía utilizada en un procesador, y el escalado de la frecuencia del procesador ya no es factible después de un cierto punto; por lo tanto, los programadores y fabricantes comenzaron a diseñar software de sistema paralelo y a producir procesadores eficientes con múltiples núcleos para abordar el problema del consumo de energía y el sobrecalentamiento de las unidades centrales de procesamiento.
La importancia de la computación paralela continúa creciendo con el uso creciente de procesadores multinúcleo y GPU. Las GPU funcionan junto con las CPU para aumentar el rendimiento de los datos y el número de cálculos simultáneos dentro de una aplicación. Usando la potencia del paralelismo, una GPU puede completar más trabajo que una CPU en un período de tiempo determinado.
Fundamentos de la Arquitectura de Computadoras Paralelas
La arquitectura de computadoras paralelas existe en una amplia variedad de computadoras paralelas, clasificadas de acuerdo con el nivel en el que el hardware admite el paralelismo. La arquitectura de computadora paralela y las técnicas de programación trabajan juntas para utilizar eficazmente estas máquinas. Las clases de arquitecturas de computadora paralelas incluyen:
- Computación multinúcleo: Un procesador multinúcleo es un circuito integrado de procesador de computadora con dos o más núcleos de procesamiento separados, cada uno de los cuales ejecuta instrucciones de programa en paralelo. Los núcleos se integran en varios troqueles en un solo paquete de chips o en un solo troquel de circuito integrado, y pueden implementar arquitecturas como multihilo, superescalar, vector o VLIW. Las arquitecturas de varios núcleos se clasifican como homogéneas, que incluye solo núcleos idénticos, o heterogéneas, que incluye núcleos que no son idénticos.
- multiprocesamiento Simétrico: arquitectura de hardware y software de ordenador multiprocesador en la que dos o más procesadores independientes y homogéneos son controlados por una única instancia de sistema operativo que trata a todos los procesadores por igual y está conectada a una única memoria principal compartida con acceso completo a todos los recursos y dispositivos comunes. Cada procesador tiene una memoria caché privada, se puede conectar mediante redes de malla en el chip y puede trabajar en cualquier tarea sin importar dónde se encuentren los datos de esa tarea en la memoria.
- Computación distribuida: Los componentes del sistema distribuido se encuentran en diferentes equipos en red que coordinan sus acciones comunicándose a través de HTTP puro, conectores tipo RPC y colas de mensajes. Las características significativas de los sistemas distribuidos incluyen fallas independientes de componentes y concurrencia de componentes. La programación distribuida se clasifica típicamente como arquitecturas cliente–servidor, de tres niveles, de n niveles o de igual a igual. Hay mucha superposición en la computación distribuida y paralela y los términos a veces se usan indistintamente.
- Computación paralela masiva: se refiere al uso de numerosos ordenadores o procesadores informáticos para ejecutar simultáneamente un conjunto de cálculos en paralelo. Un enfoque implica la agrupación de varios procesadores en un clúster de computadoras centralizado y estrechamente estructurado. Otro enfoque es la computación en red, en la que muchas computadoras de amplia distribución trabajan juntas y se comunican a través de Internet para resolver un problema en particular.
Otras arquitecturas de computadoras paralelas incluyen computadoras paralelas especializadas, computación en clústeres, computación en cuadrículas, procesadores vectoriales, circuitos integrados específicos para aplicaciones, computación de propósito general en unidades de procesamiento de gráficos (GPGPU) y computación reconfigurable con matrices de puertas programables en campo. La memoria principal en cualquier estructura de computadora paralela es memoria distribuida o memoria compartida.
Soluciones y Técnicas de software de Computación paralela
Se han desarrollado lenguajes de programación concurrentes, API, bibliotecas y modelos de programación paralela para facilitar la computación paralela en hardware paralelo. Algunas soluciones y técnicas de software de computación paralela incluyen:
- Punto de verificación de aplicaciones: una técnica que proporciona tolerancia a errores para los sistemas informáticos al registrar todos los estados variables actuales de la aplicación, lo que permite que la aplicación se restaure y reinicie desde ese punto en caso de fallo. El checkpointing es una técnica crucial para sistemas de computación altamente paralelos en los que la computación de alto rendimiento se ejecuta a través de un gran número de procesadores.
- Paralelización automática: se refiere a la conversión de código secuencial en código multiprocesador para usar múltiples procesadores simultáneamente en una máquina multiprocesador (SMP) de memoria compartida. Las técnicas de paralelización automática incluyen Analizar, Analizar, Programar y Generar Código. Ejemplos típicos de compiladores y herramientas de paralelización comunes son el compilador Paradigm, el compilador Polaris, el compilador Rice Fortran D, el compilador SUIF y el compilador Vienna Fortran.
- Lenguajes de programación paralelos: Los lenguajes de programación paralelos se clasifican típicamente como memoria distribuida o memoria compartida. Mientras que los lenguajes de programación de memoria distribuida utilizan el paso de mensajes para comunicarse, los lenguajes de programación de memoria compartida se comunican manipulando variables de memoria compartida.
La diferencia entre Computación en Paralelo y Computación en la nube
La computación en la nube es un término general que se refiere a la entrega de servicios escalables, como bases de datos, almacenamiento de datos, redes, servidores y software, a través de Internet según sea necesario, de pago por uso.
Los servicios de computación en la nube pueden ser públicos o privados, están totalmente gestionados por el proveedor y facilitan el acceso remoto a los datos, el trabajo y las aplicaciones desde cualquier dispositivo en cualquier lugar capaz de establecer una conexión a Internet. Las tres categorías de servicios más comunes son Infraestructura como Servicio (IaaS), Plataforma como Servicio (PaaS) y Software como Servicio (SaaS).
La computación en la nube es un paradigma relativamente nuevo en el desarrollo de software que facilita un acceso más amplio a la computación paralela a través de vastos clústeres de computadoras virtuales, lo que permite al usuario promedio y a las organizaciones más pequeñas aprovechar la potencia de procesamiento paralelo y las opciones de almacenamiento generalmente reservadas para grandes empresas.
Diferencia entre Procesamiento en paralelo y Computación en Paralelo
El procesamiento en paralelo es un método de computación en el que partes separadas de una tarea compleja general se rompen y se ejecutan simultáneamente en múltiples CPU, lo que reduce la cantidad de tiempo para el procesamiento.
Dividir y asignar cada tarea a un procesador diferente suele ser ejecutado por científicos informáticos con la ayuda de herramientas de software de procesamiento paralelo, que también trabajarán para volver a ensamblar y leer los datos una vez que cada procesador haya resuelto su ecuación particular. Este proceso se realiza a través de una red de computadoras o a través de una computadora con dos o más procesadores.
El procesamiento en paralelo y la computación en paralelo ocurren en tándem, por lo tanto, los términos se usan a menudo indistintamente; sin embargo, cuando el procesamiento en paralelo se refiere al número de núcleos y CPU que se ejecutan en paralelo en la computadora, la computación en paralelo se refiere a la manera en que el software se comporta para optimizar para esa condición.
Diferencia entre Computación Secuencial y Paralela
La computación secuencial, también conocida como computación en serie, se refiere al uso de un solo procesador para ejecutar un programa que se divide en una secuencia de instrucciones discretas, cada una ejecutada una tras otra sin superposición en un momento dado. El software se ha programado tradicionalmente de forma secuencial, lo que proporciona un enfoque más simple, pero está limitado significativamente por la velocidad del procesador y su capacidad para ejecutar cada serie de instrucciones. Cuando las máquinas uniprocesadoras utilizan estructuras de datos secuenciales, las estructuras de datos para entornos informáticos paralelos son simultáneas.
Medir el rendimiento en programación secuencial es mucho menos complejo e importante que los puntos de referencia en computación paralela, ya que normalmente solo implica identificar cuellos de botella en el sistema. Los puntos de referencia en la computación paralela se pueden lograr con marcos de evaluación comparativa y pruebas de regresión de rendimiento, que emplean una variedad de metodologías de medición, como el tratamiento estadístico y las repeticiones múltiples. La capacidad de evitar este cuello de botella moviendo datos a través de la jerarquía de memoria es especialmente evidente en la computación paralela para la ciencia de datos, la computación paralela de aprendizaje automático y los casos de uso de inteligencia artificial de computación paralela.
La computación secuencial es efectivamente lo opuesto a la computación paralela. Si bien la computación paralela puede ser más compleja y tener un mayor costo por adelantado, la ventaja de poder resolver un problema más rápido a menudo supera el costo de adquirir hardware de computación paralela.
¿OmniSci Ofrece una Solución de Computación Paralela?
La plataforma OmniSci aprovecha la enorme potencia de computación paralela de las GPU para el análisis de Big Data, lo que brinda a los analistas de big data y científicos de datos el poder de consultar, visualizar y potenciar de forma interactiva flujos de trabajo de ciencia de datos en miles de millones de registros en milisegundos. La plataforma OmniSci está diseñada para superar las limitaciones de escalabilidad y rendimiento de las herramientas de análisis heredadas que se enfrentan a los atributos de escala, velocidad y ubicación de los grandes conjuntos de datos actuales.