En informática , SPMD ( programa único, datos múltiples ) es una técnica empleada para lograr el paralelismo ; es una subcategoría de MIMD . Las tareas se dividen y se ejecutan simultáneamente en varios procesadores con diferentes entradas para obtener resultados más rápidamente. SPMD es el estilo más común de programación paralela. [1] [ verificación fallida ] También es un requisito previo para la investigación de conceptos como mensajes activos y memoria compartida distribuida .
SPMD frente a SIMD
En SPMD, varios procesadores autónomos ejecutan simultáneamente el mismo programa en puntos independientes, en lugar de en el mismo paso que SIMD impone a diferentes datos. Con SPMD, las tareas se pueden ejecutar en CPU de propósito general ; SIMD requiere procesadores vectoriales para manipular flujos de datos. Tenga en cuenta que los dos no son mutuamente excluyentes.
Memoria distribuida
SPMD generalmente se refiere a la programación de transmisión de mensajes en arquitecturas de computadora de memoria distribuida . Una computadora con memoria distribuida consiste en una colección de computadoras independientes, llamadas nodos. Cada nodo inicia su propio programa y se comunica con otros nodos enviando y recibiendo mensajes, llamando a las rutinas de envío / recepción para ese propósito. La sincronización de barrera también puede implementarse mediante mensajes. Los mensajes pueden enviarse mediante varios mecanismos de comunicación, como TCP / IP sobre Ethernet , o interconexiones especializadas de alta velocidad como Myrinet y Supercomputer Interconnect. Las secciones en serie del programa se implementan mediante cálculos idénticos en todos los nodos en lugar de calcular el resultado en un nodo y enviarlo a los demás.
Hoy en día, el programador está aislado de los detalles del mensaje que pasa por interfaces estándar, como PVM y MPI .
La memoria distribuida es el estilo de programación utilizado en supercomputadoras paralelas, desde los clústeres de Beowulf de cosecha propia hasta los clústeres más grandes de Teragrid .
En una máquina de memoria compartida (una computadora con varias CPU que acceden al mismo espacio de memoria), los mensajes se pueden enviar depositando su contenido en un área de memoria compartida. Esta es a menudo la forma más eficiente de programar computadoras con memoria compartida con una gran cantidad de procesadores, especialmente en máquinas NUMA , donde la memoria es local para los procesadores y el acceso a la memoria de otro procesador lleva más tiempo. SPMD en una máquina de memoria compartida generalmente se implementa mediante procesos estándar (pesados) .
A diferencia de SPMD, el multiprocesamiento de memoria compartida (tanto multiprocesamiento simétrico , SMP y acceso a memoria no uniforme , NUMA) presenta al programador un espacio de memoria común y la posibilidad de paralelizar la ejecución haciendo que el programa tome diferentes rutas en diferentes procesadores. El programa comienza a ejecutarse en un procesador y la ejecución se divide en una región paralela, que se inicia cuando se encuentran directivas paralelas . En una región paralela, los procesadores ejecutan un solo programa en diferentes datos. Un ejemplo típico es el bucle DO paralelo, donde diferentes procesadores trabajan en partes separadas de las matrices involucradas en el bucle. Al final del ciclo, la ejecución se sincroniza, solo un procesador continúa y los demás esperan. La interfaz estándar actual para el multiprocesamiento de memoria compartida es OpenMP . Suele implementarse mediante procesos ligeros, denominados subprocesos .
Combinación de niveles de paralelismo
Las computadoras actuales permiten la explotación de muchos modos paralelos al mismo tiempo para obtener el máximo efecto combinado. Un programa de memoria distribuida que utiliza MPI puede ejecutarse en una colección de nodos. Cada nodo puede ser una computadora con memoria compartida y ejecutarse en paralelo en múltiples CPU usando OpenMP. Dentro de cada CPU, las instrucciones vectoriales SIMD (generalmente generadas automáticamente por el compilador) y la ejecución de instrucciones superescalares (generalmente manejadas de manera transparente por la propia CPU), como la canalización y el uso de múltiples unidades funcionales paralelas, se utilizan para obtener la máxima velocidad de una sola CPU.
Historia
El SPMD fue propuesto por primera vez en 1983 por Michel Auguin (Universidad de Niza Sophia-Antipolis) y François Larbey (Thomson / Sintra) en la computadora paralela OPSILA [2] y luego en 1984 por Frederica Darema en IBM para máquinas altamente paralelas como la RP3 ( IBM Research Parallel Processor Prototype), en un memorando inédito de IBM. [3] A finales de la década de 1980, había muchas computadoras distribuidas con bibliotecas de paso de mensajes patentadas. El primer estándar SPMD fue PVM . El estándar de facto actual es MPI .
Las directivas paralelas de Cray fueron un predecesor directo de OpenMP .
Referencias
- ^ [1]
- ^ M. Auguin, F. Larbey, OPSILA: un SIMD avanzado para análisis numérico y procesamiento de señales, en Microcomputadoras: desarrollos en la industria, los negocios y la educación / Noveno Simposio EUROMICRO sobre Microprocesamiento y Microprogramación, pp 311-318 Madrid, 13 de septiembre - 16 de diciembre de 1983
- ^ F. Darema, modelo SPMD: pasado, presente y futuro , avances recientes en la interfaz de transmisión de mensajes y máquinas virtuales paralelas: octava reunión del grupo europeo de usuarios de PVM / MPI, Santorini / Thera, Grecia, 23 al 26 de septiembre de 2001. Notas de la conferencia en Ciencias de la Computación 2131, pág. 1 de 2001.
enlaces externos
- Gestión de trabajos paralelos y transmisión de mensajes
- Flujo de datos múltiples de un solo programa
- SPMD
- Programación de memoria distribuida