En ciencias de la computación , el algoritmo de Cannon es un algoritmo distribuido para la multiplicación de matrices en mallas bidimensionales, descrito por primera vez en 1969 por Lynn Elliot Cannon . [ 1 ] [ 2 ]
Es especialmente adecuado para computadoras dispuestas en una malla N × N. [ 3 ] Si bien el algoritmo de Cannon funciona bien en cuadrículas 2D homogéneas, se ha demostrado que extenderlo a cuadrículas 2D heterogéneas es difícil. [ 4 ]
La principal ventaja del algoritmo es que sus requisitos de almacenamiento permanecen constantes y son independientes del número de procesadores. [ 2 ]
El algoritmo de multiplicación de matrices universal escalable (SUMMA) [ 5 ] es un algoritmo más práctico que requiere menos espacio de trabajo y elimina la necesidad de una cuadrícula cuadrada bidimensional. Es utilizado por las bibliotecas ScaLAPACK , PLAPACK y Elemental .
Descripción general del algoritmo
Al multiplicar dos matrices A y B de n × n , necesitamos n × n nodos de procesamiento p dispuestos en una cuadrícula 2D.
// PE(i , j) k := (i + j) mod N; a := a[i][k]; b := b[k][j]; c[i][j] := 0; para (l := 0; l < N; l++) { c[i][j] := c[i][j] + a * b; concurrentemente { enviar a a PE(i, (j + N − 1) mod N); enviar b a PE((i + N − 1) mod N, j); } con { recibir a' de PE(i, (j + 1) mod N); recibir b' de PE((i + 1) mod N, j ); } a := a'; b := b'; }Necesitamos seleccionar k en cada iteración para cada elemento procesador (PE) para que los procesadores no accedan a los mismos datos para el cálculo..
Por lo tanto, los procesadores en la misma fila/columna deben comenzar la suma con índices diferentes. Si, por ejemplo, PE(0,0) calculaEn el primer paso, PE(0,1) eligePrimero. La selección de k := (i + j) mod n para PE(i,j) satisface esta restricción para el primer paso.
En el primer paso distribuimos las matrices de entrada entre los procesadores según la regla anterior.
En las siguientes iteraciones elegimos un nuevo k' := (k + 1) mod n para cada procesador. De esta manera, cada procesador seguirá accediendo a diferentes valores de las matrices. Los datos necesarios estarán entonces siempre en los procesadores vecinos. Un PE(i,j) necesita entonces elde PE(i,(j + 1) mod n) y elde PE((i + 1) mod n,j) para el siguiente paso. Esto significa quedebe pasarse cíclicamente a la izquierda y tambiéncíclicamente hacia arriba. Los resultados de las multiplicaciones se suman como de costumbre. Después de n pasos, cada procesador ha calculado todosuna vez y su suma es así la buscada.
Después de la distribución inicial de cada procesador, solo se deben almacenar los datos para el siguiente paso. Estos son el resultado intermedio de la suma anterior, uny unEsto significa que las tres matrices solo necesitan almacenarse en la memoria una vez, distribuidas uniformemente entre los procesadores.
Generalización
En la práctica, tenemos muchos menos procesadores que elementos de la matriz. Podemos reemplazar los elementos de la matriz con submatrices, de modo que cada procesador procese más valores. La multiplicación y suma escalar se convierten en multiplicación y suma matricial secuencial. El ancho y la altura de las submatrices serán.
El tiempo de ejecución del algoritmo es , dóndees el tiempo de la distribución inicial de las matrices en el primer paso,es el cálculo de los resultados intermedios yyrepresenta el tiempo que se tarda en establecer una conexión y en la transmisión de un byte, respectivamente.
Una desventaja del algoritmo es que se producen muchas conexiones con mensajes de pequeño tamaño. Sería mejor poder transmitir más datos en cada mensaje.
Véase también
Referencias
- ↑ Cannon, Lynn Elliot (14 de julio de 1969). Una computadora celular para implementar el algoritmo del filtro de Kalman (tesis doctoral). Universidad Estatal de Montana.
- 1 2 Gupta, H.; Sadayappan, P. (1994). Multiplicación de matrices eficiente en comunicación en hipercubos (Informe técnico). Stanford Infolab.
- ↑ "4.2 Multiplicación de matrices en una máquina de memoria distribuida" . Álgebra lineal numérica . Proyecto de educación en ciencias computacionales. 1991–1995. Archivado del original el 1 de abril de 2018.
- ^ Pineau, Jean-François (octubre de 2010). Programación consciente de la comunicación en plataformas heterogéneas maestro-trabajador (PhD). Escuela normal superior de lyon. tel-00530131.
- ↑ van de Geijn, Robert A.; Watts, Jerrell (abril de 1997). "SUMMA: algoritmo escalable universal de multiplicación de matrices" . Concurrency: Practice and Experience . 9 (4): 255– 274. doi : 10.1002/(SICI)1096-9128(199704)9:4 < 255::AID-CPE250 > 3.0.CO ; 2-2 .
Enlaces externos
- Demmel, J. (1996). "Clase 9: Multiplicación paralela de matrices" . CS267 Aplicaciones de computadoras paralelas . UC Berkeley.
- Harwood, Aaron (2003). "Multiplicación de matrices: algoritmo de Cannon" . 433-498 Redes y complejidad del procesamiento paralelo . Universidad de Melbourne. Archivado del original el 3 de julio de 2007.
- Algoritmos distribuidos
- Algoritmos de multiplicación de matrices
- Redes de malla