paralelni algoritmi

Embed Size (px)

Citation preview

SKRIPTA II DIO

Paralelni algoritmi

Sortiranje SelekcijomDosadasnja analiza ukazuje da mozda drugi pristup treba primijeniti da bi performanse procedure CREW SORT bile odgovarajuce na EREW modelu. Sada cemo prouciti jedan takav pristup. Ideja je sekvencijalnu proceduru QUICKSORT prilagoditi izvrsavanju na x paralelnom racunaru. Uocimo da, kako je N < n, mozemo pisati N = n 1 , gdje je 0 < x < 1. Sada definisimo m i kao i ( n / 21 / x ) -ti najmanji element u S, za 1 i 2 1 / x - 1. m i se moze upotrijebiti za razbijanje S-a na 2 1 / x podnizova velicine n / 2 1 / x . Ovi podnizovi oznaceni sa S 1 , S 2 , ... , S j , S j + ., S j + , ,S 2 j 1 2 (1x ) 1 (gdje je j = 2 ), zadovoljavaju naredno svojstvo: Svaki element iz Si je manji ili jednak od svakog elementa iz S i + za 1 i 2j 1. Ovo je ilustrovano na slici 4.6 . 1 Proces razbijanja u podnizove moze biti rekurzivno primijenjen na svaki podniz S i , dok se citavi niz S ne sortira u neopadajucem poretku. Ovaj se algoritam moze izvrsiti paralelno, prvo pozivom procedure PARALLEL SELECT za nalazenje elemenata m i , a zatim kreiranjem podsekvenci S i . Algoritam se primjenjuje paralelno na podsekvece od S1, , Sj , koristeci N/j procesora po jednoj podsekvenci. Potom se isto uradi sa preostalih S j + , ... , S 2 j podsekvenci.Uocite da je 1 broj procesora potrebnih za sortiranje svake podsekvence velicine n / 2 1 / x tacno jednak i x kod odgovarajuce rekurzivne primjene algoritma , a to je (n/2 1 / x ) 1 . 1/ x Vazno je narocito da 2 bude cio broj konacne velicine. Time je osigurana gornja granica ukupnog vremena izvrsavanja , kao i postojanje svih m i -ova. Inicijalno, svih N x raspolozivih procesora racunaju x iz N = n 1 . Ako x ne zadovoljava uslove: (i) gornji cio dio(1/x) 10 (ii) n 2 gornjicio (1 / x ) onda najmani realan broj veci od x koji zadovoljava uslove (i) i (ii) se uzima umjesto x. Sam algoritam je dat u vidu procedure EREW SORT:

2

Slika 4.6: Podjela niza za sortiranje selekcijom

3

EREW SORT proceduraprocedure EREW SORT (S) if |S| k then QUICKSORT (S) else (1) for i = 1 to k - 1 do PARALLEL SELECT (S, i | S | / k ) end for (2) S1 {s S: s m1} (3) for i = 2 to k - 1 do Si {s S: m i s m i } 1 end for (4) S k { s S: s m k } 1 (5) for i = 1 to k/2 do in parallel EREW SORT (Si) end for (6) for i = (k/2) + 1 to k do in parallel EREW SORT (Si) end for end if.

{Dobijanje m i }

Uocite da su u koracima od 2-4 sekvence Si su kreirane metodom skiciranom u Lekciji2 koja je povezana sa procedurom PARALLEL SELECT. Takodje u koraku 3, elementi iz S koji su manji od m i , a veci ili jednaki od m i su prvi smjesteni u Si. Ako je |Si| < | S | / k 1 , onda su elementi jednaki sa m i dodati u Si, tako da je ili |Si| = | S | / k , ili nema preostalih elemenata za dodavanje u Si. Ovo je potsjecanje na uradjeno sa QUICKSORTom. Koraci 2 i 4 su izvrseni ekvivalentno. Primjer 4.6 S = {5,9, 12, 16, 18,2, 10, 13, 17,4,7, 18, 18, 11, 3, 17,20,19, 14, 8, 5, 17, 1, 11, 15, 10,6} (tj. n =27). Neka imamo na raspolaganu pet procesora P1, P2, P3, P4, P5 na EREW SM x SIMD racunaru (dakle N = 5). Stoga je 5 = (27) 1 , x 0.5 , i k = 2 na 1 x tj 4. Rad procedure EREW SORT za ove ulazne podatke je prikazan na slici 4.7. Koraci 1, m 1 = 6, m 2 = 11, m 3 = 17 su izracunati. Cetiri podsekvence su kreirane S1, S2, S3 i S4 u koracima 2-4 kako je predstavljeno na slici 4.7 b). U koraku 5) procedura je primijenjena x rekurzivno i istovremeno na S i Si. Uocite da je |S1| = |S2| = 7, pa je stoga 7 1 zaokruzeno na 2 (kako je predlozeno u lekciji2). Drugim rijecima 2 procesora se koriste za sortiranje svake od podsekvenci S1 i S2 (peti processor ostaje slobodan). Za S1 procesori P1 i P2 racunaju m1 = 2 , m2 = 4 i m3 = 5, i cetiri podsekvence su kreirane {1,2}, {3,4}, {5,5}i {6} svaka u sortiranom poretku. Za S2, procesori P3 i P4 racunaju m1 = 8, m2 = 10 i m3 = 11 i cetiri podsekvence {7,8}, {9, l0},{10,11} i {11} svaka takodje u sortiranom poretku. Prikaz niza S na kraju koraka (5) dat je na slici 4.7c) . U koraku 6) procedura je x rekurzivno i istovremeno primijenjena na S3 i S4. Kako je opet |S3| = 7 i |S4| = 6 , 7 1 i x 6 1 su zaokruzeni na 2. Po dva procesora se koriste za sortiranje svake od podsekvenci S3 i S4.

4

Za S3, m1 = 13, m2 = 15 i m3 = 17 su izracunati, kao i cetiri podniza {12, 13}, {14,15}, {16,17}i {17} i svaki je vec sortiran. Za S4, m1 = 18, m2 = 18 i m3 = 20 su izracunati, kao i cetiri podsekvence {17,18},{18,18},{19,20},{}. Prikaz niza S poslije koraka 5 je dat na slici 4.7d).

(a)Inicijalno

| |

S1

|

S2

|

S3

|

S4

(b)Poslije koraka (4)

| | (c)Poslije koraka (5)

S3

|

S4

(d) Poslije koraka (6) Slika 4.7: Sortiranje niza od 27 elemenata procedurom EREW SORT.

AnalizaPoziv procedure QUICKSORT zahtijeva konstantno vrijeme. Kroz analizu procedure PARALLEL SELECT iz lekcije2 saznali smo da koraci 1-4 zahtijevaju cn x vremenskih jedinica za neku konstantu c. Vrijeme izvrsavanja procedure EREW SORT je stoga: t(n) = cn x + 2t(n/k) = O(n x logn) x Kako je p(n) = n 1 , cijena procedure je c(n) = p(n) x t(n) = O(n log n), x sto je optimalno. Uocite da kako je n 1 < n/logn, optimalna cijena je ogranicena na prostoru N < n/log n. Procedura EREW SORT stoga odgovara proceduri CREW SORT prema performansama. (i) Ona koristi broj procesora N koji je podlinearan obimu ulaza n i prilagodjava se njemu. (ii) Ima malo vrijeme izvrsavanja koje se mijenja inverzno u odnosu na N. (iii) Cijena je optimalna za N < n/log n. Procedura EREW SORT ima dodatnu prednost, a to je mogucnost izvrsavanja na slabijem modelu izracunavanja koji ne dozvoljava visestruke operacije citanja iz iste memorijske lokacije.

5

Interesantno je takodje uociti da procedura EREW SORT predtavlja Odraz u ogledalu proceduri CREW SORT. Oba algoritma mogu teorijski biti modelirana pomocu binarnog drveta. U proceduri CREW SORT, podnizovi se unose u listovima, jedan podniz po listu, sortiraju se lokalno, potom se spajaju u par od strane roditeljskih cvorova, sve dok se rezultat ne dobije u korijenu. S druge strane, u proceduri EREW SORT, niz koji se sortira se upisuje u korijen i dijeli na dva nezavisna podniza {S1, , Sj} i {S j + , , S 2 j }. 1 Podjela se zatim nastavlja u svakom cvoru zasebno, sve dok u svakom listu ne dobijemo podniz koji jednom kad se lokalno sortira daje rezultat na izlazu.

Brza Furijeova transformacija6

Algoritam FFT nije jednostavan, i do njega se ne dolazi direktno. Ograniiemo se na samo jednu njegovu primjenu, mnozenje polinoma. Problem. Izracunati proizvod dva zadata polinoma p(x) i q(x). Formulacija problema je precizna samo na prvi pogled, jer nije preciziran nacin predstavljanja polinoma. Obicno se polinom

P= 1 Predstavlja nizom svojih koeficijenata uz 1, x, x 2 , . . . , x n ; ali to nije jedina mogunost. Alternativa je predstavljanje polinoma stepena n - 1 svojimm vrijednostima u n razliitih taaka: te vrijednosti jednoznano odreuju polinom. Drugi nain predstavljanja je interesantan zbog jednostavnosti mnoenja. Proizvod dva polinoma stepena n-1 je polinom stepena 2n-2, pa je odreen je svojim vrijednostima u 2n-1 taaka. Ako pretpostavimo da su vrijednosti polinoma inilaca date u 2n - 1 taaka, onda se proizvod polinoma izraunava pomou 2n - 1, odnosno O(n) obinih mnozenja. Za dat polinom P(x) duzine n i polinom Q(x) duzine m ,moemo pretpostaviti da je m=n jer polinom moemo da dopunimo nulama.Ne umanjujui optost pretpostavljamo n=m=2 k , m+n-2=2n-2=2(n1) Naalost, predstavljanje polinoma vrijednostima za neke primjene nije pogodno. Primjer je izraunavanje vrijednosti polinoma u zadatim takama pri reprezentaciji vrijednostima, ovo je mnogo tee nego ako su zadati koeficijenti polinoma. Meutim, ako bismo mogli da efikasno prevodimo polinome iz jedne u drugu predstavu, dobili bismo odlian algoritam za mnoenje polinoma.Upravo to se postize primenom FFT. Prelaz od predstave polinoma koeficijentima na predstavu vrijednostima u takama, reava se izraunavanjem vrijednosti polinoma.Vrijednost polinoma p(x) (zadatog koeficijentima) u bilo kojoj taki moe se pomou Hornerove eme izraunati pomouu n mnoenja. Izraunavanje vrijednosti p(x) u n proizvoljnih taaka izvodljivo je dakle pomou n 2 mnoenja. Prelaz od predstave polinoma vrijednostima na predstavu koeficijentima zove se interpolacija. Interpolacija u optem sluaju takoe zahtjeva O( n 2 ) operacija. Ovde je kljuna ideja da se ne koristi proizvoljnih n taaka: mi imamo slobodu da polje i izaberemo proizvoljan skup od n razliitih taaka. Brza Furijeova transformacija koristi specijalan skup taaka, tako da se obje transformacije, izraunavanje vrijednosti i interpolacija, mogu efikasno izvravati. Razmotrimo problem izraunavanja vrijednosti polinoma. Potrebno je izraunati vrednosti dva polinoma stepena n - 1 u 2n - 1 taaka, da bi se njihov proizvod, polinom stepena 2n-2, mogao interpolirati. Meutim, polinom stepena n-1 moe se predstaviti kao polinom stepena 2n-2 izjednaavanjem sa nulom vodeih n-1 koeficijenata. Zbog toga se bez gubitka optosti moe pretpostaviti da je problem izraunati vrijednosti proizvoljnogpolinoma P = a j xj 0 n 1 j

stepena n- 1 u n razliitih taaka. Cilj je pronai takvih n taaka, u

kojima je lako izraunati vrijednosti polinoma. Zbog jednostavnosti pretpostavljamo da je n stepen dvojke. Koristiemo matrinu terminologiju da bismo uprostili oznaavanje. Izraunavanje vrijednosti polinoma P u n taaka x 0 ,... x n moe se predstaviti kao 1 izraunavanje proizvoda matrice i vektora:

7

Pitanje je kako izabrati vrijednosti x 0 ,... x n tako da se ovo mnoenje uprosti. 1 Posmatrajmo dvije proizvoljne vrste r i s. Voljeli bismo da ih ucinimo to slinijim, da bismo 2 2 utedeli na mnozenjima. Ne moze se staviti x r = x s jer su take razliite, ali se x r = x s moe postii stavljajui. x s = x r Ovo je dobar izbor, jer je svaki paran stepen x r jednak odgovarajuem parnom stepenu x s , neparni stepeni razlikuju se samo po znaku. Isto se moe uraditi i sa ostalim parovima vrsta. Nasluuje se u kom pravcu treba traiti n specijalnih vrsta, za koje bi se gornji proizvod svodio na samo n/2 proizvoda vrsta matrice sa kolonom koeficijenata. Rezultat bi bio polovljenje veliine ulaza, a time i vrlo efikasan algoritam. Pokuajmo da postavimo ovaj problem kao dva odvojena problema dvostruko manje veliine. Podjela polaznog problema na dva potproblema veliine m = n/2 moe se opisati sledeim izrazom

Polazna n x n matrica podeljena je na dve vrlo sliqne podmatrice dimenzija n/2 x n. Za svako j = 0,1,, n/2 -1, vai x n / 2+ j = x j . Zgodno je dakle napisati izraze za P( x j ) i P( x j ), odnosno uopte P(x), sa razdvojenim lanovima parnog i neparnog stepena:

Ako sa P0 ( x ) =

n / 2 1 j =0

a

2j

x j , odnosno P ( x ) = 1

n / 2 1 j =0

a

2 j +1

x j oznaimo polinome stepena n/2-

1 sa koeficijentima polinoma P parnog, odnosno neparnog indeksa, dolazimo do jednakostiP ( x) = P0 ( x 2 ) + xP1 ( x 2 )

Zamjenom x sa -x dobijamo P (x ) = P0 ( x ) + (x ) P1 ( x ) Izraunavanje P ( x j ) , j = 0,1,..., n - 1 svodi se na raunanje P ( x j ) i P ( x j ) za j = 0, 1,...,n/2-1,odnosno na izraunavanje 2 2 samo n/2 vrijednosti P0 ( x j ) , n/2 vrijednosti P ( x j ) , i dopunskih n/2 sabiranja, n/2 1 oduzimanja i n mnoenja. Dakle, imamo dva potproblema veliine n/2 i O(n) dopunskih operacija. Moe li se nastaviti rekurzivno na isti nain? Ako bi nam to polo za rukom, doli bismo do poznate diferencne jednaine T(n) = 2T(n=2) +O(n), ije je reenje T(n) = O(n log n). Problem izraunavanja P(x) (polinoma stepena n - 1) u n taaka sveli smo na 2 izraunavanje P0 ( x ) i P ( x 2 ) (dva polinoma stepena n/2 - 1) u n/2 taaka. To je 1 regularna redukcija, izuzev jednog detalja: vrijednosti x u P(x) mogu se proizvoljno birati, 2 2 ali vrijdnosti x u izrazu (na primjer) P0 ( x ) mogu biti samo pozitivne. Poto smo do redukcije doli korienjem negativnih brojeva, ovo predstavlja problem. Izdvojimo iz2 2

8

prethodne

matrice

koja

odgovara

izraunavanju

2 vrijednosti P0 ( x ) :

Da bismo jo jednom izveli redukciju na isti nain, morali bismo da stavimo npr. 2 x n / 4 = (x0 ) 2 . Poto su kvadrati realnih brojeva uvjek pozitivni,ovo je nemogue, bar ako se ograniimo na realne brojeve. Potekoa se prevazilazi prelaskom na kompleksne brojeve. Problem se moe opet podijeliti na dva dijela stavljajui x j +n / 4 =ix j za j = 0,1...,n/4-1 (i je ovdje koren iz -1, kompleksan broj). Ovo razdvajanje zadovoljava iste uslove kao i prethodno. Prema tome, problem veliine n/2 moe se rijeiti svoenjem na dva problema veliine n/4, izvodei O(n) dopunskih operacija.Za sledee razdvajanje potreban nam je broj z takav da je z 8 = 1 i z j razliito od 1 za 0 < j < 8, odnosno primitivni osmi korijen iz jedinice; tada je z 4 = -1 i z z 2 = i. Optije, potreban nam je primitivni n-ti koren iz jedinice. Oznaimo ga sa (zbog jednostavnosti se n ne spominje eksplicitno; u okviru ovog odeljka radi se uvek o jednom istom n). Broj zadovoljava sledee uslove:1 Za n taaka x 0 ,... x n biramo brojeve 1, , 2 ,..., n . Prema tome, izraunava se 1 sledei proizvod:

Ovaj proizvod se zove Furijeova transformacija vektora ( a 0 , a1 ,..., a n 1 ) . Zapazimo najpre da je ispunjen uslov

xn / 2 =

n / 2+ j

= n / 2 j = x j ,j = 0,1,..., n/2 1.

Prema tome, prva redukcija problema veliine n na dva manja je i dalje ispravna.Dalje, 1 dva potproblema proizaxla iz ove redukcije imaju po n/2 taaka, , 2 ,..., n , to je upravo problem veliine n/2, u kome umesto figurie 2 - primitivni n/2-ti korijen iz jedinice. Prema tome, dalje se moe nastaviti rekurzivno. Sloenost algoritma zadovoljava diferencnu jednainu T(n) = 2T(n/2) + O(n), ije je reenje O(n log n). Algoritam omoguuje efikasno izraunavanje Furijeove transformacije vektora koeficijenata

9

polinoma, pa je dobio ime brza Furijeova transformacija, odnosno FFT.

Inverzna Furijeova transformacija. Brza Furijeova transformacija reava samo pola problema: vrijednosti zadatih polinoma 1 p(x) i q(x) mogu se efikasno izraunati u takama 1, , 2 ,..., n , izmnoiti parovi dobijenih vrednosti, i tako nai vrijednosti polinoma p(x)q(x) u navedenim takama. Ostaje problem interpolacije, odnosno odreivanja koeficijenata proizvoda polinoma na osnovu vrednosti u takama. Na sreu, ispostavlja se da je problem interpolacije vrlo slian problemu izraunavanja vrijednosti, i da ga reava praktino isti algoritam. Vratimo se matrinoj notaciji. Neka A T transponovana matrica matrice A. Oznaimo vektor koeficijenata polinoma sa a = ( a 0 , a1 ,..., a n 1 ) T ; a vektor vrijednosti polinoma sa 1 v = (P(1), P(),, P( n )) T . Ako su zadati koeficijenti polinoma a, njegove vrijednosti 2 1 v u n taaka 1, , ,..., n dobijaju se prema izraunavanjem proizvoda v = V ()a. 1 S druge strane, ako su zadate vrijednosti polinoma v = (P(1) ,P(),, P( n )) T = (v 0 , v1 ,..., v n ) T , a potrebno je izraunati njegove koeficijente, odnosno V ()a = v je 1 sistem linearnih jednaina po a. Reavanje sistema jednaina ima u optem sluaju dosta veliku vremensku sloenost O(n 3 ), ali se ovdje radi o jednom specijalnom sistemu jednaina. Lako se proverava da je 1 V () V ( )=nI gde je sa I oznaena jedinina matrica reda n. Zaista, ako je r razliito od s, onda je 1 proizvod (r+1)-e vrste matrice V () i (s+1)-e kolone matrice V( ) jednak

rk rk Ako je pak r = s, onda je taj proizvod P1 ( x) = = n . Time je dokazana sledea k =0

n 1

teorema. Teorema 1. Inverzna matrica matrice V () Furijeove transformacije je 1 V () =1/n V ( ) Reavanje sistema jednaina v = V ()a svodi se dakle na izraunavanje proizvoda 1 a =1/n V ( )v 10

Posao se dalje pojednostavljuje zahvaljujui sledeoj teoremi. 1 Teorema 2. Ako je onda je takoe primitivni n-ti koren iz jedinice. 1 Prema tome, proizvod 1/n V ( )v moe se izraunati primenom brze Furijeove 1 transformacije, zamenjujui sa . Ova transformacija zove se inverzna Furijeova transformacija. Sloenost. Uzimajui sve u obzir, proizvod dva polinoma moe se izraunati izvodei O(n log n) operacija (sa kompleksnim brojevima).

MERGE - Spajanje11

Uvod Pomenuli smo u poglavlju 2 da selekcija pripada klasi problema poznatih kao problemi poreenja. Drugi takav problem koji e biti razmatran u ovoj knjizi je problem spajanja. Definie se kao: Neka su A=(a,, a,, ...,a,) i B=(b,, b,, ...,bs) dvije sekvence brojeva sortiranih u neopadajuem redosledu; zahtijeva se spajanje A i B, kojim se formira trea sekvenca C=(c1,c2,...,cr+s) takoe sortirana u neopadajuem redosledu, tako da svako iz C pripada ili A ili B i da se svako i svako pojavljuju tano jednom u C. U kompjuterskim naukama, spajanje se pojavljuje u vie konteksta ukljuujui baze podataka i fajl menadment uopte. Mnoge od ovih aplikacija, naravno, ukljuuju spajanje nenumerikih podataka. Dalje, esto je potrebno da jednom kad se spajanje zavri da se izbriu duplikati u rezultirajuoj sekvenci. Tipian primjer je spajanje dvije mejl liste gdje je svaka sortirana po abecedi. Ove varijante ne nude novo prouavanje i mogu biti rijeene prilino lako jednom kad je osnovni problem rijeen. Spajanje je prilino dobro shvaeno u sekvencijalnom modelu raunanja i postoji jednostavan algoritam za njegovo rjeenje. U najgorem sluaju, kad je r=s=n, algoritam se izvrava u O(n) vremena. Ovo je optimalno s obzirom da svaki element iz A i B mora biti posjeen bar jednom, ovo ini (n) koraka potrebnih za spajanje. Na cilj u ovom poglavlju je da pokaemo kako problem moe biti rijeen sa nekoliko paralelnih kompjuterskih modela. Treba uoiti (n/N) najmanje mogue vrijeme potrebno za paraleni algoritam spajanja koji koristi N procesora. U odjeljku 3.2 poinje opisivanje specijalne namjene paralelne arhitekture za spajanje. Paralelni algoritam za CREW SM SIMD model je prezentovan u odjeljku 3.3 koji je adaptivan i optimalan. S obzirom da algoritam poziva sekvencijalnu proceduru za spajanje, ova procedure je takoe opisana u odjeljku 3.3. U odjeljku 3.4 je pokazano kako operacije konkurentnog itanja mogu biti uklonjene iz paralelnog algoritma simulacijom toga na EREW kompjuteru. Konano, adaptivni i optimalni algoritam za EREW SM SIMD model je prezentovan u odjeljku 3.5 ije je vrijeme izvravanja krae od vremena izvravanja simulacije u odjeljku 3.4. Algoritam je baziran na sekvencijalnog proceduri za pronalaenje medijana dvije sortirane sekvence, to je takoe opisano u odjeljku 3.5.

Mrea za spajanje U poglavlju 1 vidjeli smo paralelne arhitekture specijalne namjene mogu biti upotrebljene na bilo koji od sledeih naina: 1. korienjem specijalizovanih procesora sa uobiajenom meusobnom vezom 2. korienjem prilagoene veze unutar mree za povezivanje standardnih procesora, ili3. korienjem kombinacije 1. i 2.

U ovom odjeljku mi emo uzeti trei od ovih pristupa. Spajanje e biti zadovoljeno kolekcijom veoma jednostavnih procesora koji komuniciraju kroz mreu specijalne namjene. Ova paralelna arhitektura specijalne namjene je poznata kao (r,s)-spajajua mrea. Svi procesori koji e biti korieni su identini i nazivaju se komparatorima. Kao to 12

je ilustrovano na slici 3.1, komparator ima dva ulaza i dva izlaza. Jedina operacija komparatora je da uporedi vrijednosti sa dva ulaza i da postavi manju i veu od njih dvije na gornju i donju izlaznu liniju respektivno. Korienjem ovih komparatora mi nastavljamo da gradimo mreu koja uzima kao ulaz dvije sortirane sekvence A=(a1,a2,...,ar) i B=(b1,b2,..,bs) i proizvodi kao izlaz jednu sortiranu sekvencu C=(c1,c2,...,cr+s). Sledea prezentacija je veoma pojednostavljena sa dvije pretpostavke: 1. dvije ulazne sekvence su iste veliine, tj. r=s=n1, i 2. n je stepen broja 2. Poinjemo razmatranjem spajajue mree za prve tri vrijednosti n. Kad je n=1, jedan komparator je dovoljan. On daje kao izlaz dva ulaza u sortiranom redu.

Slika 3.1 Komparator Kad je n=2, vidje sekvence A=(a1,a2) i B=(b1,b2) su korektno spojene u mrei na slici 3.2. Ovo je lako dokazano. Procesor P1 uporeuje najmanji element A sa najmanjimm elementom B. Njegov gornji izlaz mora biti najmanji element u C, a to je c1. Slino, donji izlaz procesora P2 mora biti c4. Jedno dodatno uporeivanje je izvedeno od strane P3 za proizvoenje dva srednja elementa u C. Kad je n=4, moemo koristiti dvije kopije mree sa slike 3.2 praene sa tri komparatora, kao to je prikazano na slici 3.3 za A=(3,5,7,9) i B=(2,4,6,8). Uopteno, (n,n)-spajajua mrea je upotrebljena za sledeu rekurzivnu konstrukciju. Prvo, elementi niza A i B na neparnim pozicijama, a to su (a1, a3, a5, ..., an-1) i (b1, b3, b5, ..., bn-1) su spojene koristei (n/2,n/2)-spajajuu mreu za proizvoenje sekvence (d1, d2, d3, ...,dn). Istovremeno elementi niza na neparnim pozicijama su takoe spojeni korienjem (n/2,n/2)-spajajue mree za proizvoenje sekvence (e1, e2, e3, ..., en). Zavrna sekvenca (c1, c2, ...,c2n) je sainjena od c1=d1, c2n=en, c2i=min(di+1, ei) i c2i+1=max(di+1,ei) za i=1, 2, ...,n-1. Zavrna poreena su izvendena na rangu n-1 komparatora kao to je prikazano na slici 3.4. Primijetimo da je svaka od (n/2,n/2)-spajajua mrea konstruisana primjenom istog pravila rekurzivno, korienjem dvije (n/4,n/4)-spajajue mree praene sa (n/2)-1 komparatorima. Spajajua mrea na slici 3.4 je bazirana na metodi poznatoj kao par-nepar spajanje. Kako ova metoda uopteno radi je prikazano u nastavku. Primijetimo prvo da je d1=min(a1,b1) i en=max(an,bn) to znai da su c1 i c2n izraunati pravilno. Sada posmatrajmo sekvencu (d1, d2, ..., dn), i elementi su manji ili jednaki sa di+1. Svaki od ovih neparno obiljeenih elemenata je ili iz A ili iz B. Prema tome, 2i elementi iz A i B su manji ili jednaki sa di+1. Drugim rijeima,

13

Slika 3.4 Spajanje dvije sekvence sa po dva elementa

Slika 3.3. Spajanje dva niza od po etri elementa di+,>= c2i . Slino tome, ei >= c2i. Sa druge strane, u nizu {c1,c2, c2n}, 2i elementi iz A i B su manji od ili jednaki c2i+1. Ovo znai da c2i+1 je vei od ili jedank (i+1) neparni elementi pripadaju jednom ili A ili B. Drugim rijeima, c2i+, >= di+1. Slino, c2i+1 >= ei . Od c2i 1 (Pogledaj Sliku 3.1), (Pogledaj Sliku 3.4),

ije rijeenje se lako moe vidjeti da je t(2n) = 1 + log n . Ovo je znatno bre od najboljeg, naime, O(n),vrijeme izvravanja postie na sekvencijalnom raunaru.(ii) Broj procesora. Ovdje smo zainteresovani za brojanje broja komparatora

potrebnih za neparno spajanje. Neka se sa p(2n) oznaava broj komparatora u (n,n) mrenom spajanju. Opet imamo ponavljanje : p(2) = 1 za n = 1 (Pogledaj Sliku 3.1),

p(2n) = 2p(n) + (n - 1) za n > 1 (Pogledaj Sliku 3.4), ije rjeenje p(2n) = 1 + n log n je takoe jednostavan.(iii)

Cost. Budui da t(2n) = 1 + log n i p(2n) = 1 + n log n , ukupan broj poreenja obavljenih od strane (n,n)spajanja mree, tj mrene cijene, je c(2n) = p(2n) x t(2n) = O(n log2 n) Naa mrea dakle ne kota optimalno jer obavlja vie operacija nego O(n) dovoljnih za spajanje redom.

Diskusija. U ovom odeljku predstavljen je primjer posebne namjene arhitekture za spajanje. Ovo spajanje mrea , kako smo ih nazvali, imaju sledee interesantne mogunosti : redoslijed poreenja koji obavljaju je fiksiran unaprijed. Bez obzira na ulaz mrea e uvijek obavljati isti broj poreenja u unaprijed odreenom redoslijedu. To je razlog zato se kae da su takve mree nesvjesne svojih ulaza. Naa analiza je pokazala da je (n,n)-spajanje mrea je izuzetno brzo, pogotovo kada se uporedi sa najboljim moguim sekvencijalnim algoritmima za spajanje. Na primje, moe spojiti dvije sekvence duine 220 elemenata svako u dvadesetjedan korak: isti rezultat zahtjeva vie od dva miliona koraka na sekvencionalni raunar. Naalost takva brzina se postie korienjem nerazumnog broja procesora. Opet, za n=220, nae (n,n)-spajanje mree se sastoji od preko dvadeset miliona komparatora! Pored toga, arhitektura mree je veoma neredovna, i ice koje povezuju komparatore su duine razliite od n.

15

Ovo sugerie da, iako teoretski privlaan, spajanje mrea ne bi bila praksa za velike vrijednosti n.

MERGING na CREW modeluNase proucavanje odd-even merging-a je identifikovalo problem povezan sa mrezama za merging generalno, naime sa njihovom nefleksibilnoscu. Fiksan broj komparatora je sastavljen u fiksnu konfirugaciju da stapa sekvence fiksne velicine. Mada se ovo moze pokazati adekvatno za neke aplikacije, pozeljno je generalno da imamo pri ruci paralelni algoritam koji se prilagodjava broju raspolozivih procesora na paralelnom racunaru. Ova sekcija opisuje takav algoritam. Pored toga sto je adaptivan, algoritam je takodje I optimalan: potrebno vrijeme pomnozeno sa brojem koriscenih procesora je jednak, u okviru konstantnog faktora mnozenja, donjoj granici broja operacija potrebnih za merge. Algoritam radi na CREW SM SIMD modelu. To podrazumijeva postojanje I koriscenje sekvencijalne procedure za merging dvije sortirane sekvence. Sekvencijalni merging Date su dvije sekvence brojeva A={a1,a2,,ar} i B={b1,b2,...,bs} sortirane u neopadajucem poretku. Potrebno je spojiti A I B da formiramo trecu sekvencu C, takodje sortiranu u neopadajucem poretku. Proces spajanja obavlja jedan procesor. Ovo moze da uradi sledeci algoritam. Dva pokazivaca se koriste, jedan za svaku sekvencu. Inicijalno , pokazivaci su pozocionirani na elemente a1 i b1, respektivno. Manji od a1 i b1 se prodruzuje c1, i pokazivac na sekvencu iz koje je c1 se pomijera jedno mjesto naprijed. Ponovo, dva elementa pod pokazivacima se porede, manji postaje c2 i pokazivac ide naprijed. Ovo se nastavlja dok se jedna od dvije ulazne sekvence ne isprazni; elementi iz preostale sekvence se kopiraju u C. Algoritam je dat u sledecoj SEQUENTIAL MERGE proceduri. Opis je pojednostavljen podrazumijevajuci postojanje dva fikciona elementa ar+, i bs+, oba jednaka beskonacnosti.

16

Procedura uzima kao ulaz sekvence A i B i vraca na izlazu sekvencu C. Buducu da svako poredjenje vodi do kreiranja jednog elemenra u C, postoji tacno r+s takvih poredjenja, a u najgorem slucaju kad je r=s=n, recimo,algoritam radi za O(n) vremena. U pogledu na (n) donju granicu na spajanju izvedenom u prethodnoj sekciji, procedura SEQUENTIAL MERGE je optimalna. Paralelni merging CREW SM SIMD kompjuter se sastoji od N procesora P1, P2,...,PN. Potrebno je dizajnirati algoritam za ovaj kompjuter koji uzima dvije sekvence A i B kao ulaz i daje C kao izlaz, kao sto je definisano ranije. Ne umanjujuci opstost podrazumijevamo da je rs. Pozeljno je da paralelni algoritam zadovoljava osobine postavljene u sekciji 2.4, naime da: (i) broj procesora koji koristi algoritam bude sublinearan i prilagodljiv (ii) da vrijeme rada algoritma bude prilagodljivo i znacajno manje nego kod sekvencijalnog algoritma, i (iii) da cijena bude optimalna. Sada cemo opisati algoritam koji zadovoljava ove osobine. On koristi N procesora gdje je Nr i u najgorem slucaju kada je r=s=n radi za O((n/N)+log n) vremena. Algoritam je dakle optimalan za Nn/log n. Pored osnovnih aritmetickih i logickih funkcija obicno dostupnih, svaki od N procesora se pretpostavlja sposobnim da izvede sledece dvije procedure: 1. Proceduru SEQUENTIAL MERGE 2. Proceduru BINARY SEARCH opisanu naprijed. Procedura uzima kao ulaz sekvencu S={s1,s2,...,sn} brojeva sortiranih u neopadajucem poretku i broj x. Ako broj x pripada S procedura vraca index k elemenra ss u S koji je jednak x. U suprotnom, procedura vraca 0. Binarno pretrazivanje je bazirano na principu podijeli pa osvoji. U svakom koraku se poredi x sa elementom iz S. Ili su dva elementa jednaka i procedura zavrsava, ili se polovina elemenata sekvence pod pretpostavkom, odbacuju. Proces se nastavlja dok je broj preostalih elemenata 0 ili 1, i nakon najvise jos jednog poredjenja procedura se zavrsava.

Buduci da je broj elemenata pod pretpostavkom reduciran za pola u svakom koraku, procedura treba O(log n) vremena u najgorem slucaju. Sada smo spremni da opisemo prvi paralelni algortiam za spajanje za racunar sa dijeljenom memorijom. Algoritam je prezentovan kao procedura CREW MERGE.

17

Korak 1: {Selektuj N-1 element od A koji dijeli sekvencu na N podsekvenci aproksimativno iste velicine. Nazovimo ovu podsekvencu A', B' je podsekvenca od B dobijena na isti nacin. Ovaj korak se radi kao: }

Korak 2: {Merge A'i B'u sekvencu trojki V={v1,v2,...,v2N-2}, gdje se svaka trojka sastoji od elemenata A' ili B' koji slijede po poziciji u A' ili B' koji slijede po imenu originalne sekvence koja je A ili B. Ovo se radi kao: } (i) procesor Pi koristi BINARY SEARCH na B' da nadje najmanje j takvo da je ai'ak'

18

Procesor Pi koristi SEQUENTIAL MERGE i Q(i)=(x,y) da spoji dvije podsekvence jednu koja pocinje od ax i drugu koja pocinje od by i postavlja rezultat spajanja u niz C pocevsi od pozicije x+y-1. Spajanje se nastavlja dok (i) ne naidje element veci ili jednak prvoj komponenti od v2i ,u svakom od A i B (kada je i N-1) (ii) nijedan element ne ostane ni u A ni u B (kada je i=N) end for. Prije analize vremena rada algoritma, napravicemo sledeca dva napomene (i) U generalnim slicajevima, element ai iz A se poredi sa bi iz B da se odredi koji je manji; ako se ispostavi da su jednaki, algoritam odlucuje da vrati ai. (ii) Operacije konkurentnog citanja se vrse kad god se pozove procedura BINARY SEARCH, naime,u koracima 2.1, 2.2, i 3.2. Zaista, u svakom od ovih primjera vise procesora radi BINARY SEARCH nad istom sekvencom. Analiza.Korak po korak analiza CREW MERGE: Korak 1: Svi procesi rade paralelno, i svaki racina dva indeksa. Stog aje potrebno konstantno vrijeme. Korak 2: Ovaj korak se sastoji od dvija poziva BINARY SEARCH procedure za sekvencu duzine N-1, svaki pracen naredbom dodjele. Ovo uzima O(log s) vremena. Korak 3: Korak 3.1 se sastoji od dodjela konstantnog vremena, a korak 3.2 zahtijeva najvise O(log s) vremena. Da analiziramo korak 3.3 prvo vidimo da V sadrzi 2N-2 elementa koji dijele C u 2N-1 podsekvence sa maksimalnom velicinom jednakom ([r/N]+ [s/N]). Ova m aksimalna velicina se pojavljuje ako,npr. jedan element ai' iz A' je jednak elementu b' iz B'; tada je [r/N] elemenata manjih ili jednakih od ai' (i vecih ili jednakih od ai1' ) takodje manje ili jednako od bj', i slicno, [s/N] elemenata manjih ili jednakih od bj'(i vecih ili jednakih od bi-1') su takodje manji ili jednaki od ai'. U koraku 3 svaki procesoe pravi dvije takve podsekvence od C cija totalna velicina stoga nije veca od 2([r/N]+[s/N]), osim P, koji pravi samo jednu podsekvencu od C. Slijedi da procedura SEQUENTIAL MERGE uzima najvise O((r+s)/N) vremena. U najgorem slucaju, r=s=n, i buduci da je nN, vremenom izvrsavanja algoritma dominira vrijeme potrebno u koraku 3. Tako t(2n)=O((n/N)+ log n) Kako je p(2n)=N, c(2n)=p(2n) x t(2n)=O(n+N log n), i cijena algoritma je optimalna za Nn/log n. Primjer Pretpostavimo da je dostupan CREW SM SIMD racunar sa 4 prosesora, i potrebno je spojiti A={2,3,4,6,11,12,13,15,16,20,22,24} i B={1,5,7,8,9,10,14,17,18,19,21,23}, i r=s=12. Dvije podsekvence A'={4,12,16} i B'={7,10,18} su nadjene u koraku 1 i zatim spojene u koraku 2 da se dobije V={(4,1,A),(7,1,B),(10,2,B),(12,2,A),(16,3,A),(18,3,B)}. U koracima 3.1 i 3.2 suodredjeni: Q(1)=(1,1), Q(2)=(5,3),Q(3)=(6,7) i Q(4)=(10,9). U koraku 3.3 procesor P1 pocinje od elementa a,=2 i b1=2 i spaja sve elemente A i B manje od 7, tako praveci podsekvencu {1,2,3,4,5,6} od C. Slicno procesor P2 opcinje od a,=11 i b3=7 i spaja sve elemente manje od 12, praveci {7,8,9,10,11}. Procesor P3 pocinje od

19

a,=12 i b,=14 i pravi {12,13,14,15,16,17}. Konacno P4pocinje od a,,=20 i b9=18 i pravi {18,12,20,21,22,23,24}. Rezultujuca sekvenca C je tada {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24}. Elementi od A' i B' su podvuceni u C.

Spajanje na EREW modeluKao sto smo vidjeli u prethodnom poglavlju konkurentne operacije za itanje se izvode na nekoliko mjesta procedure CREW MERGE. Sada pokazujemo kako ova procedura moe biti prilagoena da radi na N-procesora EREW SM SIMD kompjuteru, koji po definiciji, ne doputa bilo koji pokuaj da vie od jednog procesora pristupa memorijskoj lokaciji. Ideja prilagoavanja je prilino jednostavna: sve to treba da uradimo jeste da simuliramo operacije viestrukog itanja. Jednom kada se takva simulacija pronae, moe se koristiti od strane algoritma paralelnog spajanja(i u sutini od strane bilo kojeg algoritma sa operacijama viestrukog itanja) za izvoenje bilo svake read operacije iz EREW memorije. Naravno zahtijeva se da ova simulacija bude efikasna. Jednostavno ekanje svih zahtjeva da se itaju sa date memorijske lokacije i njihovo opsluivanje jednog za drugim je neadekvatno: to moe poveati vrijeme izvravanja za factor N u najgorem sluaju. Sa druge strane, korienje procedure BROADCAST iz poglavlja 2 je neprikladno: operacija viestrukog itanja iz memorijske lokacije ne mora obavezno ukljuiti sve procesore. Tipino, nekoliko proizvoljnih podskupova skupa procesora pokuava da dobije pristup razliitim lokacijama, jednu lokaciju po podskupu. Sada emo predstaviti formalniju proceduru MULTIPLE BROADCOST. Pretpostavimo da algoritam napravljen da radi na CREW SM SIMD kompjuteru zahtijeva ukupno M lokacija dijeljene memorije. U elji da simuliramo ovaj algoritam na EREW modelu sa N procesora gdje je N= 2q za q 1 poveavamo veliinu memorije od M do M(2N-1). Dakle svaku od M lokacija zamiljamo kao korijen binarnog drveta sa N listova. Svako drvo ima q+1 nivoa i ukupno 2N-1 vorova kako to je prikazano na slici 3.5 za N=16. vorovi drveta predstavljaju uzastopne lokacije u memoriji. Dakle ako je lokacija D korijen, onda su njegov lijevi i desni potomak D+1 i D+2 respektivno. U sutini, lijevi i desni potomak od D+x su D+x+1 i D+x+2 respektivno. Pretpostavimo da procesor Pi eli da u nekom trenutku ita iz neke lokacije d(i) u memoriji. On stavlja svoj zahtjev na lokaciju d(i)+(N-1)+(i-1), list stabla ukorijenjenog u d(i). Ovo se radi inicijalizacijom 2 lokalne promjenljive u Pi : 1. level(i) , koja uva trenutni nivo do kojeg je Pi zahtjev stigao, je inicijalizovana na 0 i 2. loc(i) , koja uva trenutni vor drveta do kojeg je doao Pi zahtjev je inicijalizovan na (N-1)+(i-1). Primijetimo da Pi samo treba da uva poziciju u drvetu povezanom sa d(i) i da je njegov zahtjev dostignut i nije stvarna memorijska lokacija d(i) + (N - 1) + (i - 1).

20

Simulacija se sastoji od 2 faze: faze ascent i descent . U toku faze ascent procesori se ponaaju na sledei nain: Na svakom nivou procesoru Pi koji zauzima lijevog potomka se daje prvo prioritet da nastavi sa svojim zahtjevom nivo iznad u drvetu.

To se izvodi markiranjem lokacije roditelja posebnim markerom , recimo [i]. On tada update-uje svoju lokaciju i nivo. U tom sluaju zahtjev kod desnog potomka je imobilizovan za ostatak postupka. U suprotnom(tj. Ako nema procesora da zauzima lijevog potomka) procesor koji zauzima desnog potomka moe dobiti lokaciju roditelja. Ovo se nastavlja sve dok najvie 2 procesora dostignu nivo (logN)-1. Svaki od njih redom ita vrijednosti smjetene u korijenu i faza descent poinje. Upravo proitana vrijednost ide niz drvo memorijskih lokacija sve dok svaki zahtjev za itanjem od strane procesora nije ispunjen.

21

22

Korak 1 procedure se sastoji od 3 vremenski konstantne operacije. Svaka od faza ascent,descent u koracima 2 i 3 respektivno zahtijeva O(logN) vremena. Ukupno vrijeme izvravanja procedure je O(logN).

Primjer 3.2 Neka je N=16 i pretpostavimo da u datom trenutku u toku izvravanja CREW paralelnog algoritma procesori P , P2 , P3 , P4 , P8 , P , P i P treba da proitaju koliinu Q sa lokacije 1 11 14 16 D u memoriji. Kada simuliramo operaciju viestrukog itanja na EREW kompjuteru koristei MULTIPLE BROADCAST, procesori stavljaju svoje zahtjeve na odgovarajue 23

listove drveta lokacija ukorijenjenog u D u toku koraka 1 kao to je prikazano na slici 3.5. Slika 3.6 prikazuje pozicije razliitih procesora i sadraja memorijskih lokacija na kraju koraka 2. Sadraji memorijskih lokacija na kraju koraka 3 su prikazani na slici 3.7. Primijetimo da: 1. Markeri [i] su izabrani tako da se mogu jednostavno odvojiti od vrijednosti podataka kao to je Q. 2. Ako u toku koraka viestrukog itanja CREW algoritma koji se simulira, procesor Pi ne eli da ita iz memorije, tada d(i) moe biti izabrano proizvoljno izmeu M memorijskih lokacija koje algoritam koristi. 3. Kada je procedura zavrena, vrijednost od level(i) je negativna, a vrijednost od loc(i) je van granica. Ove vrijednosti su beznaajne. Ovo je bez posledica, meutim, level(i) i loc(i) su uvijek inicijalizovani u koraku 1. Sada smo spremni da analiziramo vrijeme izvravanja t(2n) prilagoavanja procedure CREW MERGE za EREW model. Poto je svaka operacija itanja(jednostruka ili viestruka) simulirana koristei proceduru MULTIPLE BROADCAST za O(logN) vremena prilagoena procedura je najvie O(logN) puta sporija od procedure CREW koja nije optimalna.

tavie, poto procedura CREW MERGE koristi O(n) lokacija dijeljene memorije, zahtjevi za smjetajem njihovih prilagoavanja za EREW model su O(Nn). U sledeoj sekciji algoritam za spajanje na EREW modelu je opisan da kota optimalno i koristi samo O(n) lokacija dijeljene memorije.

24

BOLJI ALGORITAM ZA EREW MODELVidjeli smo u prethodnom odeljku kako direktna simulacija CREW algoritam spajanja EREW model nije nije optimalne cijene. To je zbog logaritamskog faktora uvjek uveden sa procedurom sa vise emitovanja. Jasno je da, u cilju da odgovara performansama postupka CREW MERGE, drugi postupak je potreban. U ovom odeljku emo opisati adaptivnog i optimalne cijene paralelnog algoritam za spajanje na EREW SM SIMD model izraunavanja. Algoritam spaja dvije Sortirane sekvence i u jednu sekvencu . Ona koristi N procesora gdje I u najgorem slucaju kada r = s = n radi u O((n/N)+logN logn) vremena. Izgradnja blok algoritma je sekvencijalni postupak za pronalaenje medijana dva sortirana niza. Ova procedura je predstavljena u odeljku 3.5.1. Algoritam spajanja je predmet odeljka 3.5.2.

Pronalaenje Medijane Dvije Sortiranih sekvenciU ovom odeljku emo prouciti varijante selekcije problema u poglavlju 2. Imajui u vidu dvije sortirane sekvence i gdje , neka A.B oznaavaju duine sekvence m = r + s rezultat spajanja A i B. Potrebno je da se pronae medijana, odnosno [m/2]-i element A.B. Bez zapravo formiranje AB, algoritam koji mi treba da opiemo vraa par (a,, ) koji zadovoljava sledee osobine: 1. Ili je a ili je medijana A.B koji je ili a ili je veci ili jednako elemenata i manji ili jednako elemenata. je

2. Ako je a medijana, onda i. ii.

najvei element u B i manji od ili jednak a, ili najmanji element u B i vee od ili jednako a.

Alternativno, ako je medijana, onda je a i. najveci element u A manje ili jednakoii.

, ili .

najmanji element u A veci ili jednako

3. Ako vie od jednog para zadovoljava 1 i 2, zatim algoritam daje par za koji je x + y najmanji. Mi cemo se odnositi na (a,, ) kao par medijane A.B. Tako x i y su indeksi medijan para. Imajte na umu da a je medijana AB ako je i. a, > i x+y-1 = iliii.

a, >

i m-(x+y-1)=

Inace

je medijana A.B.

Primjer 3.3 25

Neka je A = {2, 5, 7, 10} i B = {1, 4, 8, 9} i posmatrajmo da je median AB broj 5 i pripada A. Postoje dva para mediana koji zadovoljavaju svojstva 1 i 2. i. (a, ) = (5, 4) gdje 4 je najveci element u B najmanji ili jednak sa 5;ii.

(a,

) = (5, 8) gdje 8 je najmanji element u B najveci ili jednak sa 5;

Median par ovdje je (5, 4). Algoritam, opisan u ono sto slijedi postupa kao Medijan dvije sekvenci, odvijen u fazama. Na kraju svake faze neki elementi su uklonjeni iz razmatranja iz oba A i B. Oznacili smo sa i broj elemenata u A i B, odnosno, jos uvjek se razmatra na pocetku jedne faze i za w manje od i . Svaka faza je kako slijedi: Medijane a i b elemenata jos uvijek se razmatraju u A i u B, odnosno su uporedjeni. Ako je onda najveci (najmanji) w elementi od A(B), uklonjeni su iz razmatranja. U suprotnom, ako , onda najmanji (najveci) w elementi od A(B), uklonjeni su iz razmatranja. Ovaj proces se ponavlja sve dok postoji samo jedan element ostavljen jos uvijek pod razmatranjem u jednu ili u obje od dvije sekvence. Medijan par onda se odredjuje iz malog skupa kandidata parova. Postupak prati elemente koji se jos uvijek razmatraju pomocu dva pokazivaca na svaku sekvencu: najmanji i najveci u A, i najmanji i najveci u B.

Imajte na umu da postupak TWO-SEQUENCE MEDIAN vraca indekse medijan para (a,, ) vise nego sam par. Primjer 3.4 Neka je A = {10, 11, 12, 13, 14, 15, 16, 17, 18) i B = {3, 4, 5, 6, 7, 8, 19, 20, 21, 22}. Sljedece varijable se inicijaliziraju tijekom koraku 1 od postupka TWO-SEQUENCE MEDIAN: najmanji, =najmanji, =1, najveci, = =9, i najveci, = n = 10. 26

U prvoj iteraciji koraka 2, u = v = 5, w = min(4, 5) = 4, , n = 6. Od a > b, najveci = najmanji = 5. U Drugoj iteraciji u = 3, v = 7, w = min(2, 3) = 2, n = 3 i n = 4. Od a < , najmanji = 3, najveci = 8. U trecoj iteraciji u = 4, v = 6, w = min(1, 2) = 1, in = 3. Od a < , najveci = 4, najmanji = 6. U cetvrtoj i posljednjoj iteraciji u koraku 2, u = 3, v = 7, w = min(1, 1) = 1, i n = 2. Od a < , i najveci = 7. U koraku 3, dva od devet para u {11, 12, 13} x {8, 19, 20} zadovoljavaju prva dva svojstva medijan para. Ovi parovi su (a,, ) = (13, 8) i (a,, ) = (13, 19). Postupak vraca (4, 6) kao indekse medijan para. Analiza. Koraci 1 i 2 zahtijevaju konstantno vrijeme. Svaka iteracija u koraku 2 smanjuje najmanji od dvije sekvence na pola. Za konstante i postupak TWOSEQUENCE MEDIAN zahtijeva vremena, koja je O(logn) u najgorem slucaju.

Brzo spajanje na EREW modeluMi sada cemo koristiti postupke TWO-SEQUENCE MEDIAN da izgradimo algoritam za paralelno spajanje za EREW model. Algoritam predstavljen u ono sto slijedi kao postupak EREW spajanja, ima sljedeca svojstva: 1. Zahtijeva veci broj procesora koji je podlinearan u velicini ulaznih i prilagodjava stvarni broj procesora dostupni na EREW racunaru. 2. Njegovo radno vrijeme je malo i varira obrnuto uz broj procesora. 3. Njegova cijena je optimalna. Date dvije sortirane sekvence i , algoritam predpostavlja postojanje N procesora , ..., gdje je N snagom od 2 i . On spaja A i B u sortirani niz u dvije faze kako slijedi: Faza 1: Svaka od dvije sekvence je podijeljena u N (mozda prazan) podsekvence tako da i. | |+| | = (r + s)/N za iii.

svi elementi u .

.

su manji od ili jednaki na sve elemente u

.

za

Faza 2: Svi parovi i , spoje se istovremeno i postave se u C. Prva faza se moze implementirati efikasno pomocu postupka TWO-SEQUENCE MEDIAN. Faza 2 je obavljena pomocu postupka SEQUENCIAL MERGE. Sljedeci postupak se koristi za oznacavanje podsekvence u A ako ; drugacije je prazno. Slicno smo definisali i

27

Treba biti jasno da u bilo koje vrijeme tijekom izvodjenja postupka podsekvence na koje procesori rade svi su razdvojeni. Dakle, nije potrebna operacija konkurentnog citanja. Primjer 3.5 Neka su A = {10, 11, 13, 14, 15, 16, 17, 18}, B = {3, 4, 5, 6, 7, 8, 19, 20, 21, 22} i N = 3.

28

U koraku 1.1 procesor prima (1, 9, 1, 10). Tijekom prve iteracije u koraku 1.2 procesor odredjuje indekse medijan para A i B, naime (4, 6). U njoj se cuva (1, 4, 1, 6) i komunikacije (5, 9, 7, 10) u P. Tijekom druge iteracije racuna indekse u medijan paru A[1,4] = {10, 11, 12, 13} i B[1,6] = {3, 4, 5, 6, 7, 8}, naime 1 i 5. Istovremeno P radi isto i sa A[5,9] = {14, 15, 16, 17, 18} i B[7,10] = {19, 20, 21, 22} i dobija se 9 i 7. Procesor cuva (1, 0, 1, 5) i komunikacije (1, 4, 6, 6) u P. Slicno, P, komunikacije (5, 9, 7, 6) u i (10, 9, 7, 10) u P. U koraku 2, procesori P do istovremeno stvara C[1,19] kako slijedi. Imajuci zadnje primljenje (1, 0, 1, 5), kompjuteri w = 1 i z = 5 kopira B[1,5] = {3, 4, 5, 6, 7} u C[1,5]. Slicno, P imajuci zadnje primljenje (1, 4, 6, 6), kompjuteri w = 6 i z = 10 i spajanje A[1,4] i B[6,6] dobija se C[6,10] = {8, 10, 11, 12, 13}. Procesor , imajuci zadnje primljenje (5, 9, 7, 6), kompjuteri w = 11 i z = 15 kopira A[5,9] = {14, 15, 16, 17, 18} u C[11,15]. Konacno , imajuci zadnje primljenje (10, 9, 7, 10), kompjuteri w = 16 i z = 19 kopiraju B[7,10] = {19, 20, 21, 22} u C[16,19]. Analiza. Da bi se analiziralo zahtjevno vrijeme postupka EREW MERGE, primjetite da u koraku 1.1 procesor cita iz memorije u konstantno vrijeme. Tijekom j-te iteracije u koraku 1.2 svaki procesor ukljucen mora pronaci indekse medijan para od elemenata. To se radi pomocu postupka TWO-SEQUENCE MEDIAN od vremena, koje je . Druge dvije operacije u koraku 1.2 uzima konstantno vrijeme ukljucujuci komunikaciju izmedju procesora kroz zajednicku memoriju. Posto postoje logN iteracija u koraku 1.2, korak 1 zavrsava se za vremena. U koraku 2 svaki procesor spaja najvise elemenata. To se radi pomocu postupku SEQUENTIAL MERGE od vremena. Zajedno korakaci 1 i 2 uzimaju vremena. U najgorem slucaju kada r = s = n vrijeme potrebno za postupak EREW MERGE moze se izraziti kao Doprinjeti cijenu od . S obzirom na (n) donju granicu na broj operacija potregan za spajanje, ova cijena je optimalna kada .

29

30

Generisanje permutacija

UvodNabrajanje kombinatornih objekata zauzima vano mjesto u kompjuterskim naukama zbog velike primjene u nauci i inenjeringu. U ovom poglavlju emo opisati nekoliko paralelnih algoritama namijenjenih za dva fundamentalna problema : generisanju permutacija i generisanju kombinacija. Poinjemo sa nekoliko definicija. Neka je S skup koji se sastoji od n razliitih elemenata, recimo prvih n pozitivnih intedera. Dakle S = {1,2,...,n}. M permutacija skupa S se postie odabirom m razliitih intedera od n moguih i njihovim ureivanjem u odreeni redosled. Recimo da je n=10 i m= 4. M permutacija skupa S bi mogla da bude (5 7 9 2). Dvije m permutacije se razlikuju ako je neki od elemenata koji one sadre razliit ili ako su svi elementi u te dvije permutacije isti, ali se redosled njihovog pojavljivanja razlikuje. Broj razliitih m permutacija skupa on n n elemenata je oznaen sa Pm i rauna se :n Pm = n!(n-m)!

Dakle ako je n=4 postoje 24 razliite 3-permutacije. Uoimo da ako je n=m Pm =n! Sada neka x= ( x1, x 2 ,..., x n ) i y=( y1, y 2 ,..., y n ) predstavljaju dvije permutacije skupa S. Kaemo da x predhodi y u leksikografskom poretku ako postoji i, 1 i fin , takvo da x j = y j za svako j < i, i xi = y i .3-permutacija skupa {1,2,3,4} u leksikografskom poretku je:(1 2 3), (1 2 4), (1 3 2), (1 3 4), (1 4 2), (1 4 3), (2 1 3), (2 1 4), (2 3 1), (2 3 4), (2 4 1), (2 4 3), (3 1 2), (3 1 4), (3 2 1), (3 2 4), (3 4 1), (3 4 2), (4 1 2), (4 1 3), (4 2 1), (4 2 3), (4 3 1), (4 3 2).

n

Primijetimo da kako je S={1,2,3,4}, leksikografski poredak se poklapa sa rastuim numerikim poretkom. Da su elementi skupa S bila kojim sluajem slova alfabeta, leksikografski poredak bi se poklapao sa redosledom rijei u nekom reniku. M-kombinacija skupa S se postie odabiranjem m razliitih intedera od n elemenata i njihovim reanjem u rastuiu poredak. Ako je n=6 a m=3, jedna m-kombinacija je (2 4 5). Dvije m-kombinacije se razlikuju postoji jedan ili vie elemenata koji se pojavljuju u jednoj kombinaciji, a u drugoj ne. Broj razliitih m-kombinacija od n elemenata se oznaava sa n C m [ponekad i sa ( n ) ] , gdje je : mn Cm =

n! (n m)! m!

Ako je n=4 postoje 4 razliite 3-kombinacije. Poto jasno uoavamo da su kombinacije podskup permutacija(to su permutacije bez ponavljanja) leksikografski poredak se

31

primjenjuje i na njima. 3-kombinacije skupa {1,2,3,4} u leksikografskom poretku su predstavljene na sledei nain:

Trebalo bi da bude jasno da se ovo obavlja sekvencijalno za O(m) vremena. Ovo poglavlje se bavi problemom generisanja svih m-permutacija i m-kombinacija n elemenata u leksikografskom redosledu. Poeemo opisivanjem nekoliko sekvencijalnih algoritama u dijelu 6.2. Dva od ovih algoritama se bave generisanjem m-permutacija i mkombinacija u leksikografskom poretku, respektivno. Drugi algoritmi u sekciji 6.2 implementiraju dva sistema numerisanja koji povezuju jedan jedinstveni inteder sa svakom od m-permutacija i m-kombinacija respektivno. Tri paralelna algoritma za generisanje m-permutacija za EREW SM SIMD model su opisana u sekciji 6.3. Prvi od ovih algoritama je direktna paralalizacija sekvencijalnog algoritma iz sekcije 6.2. On koristi n m procesora i obavlja se za O( Pm logm) vremena. Drugi algoritam se baziran na sistemu za m-permutacija koji je opisan u sekciji 6.2 i on je i adaptivan i optimalne cijene. Koristi N n n procesora, gdje je 1 < N Pm /n i obavlja se za O([ Pm /N]m) vremena. Trei algoritam se odnosi na sluajeve kada je m=n i koristi N procesora, gdje je 1 < N n i obavlja se za O([n!/N]n) vremena za optimalnu cijenu O(n!n). Sekcija 6.4 je posveena za dva paralelna algoritma za raunanje m-kombinacija za EREW SM SIMD kompjutere. Prvi koristi m n procesora i izvrava se za O( C m log m) vremena. Ovaj algoritam nije niti adaptivan niti optimalne cijene. Drugi algoritam ima oba ova svojstva i baziran je na sistemu za m n kombinacija opisanom u 6.2. Koristi N procesora, gdje 1 < N C m /n i izvrava se za O([ n C m /N]m) vremena.

Sekvencijalni algoritmiU ovoj sekciji opisacemo nekoliko sekvencijalnih algoritama. Prvi algoritam generie sve m-permutacije od n elemenata u leksikografskom poretku. Takoe emo pokazati kako sve m-permutacije od n elemenata mogu biti stavljene u vezu 1 na 1 sa intederima 1,. . . , "P,. Opisana su dva algoritma, jedan za mapiranje date permutacije u inteder i drugi koji izvodi inverzno mapiranje. Dalje nastavljamo sa algoritmima koji se tiu kombinacija. Tu opisujemo 3 algoritma. Prvi generie sve m-kombinacije od n elemenata u leksikografskom poretku. Drugi mapira datu kombinaciju u jedan jedinstveni inteder 1,..., n C m . Trei generie jedinstvenu kombinaciju koja odgovara datom intederu 1,..., C,. Svi ovi algoritmi koji su predstavljeni u ovoj sekciji e biti korieni u naem razvoju algoritama paralelnog generisanja permutacija i kombinacija. Mi i dalje pretpostavljamo da je S={1,2,...,n}. Generisanje permutacija leksikografski Na algoritam za generisanje svih m-permutacija skupa S tee na sledei nain. Poevi sa permutacijom (1,2,....,m) sve m-permutacije su generisane u leksikografskom poretku, sve dok se poslednja permutacija (n,n-1,....,n-m+1) ne generie. Uz dato ( p1 , p 2, ..., p ) sledea permutacija se dobija pozivanjem procedure NEXT PERMUTATION. Ova procedura koristi niz bita u= u1 , u 2 ,..., u n na sledei nain: i. Kada procedura pone sa izvravanjem sve vrijednosti u su 1.

32

ii. iii.

Za svaki element p i u datoj permutaciji ( p1 , p 2, ..., p ), ako je p i =j, onda se u j podesi na 0. Kada se procedura zavri, sve vrijednosti u su 1.

Kako bi generisali sledeu permutaciju, procedura poinje tako to odredi da li je trenutnu permutaciju mogue aurirati. Permutaciju ( p1 , p 2, ..., p ) je mogue aurirati ako bar za jedan od elementa p i postoji j takvo da p i < j< n i u j =1. Dakle jedina permutacije koju nije mogue aurirati je (n n-1 ... n-m+1). Zakljuujui da je permutaciju ( p1 , p 2, ..., p ) mogue aurirati traimo najdesniji element p i i najmanji indeks j za koje vee sledei uslovi: p i =0,a u j =0. Svi elementi p i + , p i +2, ..., p m koji su desno od p i se auriraju. 1 p i +k , gdje vai 1 k m i , se izjednai sa s ako je u s na Ovo se radi na sledei nain: k-toj poziciji u u koja je jednaka 1. Algoritam je dat kao procedura SEQUENTIAL PERMUTATIONS koju prati funkcija NEXT PERMUTATION: procedure SEQUENTIAL PERMUTATIONS (n, m) Step 1: (1.1) (p,p, . . . p,) 6 (1 2.. . m) (1.2) produce (p, p, . . . p,) as output (1.3) u,, u2,. . . , u,, t (1, 1,. . . , 1). Step 2: for i = 1 to ("P, - 1) do NEXT PERMUTATION (n, m, p,, p,, . . . , p,) end for.

procedure NEXT PERMUTATION (n, m, p,, p,, . . . , p,) if(p,p z . . . p , ) Z ( n n - l . . . n - m + l ) then (1) for i = 1 to m do u t o p, end for (2) f + n (3) {Find the largest unused integer) while u, # 1 do f-f-1 end while (4) k t m + 1 (5) i e 0 (6) {Find rightmost updatable element) while i = 0 do (6.1) k t k - 1 (6.2) up*+ 1 (6.3) if p, < f then {update p,) (i) find smallest j such that p, < j < n and uj = 1 (ii) i t k (iii) pi t j (iv) up t O else {laigest unused integer is set equal to p,) f +Pk end if

33

end while (7) {Update elements to the right of pi) for k = 1 to m - i do if u, is kth position in u that is 1 then pi+, + s end if end for (8) {Reinitialize array u} for k = 1 to i do uel 'k end for (9) produce (p, p, . . . p,) as output end if.

Analiza:Procedura SEQUNTIAL PERMUTATIONS se sastoji od jednog izvravanja koraka 1 koji zahtijeva O(n) vremena. U koraku 2 svaki poziv procedure NEXT PERMUTATION izvodi O(m) koraka. Ovo moe biti sagledano na sledei nain. Koraci 1,3,8 i 9 uzimaju O(m) vremena, dok koraci 2,4 i 5 zahtijevaju konstantno vrijeme. Kako samo m pozicija niza su 0 posle koraka 1, i korak 6 i korak 7 uzimaju O(m) koraka. Ukupno vrijeme izvravanja n procedure SEQUENTIAL PERMUTATIONS je O( Pm m). Ovakvo ponaanje je optimalno ( n sagledavajui injenicu da je Pm m) vremena potrebno da se stvori P linija izlaza,gdje je svaka linija ima m elemenata.

Algoritam za paralelno generisanje permutacijaAlgoritam za paralelno generisanje permutacija je prilagodjena verzija sekvencionalnog algoritma koji je opisan gore. Ideje su dosta slicne, samo su prilagodjene za rad sa vise procesora. Najprije zapazimo nekoliko stavri u proceduri NEXT PERMUTATION: 1. Za datu m-permutaciju (p1,p2 , . . . ,pm) procedura prvo provjerava da li se ona moze updejtovati. 2. Ako se permutacija moze updejtovati, onda se za poslednji element (elelement koji se nalazi skroz desno) provjerava da li se moze inkremenirati, ako moze procedura ga inkrementira i zavrsava rad. 3. Provjeravanje da li p moze biti inkrementiran, zahtijeva pregledanje ne vise od m pozicija u nizu u, koji pokazuje koji od elemenata {1,2,. . .,n} su zastupljeni u trenutnoj permutaciji (p1,p2, . . . ,pm), a koji nisu zastupljeni u njoj. Ovo pretrazivanje takodje daje i novu vrijednost elementa p, u slucaju da se moze inkrementirati. 4. Ako poslednji element p ne moze biti inkrementiran, onda procedura nalazi prvi element lijevo od p, koji je manji od svog desnog susjeda i inkrementira ovaj element a sve elemente desno od njega updejtuje. Ovaj element oznacimo sa pk. 5. Odredjivanje nove vrijednosti za pk ne zahtijeva pretrazivanje vise od m pozicija u nisu u. 6. Updejtovanje pozicija desno od pk, zahtijeva pretrazivanje prvih m pozicija u nizu u. Ova zapaanja ukazuju na to da opisani sekvencioinalni algoritam sasvim prirodno moze prilagoditi radu na vise racunara. Pretpostavimo da imamo m procesora i EREW SIMD

34

racunar. Paralelnu proceduru smo nazvali PARALLEL PERMUTATION. Procedura uzima n i m kao ulaz i proizvodi svih nPm m-permutacija od elemenata {1, 2,..., n}. Pretpostavljamo da procesor Pi ima pristup i-toj poziciji izlaznog registra u kojem se generisu permutacije. Postoje tri niza koja se nalaze u zajednickoj memoriji: 1. p = (p1,p2, . . . ,pm) u njemu se smijesta trenutna permutacija 2. u = u1, u2, . . . , un. ui = 0 ako se i nalazi u trenutnoj permutaciji inace je 1 (ukazuje da je element slobodan za permutaciju). Inicijalno su svi elementi u ovim nizu podeseni na 1. 3. x = x1,x2, . . . , xm ovaj niz se koristi za smijestanje medjurezultata. U proceduri PARALLEL PERMUTATION koristicemo se sa par pomocnih procedura koje cemo opisati sada. 1. Procedura BROADCAST(a,m,x) iz prvog dijela kursa. Ova procedura koristi niz x da distribuira vrijednost a, kod svih m procesora. Za nju nam je potrebno O(logm) vremena. 2. Procedura ALLSUMS(x1, , xm) vrsi modifikovani PRAM algoritam (paralelno racunanje prefiksa) za operaciju +. Vrsi zamjenu vrijednosti xi = x1 + x2 + + xi za i izmedju 1 i n. Za njeno izvrsavanje potrebno je O(logm) vremena. 3. Procedura MINIMUM(x1,x2, ... ,xm) koristi m procesora da izracuna minimalnu vrijednost niza i tu vrijednost smijesta na prvoj poziciji (x1).

Ideja: prvo posmatramo i uporedjujemo parove x1 x2 , x3 x4, manji od njih se upisuje na manjoj poziciji, dakle nakon prvog koraka x1 = min (x1,x2) x3 = min(x3, x4) nakon toga posmatramo parove x1 x3, x5 x7, ... na kraju ce minimalna vrijednost biti zapisana u x1. Za izvrsavanje ovog algoritma potrebno je: za unutrasnju petlju O(1) vremena, za spoljasnju O(log m) vremena. Dakle potrebno je O(log m). 4. Procedura MAXIMUM(x1,x2, ... ,xm) koja radi potpuno analogno kao i minimum samo je u if uslovu zaminjen znak .

5. Potrebna nam je jos jedna pomocna procedura to je SCAN(ps,n) koja vrsi skeniranje niza u i nalazi prvu vecu vrijednost od vrijednosti ps. Ona utvrdjuje koji od m integera ps+1, ps+2,...., ps+m, zadovaljava sledeca dva uslova: Biti manji ili jednak n Nije prisutan u (p1, p2, .... , ps)

35

Ova procedura se izvrsava za O(1) vremena. Sada, kada imamo sve pomocne procedure opisane mozemo poceti sa paralelnim algoritmnom za generisanje permutacija.

Prvi korak se sastoji iz dva podkoraka. U 1.1 imamo output prve permutacije oblika (1, 2, ... , m); u koraku 1.2 imamo inicijalizaciju niza u koji je duzine n uz pomoc m procesora: u prvom koraku se inicijalizuje prvih m pozicija na 1 u drugom sledecih m pozicija pocev od m+1 do 2m itd. 1.1 zahtijeva O(1) vremena dok 1.2 zahtijeva O(n/m) dakle ukupna cijena prvog koraka je O(n/m).

36

37

2.1 korak zahtijeva O(1) vremena 2.2 korak zahtijeva O(log m) vremena 2.3 korak zahtijeva O(log m) vremena 2.4 korak zahtijeva O(1) vremena 2.5 korak zahtijeva O(1) vremena 2.6 korak zahtijeva O(log m) vremena 2.7 korak zahtijeva O(1) vremena Jos na kraju uocimo da korak dva pocinje sa for petljom koja se ponavlja nPm-1 puta te je njena slozenost O(nPm). Ukupna slozenost algoritma je O(log m) * O(nPm) = O(nPm log m). Cijena: O(m * nPm log m).

38

PARALELNO GENERISANJE KOMBINACIJARazmatramo problem generisanja nCm mkombinacija, S = {l, 2,..., n} u leksikografskom poretku. Povrno, to moe izgledati kao poseban sluaj problema u prethodnom poglavlju: zaista svaka m-kombinacija je m-permutacija. Meutim nije jasno, kako algoritam za generisanje m-permutacija, kao to je na primer postupak PARALLEL PERMUTATIONS, moe biti uraen za efikasno generisanje samo kombinacija. Stoga e za ovaj problem morati biti razvijen poseban pristup. U ovom odeljku emo opisati dva algoritma za generisanje m-kombinacija paralelno. Oba algoritma su dizajnirana da rade na EREW SM SIMD modelu izraunavanja.

Brzi generator kombinacijaPoinjemo izlaui sledea svojstva m-kombinacija od n elemenata, navedene u leksikografskom poretku. Osobina 1.Ako 1 m n, prva kombinacija u leksikografskom poretku je (1 2... m), a poslednja je ((n m + 1 ) , ( n - m + 2 ), . . . , n ). Osobina 2. Oznaimo poslednju kombinaciju (x, x2,... x). Ako je (y, y2,.. y.) jedna od nekoliko moguih kombinacija, zatim (i) y1 < y2 < . . . < ym i yi xi za 1 i m.(ii)

Ako postoji indeks i, 2 i m, tako da svako y od yi do y, jednaki xi do x, redom, i yi-1 < xi-1 , onda sledea uzastopna kombinacija daje ( y1 y2 . . . y j i - 2 , i yj =yi-1+ j - i +2 za i-1 j m . U m ) gdje je yj = y j za 1 suprotnom, sledea uzastopna kombinacija daje ( y1 , y2 . . . ym-1 , y m + 1 ).

Prethodne diskusije prirodno vode ka naoj prvoj kombinaciji, generisanoj paralelno. Prva generisana kombinacija je (1 2 ... m). Sada, ako je (y1 y2,.. ym) upravo generisana kombinacija, onda sledea uzastopna kombinacija je data svojstvom 2(ii). Algoritam koristi pet nizova b, c, x, y i z, svaki niz je duine m, u dijeljenoj memoriji. I-ti poloaj svakog od ovih nizova se oznaava sa bi , ci, xi , yi i zi redom. Prvi od ovih nizova, niz b, se koristi za broadcasting. Niz c je jednostavno izlazni bafer u kom je svaka nova generisana kombinacija smjestena. Poslednja tri niza se koriste za uvanje meurezultata: 1. Niz x sadrzi poslednje kombinacije, naime, xi = n - m + i ako 1 i m. 2. Niz y sadri trenutne kombinacije koje se izvode.3. Niz z vodi evidenciju o tim pozicijama u y koji su dostigli svoje ograniene

vrednosti, dakle za 1 i m

Algoritam je dat u onome to sledi kao postupak PARALLEL COMBINATIONS. Koristi m procesora P1, P2,. . . , Pm i poziva proceduru BROADCAST.

39

procedure PARALLEL COMBINATIONS (n, m)

Korak 1: {Inicijalizacija) for i = 1 to m do in parallel (1.1) xi n - m + i (1.2) yii

//posljednja kombinacija tj.lan kombinacije //poetna kombinacija tj. poetni lan

kombinacije(1.3) if yi = xi then zi true

else zi false end if (1.4) ci iend for. Korak 2: { Vrijednost zi, ako je broadcast} BROADCAST (z1, m,b). Korak 3: while zi, = false do (3.1) k 0 (3.2) { { Pronai desni element tekue kombinacije koja nije dostigla svoju max vrednost } for i = 2 to m do in parallel if zi-1, = false and zi = true then (i) yi-1 yi-1, + 1 (ii) k i end if end for (3.3) BROADCAST (k, m, b) (3.4) {Ako nijedan element nema max vrednost inkrementiramo y, u suprotnom auriramo sve elemente od yk do ym} if k = 0 then ym m+1 else (i) BROADCAST (yk-1, m, b) (ii) for i = k to m do in parallel yi i-1+ ( i - k + 1) end for end if (3.5) for i = 1 to m do in parallel (i) ci yi (ii) if yi = xi then zi = true else zi = false end if end for (3.6) BROADCAST ( z1 , m, b) end while.

Imajte na umu da korak 3.1 izvrava jedan procesor, recimo, P. Takoe, u koraku 3.2 najvie jedan procesor nalazi zi-1, = false i zi = true i aurira yi-1 i k. Konano u koraku 3.4 samo jedan procesor, recimo, P, inkrementira y. Analiza. Koraci 1, 3.1, 3.2, i 3,5 zahtjevaju konstantno vreme. U koracima 2, 3.3, 3.4 i 3.6 postupku BROADCAST zahteva O(1og m) vremena. ((Poto se Korak 3 izvrava ("C - 1) puta, ukupne vrijeme izvravanja procedure PARALLEL COMBINATIONS je O (nCm log m), a cijena je O (nCm m log m), to nije optimalno.)) Unutar while petlje sloenost je O(log m), moramo u svakom koraku generisati jednu kombinaciju, a kombinacija je nCm pa ce while petlja toliko puta i izvri. Svako njeno izvravanje zahtijeva O ( log m) vremena pa je sloenost O (nCm log m) vremena. Kod sekvencijalnog algoritma bilo je O (nCm m), sloenost nije i dalje optimalna, ali se vrijeme izvravanja dosta poboljalo. 40

Primer 6.4 Ponaanje paralelnih kombinacija je ilustrovano na slici. 6.2 za sluaj gde je n = 5 i m = 3. Na slici je prikazan sadraj svakog od nizova, y, z i c takoe i vrednost k posle svakog koraka procedure gde je modifikovan zadatak. Imajte na umu da t i f predstavljaju true i false, respektivno. Takoe, (x1,x2,x) = (3 4 5) do kraja.

Slika 6.2 Generisanje kombinacija tri od pet elemenata korienjem postupka PARALLEL COMBINATIONS.

Diskusija. Navodei poeljne osobine algoritama, rekli smo da: (i) paralelni algoritam treba da bude prilagodljiv, odnosno u stanju da znaajno mijenja svoje ponaanje prema broju procesora stvarno dostupnih na paralelnom raunaru, 41

(ii) (iii)

running time bi trebalo da zavisi od broja procesora koji se koriste, i cijena bi trebalo da bude optimalna.

Postupak PARALLEL COMBINATIONS ne zadovoljava neki od prethodnih kriterijuma: (i) Da zahteva dostupnost M procesora. (ii)(iii)

Iako prilino brzo, vrijeme izvravanja programa ne opada sa poveanjem broja procesora. Cijena je via od O(nCm, m) operacija dovoljnih da se generie svih m kombinacija sa n stavki postupkom SEQUENTIAL COMBINATIONS algoritma.

Cilj je da u sledeem odeljku izloimo algoritam koji zadovoljava ove tri poeljne osobine. Adaptivni Generator Kombinacija Zakljuujemo obradu generisanih kombinacija opisujui adaptivi i cost-optimal paralelni algoritam za generisanje svih m-kombinacija {1, 2,..., N}. Algoritam je dizajniran da radi na EREW SM SIMD raunaru sa N procesora P1,P2, . . . Pn gde je 1