Introducción a las arquitecturas paralelas
1. Definición y Conceptos Básicos:
Se introduce la arquitectura paralela como un enfoque para mejorar el rendimiento de los sistemas computacionales mediante la realización simultánea de múltiples operaciones.
- Definición:
-
Se refieren a diseños y enfoques que permiten la ejecución simultánea de múltiples operaciones de procesamiento para mejorar el rendimiento y la eficiencia de los sistemas informáticos.
-
Estas arquitecturas son fundamentales para la computación de alto rendimiento, como la que se encuentra en los centros de datos en la nube, y aprovechan la creciente cantidad de transistores disponibles en los chips modernos para realizar más trabajo en paralelo en lugar de simplemente aumentar la velocidad del reloj de los CPU.
-
Las arquitecturas paralelas explotan el paralelismo inherente en las tareas computacionales y pueden clasificarse principalmente en dos categorías:
-
Paralelismo de Datos de Instrucción Única (SIMD): Este tipo de paralelismo se encuentra en las unidades de procesamiento gráfico (GPU) y algunos CPU modernos. En SIMD, una única instrucción se aplica simultáneamente a múltiples datos. Es adecuado para tareas repetitivas que pueden dividirse en datos paralelos, como el procesamiento de imágenes y gráficos.
-
Paralelismo de Múltiples Instrucciones y Múltiples Datos (MIMD): Este enfoque se usa en sistemas multicore y en centros de computación en la nube. En MIMD, múltiples procesadores ejecutan diferentes instrucciones en diferentes datos de forma simultánea. Esto permite una mayor flexibilidad y es ideal para aplicaciones que requieren la ejecución de múltiples tareas independientes al mismo tiempo.
-
- Conceptos Básicos:
1. Paralelismo de Instrucciones (ILP):
- Pipelining: Técnica que permite que múltiples instrucciones se superpongan en ejecución.
- Predicción de bifurcaciones: Mecanismo que intenta adivinar el camino que tomará una instrucción condicional.
- Ejecución fuera de orden (OOOE): Permite que las instrucciones se ejecuten tan pronto como sus operandos estén disponibles, sin importar su orden en el programa.
2. Paralelismo de Datos (DLP):
- SIMD (Single Instruction, Multiple Data): Una sola instrucción opera en múltiples datos simultáneamente. Utilizado en GPUs y ciertas unidades vectoriales en CPUs.
3. Paralelismo de Tareas (TLP):
- MIMD (Multiple Instruction, Multiple Data): Múltiples procesadores ejecutan diferentes instrucciones en diferentes datos simultáneamente. Común en sistemas multicore y centros de datos.
4.Memoria No Uniforme de Acceso (NUMA):
- Arquitectura de memoria compartida donde el tiempo de acceso a la memoria varía dependiendo de la ubicación de la memoria y del CPU que la accede. Requiere diseño especializado para optimizar el rendimiento.
5. Programación en Paralelo:
- Map vs Loop Programming: Uso de estructuras de programación que permiten la ejecución paralela de tareas, como el uso de la función map en Python, que asigna tareas a múltiples núcleos de procesamiento.
6. Co-ubicación vs Separación de Computación y Almacenamiento:
- Co-ubicación: Computación y almacenamiento en la misma máquina para minimizar la comunicación en red.
- Separación: Computación y almacenamiento en máquinas diferentes, lo que facilita la especialización y la actualización independiente de cada componente, pero puede incrementar la necesidad de comunicación en red.
7. Instrucción Paralelismo Sin Instrucción:
- Arquitecturas de Flujo de Datos: Sistemas que operan de manera continua con datos que fluyen entre dispositivos conectados, sin necesidad de secuencias de instrucciones programadas.
2. Motivación para el Paralelismo:
La necesidad de aumentar la eficiencia y reducir los tiempos de ejecución en aplicaciones complejas motiva el uso de arquitecturas paralelas. Surge de la necesidad de mejorar el rendimiento de los sistemas informáticos, superando las limitaciones de las arquitecturas secuenciales. Se basa en la búsqueda de un rendimiento superior y la necesidad de superar las limitaciones de las arquitecturas secuenciales, lo que conlleva una evolución tanto en el diseño de hardware como en las técnicas de programación.