Proužkové mapování matic na procesory Týden. Maticové výpočty a aplikace. Úlohy ze zpracování signálů a obrazů. P procesorů s indey,,..., P- (virtuální lineární pole) matice m řádků, n sloupců; k řádků (sloupců) v bloku. řádkové. sloupcové cykl po blocích ma. velikosti k = m/p nebo k = n/p, k cyklicky po blocích (k mezi a ma) cyklicky po řádcích nebo sloupcích, tj.po blocích min. velikosti (k = ) normální reverzované Šachovnicové mapování matic na procesory P procesorů s indey,,..., P-, virtuální mřížka matice: m řádků, n sloupců P a. cykl po blocích ma. velikosti (m/ P) (n/ P) b. cyklicky po blocích [k řádků, k sloupců na blok] c. cyklicky po blocích min. velikosti (po prvcích) P CPU: Transpozice matice n n (MP, proužky) nic se nepočítá, čistě komunikační záležitost každá CPU má n/p řádků výchozí matice transponuje P submatic velikosti n/p n/p, z nich P- pošle jiným CPU (komunikace AAS) a submatici na diagonále si ponechá doma CPU: P = P = Transpozice matice na svazku (COW, proužky) Transpozice na SF hyperkostce, P/ kroků Každá CPU má blok n/p po sobě jdoucích řádků (lze na ně pohlížet jako na P submatic [ i ] velikosti n/p n/p. AAS: P- kroků, v každém kroku permutační směrování, aby nedošlo k tlačenici v multiportovém přepínači SW řetězení: překryj transpozici následující submatice s odesíláním právě transponované submatice:. Transponuj submatici (myid)mod P. Cykl (P-)- krát, h =,,,P transponuj submatici (myidh)mod P paralelně s odesíláním předchozí submatice (myidh-)mod P (transponovaná submatice (myid) se nikam neodesílá) krok krok krok krok RA T AAS = ( P / )( ts mtw) Plán přesunů: co -kdy-kam RA dimenze krok Relativní adresa zprávy RA = src dst do směru dim se ve fázi krok posílá submatice s indeem myid XOR RA[krok][dim]
Transpozice matice n n (proužky) ve SM nic se nepočítá, čistě přemisťovací záležitost každá CPU transponuje svoje řádkové submatice (v cache), pak je zapíše jako sloupcové submatice do paměti; po bariéře si načte nové řádkové submatice ; minimalizovat počet výpadků! celkem se po sběrnici přesune sekvenčně P (P-) submatic; CPU: P = CPU: P = Násobení matic C = A B na D-T (šachovnice) akumulací součinů zkřivených a rotovaných matic A, B. Cannonův algoritmus používá rozčlenění A a B do P P čtvercových submatic a pak jejich zkřivení (skewing). zkřivení podél.osy: -. osy: a b c A = d e f A() = d b i, A( ) g h i g e c Atmp = A (-) ; Btmp = B () ; C = ; inicializace for (i=;i<= P;i) { C=CAtmp*Btmp; maticový součin stejnolehlých submatic!! Atmp = rotace(atmp ve. ose); submatice Btmp = rotace(btmp v. ose); submatice a h f a = e f i b g c d h Faktorizace A = L U - - - - - - - - - - - - - - - A L U Použití: Řešení systému lin. rovnic pro mnoho pravých stran b (Jiná možnost by byla vypočítat inverzní matici A - ). - Cíl: řešit A = LU = b pro. - To lze provést ve dvou snadných krocích: řešit Ly = b pro y (dopředná substituce) řešit U = y pro (zpětná substituce). lze uložit do A (místo A) Postup faktorizace A = L U - Gaussova eliminace (= transformace A na matici U) - Matice L má na hlavní diagonále jedničky, nad ní nuly a prvky pod hlavní diagonálou jsou koeficienty, kterými byl násoben pivot. řádek L[i,k]=A[i,k]/A[k,k] i=k,k,...,n - je-li pivotní prvek nula, došlo by k přetečení; je-li blízký nule, mohlo by dojít k numerické nestabilitě. Proto se vyměňují řádky matice A tak, aby se na diagonálu dostal prvek s největší abs. hodnotou ve sloupci a stal se pivotním (tzv. partial pivoting). V kroku k bude pivot prvek A[i[k],k]. Možnosti paralelního postupu: každý proces vybere maimum ve svém proužku a aktualizuje svou kopii pivotních indeů i. Bez bariéry. jeden proces vybere globální maimum a přehodí řádky; bariéra nutná. každý proces vybere maimum ze své části, pak společně globální maimum; bariéra nutná, privátní kopie i. Sekvenční výměna řádků (partial pivoting) double A[:n,:n],LU [:n,:n],pivot, pivotrow,mult; int i[:n],t; # inicializuj i[i]=i, LU[i,j]=A[i,j]; # proveď přehození řádků před Gaussovou eliminací: for [k= to n-] { # iteruj dolů podél hlavní diagonály pivot = abs(lu[i[k],k]; #vyber prvek na diagonále ve sloupci k for [i=k to n] { if (abs(lu[i[i],k])>pivot) { # je-li pod ním větší prvek pivot=abs(lu[i[i],k]); pivotrow = i; #vezmi ten if (pivotrow!=k) {#došlo-li k výměně, vyměň i indey ve vektoru i t = i[k]; i[k]=i[pivotrow]; i[pivotrow]=t; pivot=lu[i[k],k]; #skutečná hodnota pivotního prvku v kroku k Schema programu SV pro dekompozici LU double A[:n,:n],LU [:n,:n]; #A je již inicializována int i[:n]; # vektor indeů pivotních řádků process worker (w= to P) { double pivot, mult; deklarace dalších lokálních proměnných jako např. privátní kopie i; for [i=w to n by P] #řádky cyklicky procesorům kvůli stejné zátěži inicializuj i a svoje proužky LU; barrier(w); # proveď Gaussovu eliminaci (řádky již přeházeny) for [k= to n-] { #pro všechny řádky submatice mult= LU[i[i],k]/pivot; # vypočítej násobící koeficient LU[i[i],k]=mult; # a ulož jej jako prvek matice L for [j=k to n] # odečítej násobkek pivotního řádku: LU[i[i],j]=LU[i[i],j]-mult*LU[i[k],j]; barrier(w);
Úlohy ze zpracování signálů a obrazů Paralelizace umělých neuronových sítí (ANN) jednorozměrná rychlá Fourierova transformace D-FFT D -FFT Vyhlazování, zostření, potlačení šumu; Detekce hran (Sobelův a Laplaceův operátor, CNN) Výpočetní požadavky u zpracování obrazů: pimapa pielů, bitů na piel; paměťová kapacita byte = Mbyte; operací/snímek, tj. ms při trvání jedné operace ns; provoz v RT vyžaduje - snímků/s, tj. - ms/snímek; za dobu snímku musí být zpracovány všechny piely; často složité operace pro každý piel. Paralelní implementace ANN - případová studie Zadání: Paralelní implementace umělých neuronových sítí pro vestavěné aplikace a práci v RT Řešení by mělo zodpovědět otázky: Jako alternativa k neuronovým čipům, je paralelní implementace levnější? snadněji aplikovatelná? výkonnější? Když paralelní implementace, tak která architektura, DM-MP nebo SM se sběrnicí? DSP SHARC CPU je vhodný pro obě řešení. Paralelní implementace ANN Rozčlenění třívrstvé ANN ADSP- SHARC by AMD SM w [ nhn, nin ] w [ non, nhn ] - t - t in [] - t out[] - t out [] in [] out[] out [] MB/s MB/s in [ nin - ] Implementace MP - jen fáze vybavování WHILE TRUE SEQ. Rozhlášení (OAB) vstupního vektoru z uzlu id =. Vypočti výstupní hodnoty přidělených skrytých neuronů (násobení matice vah vektorem aktivací, = a w aw... an wn aw potom funkce ep a dělení) f ( ) = ep( ). AAB, všichni dostanou všechny hodnoty výstupů skrytých neuronů. Vypočti přidělené výstupy. Posbírej výstupní vektor (AOG) v uzlu id =. SW řetězení čas k- k k OAB HID OAB AAB HID OAB OUT AAB HID OAB OAG OUT AAB HID OAB OAG OUT AAB HID OAB OAG OUT AAB HID OAB OAG OUT AAB HID OAG OUT AAB OAG OUT OAG
Paralelní implementace se SM WHILE TRUE SEQ. Pouze řídicí CPU: získej nový vstupní vektor ze vstupního buferu do SM; bariéra;. Všichni: načti vstupní hodnoty ze SM; vypočti hodnoty na výstupech přidělených skrytých neuronů; bariéra;. Všichni: čti hodnoty výstupů skrytých neuronů ze SM; vypočti přidělené výstupy; bariéra;. Pouze řídicí CPU: dej výstupní vektor ze SM do výstupního buferu; bariéra; Paralelní implementace se SM - pokrač. Předpoklady: velikost bloku cache byte, data: stačí přesnost REAL výpadek čtení každých načtených čísel u prvků - vstupního vektoru (všechny CPU), - skrytého vektoru (všechny CPUs) nebo - výstupního vektoru (pouze řídicí CPU) pokud není podporován předvýběr dat v HW (IA-) nebo SW operace write back není potřeba, zapisuje se stále do stejných bloků cache (mění se pouze stav z ekluzivního na sdílený). Vstupní a skrytý vektor (kromě přidělené sekce) se jen čtou, takže se nemusí odsunovat do SM, pouze se přepisují. předpokládáme, že matice vah jsou rezidentní ve všech uzlech (např. v privátních ROM), přístup k vahám v taktu. Výsledky a závěry Výsledky a závěry - pokrač. DM small DM medium E [%] DM large SM small SM medium SM large number of processors Speedup DM small DM medium DM large SM small SM medium SM large number of processors Závěry simulované ANN: malé - - střední - - velké - - MP se SW řetězením předčí implementaci SM Nejlepší topologie pro implementaci DM-MP - úplné propojení do P = procesorů - hyperkostka pro P =,,, - jinak kruhová topologie, P =,,,,,, Nepravidelná topologie AMP (A Minimum Path) s tabulkovým směrováním vykazuje horší výkonnost. Příklad: výkonnost paralelní FFT n-bodová Diskrétní Fourierova Transformace je def. jako součin komplení matice W n [n, n] = w n (j,k) a kompleního vektoru [n,]: n n πijk y = W n, y j = wn ( j, k) k = k ep k = k = n kde w n (j,k) jsou tzv. otáčecí činitelé (twiddle factors), jinak též komplení kořeny rovnice n = w n (j,k) = ep (- ijkπ/n ) = (cos π/n - i sin π/n) jk, i = -, j, k =,,, n-. Složitost přímého výpočtu je n aritmetických operací (součin a akumulace dvou kompleních čísel).
n-bodová Diskrétní Fourierova Transformace Příklady transformačních matic : jk (mod ) W = W - Algoritmus FFT využívá symetrii matice a opakující se hodnoty W e (-iπ/) - -e (-iπ/) - - -e (-iπ/) - e (-iπ/) Rychlá Fourierova transformace FFT (n = ) = algoritmus výpočtu DFT - - - - - e -iπ/ - y =( )( ) y =( - )i ( - ) y =( ) ( ) y = ( - ) i ( - ) Stačí operací ± a operace * (obecně komplení) Přímý výpočet: operací ± a operací * FFT symbolicky (n = ) Rychlá Fourierova transformace FFT (n = ) reverzace adres vstupů e -ijkπ/n - j*k y y y y = Počet motýlků: n log n = operace motýlek j*k j*k y y y y y y y y n log n -krát reverzace adres vstupů FFT (n = ), uspořádání motýlků Zisk při použití n-bodové FFT Složitost FFT: log n stupňů výpočtu, n operací ± n operací * v každém stupni (obecně kompleních) O(n log n). přeskládání vstupní nebo výstupní posloupnosti: n log n kroků jako řazení. n n log n n Násobení matice vektorem podle definice DFT: O(n )
Motýlkové operace n-bodová paralelní FFT, n= q, P dělí n c id DIT e if w n (j,k) = u iv - C id E if C = c ue - vf D = d uf ve E = c - C F = d - D c id C id C = c e DIF D = d f e if w n (j,k) = - u iv E if * * ± * ± E = (c - e) u - (d - f) v F = (c -e) v -(d -f) u y = W n = T (W P I n/p ) S (I P W n/p ) Π permutace s rozestupem n/p n/p p-bodových FFT P n/p-bodových FFT přeskládání vektoru (permutace) reverzací indeů násobení diagonální maticí rotačních koeficientů T = diag (I n/p, Ω, Ω,, Ω P- ), Ω = diag (, ω, ω,, ω n/p- ), ω=ep(-πi/n) Implementace n-bodové paralelní FFT Paralelizace FFT (n =, P = ) Sekvence n bodů je uložena ve sdílené paměti jako matice P řádků a n/p sloupců (jazyk C).. Procesory provedou paralelně přeskládání posloupnosti reverzací bitů.. Každý procesor provede n/p-bodovou sekvenční FFT na řádcích matice, nejlépe v rámci cache, bez komunikace s ostatními (prvních log (n/p) stupňů výpočtu).. Následuje globální transpozice matice (komunikace všichni všem). Násobení maticí otáčecích činitelů. Každý procesor provede závěrečných log P stupňů výpočtu (P-bodové sekvenční FFT na sloupcích matice, každý procesor n/p sloupců). Globální transpozice matice reverzní adresace Body počítá první procesor Paralelní FFT (n =, P = ) Paralelní FFT (n =, P = ) reverzní adresace FFT komunikace mezi procesory FFT permutace (každý čtvrtý) reverzní adresace komunikace mezi procesory
,,,,,, -, Příklad: FFT pravoúhlého impulsu, n= vstup amplituda /n,,,, -,,,, -, - -, - -, fáze [rad.] DFT ve zpracování obrazů [ ( )] N -D DFT: M jl km X lm = jk ep πi N M j= k = kde j a k jsou indey řádků a sloupců, j N-, k M-. Pro čtvercový obraz N = M a N N km jl X lm = [ jk ep[ πi( ) [ ( )] M ] ep πi N j= k = Vnitřní součet je -D DFT na N bodech řádku, výsledkem je transformovaný řádek. Vnější součet je -D DFT na N bodech sloupce. Můžeme psát: Tudíž -D DFT se dá rozdělit N jl do dvou sekvenčních fází, jedna X lm = X jm ep[ πi( )] N zpracovává řádky, druhá vzniklé j= sloupce. DFT ve zpracování obrazů Vyhlazování obrazů j k transformuj řádky transformuj sloupce jk X jm X lm Aplikace DFT: Kmitočtová filtrace, DFT obrazu se bod po bodu násobí DFT filtru. Inverzní DFT získáme vyfiltrovaný obraz. např. nahrazením hodnoty pielu průměrem v -okolí ' = Počet kroků lze redukovat na vektorové operace:. Přičtení sloupce pielů zleva. Přičtení sloupce pielů zprava. Přičtení řádku pielů shora. Přičtení řádku pielů zdola Obecně lze použít u každého k použít váhu w k (masky s vahami) w w w w w w w w w Vzájemná diskrétní korelace f w k = k = / / / ' - - - - - - - - zprůměrování redukce šumu zostření Snadná paralelizace jako u metody konečných diferencí. Masky pro detekci hran - Prewittův operátor Používá se aproimace gradientu f ( = vektor, jehož složky jsou derivace skalárního pole f podle souřadnic). Prewitt: f ( ) ( ) ( ) f ( ) ( ) ( ) y f - - - - - -
) ( ) ( ) ( ) ( y f f Masky pro detekci hran - Sobelův operátor - - - - - - Sobel :