59 O VZPOREDNEM MNOŽENJU MATRIK INFORMATICA 1/91 ' Borut Robič, Polona Blaznik Keywords: parallel algorithm, matrix multiplication, parallel Institut Jožef Stefan computer architecture. ¿> Ljubljana Opisani so trije časovno optimalni algoritmi za vzporedno množenje kvadratnih matrik na modelih SIMD-MC2, SIMD-CC ter SIMD-PŠ vzporednega računanja. Podane so ustrezne časovne zahtevnosti. Izpeljan je formalni dokaz pravilnosti algoritma na SIMD-PS. ON PARALLEL MATRIX MULTIPLICATION: .We describe three parallel matrix multiplication algorithms which are known to be time optimal on underlying models of parallel computation: SIMD-MC2, SIMD-CC, and SIMD-PS. Their time complexities are analized. Also, a formal proof of the algorithm correctness for SIMD-PS is derived. Keywords: parallel algorithm, matrix multiplication, parallel computer architecture. 1. Uvod Množenje matrik je operacija, ki se zelo pogosto pojavlja v nu-meričnih ter nenumeričnih problemih, zato je bila in še vedno je predmet intenzivnih raziskav. Osnovni zaporedni algoritem za množenje dveh kvadratnih matrik reda n ima časovno zahtevnost 0(ns) aritmetičnih operacij. Slednji je veljal za najboljšega vse do odkritja Strassenovega algoritma leta 1969 s kompleksnostjo 0(nJil), kar je sprožilo plaz raziskav, usmerjenih v iskanje časovno Se učinkovitejših algoritmov. Poznan je že algoritem s kompleksnostjo 0(n.u), kjer je u> < 2.4955 [3]. Ker ni znano, ali je H(nJ) hkrati tudi največja spodnja meja za časovno kompleksnost zaporednega množenja matrik, je iskanje časovno optimalnega zaporednega algoritma še vedno aktualno. Žal pa se prednost teh algoritmov pokaže šele pri razmeroma velikih matrikah, zato imajo predvsem teoretični pomen. Po drugi strani pa hkrati z razvojefn vzporednih arhitektur postajajo zanimivi tudi vzporedni algoritmi za množenje matrik. Vzporedno množenje matrik se pojavlja celo v problemih, ko jih običajno ne rešujemo z uporabo zaporednega matričnega množenja [4]. V nadaljevanju se bomo osredotočili na družino SIMD računalnikov (Single Instruction stream, Multiple Data stream). Družina SIMD modelov vzporednega računanja obsega dve poddružini. V prvo spada model SIMD-SM (Shared Memory) skupaj z različnimi variantami, ki se med seboj razlikujejo po stopnji omejevanja in izvedbe sočasnega čitanja/vpisovanja v skupni pomnilnik. Modeli iz te poddružine omogočajo lažji razvoj vzporednih algoritmov, ker se ni potrebno ozirati na arhitekturne značilnosti. Uporabni so predvsem pri določanju spodnjih meja za časovne kompleksnosti algoritmov. V drugo poddružino pa spadajo realnejši modeli, pri katerih so izpostavljene nekatere arhitekturne značilnosti - predvsem način povezovanja procesorjev ter porazdelitev pomnilnika. Mednje spadajo tudi modeli SIMD-MC (Mesh Con- nected), SIMD-CC (Cube Connected), ter SIMD-PS (Perfect Shuffle), ki so poimenovani po različnih medprocesorskih povezovalnih shemah. Pri razvoju algoritma za reševanje danega problema moramo upoštevati vse značilnosti modela, na katerem bo potekalo računanje. Zato lahko obstaja za dani problem več časovno različnih optimalnih algoritmov, ki so pač razviti za različne računske modele. V nadaljevanju bomo opisali problem vzporednega množenja dveh kvadratnih matrik na omenjenih modelih. Matriki označimo z A in B; obe sta reda n x n. Produkt naj bo matrika C z elementi C"J = £?=0 Oi.kbkj- 2. Množenje na SIMD-SM-CRCW Najprej določimo spodnjo mejo za časovno kompleksnost vzporednega množenja matrik. Vzemimo model SIMD-SM-CRCW, kjer imajo vsi procesorji skupni pomnilnik, v katerega lahko sočasno vpisujejo ali iz njega čitajo. Reševanje konftiktnih situacij pri sočasnem posegu (vpisovanju, čitanju) v skupni pomnilnik je prepuščeno modelu (nekateri pristopi so opisani v (lj); algoritem bo zato enostavnejši, model pa toliko bolj skrivnosten. Pri analizi ne upoštevamo operacije prenašanja podatka iz enega procesorja v drugi. Prav tako predpostavljamo, da število procesorjev ni vnaprej omejeno: če se pri razvoju algoritma pojavi potreba po večjem številu procesorjev, lahko smatramo, da so že na voljo. Kljub svoji nerealnosti pa ta model omogoča določitev spodnje meje za časovno kompleksnost vzporednega množenja matrik, saj se pri razvoju algoritma osredotočimo le na bistvene operacije. Denimo torej, da je na voljo vsaj ns procesorjev. V prvem koraku se sočasno izračuna vseh ns produktov a, t6t j, 0 < t,J, fc < n — 1. Nato se sočasno izračuna vseh nJ vsot c,j = £k=o Gt.fc^k,)» 0 < »,/.< n - 1. Vsako vsoto lahko izračunamo z j procesorji v flogn] korakih, če izvršimo seštevanje v obliki binarnega drevesa. Skupaj je potrebnih flogn] + 1 korakov, kar je spodnja meja za časovno kompleksnost vzporednega množenja matrik [2]. 60 Za razvoj praktitno uporabnega algoritma pa moramo izbrati enega izmed realnejših modelov vzporednega računanja. Obravnavali bomo vzporedno množenje matrik na modelih SIMD-MC2, SIMD-CC in SIMD-PS. 3. Množenje matrik na SIMD-MC2 SIMD-MC2 vsebuje n' procesorjev P,j, 0 < i, j < n - 1, ki so ciklično povezani v dvodimenzionalno mrežo (Slika 1). Vsak procesor P,j- ima Štiri sosede Pimj, Pijel, P,eij in P.-jei, kjer smo s ffi in © označili operaciji seštevanja in odštevanja po modulu n. Vsak P,j- vsebuje tri registre A,j, B,j ter C,y. 1 if I i; t» ij ifl U ii it U i; ifi ix 4; i* Slika 1 Ob ustreznem ukazu lahko procesorji sočasno pošljejo vsebine izbranega registra v dani smeri svojim sosedom. Na primer, kadar se prenažajo vsebine registrov A v levo (oziroma navzgor), to zapišemo z A,j «—AliJ(S)1 (oziroma A,j «— A,©ij). 3.1 Spodnja časovna meja Gentleman je v (5] pokazal, da je treba pri analizi vzporednih algoritmov upoštevati tudi operacije prenašanja podatkov med procesorji; analize, ki tega ne upoštevajo, dajejo nerealne rezultate. Računski model, na katerem temelje Gentlemanove ugotovitve, združuje večje število procesorjev, ki imajo lahko tudi lokalne pomnilnike. Vsak procesor lahko neposredno pošlje podatek omejenemu številu sosednjih procesorjev. Procesor lahko pošlje podatek v enem koraku le enemu sosedu. Gentlemanov računski model je dovolj splošen, da je v njem zajet tudi SIMD-MC1. Razpriilna funkcija p(k) : N >-+ N naj bo definirana kot največje število procesorjev, ki lahko po h korakih prenašanja podatkov prejmejo podatek'iz izbranega začetnega procesorja. Tu seveda predpostavljamo, da procesorji, ki so podatek že prejeli, sodelujejo pri njegovem nadaljnem širjenju v okolico. Funkcija p je seveda odvisna od povezovalne sheme procesorjev, torej od modela vzporednega računalnika. Neodvisno od povezovalne sheme pa velja sledeči Izrek |5) Na opisanem modelu računanja zahteva množenje dveh matrik reda n x n vsaj s korakov prenaianja podatkov, tako da je p(2s) > n* . Dokaz. Opazujmo poljuben element ctJ-; nahaja se v procesorju P,-,, in je enak c.j = aiikbkJ. Vsak izmed faktorjev o,-,t •n bkj, 0 < k < n - 1, ki vstopajo v ta izraz, se na začetku nahaja v lastnem procesorju in med računanjem vrednosti c,j opravi neko pot do procesorja P;,. Naj bo s(ij) dolžina najdaljše izmed poti, ki jo opravijo ti faktorji pri računanju c,j in naj bo s = maxiJ«(ij). Torej je pri računanju produkta matrik potrebnih vsaj s prenosov podatkov. Izberimo dva poljubna procesorja Pt in P„. Element matrike A, ki se nahaja v procesorju Pr, naj bo o,-j. Zanima nas zgorivja meja za število potrebnih korakov pri prenašanju tega elementa v procesor Pv. Denimo, da se v P„ na- haja element 6U|„ matrike B. Tedaj lahko pri prenašanju elementa Oij uberemo pot preko procesorja P,, v katerem pričakujemo element e,iU produkta matrik. Takšna pot namreč mora obstajati, saj v nasprotnem ne bi mogli izračunati c; „: prvi del je pot, ki jo pri računanju c,iU opravi a,j do P,, drugi del pa pot, ki jo pri tem (v obratni smeri) opravi bUiV. Iz definicije števila s sledi, da obe poti skupaj merita kvečjemu 2s. Sledi, da je za prenos podatka iz enega procesorja v drugi potrebnih kvečjemu 2s korakov. Seveda pa mora biti s zadosti velik, da lahko iz danega procesorja podatek pride do kateregakoli izmed n1 procesorjev. To pomeni, da mora biti 2s korakov dovolj za razpršitev podatka v vseh n2 procesorjev, oziroma p(2s) > n'. S tem je izrek dokazan. Opazimo, da dokazovanja nismo oprli na nobeno od medprocesorskih povezovalnih shem. □ Za model SIMD-MC2 je enostavno videti, da je moč v k korakih začetni podatek razpršiti v p(k) = 2A2 + 2k + 1 procesorjev. Od tod in iz zgornjega izreka sledi, da je za ta model s > - 4• Sledi, da je spodnja časovna meja za množenje dveh matrik reda n x n na modelu SIMD-MC2 enaka f)(n). Vsak algoritem s časovno kompleksnostjo O(n) je zato s stališča asimp-totičnih časovnih kompleksnosti optimalen na SIMD-MC?. Tak algoritem je opisan v nadaljevanju. 3.2 Algoritem Videli smo, da se na modelu SIMD-MC2 dveh matrik reda n x n ne da zmnožiti hitreje kot v linearnem času glede na n. L.E.Cannon je razvil algoritem, ki to stori v času ©(n) in je zato časovno optimalen na modelu SIMD-MC2 [4]. Na začetku velja A,j = a,j, B,j- = 6,j ter C(J- = 0, 0 < i, j < n - 1. Na koncu pa je C, ,- = dj = T,kZo 0 < t',j < n — 1, torej element produkta matrik. Algoritem se glasi: 1 begin 2 for k = 1 to n-1 do 3 forall P(j do 4 if i>k then A,j A,j®i 5 if j>k then B,j 6 endforall 7 endfor; 8 forall P, j do 9 C,j := Aij.Bij 10 endforall; 11 for k = 1 to n-1 do 12 forall P.j do 13 A, j *— A,-,®; 14 Bi,j B,®ij 15 C.j := Cij+A,j*B, 16 endforall 17 endfor 18 end. Tu pomeni znak «— prenašanje podatkov med registri različnih procesorjev, znak := pa znotraj procesorja. Algoritem sestavljajo trije deli. V prvem, ki ga sestavljajo vrstice 2.. .7, se vsebine registrov A,j in Bij premestijo: v »- ti vrstici se začetne vsebine registrov A i-krat premestijo ciklično v levo, v j-tem stolpcu pa se začetne vsebine registrov B /-krat ciklično premestijo navzgor. Po izvršitvi prvega dela velja torej za vsak P.J-: A.j = Oi,.®, in Btj = A,ejj. Vsebini registrov A.j in B,j se lahko takoj pomnožita, saj se nahajata v istem procesorju P.j, njun produkt pa je eden od členov v končnem c.j. Sočasno množenje v vseh procesorjih opisujejo stavki 8.. .10, ki tvorijo drugi del algoritma. V tretjem delu algoritma (vrstice 11.. .17) prištejemo trenutni vsebini registra C{J- še ostalih n-1 produktov, ki so členi končnega c/j. V vsakem procesorju dobimo nova faktorja, ki sestavljata takšen produkt, če vsebine vseh registrov A preslikamo enkrat ciklično v levo, vsebine vseh registrov 61 B pa enkrat ciklično navzgor. Na primer, po k izvršitvah zanke 11 velja za vsak Pjj, 0 < i, j < n - 1: A.," J —