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 RDMA unilaterales para supercomputadoras de memoria distribuida de baja latencia. Posteriormente, el acrónimo SHMEM fue modificado por ingeniería inversa para significar "Memoria jerárquica simétrica". [2] Más tarde se expandió 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 un espacio de direcciones global particionado (PGAS ) sistemas y lenguajes. [3]“Libsma”, la primera biblioteca SHMEM, fue creada por Richard Smith en Cray Research en 1993 como un conjunto de interfaces delgadas 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, Universidades de Houston y Florida; también hay OpenSHMEM de código abierto. [4]
SHMEM sentó las bases para la comunicación unilateral de baja latencia (sub-microsegundos). [5] Después de su uso en el CRAY T3E, [6] su popularidad disminuyó ya que pocas máquinas podían ofrecer las latencias de casi microsegundos necesarias para mantener la eficiencia de su característica comunicación de palabras individuales. Con el advenimiento de las interconexiones populares de sub-microsegundos, SHMEM se ha utilizado para abordar la necesidad de métodos de comunicación en paralelo portátiles, hiper eficientes para la computación a exaescala. [7]
Los programas escritos con SHMEM se pueden iniciar en varias computadoras, conectadas junto con alguna red de alto rendimiento, compatible con la biblioteca SHMEM usada. Cada computadora ejecuta una copia de un programa ( SPMD ); cada copia se llama PE (elemento de procesamiento). Los PE pueden solicitar a la biblioteca SHMEM que realice operaciones de acceso remoto a la memoria, como leer (operación "shmem_get") o escribir (operación "shmem_put") datos. Las operaciones de igual a igual son unilaterales, lo que significa que no se necesita la cooperación activa de un hilo remoto para completar la acción (pero puede sondear su memoria local en busca de cambios usando "shmem_wait"). Las operaciones se pueden realizar en tipos cortos como bytes o palabras, o en tipos de datos más largos como matrices, a veces de manera uniforme o indexada (solo se envían algunos elementos de la matriz). Para tipos de datos cortos, SHMEM puede realizar operaciones atómicas ( CAS , buscar y agregar, incremento atómico, etc.) incluso en la memoria remota. También hay dos métodos de sincronización diferentes: [4] sincronización de control de tareas (barreras y bloqueos) y funciones para hacer cumplir el cercado y la ordenación de la memoria. SHMEM tiene varias operaciones colectivas, que deben ser iniciadas por todos los PE, como reducciones, difusión, cobranza.
Cada PE tiene parte de su memoria declarada como segmento "simétrico" (o área de memoria compartida) y otra memoria es privada. Solo se puede acceder a la memoria "compartida" en la operación unilateral desde PE remotos. Los programadores pueden usar construcciones de memoria estática o rutinas shmalloc / shfree para crear objetos con direcciones simétricas que abarcan los PE.
Funciones típicas de SHMEM
- start_pes (N) - iniciar N elementos de procesamiento (PE)
- _my_pe () - pide a SHMEM que devuelva el identificador PE del hilo actual
- shmem_barrier_all () - espere hasta que todos los PE lleguen a la barrera; luego permítales ir más lejos
- shmem_put (target, source, length, pe) - escribe datos de longitud "length" en la dirección remota "target" en PE con id "pe" desde la dirección local "source"
- shmem_get (target, source, length, pe) - leer datos de longitud "length" de la dirección remota "source" en PE con id "pe" y guardar para leer valores en la dirección local "target" [8]
Lista de implementaciones de SHMEM
- Cray Research: SHMEM original para supercomputadoras CRAY T3D, CRAY T3E y Cray Research PVP [9]
- SGI: SGI-SHMEM para sistemas con NUMALink y Altix compilados 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)
- Cuadrics: Q-SHMEM [10] para clústeres de Linux con interconexión QsNet [9]
- Cyclops-64 SHMEM
- HP SHMEM [9]
- IBM SHMEM [9]
- GPSHMEM [9]
Implementaciones de OpenSHMEM
OpenSHMEM es un esfuerzo estándar de SGI y Open Source Software Solutions, Inc.
Desventajas
En los primeros años, SHMEM era accesible solo en algunas máquinas de Cray Research (más tarde, adicionalmente en SGI) [1] equipadas con redes especiales, lo que limita la biblioteca generalizada y el bloqueo del proveedor (por ejemplo, Cray Research recomendó reescribir parcialmente los programas MPI para combinar ambos Llamadas MPI y shmem, que hacen que el programa no sea portátil a otro entorno claro MPI).
SHMEM no se definió como estándar, [9] [1] por lo que se crearon varias variantes incompatibles de bibliotecas SHMEM por otros proveedores. Las bibliotecas tenían diferentes nombres de archivos de inclusión, diferentes nombres de funciones de administración para iniciar PE o obtener la identificación de PE actual, [9] y algunas funciones se cambiaron o no se admitieron.
Algunas rutinas SHMEM se diseñaron de acuerdo con las limitaciones de la arquitectura CRAY T3D, por ejemplo, las reducciones y las transmisiones solo se pueden iniciar en subconjuntos de PE con un tamaño de potencia de dos. [2] [9]
Las variantes de las bibliotecas SHMEM se pueden ejecutar sobre cualquier biblioteca MPI, incluso cuando un clúster solo tiene Ethernet optimizada no rdma; sin embargo, el rendimiento suele ser peor que el de otros protocolos de red mejorados.
La memoria en la región compartida debe asignarse mediante funciones especiales (shmalloc / shfree), no con el sistema malloc. [9]
SHMEM está disponible solo para C y Fortran (algunas versiones también para C ++). [9]
Muchas desventajas de SHMEM se han superado con el uso de OpenSHMEM en interconexiones populares de sub-microsegundos, impulsadas por el desarrollo a exaescala. [7]
Ver también
- Interfaz de paso de mensajes (especialmente operaciones unilaterales de MPI-2)
- Mensajes activos
- Unified Parallel C (uno de los lenguajes PGAS, se puede implementar sobre SHMEM)
Referencias
- ^ a b c SHMEM // Cray, documento 004-2178-002, capítulo 3
- ^ a b Introducción a la computación paralela - 3.11 Trabajo relacionado // Curso cse590o, Universidad de Washington, invierno de 2002; página 154
- ^ "Nuevas aceleraciones para la programación paralela" (PDF) . Mellanox. 2012 . Consultado el 18 de enero de 2014 .
SHMEM se está utilizando / propuesto como una interfaz de nivel inferior para implementaciones de PGAS
- ^ a b c 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.
- ^ Herramientas para la evaluación comparativa, el seguimiento y la simulación de aplicaciones SHMEM // CUG 2012, artículo de San Diego Supercomputer Center y ORNL
- ^ Avances recientes en el paso de mensajes y máquinas virtuales paralelas ..., Volumen 11, página 59: "La comunicación unilateral como paradigma de programación se hizo popular inicialmente por la biblioteca SHMEM en Cray T3D y T3E ..."
- ^ a b "OpenSHMEM 2015" . www.csm.ornl.gov . Consultado el 10 de abril de 2017 .
- ^ hombre shmem_get (SGI TPL)
- ^ a b c d e f g h i j k l m TUTORIAL OpenSHMEM // Universidad de Houston, Texas, 2012
- ^ Manual de programación Shmem // Quadrics, 2000-2001
- ^ OpenMPI
- ^ James Ross y David Richie. Una implementación de OpenSHMEM para el coprocesador Adapteva Epiphany. En las actas del tercer taller sobre OpenSHMEM y tecnologías relacionadas, "OpenSHMEM 2016" . www.csm.ornl.gov .. Springer, 2016.
Otras lecturas
- Rutinas de acceso a memoria compartida (SHMEM) // Cray Research, 1995
enlaces externos
- 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.