Professional Documents
Culture Documents
Paralelni Algoritmi
Paralelni Algoritmi
Paralelni algoritmi
Sortiranje Selekcijom
Dosadasnja 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:
{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.
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
S3
S4
(d) Poslije koraka (6) Slika 4.7: Sortiranje niza od 27 elemenata procedurom EREW SORT.
Analiza
Poziv 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.
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.
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 proizvoljnog
polinoma P = a j x
j 0 n 1 j
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:
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
2j
x j , odnosno P ( x ) = 1
n / 2 1 j =0
2 j +1
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 iz
2 2
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
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
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 - Spajanje
11
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, ili
3. 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.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 <= c2i+1 , prethodna nejednakost podrazumijeva da c2i = min(di+1,ei), i c2i+1 = max(di+1,ei), tako da uspostavlja ispravnost neparnih ak i spajanje.
14
Analiza. Naa analiza spajanja e se koncentrisati na vrijeme, broj procesora, i ukupan broj operacija potrebnih za spajanje. (i) Running Time. Poinjemo pretpostavljajui da komparator moe da proita unose, izvri poreenje i praviti izlazne podatke sve u jednoj jedinici vremena. Sada, neka t(2n) oznaava vrijeme koje je potrebno za (n,n) spajanje mrea za spajanje dvije sekvence duine n svaka. Rekurzivna priroda ovkve mree donosi sledee ponavljanje za t(2n): t(2) = 1 t(2n) = t(n) + 1 za n = 1 za n > 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.
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'<bj' if postoji j
(ii)
end if end for (i) (ii) procesor Pi koristi BINARY SEARCH na A' da nadje najmanje j takvo da je bi' <aj' if postoji j
end if end for. Korak 3: {Svaki procesor spaja i ubacuje u C elemente dvije podsekvence, jedne iz A i jedne iz B. Indeksi ova dva leemnta(jednog iz A i jednog iz B) na kojima svaki procesor pocinje spajanje, su prvo izracunati i sacivani u nizu Q uredjenih parova. Ovaj korak se radi kao:}
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.
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
najvei element u B i manji od ili jednak a, ili najmanji element u B i vee od ili jednako a.
, ili .
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 = ili
ii.
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,
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.
svi elementi 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
Uvod
Nabrajanje 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).
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 : m
n 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 algoritmi
U 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.
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 < u 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
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
kombinacije
(1.3) if yi = xi then zi true
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<N nCm. On koristi postupke NEXT COMBINATION i RANKCINV opisane u odeljku 6.2. Ideja ovih algoritma je da se dozvoli svakom procesoru da generie podskup kombinacija leksikografski. Osim toga, sve kombinacije generisane pomou Pi prethode, u leksikografskom poretku, inima generisanim pomou Pi+1 , 1 i<N. Tako Pi poinje j-tu kombinaciju, gde je a zatim generie sledeu kombinaciju. Algoritam, koji je slian onome u odeljku 6.3.2, dat je kao procedura ADAPTIVE COMBINATIONS: procedure ADAPTIVE COMBINATIONS (n, m) for i = 1 to N do in parallel (1) j + (i - 1 ) pC,/N1 + 1 (2) if j < nCm, then (2.1) RANKCINV (n, m, j, c1 , c2, . . . , cn) (2.2) produce the jth combination (c, c, . . . cm) as output (2.3) for i = 1 to pC,/N1 - 1 do NEXT COMBINATION (n, m, c1 , , c2, . . . , cm) end for end if end for.
Problemi Analiza. Korak 1 zahteva O (m) operacija. Generisanje j-tih kombinacija u koraku 2.1 traje O (mn) operacijama i proizvodi kao izlaz u koraku 2.2 jo jednom O (mn). Svaka od iteracija 1 iteracija koraka 2.3 podrazumeva O(m) vremena. Ukupno vrijeme
42
izvravanja procedure ADAPTIVE COMBINATIONS je stoga dominantno due od O(mn) i . Pod pretpostavkom da poto je 1<N nCm/N algoritam se izvrava za vremena sa optimalnom cijenom O(nCmm) Tri komentara data u odeljku 6.3.3 Postupak u vezi sa ADAPTIVE PERMUTATIONS vae i ovde: 1. Dijeljena memorija je potrebna samo za broadcast n i m. 2. Koraci 2.1-2.3 se ne mogu izvriti na svim procesorima.
3. Manje od
Primer Neka je n = 7, m = 1 i N = 5. Zatim = 2. Procesor P izraunava j = 1 i generie prve dve kombinacije. Procesori P2 i P3, izraunavaju j = 3 i j = 5, respektivno, a svaki generie jo dvije kombinacije. Procesor P4 izraunava j= 7 i uspjeno generie jednu i poslednju kombinaciju. Procesor P5 izraunava j = 9 , kako je 9> 7C1 on ne izvrava korak 2.
43