Articulo de referencia

Operación colectiva

Las operaciones colectivas son los componentes básicos de los patrones de interacción, que se utilizan con frecuencia en los algoritmos SPMD dentro del contexto de la programaci...

Las operaciones colectivas son los componentes básicos de los patrones de interacción, que se utilizan con frecuencia en los algoritmos SPMD dentro del contexto de la programación paralela . Por lo tanto, existe interés en lograr implementaciones eficientes de estas operaciones.

La realización de las operaciones colectivas la proporciona la Interfaz de Paso de Mensajes [ 1 ] (MPI).

Definiciones

En todas las funciones de tiempo de ejecución asintóticas, denotamos la latencia.α{\displaystyle \alpha }(o tiempo de inicio por mensaje, independientemente del tamaño del mensaje), el costo de comunicación por palabraβ{\displaystyle \beta }, el número de unidades de procesamientopag{\displaystyle p}y el tamaño de entrada por nodonorte{\displaystyle n}En los casos en que tenemos mensajes iniciales en más de un nodo, asumimos que todos los mensajes locales son del mismo tamaño. Para dirigirnos a unidades de procesamiento individuales, utilizamospagi{pag0,pag1,,pagpag1}{\displaystyle p_{i}\in \{p_{0},p_{1},\dots ,p_{p-1}\}}.

Si no tenemos una distribución igual, es decir, nodopagi{\displaystyle p_{i}}tiene un mensaje de tamañonortei{\displaystyle n_{i}}, obtenemos un límite superior para el tiempo de ejecución estableciendonorte=máximo(norte0,norte1,,nortepag1){\displaystyle n=\max(n_{0},n_{1},\dots ,n_{p-1})}.

Se asume un modelo de memoria distribuida . Los conceptos son similares para el modelo de memoria compartida . Sin embargo, los sistemas de memoria compartida pueden proporcionar soporte de hardware para algunas operaciones, como la difusión ( §  Broadcast ), por ejemplo, lo que permite una lectura concurrente conveniente. [ 2 ] De este modo, se abren nuevas posibilidades algorítmicas.

Transmisión

Hay tres cuadrados alineados verticalmente a la izquierda y tres cuadrados alineados verticalmente a la derecha. Una línea punteada conecta el cuadrado superior izquierdo con el cuadrado superior derecho. Dos líneas continuas conectan el cuadrado superior izquierdo con los cuadrados central e inferior derechos. La letra a está escrita en el cuadrado superior izquierdo y en todos los cuadrados derechos.
Flujo de información de la operación de difusión realizada en tres nodos.

El patrón de difusión [ 3 ] se utiliza para distribuir datos de una unidad de procesamiento a todas las unidades de procesamiento, lo cual suele ser necesario en programas paralelos SPMD para distribuir valores de entrada o globales. La difusión puede interpretarse como una versión inversa del patrón de reducción ( §Reduce )  . Inicialmente, solo la raízr{\displaystyle r}conid{\displaystyle id}0{\displaystyle 0}almacena mensajemetro{\displaystyle m}Durante la transmisiónmetro{\displaystyle m}se envía a las unidades de procesamiento restantes, de modo que finalmentemetro{\displaystyle m}Está disponible para todas las unidades de procesamiento.

Dado que una implementación mediante un bucle for secuencial conpag1{\displaystyle p-1}Las iteraciones se convierten en un cuello de botella, los enfoques de divide y vencerás son comunes. Una posibilidad es utilizar una estructura de árbol binomial con el requisito de quepag{\displaystyle p}tiene que ser una potencia de dos . Cuando una unidad de procesamiento es responsable de enviarmetro{\displaystyle m}a las unidades de procesamientoi..j{\displaystyle i..j}, envíametro{\displaystyle m}a la unidad de procesamiento(i+j)/2{\displaystyle \left\lceil (i+j)/2\right\rceil }y delega la responsabilidad de las unidades de procesamiento.(i+j)/2..j{\displaystyle \left\lceil (i+j)/2\right\rceil ..j}a ello, mientras que su propia responsabilidad se reduce ai..(i+j)/21{\displaystyle i..\left\lceil (i+j)/2\right\rceil -1}.

Los árboles binomiales tienen un problema con los mensajes largos.metro{\displaystyle m}. La unidad receptora demetro{\displaystyle m}Solo puede propagar el mensaje a otras unidades, después de haber recibido el mensaje completo. Mientras tanto, la red de comunicación no se utiliza. Por lo tanto, se utiliza el procesamiento en paralelo en árboles binarios , dondemetro{\displaystyle m}se divide en una serie dek{\displaystyle k}paquetes de tamañonorte/k{\displaystyle \left\lceil n/k\right\rceil }Los paquetes se transmiten uno tras otro, de modo que los datos se distribuyen rápidamente en la red de comunicación.

La difusión segmentada en un árbol binario equilibrado es posible enO(αregistropag+βnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta n)}, mientras que para el caso no canalizado se necesitaO((α+βnorte)registropag){\displaystyle {\mathcal {O}}((\alpha +\beta n)\log p)}costo.

Reducir

Hay tres cuadrados alineados verticalmente a la izquierda y tres cuadrados alineados verticalmente a la derecha. Un círculo con la letra f en su interior se encuentra entre las dos columnas. Tres líneas continuas conectan el círculo con los tres cuadrados de la izquierda. Una línea continua conecta el círculo con el cuadrado superior derecho. Las letras a, b y c están escritas en los cuadrados de la izquierda de arriba a abajo. La letra alfa está escrita en el cuadrado superior derecho.
Flujo de información de la operación Reduce realizada en tres nodos. f es el operador asociativo y α es el resultado de la reducción.

El patrón de reducción [ 4 ] se utiliza para recopilar datos o resultados parciales de diferentes unidades de procesamiento y combinarlos en un resultado global mediante un operador elegido. Dadopag{\displaystyle p}unidades de procesamiento, mensajemetroi{\displaystyle m_{i}}está en la unidad de procesamientopagi{\displaystyle p_{i}}Inicialmente. Todometroi{\displaystyle m_{i}}son agregados por{\displaystyle \otimes }y el resultado finalmente se almacena enpag0{\displaystyle p_{0}}El operador de reducción{\displaystyle \otimes }debe ser asociativo como mínimo. Algunos algoritmos requieren un operador conmutativo con un elemento neutro. Operadores comosmetro{\displaystyle sum},metroinorte{\displaystyle min},metroaincógnita{\displaystyle max}son comunes.

Las consideraciones de implementación son similares a las de difusión ( §  Difusión ). Para la segmentación en árboles binarios, el mensaje debe poder representarse como un vector de objetos más pequeños para su reducción componente a componente.

Es posible realizar una reducción segmentada en un árbol binario equilibrado.O(αregistropag+βnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta n)}.

Reducción total

Hay tres cuadrados alineados verticalmente a la izquierda y tres cuadrados alineados verticalmente a la derecha. Un círculo con la letra f en su interior se encuentra entre las dos columnas. Tres líneas continuas conectan el círculo con los tres cuadrados de la izquierda. Una línea continua conecta el círculo con el cuadrado superior derecho. Las letras a, b y c están escritas en los cuadrados de la izquierda de arriba a abajo. La letra alfa está escrita en el cuadrado superior derecho.
Flujo de información de la operación All-Reduce realizada en tres nodos. f es el operador asociativo y α es el resultado de la reducción.

El patrón all-reduce [ 5 ] (también llamado allreduce) se utiliza si el resultado de una operación reduce ( §  Reduce ) debe distribuirse a todas las unidades de procesamiento. Dadopag{\displaystyle p}unidades de procesamiento, mensajemetroi{\displaystyle m_{i}}está en la unidad de procesamientopagi{\displaystyle p_{i}}Inicialmente. Todometroi{\displaystyle m_{i}}son agregados por un operador{\displaystyle \otimes }y el resultado finalmente se almacena en todospagi{\displaystyle p_{i}}. Análogo a la operación de reducción, el operador{\displaystyle \otimes }debe ser al menos asociativo.

All-reduce puede interpretarse como una operación de reducción con una difusión posterior ( §  Difusión ). Para mensajes largos es adecuada una implementación correspondiente, mientras que para mensajes cortos, la latencia puede reducirse utilizando una topología de hipercubo ( Hipercubo (patrón de comunicación) §  All-Gather/ All-Reduce ), sipag{\displaystyle p}es una potencia de dos. All-reduce también se puede implementar con un algoritmo mariposa y lograr una latencia y un ancho de banda óptimos. [ 6 ]

La reducción total es posible enO(αregistropag+βnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta n)}, ya que reducir y difundir son posibles enO(αregistropag+βnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta n)}con procesamiento en paralelo en árboles binarios balanceados . La reducción total implementada con un algoritmo mariposa logra el mismo tiempo de ejecución asintótico.

Suma de prefijos/escaneo

Hay tres cuadrados alineados verticalmente a la izquierda y tres rectángulos alineados verticalmente a la derecha. Un círculo con la palabra "escanear" en su interior se encuentra entre las dos columnas. Tres líneas continuas conectan el círculo con los tres cuadrados de la izquierda. Tres líneas continuas conectan el círculo con los tres cuadrados de la derecha. Las letras a, b y c están escritas en los cuadrados de la izquierda de arriba a abajo. En el cuadrado superior derecho está escrita la letra a. En el cuadrado central derecho está escrito el término a más b. En el cuadrado inferior derecho está escrito el término a más b más c.
Flujo de información de la operación de suma de prefijos/escaneo realizada en tres nodos. El operador + puede ser cualquier operador asociativo.

La operación de suma de prefijos o escaneo [ 7 ] se utiliza para recopilar datos o resultados parciales de diferentes unidades de procesamiento y para calcular resultados intermedios mediante un operador, que se almacenan en dichas unidades de procesamiento. Puede considerarse una generalización de la operación de reducción ( §  Reduce ). Dadopag{\displaystyle p}unidades de procesamiento, mensajemetroi{\displaystyle m_{i}}está en la unidad de procesamientopagi{\displaystyle p_{i}}El operador{\displaystyle \otimes }debe ser al menos asociativo, mientras que algunos algoritmos también requieren un operador conmutativo y un elemento neutro. Los operadores comunes sonsmetro{\displaystyle sum},metroinorte{\displaystyle min}ymetroaincógnita{\displaystyle max}Unidad de procesamiento finalpagi{\displaystyle p_{i}}almacena la suma del prefijoi<=i{\displaystyle \otimes _{i'<=i}}metroi{\displaystyle m_{i'}}. En el caso de la llamada suma de prefijo exclusivo, unidad de procesamientopagi{\displaystyle p_{i}}almacena la suma del prefijoi<i{\displaystyle \otimes _{i'<i}}metroi{\displaystyle m_{i'}}Algunos algoritmos requieren almacenar la suma total en cada unidad de procesamiento, además de las sumas de los prefijos.

Para mensajes cortos, esto se puede lograr con una topología de hipercubo sipag{\displaystyle p}es una potencia de dos. Para mensajes largos, la topología de hipercubo ( Hipercubo (patrón de comunicación) §  Suma de prefijo , Suma de prefijo §  Memoria distribuida: algoritmo de hipercubo ) no es adecuada, ya que todas las unidades de procesamiento están activas en cada paso y, por lo tanto, no se puede utilizar el procesamiento en paralelo. Una topología de árbol binario es más adecuada para mensajes arbitrarios.pag{\displaystyle p}y mensajes largos ( Suma de prefijo §  Tamaños de mensajes grandes: Árbol binario en pipeline ).

La suma de prefijos en un árbol binario se puede implementar con una fase ascendente y otra descendente. En la fase ascendente se realiza la reducción, mientras que la fase descendente es similar a la difusión, donde las sumas de prefijos se calculan enviando datos diferentes a los hijos izquierdo y derecho. Con este enfoque es posible la segmentación, ya que las operaciones son equivalentes a la reducción ( §  Reduce ) y la difusión ( §  Broadcast ).

La suma de prefijos en paralelo en un árbol binario es posible enO(αregistropag+βnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta n)}.

Barrera

La barrera [ 8 ], como operación colectiva, es una generalización del concepto de barrera , que puede utilizarse en computación distribuida . Cuando una unidad de procesamiento llama a la barrera, espera hasta que todas las demás unidades de procesamiento también la hayan llamado. Por lo tanto, la barrera se utiliza para lograr la sincronización global en la computación distribuida.

Una forma de implementar barrera es llamar a all-reduce ( §  All-Reduce ) con un operando vacío/ficticio. Sabemos que el tiempo de ejecución de All-reduce esO(αregistropag+βnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta n)}El uso de un operando ficticio reduce el tamaño.norte{\displaystyle n}a un factor constante y conduce a un tiempo de ejecución deO(αregistropag){\displaystyle {\mathcal {O}}(\alpha \log p)}.

Recolectar

Hay tres cuadrados alineados verticalmente a la izquierda y tres rectángulos alineados verticalmente a la derecha. Una línea punteada conecta el cuadrado superior izquierdo con el rectángulo superior derecho. Dos líneas continuas conectan los cuadrados medio e inferior izquierdos con el rectángulo superior derecho. Las letras a, b y c están escritas en los cuadrados izquierdos de arriba a abajo. Las letras a, b y c están escritas en el rectángulo superior derecho en una fila.
Flujo de información de la operación Gather realizada en tres nodos.

El patrón de comunicación de recopilación [ 9 ] se utiliza para almacenar datos de todas las unidades de procesamiento en una sola unidad de procesamiento. Dadopag{\displaystyle p}unidades de procesamiento, mensajemetroi{\displaystyle m_{i}}en la unidad de procesamientopagi{\displaystyle p_{i}}Para una unidad de procesamiento fijapagj{\displaystyle p_{j}}, queremos almacenar el mensajemetro1metro2metropag{\displaystyle m_{1}\cdot m_{2}\cdot \ldots \cdot m_{p}}enpagj{\displaystyle p_{j}}. Gather puede considerarse como una operación de reducción ( §  Reduce ) que utiliza el operador de concatenación. Esto funciona debido a que la concatenación es asociativa. Al utilizar el mismo algoritmo de reducción de árbol binomial, obtenemos un tiempo de ejecución deO(αregistropag+βpagnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta pn)}Observamos que el tiempo de ejecución asintótico es similar al tiempo de ejecución asintótico de reduce.O(αregistropag+βnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta n)}, pero con la adición de un factor p al términoβnorte{\displaystyle \beta n}Este factor adicional se debe a que el tamaño del mensaje aumenta en cada paso a medida que los mensajes se concatenan. Compárese esto con la reducción, donde el tamaño del mensaje es constante para operadores comometroinorte{\displaystyle min}.

Reunión general

Hay tres cuadrados alineados verticalmente a la izquierda y tres rectángulos alineados verticalmente a la derecha. Tres líneas punteadas conectan el cuadrado superior izquierdo con el rectángulo superior derecho, el cuadrado medio izquierdo con el rectángulo medio derecho y el cuadrado inferior izquierdo con el rectángulo inferior derecho. Dos líneas continuas conectan los cuadrados medio e inferior izquierdos con el rectángulo superior derecho. Dos líneas continuas conectan los cuadrados superior e inferior izquierdos con el rectángulo medio derecho. Dos líneas continuas conectan los cuadrados superior e medio izquierdos con el rectángulo inferior derecho. Las letras a, b y c están escritas en los cuadrados izquierdos de arriba a abajo. Las letras a, b y c están escritas en todos los rectángulos derechos en una fila.
Flujo de información de la operación All-Gather realizada en tres nodos.

El patrón de comunicación all-gather [ 9 ] se utiliza para recopilar datos de todas las unidades de procesamiento y para almacenar los datos recopilados en todas las unidades de procesamiento. Dadopag{\displaystyle p}unidades de procesamientopagi{\displaystyle p_{i}}, mensajemetroi{\displaystyle m_{i}}almacenado inicialmente enpagi{\displaystyle p_{i}}, queremos almacenar el mensajemetro1metro2metropag{\displaystyle m_{1}\cdot m_{2}\cdot \ldots \cdot m_{p}}en cadapagj{\displaystyle p_{j}}.

Se puede pensar de varias maneras. La primera es como una operación de reducción total ( §  All-Reduce ) con la concatenación como operador, de la misma manera que gather puede representarse mediante reduce. La segunda es como una operación de recopilación seguida de una difusión del nuevo mensaje de tamañopagnorte{\displaystyle pn}. Con esto vemos que todos se reúnen enO(αregistropag+βpagnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta pn)}es posible.

Dispersión

Hay tres rectángulos alineados verticalmente a la izquierda y tres cuadrados alineados verticalmente a la derecha. Una línea punteada conecta el rectángulo superior izquierdo con el cuadrado superior derecho. Dos líneas continuas conectan el rectángulo superior izquierdo con los cuadrados medio e inferior derechos. Las letras c, b y a están escritas en fila en el rectángulo superior izquierdo. Las letras a, b y c están escritas en los cuadrados derechos de arriba a abajo.
Flujo de información de la operación Scatter realizada en tres nodos.

El patrón de comunicación dispersa [ 10 ] se utiliza para distribuir datos desde una unidad de procesamiento a todas las demás. Se diferencia de la difusión en que no envía el mismo mensaje a todas las unidades de procesamiento, sino que lo divide y entrega una parte a cada una.

Dadopag{\displaystyle p}unidades de procesamientopagi{\displaystyle p_{i}}una unidad de procesamiento fijapagj{\displaystyle p_{j}}que contiene el mensajemetro=metro1metro2metropag{\displaystyle m=m_{1}\cdot m_{2}\cdot \ldots \cdot m_{p}}Queremos transmitir el mensaje.metroi{\displaystyle m_{i}}sobrepagi{\displaystyle p_{i}}. Se aplican las mismas consideraciones de implementación que para gather ( §  Gather ). Esto conduce a un tiempo de ejecución óptimo enO(αregistropag+βpagnorte){\displaystyle {\mathcal {O}}(\alpha \log p+\beta pn)}.

Todos a todos

La comunicación de todos a todos [ 11 ] es el patrón de comunicación más general. Para0i,j<pag{\displaystyle 0\leq i,j<p}, mensajemetroi,j{\displaystyle m_{i,j}}es el mensaje que se almacena inicialmente en el nodoi{\displaystyle i}y debe ser entregado al nodoj{\displaystyle j}Podemos expresar todas las primitivas de comunicación que no utilizan operadores a través de la comunicación de todos a todos. Por ejemplo, la difusión de mensajes.metro{\displaystyle m}desde el nodopagk{\displaystyle p_{k}}se emula configurandometroi,j=metro{\displaystyle m_{i,j}=m}parai=k{\displaystyle i=k}y configuraciónmetrol,j{\displaystyle m_{l,j}}vacío paralk{\displaystyle l\neq k}.

Suponiendo que tenemos una red totalmente conectada, el mejor tiempo de ejecución posible para la comunicación de todos a todos es enO(pag(α+βnorte)){\displaystyle {\mathcal {O}}(p(\alpha +\beta n))}Esto se logra mediantepag{\displaystyle p} rondas de intercambio de mensajes directos. Parapag{\displaystyle p}potencia de 2, en la ronda de comunicaciónk{\displaystyle k}, nodopagi{\displaystyle p_{i}}intercambia mensajes con el nodopagj,j=ik{\displaystyle p_{j},j=i\oplus k}.

Si el tamaño del mensaje es pequeño y la latencia domina la comunicación, se puede utilizar un algoritmo de hipercubo para distribuir los mensajes en el tiempo.O(registropag(α+βpagnorte)){\displaystyle {\mathcal {O}}(\log p(\alpha +\beta pn))}.

Hay tres rectángulos alineados verticalmente a la izquierda y tres rectángulos alineados verticalmente a la derecha. Los rectángulos son tres veces más altos que anchos. Los términos a1, a2 y a3 están escritos en el rectángulo superior izquierdo, uno debajo del otro. Los términos b1, b2 y b3 están escritos en el rectángulo medio izquierdo, uno debajo del otro. Los términos c1, c2 y c3 están escritos en el rectángulo inferior izquierdo, uno debajo del otro. Los términos a1, b1 y c1 están escritos en el rectángulo superior derecho, uno debajo del otro. Los términos a2, b2 y c2 están escritos en el rectángulo medio derecho, uno debajo del otro. Los términos a3, b3 y c3 están escritos en el rectángulo inferior derecho, uno debajo del otro. Una línea punteada conecta a1 del rectángulo superior izquierdo con a1 del rectángulo superior derecho. Una línea punteada conecta b2 del rectángulo medio izquierdo con b2 del rectángulo medio derecho. Una línea punteada conecta c3 del rectángulo inferior izquierdo con c3 del rectángulo inferior derecho. Líneas continuas conectan los demás términos correspondientes entre los rectángulos izquierdo y derecho.
Flujo de información de la operación "Todo a Todos" realizada en tres nodos. Las letras indican los nodos y los números, los elementos de información.

Descripción general del tiempo de ejecución

Esta tabla [ 12 ] ofrece una visión general de los mejores tiempos de ejecución asintóticos conocidos, suponiendo que podemos elegir libremente la topología de la red . Ejemplos de topologías que buscamos para un tiempo de ejecución óptimo son el árbol binario , el árbol binomial y el hipercubo . En la práctica, debemos adaptarnos a las topologías físicas disponibles, por ejemplo, la libélula, el árbol gordo y la red de cuadrícula (también se incluyen referencias a otras topologías).

Para cada operación, el algoritmo óptimo puede depender del tamaño de las entradas.norte{\displaystyle n}Por ejemplo, la difusión de mensajes cortos se implementa mejor utilizando un árbol binomial, mientras que para mensajes largos la comunicación en paralelo sobre un árbol binario equilibrado es la opción óptima.

Las complejidades indicadas en la tabla dependen de la latencia.α{\displaystyle \alpha }y el coste de comunicación por palabraβ{\displaystyle \beta }además del número de unidades de procesamientopag{\displaystyle p}y el tamaño del mensaje de entrada por nodonorte{\displaystyle n}Las columnas # remitentes y # receptores representan el número de remitentes y receptores involucrados en la operación, respectivamente. La columna # mensajes indica el número de mensajes de entrada y la columna ¿Cálculos? indica si se realizan cálculos sobre los mensajes o si estos se entregan sin procesar. La complejidad proporciona la complejidad asintótica de tiempo de ejecución de una implementación óptima bajo libre elección de topología.

Notas

  1. Operaciones colectivas de intercomunicación . El estándar Interfaz de paso de mensajes (MPI), capítulo 7.3.1. División de Matemáticas y Ciencias de la Computación, Laboratorio Nacional Argonne .
  2. Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, pág. 395
  3. Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, págs. 396-401
  4. Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, págs. 402-403
  5. Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, págs. 403-404
  6. Yuan, Xin (febrero de 2009). "Algoritmos de reducción total óptimos en ancho de banda para clústeres de estaciones de trabajo" (PDF) . Journal of Parallel and Distributed Computing . 69 (2).
  7. Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, págs. 404-406
  8. Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, pág. 408
  9. 1 2 Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, págs. 412-413
  10. Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, pág. 413
  11. Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, págs. 413-418
  12. Sanders, Mehlhorn, Dietzfelbinger, Dementiev 2019, pág. 394

Referencias

Sanders, Peter ; Mehlhorn, Kurt ; Dietzfelbinger, Martin; Dementiev, Roman (2019). Algoritmos y estructuras de datos secuenciales y paralelos: la caja de herramientas básica . Springer Nature Switzerland AG. ISBN 978-3-030-25208-3.