Articulo de referencia

SHMEM

SHMEM (de la biblioteca de “memoria compartida” de Cray Research [ 1 ] ) es una familia de bibliotecas de programación paralela que proporciona interfaces de procesamiento paral...

SHMEM (de la biblioteca de “memoria compartida” de Cray Research [ 1 ] ) es una familia de bibliotecas de programación paralela que proporciona interfaces de procesamiento paralelo unilaterales, RDMA , para supercomputadoras de memoria distribuida de baja latencia. El acrónimo SHMEM fue posteriormente descifrado para significar “Memoria Jerárquica Simétrica” [ 2 ] . Más tarde se amplió a clústeres de computadoras paralelas de memoria distribuida y se utiliza como interfaz de programación paralela o como interfaz de bajo nivel para construir sistemas y lenguajes de espacio de direcciones global particionado (PGAS) [ 3 ] . “Libsma”, la primera biblioteca SHMEM, fue creada por Richard Smith en Cray Research en 1993 como un conjunto de interfaces ligeras para acceder al hardware de comunicación entre procesadores del CRAY T3D. SHMEM ha sido implementado por Cray Research, SGI, Cray Inc., Quadrics, HP, GSHMEM, IBM, QLogic, Mellanox, las Universidades de Houston y Florida, la Universidad de Stony Brook y la Universidad Tecnológica de Texas; también existe OpenSHMEM de código abierto. [ 4 ]

SHMEM sentó las bases para la comunicación unidireccional de baja latencia (submicrosegundo). [ 5 ] Tras su uso en el CRAY T3E, [ 6 ] su popularidad disminuyó, ya que pocas máquinas podían ofrecer las latencias cercanas al microsegundo necesarias para mantener la eficiencia de su característica comunicación palabra por palabra. Con la llegada de las interconexiones submicrosegundo populares, SHMEM se ha utilizado para abordar la necesidad de métodos de comunicación paralela, portátiles y altamente eficientes para la computación a exaescala. [ 7 ]

Los programas escritos con SHMEM pueden ejecutarse en varios ordenadores conectados entre sí mediante una red de alto rendimiento, compatible con la biblioteca SHMEM utilizada. Cada ordenador ejecuta una copia del programa ( SPMD ); cada copia se denomina PE (elemento de procesamiento). Los PE pueden solicitar a la biblioteca SHMEM que realice operaciones de acceso remoto a memoria, como leer (operación "shmem_get") o escribir (operación "shmem_put") datos. Las operaciones punto a punto son unidireccionales, lo que significa que no se requiere la cooperación activa del hilo remoto para completar la acción (aunque puede consultar su memoria local en busca de cambios mediante "shmem_wait"). Las operaciones pueden realizarse con tipos de datos cortos, como bytes o palabras, o con tipos de datos más largos, como matrices, a veces con pasos uniformes o indexadas (solo se envían algunos elementos de la matriz). Para tipos de datos cortos, SHMEM puede realizar operaciones atómicas ( CAS , obtención y adición, incremento atómico, etc.) incluso en memoria remota. También existen dos métodos de sincronización diferentes: [ 4 ] sincronización de control de tareas (barreras y bloqueos) y funciones para imponer cercado y ordenamiento de memoria. SHMEM tiene varias operaciones colectivas, que deben ser iniciadas por todos los PE, como reducciones, difusión y recolección.

Cada PE tiene parte de su memoria declarada como segmentos "simétricos" (o área de memoria compartida), mientras que el resto es privada. Solo se puede acceder a la memoria "compartida" mediante operaciones unidireccionales desde PE remotos. Los programadores pueden usar construcciones de memoria estática o las rutinas shmem_malloc/shmem_free para crear objetos con direcciones simétricas que abarquen ambos PE.

Funciones típicas de SHMEM

  • init() — inicia todos los elementos de procesamiento (PE)
  • _my_pe() — solicita a SHMEM que devuelva el identificador PE del hilo actual.
  • shmem_barrier_all() — espera hasta que todos los PE lleguen a la barrera; luego, permítales avanzar más.
  • shmem_put(target, source, length, pe) — escribe datos de longitud "length" en la dirección remota "target" en el PE con ID "pe" desde la dirección local "source"
  • shmem_get(target, source, length, pe) — lee datos de longitud "length" desde la dirección remota "source" en PE con ID "pe" y guarda los valores leídos en la dirección local "target" [ 8 ]

Lista de implementaciones de SHMEM

  • Cray Research: SHMEM original para las supercomputadoras Cray T3D , Cray T3E y Cray Research PVP [ 9 ]
  • SGI: SGI-SHMEM para sistemas con NUMAlink y Altix construidos con adaptadores de red InfiniBand
  • Cray Inc.: MP-SHMEM para Unicos MP (supercomputadora X1E)
  • Cray Inc.: LC-SHMEM para Unicos LC (Cray XT3, XT4, XT5)
  • Quadrics: Q-SHMEM [ 10 ] para clústeres Linux con interconexión QsNet [ 9 ]
  • Cíclope-64 SHMEM
  • HP SHMEM [ 9 ]
  • IBM SHMEM [ 9 ]
  • GPSHMEM [ 9 ]
  • NVSHMEM se basa en la API OpenSHMEM y es compatible con GPU, incluyendo la comunicación iniciada tanto por el host como por el dispositivo.

Implementaciones de OpenSHMEM

OpenSHMEM es un proyecto estándar de SGI y Open Source Software Solutions, Inc.

Desventajas

En los primeros años, SHMEM solo era accesible en algunas máquinas de Cray Research (más tarde también en SGI) [ 1 ] equipadas con redes especiales, lo que limitaba la difusión de la biblioteca y generaba dependencia del proveedor (por ejemplo, Cray Research recomendaba reescribir parcialmente los programas MPI para combinar las llamadas a MPI y shmem, lo que hacía que el programa no fuera portable a otros entornos MPI claros).

SHMEM no se definió como estándar, [ 9 ] [ 1 ] por lo que otros proveedores crearon varias variantes incompatibles de bibliotecas SHMEM. Las bibliotecas tenían diferentes nombres de archivos de inclusión, diferentes nombres de funciones de administración para iniciar PE u obtener el ID del PE actual, [ 9 ] y algunas funciones se modificaron o no fueron compatibles.

Las variantes de las bibliotecas SHMEM pueden ejecutarse sobre cualquier biblioteca MPI, incluso cuando un clúster solo dispone de Ethernet no optimizada para RDMA ; sin embargo, el rendimiento suele ser inferior al de otros protocolos de red mejorados.

La memoria en la región compartida debe asignarse utilizando funciones especiales ( shmalloc / shfree ), no con el malloc del sistema . [ 9 ]

Muchas desventajas de SHMEM se han superado con el uso de OpenSHMEM en interconexiones populares de submicrosegundos, impulsado por el desarrollo de exaescala. [ 7 ]

Véase también

Referencias

  1. 1 2 3 Cray Research (1999). Guía de optimización de C y C++ para Cray T3E (PDF) (Informe técnico). págs. 45–83 . 004-2178-002. Archivado del original (PDF) el 1 de febrero de 2014. 
  2. Introducción a la computación paralela - 3.11 Trabajo relacionado // Curso cse590o, Universidad de Washington, invierno de 2002; página 154
  3. "Nuevas aceleraciones para la programación paralela" (PDF) . Mellanox. 2012. Consultado el 18 de enero de 2014. SHMEM se está utilizando/proponiendo como una interfaz de nivel inferior para implementaciones de PGAS .
  4. 1 2 3 Poole, Stephen (2011). "OpenSHMEM - Hacia un modelo RMA unificado". Enciclopedia de computación paralela . págs. 1379–1391 . doi : 10.1007/978-0-387-09766-4_490 . ISBN  978-0-387-09765-7.
  5. Herramientas para la evaluación comparativa, el seguimiento y la simulación de aplicaciones SHMEM // CUG 2012, artículo del Centro de Supercomputación de San Diego y ORNL
  6. Avances recientes en máquinas virtuales paralelas y paso de mensajes..., Volumen 11, página 59: "La comunicación unidireccional como paradigma de programación se popularizó inicialmente gracias a la biblioteca SHMEM en los procesadores Cray T3D y T3E..."
  7. 1 2 "OpenSHMEM 2015" . www.csm.ornl.gov . Consultado el 10 de abril de 2017 .
  8. SGI TPL. "man shmem_get" . Archivado del original el 1 de febrero de 2014.
  9. 1 2 3 4 5 6 7 8 9 10 11 Nanjegowda, Ram; Pophale, Swaroop; Curtis, Tony (2012). "Tutorial de OpenSHMEM" (PDF) . Universidad de Houston, Texas. Archivado del original (PDF) el 1 de febrero de 2014.
  10. Manual de programación de Shmem // Cuadrículas, 2000-2001
  11. OpenMPI
  12. James Ross y David Richie. Una implementación de OpenSHMEM para el coprocesador Adapteva Epiphany. En Actas del Tercer Taller sobre OpenSHMEM y Tecnologías Relacionadas, "OpenSHMEM 2016" . www.csm.ornl.gov .Springer, 2016.
  13. Sandia OpenSHMEM (SOS) en Github
  14. Hammond, Jeff R.; Ghosh, Sayan; Chapman, Barbara M. (2014). "Implementación de OpenSHMEM mediante comunicación unidireccional MPI-3" . En Poole, Stephen; Hernandez, Oscar; Shamis, Pavel (eds.). OpenSHMEM y tecnologías relacionadas: experiencias, implementaciones y herramientas . Lecture Notes in Computer Science. Vol. 8356. Cham: Springer International Publishing. pp. 44–58 . doi : 10.1007/978-3-319-05215-1_4 . ISBN   978-3-319-05215-1.
  15. Si, Min; Fu, Huansong; Hammond, Jeff R.; Balaji, Pavan (2022). "OpenSHMEM sobre MPI como competidor de rendimiento: análisis exhaustivo y optimizaciones" . OpenSHMEM y tecnologías relacionadas. OpenSHMEM en la era de las redes inteligentes y de exaescala . Lecture Notes in Computer Science. Vol. 13159. Springer International Publishing. pp. 39–60 . doi : 10.1007/978-3-031-04888-3_3 . ISBN   978-3-031-04887-6.
  16. Rogowski, Marcin; Hammond, Jeff R.; Keyes, David E.; Dalcin, Lisandro (2023). "shmem4py: Comunicación unidireccional de alto rendimiento para aplicaciones Python". Actas de la Conferencia de la Plataforma para la Computación Científica Avanzada . págs. 1–10 . doi : 10.1145/3624062.3624602 . 

Lecturas adicionales

  • Rutinas de acceso a memoria compartida (SHMEM) // Cray Research, 1995
  • Uso de SHMEM en el CRAY T3E
  • man intro_shmem (SGI TPL) - Introducción al modelo de programación SHMEM
  • OpenSHMEM : un esfuerzo por crear una especificación para una API estandarizada para la programación paralela en el espacio de direcciones global particionado.