Cannons algoritm
Inom datavetenskap är Cannons algoritm en distribuerad algoritm för matrismultiplikation för tvådimensionella maskor som först beskrevs 1969 av Lynn Elliot Cannon .
Den är särskilt lämplig för datorer som är placerade i ett N × N- nät. Medan Cannons algoritm fungerar bra i homogena 2D-rutnät, har det visat sig vara svårt att utöka den till heterogena 2D-rutnät.
Den största fördelen med algoritmen är att dess lagringskrav förblir konstanta och är oberoende av antalet processorer.
Scalable Universal Matrix Multiplication Algorithm (SUMMA) är en mer praktisk algoritm som kräver mindre arbetsyta och övervinner behovet av ett kvadratiskt 2D-rutnät. Det används av biblioteken ScaLAPACK , PLAPACK och Elemental .
Algoritmöversikt
När vi multiplicerar två n × n matriser A och B behöver vi n × n bearbetningsnoder p arrangerade i ett 2D-rutnät. Inledningsvis är p i,j ansvarig för a i,j och b i,j .
// PE(i, j) k := (i + j) mod N; a := a[i][k]; b := b[k][j]; c[i][j] := 0; för (l:= 0; 1 < N; l++) {c[i][j]:= c[i][j] + a * b; samtidigt { skicka a till PE(i, (j + N − 1) mod N); skicka b till PE((i + N − 1) mod N, j); } med { ta emot a' från PE(i, (j + 1) mod N); ta emot b' från PE((i + 1) mod N, j ); } a := a'; b := b'; }
Vi måste välja k i varje iteration för varje processorelement (PE) så att processorer inte kommer åt samma data för att beräkna .
Därför måste processorer i samma rad/kolumn börja summera med olika index. Om till exempel PE(0,0) beräknar i det första steget, väljer PE(0,1) först. Valet av k := (i + j) mod n för PE(i,j) uppfyller denna begränsning för det första steget.
I det första steget fördelar vi inmatningsmatriserna mellan processorerna baserat på den tidigare regeln.
I nästa iteration väljer vi en ny k' := (k + 1) mod n för varje processor. På så sätt kommer varje processor att fortsätta få åtkomst till olika värden på matriserna. Den data som behövs finns då alltid hos grannprocessorerna. En PE(i,j) behöver sedan a från PE(i,(j + 1) mod n) och från PE((i + 1) mod n,j) för nästa steg. Detta innebär att måste skickas cykliskt till vänster och även cykliskt uppåt. Resultaten av multiplikationerna summeras som vanligt. Efter n steg har varje processor beräknat alla en gång och dess summa är alltså den sökta .
Efter den initiala distributionen av varje processor behöver endast data för nästa steg lagras. Dessa är mellanresultatet av föregående summa, a och a . Detta innebär att alla tre matriserna bara behöver lagras i minnet en gång jämnt fördelade över processorerna.
Generalisering
I praktiken har vi mycket färre processorer än matriselementen. Vi kan ersätta matriselementen med submatriser, så att varje processor bearbetar fler värden. Den skalära multiplikationen och additionen blir sekventiell matrismultiplikation och addition. Bredden och höjden på submatriserna kommer att vara .
Algoritmens körtid är där är tiden för den initiala fördelningen av matriserna i det första steget, är beräkningen av de mellanliggande resultaten och och står för den tid det tar att upprätta en anslutning respektive överföring av byte.
En nackdel med algoritmen är att det finns många anslutningsinställningar, med små meddelandestorlekar. Det vore bättre att kunna överföra mer data i varje meddelande.
Se även
- ^ Lynn Elliot Cannon, En cellulär dator för att implementera Kalman Filter Algorithm , teknisk rapport, Ph.D. Avhandling, Montana State University, 14 juli 1969.
- ^ a b Gupta, H.; Sadayappan, P.: Communication Efficient Matrix-Multiplication on Hypercubes , dbpubs.stanford.edu
- ^ 4.2 Matrismultiplikation på en distribuerad minnesmaskin, www.phy.ornl.gov
- ^ Jean-François Pineau, Kommunikationsmedveten schemaläggning på heterogena master-worker-plattformar , doktorsavhandling, oktober 2010.
- ^ Robert A. van de Geijn och Jerrell Watts, SUMMA: skalbar universell matrismultiplikationsalgoritm , Samtidighet: Öva och erfarenhet. Volym 9, nummer 4, sidorna 255–274, april 1997.
externa länkar