SPMD

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 30 de junio de 2020; la verificación requiere 1 edición .

En programación , SPMD ( programa único, datos múltiples ) es una técnica utilizada para lograr el paralelismo; es una subcategoría de la clase MIMD de sistemas informáticos en la clasificación de Flynn .

En esta categoría, las tareas se separan y se ejecutan simultáneamente en múltiples procesadores con diferentes entradas para obtener resultados más rápido. SPMD es el estilo más común de programación paralela . [1] También es un requisito previo para explorar conceptos como mensajes activos y memoria compartida distribuida .

SPMD contra SIMD

En SPMD, muchos procesadores autónomos ejecutan simultáneamente el mismo programa desde diferentes lugares (es decir, secciones de código), y no en la secuencia rígida que impone SIMD para procesar diferentes datos. Gracias a SPMD, las tareas se pueden ejecutar en procesadores de propósito general . SIMD requiere procesadores vectoriales para el control del flujo de datos . Tenga en cuenta que estos dos métodos no son mutuamente excluyentes.

Memoria distribuida

SPMD se conoce comúnmente como programación de mensajería para arquitecturas de memoria distribuida. La memoria distribuida consiste en un conjunto de computadoras independientes llamadas "nodos". Cada nodo ejecuta su propio programa y se comunica con otros nodos enviando y recibiendo mensajes llamando a los procedimientos de envío y recepción para hacerlo. La sincronización de barrera se puede implementar mediante mensajes. Los mensajes se pueden enviar utilizando mecanismos de comunicación como TCP/IP (para Ethernet ) o conexiones especializadas de alta velocidad como Myrient y Supercomputer Interconnect. Las secciones secuenciales (secciones) de programas se implementan mediante los mismos cálculos en todos los nodos, y no calculando el resultado en un nodo y enviándolo a otros.

Actualmente, el programador está aislado de los detalles del paso de mensajes a través de interfaces estándar como PVM y MPI .

La memoria distribuida es un estilo de programación utilizado en supercomputadoras paralelas, desde los clústeres domésticos Beowulf hasta los clústeres TeraGrid más grandes.

Memoria compartida

En una máquina de memoria compartida (una computadora con múltiples procesadores que acceden a una sola memoria), los mensajes se pueden enviar almacenando temporalmente su contenido en un área de memoria compartida. Este método suele ser más eficiente para máquinas de memoria compartida con una gran cantidad de procesadores, especialmente para máquinas de acceso no uniforme a la memoria ( NUMA ), donde la memoria es local para el procesador y lleva más tiempo acceder a la memoria de otro procesador. La memoria compartida SPMD generalmente se implementa a través de procesos regulares del sistema operativo .

A diferencia de SPMD, el multiprocesamiento de memoria compartida , también llamado multiprocesamiento simétrico (SMP), brinda la capacidad de paralelizar la ejecución al tener una ruta de ejecución de aplicación independiente en cada procesador que utiliza la memoria compartida como mecanismo de comunicación. El programa comienza a ejecutarse en un procesador y la ejecución se divide en secciones paralelas, que se especifican en el código fuente mediante directivas de paralelización (por ejemplo, una de las directivas declara el comienzo de una sección paralela en el código del programa). Dentro de la sección paralela, los procesadores ejecutan el mismo programa, pero con datos diferentes. Un ejemplo típico es un bucle DO paralelo, donde diferentes procesadores procesan partes separadas de la matriz involucrada en el bucle. Al final del ciclo, las secciones de ejecución se sincronizan, después de lo cual solo un procesador continúa trabajando, mientras que el resto espera. Actualmente, la interfaz estándar para un sistema multiprocesador de memoria compartida es OpenMP . Por lo general, se implementa mediante procesos ligeros llamados hilos .

Combinación de niveles de concurrencia

Las computadoras modernas le permiten usar varios modos paralelos al mismo tiempo para lograr el máximo efecto general. Los programas de memoria compartida que usan MPI pueden ejecutarse simultáneamente en un conjunto de nodos. Cada nodo puede ser una computadora de memoria compartida y realizar cálculos en múltiples procesadores en paralelo usando OpenMP. Para lograr la máxima velocidad con un solo procesador, se utilizan instrucciones vectoriales SIMD (generalmente generadas automáticamente por el compilador) y ejecución superescalar (generalmente procesada de forma transparente por el propio procesador), como canalización y el uso de varios bloques de funciones paralelos.

Historia

SPMD fue propuesto en 1984 por Frederick Durham en IBM para máquinas paralelas de alto rendimiento [2] como el RP3 (IBM Research Parallel Processor Prototype) en una carta de oficina inédita. [3] A fines de la década de 1980, había muchas computadoras distribuidas con bibliotecas propietarias de paso de mensajes. El primer estándar SPMD fue PVM. Actualmente, el estándar de facto es MPI. Las directivas paralelas de Cray fueron las predecesoras directas de OpenMP.

Notas

  1. datos múltiples de un solo programa (enlace descendente) . Fecha de acceso: 23 de enero de 2013. Archivado desde el original el 5 de febrero de 2013. 
  2. Calendario Euromicro  // Microprocesamiento y Microprogramación. — 1983-12. - T. 12 , n. 5 . — S. 315–318 . — ISSN 0165-6074 . - doi : 10.1016/0165-6074(83)90213-2 .
  3. F. Darema, Modelo SPMD: pasado, presente y futuro , Avances recientes en la máquina virtual paralela y la interfaz de paso de mensajes: 8.ª reunión europea del grupo de usuarios de PVM/MPI, Santorini/Thera, Grecia, del 23 al 26 de septiembre de 2001. Notas de conferencias en Informática 2131, pág. 1, 2001.