1.paralelno sortiranje - unizg.hr1.1. bitoničko sortiranje 7 ponovno napominjemo da nije potrebno...

8
1. Paralelno sortiranje 1.1. Bitoničko sortiranje 1.1.1. Uvodne definicije Pretpostavimo da imamo niz od n elemenata, označmo ih s a 0 ,a 1 ,...,a n-1 i da je na njima definiran linearan uređaj. To znači da za bilo koja dva elementa a i i a j vrijedi: ili je a i <a j ili je a i = a j ili je a i >a j . Cilj sortiranja je naći permutaciju (π 1 2 ,...,π n ) takvu da vrijedi: a π 1 a π 2 ≤···≤ a πn . Poznato je da svaki sekvencijalni algoritam za sortiranje, temeljen na međusob- nom uspoređivanju parova elemenata mora imati složenost Ω(n log n). 1968. godine Batcher je našao paraleleni algoritam čija je vremenska složenost Θ(log 2 n). Taj algoritam naziva se bitoničko sortiranje i često se koristi kao temelj za neke druge algoritme sortiranja na raznim paralelnim računalima. Glavna operacija koja se javlja u algoritmu je operacija koju nazivamo uspore- di–zamijeni (eng. compare-exchange). Brojevi se smještaju u “komparator” koji ih uspoređuje. Ako je potrebno, zamijeni ih da bi se nalazili u pravilnom redoslijedu. Definicija 1.1. Bitonički niz je niz brojeva a 0 ,a 1 ,...,a n-1 koji zadovoljava jedan od sljedećih uvjeta: (1) postoji indeks i, 0 i n - 1 takav da vrijedi: (a) podniz a 0 ,...,a j je monotono rastući (b) podniz a j ,...,a n-1 je monotono padajući, (2) postoji ciklička rotacija indeksa takva da je uvjet (1) zadovoljen. Na primjer, niz 1, 5, 6, 7, 5, 4, 3 je bitonički jer zadovoljava uvjet (1). Jednako tako, niz 6, 7, 8, 5, 2, 4, 5 je bitonički jer cikličkom rotacijom dobijamo niz 2, 4, 5, 6, 7, 8, 5 koji jest prvo monotono rastući, a zatim monotono padajući. 1.1.2. Batcherov algoritam Lema 1.2. Pojedini korak operacije usporedi–zamijeni može podijeliti bitonički niz na dva bitonička podniza.

Upload: others

Post on 28-Mar-2021

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1.Paralelno sortiranje - unizg.hr1.1. Bitoničko sortiranje 7 Ponovno napominjemo da nije potrebno lokalno sortiranje vršiti Batcherovim algoritmom–možeseupotrijebitinekobrzolokalnosortiranje(npr

1. Paralelno sortiranje

1.1. Bitoničko sortiranje

1.1.1. Uvodne definicije

Pretpostavimo da imamo niz od n elemenata, označmo ih s a0, a1, . . . , an−1 i daje na njima definiran linearan uređaj. To znači da za bilo koja dva elementa ai i ajvrijedi: ili je ai < aj ili je ai = aj ili je ai > aj. Cilj sortiranja je naći permutaciju(π1, π2, . . . , πn) takvu da vrijedi:

aπ1 ≤ aπ2 ≤ · · · ≤ aπn .

Poznato je da svaki sekvencijalni algoritam za sortiranje, temeljen na međusob-nom uspoređivanju parova elemenata mora imati složenost Ω(n log n).

1968. godine Batcher je našao paraleleni algoritam čija je vremenska složenostΘ(log2 n). Taj algoritam naziva se bitoničko sortiranje i često se koristi kao temeljza neke druge algoritme sortiranja na raznim paralelnim računalima.

Glavna operacija koja se javlja u algoritmu je operacija koju nazivamo uspore-di–zamijeni (eng. compare-exchange). Brojevi se smještaju u “komparator” koji ihuspoređuje. Ako je potrebno, zamijeni ih da bi se nalazili u pravilnom redoslijedu.

Definicija 1.1. Bitonički niz je niz brojeva a0, a1, . . . , an−1 koji zadovoljava jedanod sljedećih uvjeta:

(1) postoji indeks i, 0 ≤ i ≤ n− 1 takav da vrijedi:

(a) podniz a0, . . . , aj je monotono rastući

(b) podniz aj, . . . , an−1 je monotono padajući,

(2) postoji ciklička rotacija indeksa takva da je uvjet (1) zadovoljen.

Na primjer, niz 1, 5, 6, 7, 5, 4, 3 je bitonički jer zadovoljava uvjet (1). Jednakotako, niz 6, 7, 8, 5, 2, 4, 5 je bitonički jer cikličkom rotacijom dobijamo niz 2, 4, 5, 6, 7, 8, 5koji jest prvo monotono rastući, a zatim monotono padajući.

1.1.2. Batcherov algoritam

Lema 1.2. Pojedini korak operacije usporedi–zamijeni može podijeliti bitonički nizna dva bitonička podniza.

Page 2: 1.Paralelno sortiranje - unizg.hr1.1. Bitoničko sortiranje 7 Ponovno napominjemo da nije potrebno lokalno sortiranje vršiti Batcherovim algoritmom–možeseupotrijebitinekobrzolokalnosortiranje(npr

2 1. Paralelno sortiranje

Dokaz. Neka je n = 2k, za neki prirodni broj k i neka je a0, a1, . . . , an−1 bitoničkiniz. Bez smanjenja općenitosti možemo pretpostaviti da vrijedi

a0 ≤ a1 ≤ · · · ≤ an/2−1 i an/2 ≥ an/2+1 ≥ · · · ≥ an−1.

Iz početnog niza napravit ćemo dva podniza:

mina0, an/2,mina1, an/2+1, . . . ,minan/2−1, an−1i

maxa0, an/2,maxa1, an/2+1, . . . ,maxan/2−1, an−1.Oba niza su bitonička, što se vidi direktno iz definicije početnog niza i definicijepodnizova. Štoviše, vrijedi da je svaki element prvog podniza manji od bilo kojegelementa drugog podniza. Ova primjedba nam daje naznaku osnovne ideje Batche-rovog bitoničkog algoritma.

Promotrimo li sljedeću sliku, vidimo osnovnu ideju bitoničkog algoritma. Po-četni niz dijelimo na manje nizove operacijom usporedi–zamijeni i dalje postupamorekurzivno.

Ako imamo bitonički niz duljine 2k, tada je jasno da taj niz možemo sortirati u kkoraka. Sljedeća slika pokazuje jedan primjer takvog bitoničkog sažimanja. Imamobitonički niz duljine 8 = 23 i sortiramo ga korištenjem operacije usporedi–zamijeniu 3 koraka.

Page 3: 1.Paralelno sortiranje - unizg.hr1.1. Bitoničko sortiranje 7 Ponovno napominjemo da nije potrebno lokalno sortiranje vršiti Batcherovim algoritmom–možeseupotrijebitinekobrzolokalnosortiranje(npr

1.1. Bitoničko sortiranje 3

Lema 1.3. Pretpostavimo da imamo dva niza duljine n = 2k: a0, a1, . . . , an−1 ib0, b1, . . . , bn−1. Prvi niz je sortiran uzlazno, dok je drugi niz sortiran silazno. Upo-trebom operacije usporedi–zamijeni možemo dobiti jedan uzlazno sortirani niz duljine2k+1 u k + 1 koraka.

Dokaz. Radi jednostavnosti pretpostavit ćemo da je n = 2. To će objasniti glavnuideju dokaza. Pretpostavimo da imamo nizove a0, a1 i b0, b1. Primjenom operacijausporedi–zamijeni dobivamo:

A = mina0, b0, B = mina1, b1, C = maxa0, b0, D = maxa1, b1,

iα = minA,B, β = maxA,B, γ = minC,D, δ = maxC,D.

Odmah je jasno da vrijedi α ≤ β i γ ≤ δ. Ostaje još provjeriti je li je β ≤ γ. No,ta činjenica direktno slijedi iz svojstva da je a0 ≤ a1 i b1 ≤ b0. Također, vidimo dasmo uzlazno sortiranu listu dobili nakon k + 1 koraka.

Isti postupak primjenjujemo kad imamo dulje liste. Svakim korakom listu pre-polavljamo i postupak rekurzivno primjenjujemo na dobivene polovice, pa odmahslijedi da postupak završava u k+ 1 koraku. Da je lista sortirana slijedi iz činjeniceda mi listu u svakom koraku dijelimo na pola i da su svi elementi prve liste manjiili jednaki od elemanata druge liste.

Lema 1.4. Pretpostavimo da imamo dva niza duljme n = 2k: a0, a1, . . . , an−1 ib0, b1, . . . , bn−1. Prvi niz je sortiran uzlazno, dok je drugi niz sortiran silazno. Upo-trebom operacije usporedi–zamijeni možemo dobiti jedan silazno sortirani niz duljine2k+1 u k + 1 koraku.

Dokaz. Analogno prethodnom, samo umjesto manje–veće komparatora koristimoveće-manje komparator.

Teorem 1.5 (Batcher, 1968.). Listu od n = 2k nesortiranih elemenata možemosortirati korištenjem mreže sastavljene od 2k−2k(k + 1) komparatora u vremenuΘ(log2 n).

Dokaz. Danu listu od n = 2k elemenata promatramo ili kao n bitoničkih nizovaduljine 1 ili kao n/2 bitoničkih nizova duljine 2. Batcherov algoritam za sortiranjetada kreće sa sažimanjem dviju sortiranih listi u jednu sortiranu listu. Postupakponavljamo sve dok ne dobijemo jednu sortiranu listu. Prebrojimo sada koliko smo

Page 4: 1.Paralelno sortiranje - unizg.hr1.1. Bitoničko sortiranje 7 Ponovno napominjemo da nije potrebno lokalno sortiranje vršiti Batcherovim algoritmom–možeseupotrijebitinekobrzolokalnosortiranje(npr

4 1. Paralelno sortiranje

koraka napravili prije nego što smo sortirali listu. Budući da se u svakom korakuduljine lista udvostruče, iz prethodne dvije leme slijedi da je broj koraka:

1 + 2 + · · ·+ k + (k + 1) =k(k + 1)

2.

Ako imamo n = 2k elemenata u listi, moramo upotrijebiti

2k/2 = 2k−1

komparatora u svakom koraku. Dakle, ukupan broj komparatora koje moramoupotrijebiti da bismo sortirali listu je: 2k−2k(k + 1).

Primijetimo da jek(k + 1)

2=

log n(log n+ 1)

2,

i odatle slijedi da je vremenska složzenost algoritma Θ(log2 n).

Ilustrirajrno ovaj algoritam jednim primjerom. Pretpostavimo da trebamo sor-tirati niz od 8 brojeva: 7, 3, 8, 6, 4, 1, 5, 2. Sortiranje je prikazano na sljedećoj slici.

Da bismo bolje razumjeli kako bitonički algoritam radi, pogledajmo sljedeće slike.Pretpostavimo da imamo listu od

n = 128

elemenata. Za sortiranje tih 128 elemenata trebamo

lg 128 = 7

nivoa sažimanja. Promotrimo prvo sliku koja opisuje nivoe sažimanja. Svaki grafpredstavlja listu brojeva u nekom od stadija sortiranja. Os x predstavlja pozicijuu listi, dok os y predstavlja vrijednost elementa. Dakle, (3, 5) čitamo da na trećem

Page 5: 1.Paralelno sortiranje - unizg.hr1.1. Bitoničko sortiranje 7 Ponovno napominjemo da nije potrebno lokalno sortiranje vršiti Batcherovim algoritmom–možeseupotrijebitinekobrzolokalnosortiranje(npr

1.1. Bitoničko sortiranje 5

mjestu u listi se nalazi broj 5. Na prvom grafu vidimo da su elementi posve nesor-tirani – formiraju ‘oblak’. Sortirani elementi formiraju pravac kroz ishodište. Nai-tom mjestu u listi se nalazi i, pa samo imamo parove (i, i). Ostali grafovi prika-zuju stanje elemenata nakon svakog nivoa sažimanja. Primijetimo da oni formirajubitoničke nizove. Na sljedećoj slici prikazano je kako teče posljednji nivo sažimanja– to je situacija opisana u prvoj lemi.

1.1.3. Poboljšana verzija Batcherovog algoritma

Postavlja se pitanje kako implementirati bitoničko sortiranje na paralelnom ra-čunalu. Osnovni algoritam ne specificira raspored podataka po procesorima niti ko-munikaciju među njima. Standardni način implementacije je da se podaci blokovskirasporede po procesorima i da se na taj način simuliraju čvorovi leptir-arhitekture.Ako još jednom promotrimo sliku soritranja 8 brojeva bitoničkim algoritmom, vidi-mo da ta slika podsjeća na arhitekturu leptira. Arhitektura leptira bit će uočljivijaako izbacimo komparatore. Naime, znamo da ako imamo n = 2k podataka kojetreba sortirati, sortirat ćemo ih u lg n = k nivoa sažimanja.

Komunikacijsku strukturu i-tog nivoa sažimanja čini

n

2i= k − i

Page 6: 1.Paralelno sortiranje - unizg.hr1.1. Bitoničko sortiranje 7 Ponovno napominjemo da nije potrebno lokalno sortiranje vršiti Batcherovim algoritmom–možeseupotrijebitinekobrzolokalnosortiranje(npr

6 1. Paralelno sortiranje

leptira svaki sa 2i redaka i i stupca. Svaki čvor tih leptira je zapravo komparator.Komunikacijska struktura je vizualizirana na sljedećoj slici.

Pretpostavili smo da imamo 4 procesora i 16 podataka koje sortiramo. Primi-jetimo četiri nivoa sažimanja. No, također možemo primijetiti da je komunikacijameđu procesorima velika i da svaki procesor komunicira sa svakim.

Podatke koji se nalaze smješteni unutar procesora nije potrebno sortirati Batche-rovim algoritmom, već ih je moguće sortirati bilo kojim sortom (npr. quicksortom)da se algoritam ubrza. No, postoji i poboljšanje ovakve imaplementacije algoritma.Da bismo objasnili način na koji je implementirano to poboljšanje, definirajmo prvoneke pojmove. Pretpostavimo da imamao P procesora i n podataka i radi jednos-tavnosti pretpostavimo da P |n, tj da je N = n/P .

Definicija 1.6. Rasporedi podatake po procesoru.

1. Blokovski raspored po procesorima je razmještaj n podataka na P procesora i takavda se pritom prvih N podataka nalazi na prvom procesoru, sljedećih N podatakadrugom i tako dalje. Posljednjih N podataka nalazi se na posljednjem procesoru.

2. Ciklički raspored po procesorima je razmještaj n podataka na P procesora takavda prvi podatak smještamo na prvi procesor, drugi podatak na drugi procesor, itd.P + 1 podatak ponovno smještamo na prvi procesor i tako ciklički ponavljamopostupak.

Sada kad raspolažemo ovim pojmovima, mozemo pojasniti poboljšanje stan-dardne implementacije Batcherovog algoritma za sortiranje.

Na početku su podaci smješteni blokovski po procesonma. Prvih lgN = lg n −lgP nivoa sažimanja radimo lokalno.

Page 7: 1.Paralelno sortiranje - unizg.hr1.1. Bitoničko sortiranje 7 Ponovno napominjemo da nije potrebno lokalno sortiranje vršiti Batcherovim algoritmom–možeseupotrijebitinekobrzolokalnosortiranje(npr

1.1. Bitoničko sortiranje 7

Ponovno napominjemo da nije potrebno lokalno sortiranje vršiti Batcherovimalgoritmom – može se upotrijebiti neko brzo lokalno sortiranje (npr. quicksort, radixsort). Nakon tog lokalnog sortiranja prelazimo s blokovskog rasporeda na ciklički.

Na i-tom nivou sažimanja prvih i−lgN koraka radimo lokalno (operacije uspore-di–zamijeni), nakon toga ponovno prelazimo na blokovski raspored, gdje posljednihlgN koraka radimo lokalno Batcherovo sažimanje. Taj postupak ponavljamo svedok ne sortiramo listu. Na sljedećoj vidimo kako tečce opisani po stupak. Osjenčanisu dijelovi koji se vrše lokalnim sortiranjem.

Na ovaj način smanjene su potrebe za komunikacijom među procesorima. Pos-ljednih lgN koraka radimo lokalno budući da je u tim koracima cilj naći sortiranulistu (kao i u standardnom Batcherovom algoritmu).

1.1.4. Vremenska analiza složenosti

Analizirajmo složenost ovog algoritma po LogP modelu. Svako prebacivanje sablokovskog na ciklički raspored i obrnuto, zahtijeva balansiranu svatko-sa-svakimkomunikaciju: svaki procesor očito prima jednako mnogo podataka koliko ih i šalje.

Operacija prebacivanja sastoji se od (P − 1) iteracije, gdje u svakoj iteracijiprocesor ili prima ili šalje podatke, tj. razmjenjujeN/P poruka s drugim procesorom.

Podsjetimo se da u LogP modelu vrijedi da mreža ima ograničeni kapacitet. No,moguće je konstruirati komunikacijsku mrežu takvu da mrežom ne putuje više odL/g poruka. To se postiže tako da procesor p u iteraciji i razmjenjuje poruke sprocesorom p⊕ i, gdje je ⊕ oznaka za modulo zbrajanje.

Prema gore objašnjenom, možemo izračunati kolika je vremenska složenost jed-

Page 8: 1.Paralelno sortiranje - unizg.hr1.1. Bitoničko sortiranje 7 Ponovno napominjemo da nije potrebno lokalno sortiranje vršiti Batcherovim algoritmom–možeseupotrijebitinekobrzolokalnosortiranje(npr

8 1. Paralelno sortiranje

nog takvog prebacivanja s blokovskog na ciklički raspored podataka po procesorima:

Tprebacivanja = (P − 1)Trazmjene(N/P ).

Vremensku složenost razmjene m poruka definirali smo u prvom semestru. No,postavlja se pitanje kolika je sveukupna složenost ovako implementiranog Batchero-vog algoritma.

Algoritam počinje blokovskim rasporedom podataka po procesorima i vrši lo-kalno sortiranje. Zatim imamo lgP nivoa sažimanja. Svaki nivo sažimanja sastojise od prebacivanja s blokovskog na cikličcki raspored podataka, od niza lokalnihzamjena, od ponovnog prebacivanja s cikličckog rasporeda na blokovski, te od bito-ničkog sažimanja na kraju nivoa.

Eksperimentima i mjerenjima utvrđeno je da postotak vremena potrošenog nameđuprocesorsku komunikaciju pada s N : kada se po procesorima nalaze manjekoličine podataka na komunikaciju se troši 64% vremena, dok kod većih količinapodataka na komunikaciju se troši samo 40% vremena.