• Nie Znaleziono Wyników

Równoległe algorytmy sortowania

N/A
N/A
Protected

Academic year: 2021

Share "Równoległe algorytmy sortowania"

Copied!
10
0
0

Pełen tekst

(1)

Równoległe algorytmy sortowania

(2)

Krzysztof Banaś Obliczenia równoległe 2

Algorytmy sortowania

Algorytmy sortowania dzielą się na 

wewnętrzne (bez użycia pamięci dyskowej)

zewnętrzne (dla danych nie mieszczących się w pamięci  operacyjnej)

Innym podziałem algorytmów sortowania jest  wyróżnienie

algorytmów opartych wyłącznie na porównywaniu elementów

optymalna złożoność obliczeniowa Ө(n log n)

algorytmów wykorzystujących dodatkową wiedzę o elementach  (np. zakres wielkości)

optymalna złożoność obliczeniowa Ө(n)

(3)

Sortowanie szybkie

Sortowanie szybkie jest jednym z najpopularniejszych  algorytmów sortowania ze względu na:

optymalną złożoność oczekiwaną Ө(n log n)

prostotę

małe wymagania pamięci (sortowanie w miejscu)

Sortowanie szybkie wykorzystuje strategię dziel i rządź

Zrównoleglenie sortowania szybkiego jest niezwykle  łatwe

(4)

Krzysztof Banaś Obliczenia równoległe 4

Sortowanie szybkie – wersja równoległa OpenMP

void qs(int *x, int l, int h) { int newl[2], newh[2], i, m;

m = podziel(x,l,h);

newl[0] = l; newh[0] = m-1;

newl[1] = m ; newh[1] = h;

#pragma omp parallel {

#pragma omp for nowait for (i = 0; i < 2; i++)

qs(x, newl[i], newh[i]);

} }

(5)

Równoległe sortowanie szybkie

Analiza złożoności obliczeniowej pokazuje, że wykonanie  równoległe niewiele poprawia czas realizacji algorytmu:

Tsekw(n) = 2Tsekw(n/2) + Ө(n) = Ө(nlogn)

Tp(n,n) = Tp(n/2,1) + Ө(n) = Ө(n)

Kluczem do zwiększenia wydajności równoległej jest  zrównoleglenie procedury podziel

Istnieją algorytmy, które dla p istotnie mniejszych od n  potrafią uzyskać oczekiwaną złożoność wykonania 

równoległego równą

Tp(n,p) = Ө( n/p log(n/p) )

Pozostaje problem złożoności pesymistycznej, której prawdopodobieństwo rośnie przy realizacji równoległej

(6)

Krzysztof Banaś Obliczenia równoległe 6

Równoległe sortowanie bąbelkowe

Sortowanie bąbelkowe ­ złożoność obliczeniowa Ө(n2)

Sekwencja operacji zamiany dwóch sąsiadujących  elementów (operacja porównaj­zamień, compare­

exchange)

sekwencja jest nieusuwalnie sekwencyjna

Warianty algorytmu, o wyższej złożoności obliczeniowej  (także Ө(n2)) dające się łatwo zrównoleglić

Sortowanie nieparzyste­parzyste (odd­even transposition)

zrównoleglenie fazy zamiany

operacja porównaj­zamień zamienia się w operację porównaj­

rozdziel (compare­split)

(7)

Sortowanie nieparzyste­parzyste

nlocal = n/p;

qsort(data, nlocal, sizeof(int), IncOrder); // lokalne sortowanie  if (id % 2 == 0) {oddrank = id-1; evenrank = id+1;

} else { oddrank = id+1; evenrank = id-1; }

if((oddrank==-1)||(oddrank==p)) oddrank=MPI_PROC_NULL;

if((evenrank==-1)||(evenrank==p))evenrank=MPI_PROC_NULL;

for(i=0; i<p-1; i++) {

if (i%2 ==1) { /* faza nieparzysta */

MPI_Sendrecv( data, nlocal, MPI_INT, oddrank, 1,

rdata, nlocal, MPI_INT, oddrank, MPI_COMM_WORLD, &status);

} else { /* faza parzysta */

MPI_Sendrecv( data, nlocal, MPI_INT, evenrank, 1,

rdata, nlocal, MPI_INT, evenrank, MPI_COMM_WORLD, &status);

}

CompareSplit(nlocal, data, rdata, wspace);

(8)

Krzysztof Banaś Obliczenia równoległe 8

Sortowanie nieparzyste­parzyste

Złożoność równoległa sortowania nieparzyste­parzyste

Tp(n,p) = Ө( n/p log(n/p) ) + Ө( n )

p faz, ponieważ w jednej fazie element może przesunąć się  tylko o jedną pozycję

warianty algorytmu, które starają się zmniejszyć liczbę faz,  redukując oczekiwaną złożoność algorytmu równoległego do  standardowej wartości (dla p < n )

Tp(n,p) = Ө( n/p log(n/p) )

(9)

Sortowanie kubełkowe

Sortowanie kubełkowe

elementy rozłożone równomiernie w znanym przedziale

rozdzielenie wszystkich elementów do kubełków i  posortowanie wewnątrz kubełków 

czas działania sekwencyjnego dla m kubełków

Tsekw(n,m) = Ө( n log(n/m) ) 

dla osiągnięcia optymalnej złożoności liczba kubełków  powinna być rzędu liczby elementów

(10)

Krzysztof Banaś Obliczenia równoległe 10

Sortowanie kubełkowe

Zrównoleglenie algorytmu

• przydzielenie każdego kubełka innemu procesorowi

W pierwszej fazie procesory sortują przydzielone sobie dane, w drugiej przesyłają do odpowiednich kubełków (procesorów), w trzeciej sortują ostatecznie w kubełkach

Czas realizacji równoległej w przypadku równomiernego rozłożenia elementów w kubełkach

Tp(n,p) = Ө( n/p log(n/p) )

Założenie równomiernego rozkładu może nie być

realistyczne, można wtedy zmodyfikować algorytm, tak aby podział na kubełki pozostał optymalny (tzw.

algorytm sortowania próbkowego, sample sort)

Cytaty

Powiązane dokumenty

Oprócz sortowania przez łączenie zstępujące typu „dziel i rządź” istnieje sortowanie wstępujące (nierekurencyjne) typu „łącz i zwyciężaj, które jest

(2.2.4) Wyznacz kolejne serie, po jednej o tym samym numerze z każdego niewyczerpanego pliku wejściowego;. (2.3) Zamień pliki wyjściowe

Zaleca się, aby każdy podprogram posiadał własną planszę (czyli plik o dowolnej nazwie nazwa.lis np.. Plik/Plansza/Nowa i następnie na planszy wywołanej

Zastosuj kod programu genTest.cpp do wygenerowania serii liczb wejsciowych. Za pomoca kodu sortTest.cpp utw´orz wzorcowy output posortowanych serii, kod u˙zywa funkcji

Zastosuj kod programu generatorTest.cpp do wygenerowania serii liczb wejsciowych. Za pomoca kodu wzorcowka.cpp wyprodukuj

Sortowanie w miejscu nie wymaga wykorzystania dodatkowej pamięci zależnej od ilości sortowanych danych, lecz tylko pewną stałą jej ilość.. Sortowanie stabilne zapewnia, iż

Sortowanie takiego pliku kart omawianą metodą polega na tym, że gracz stopniowo dokłada karty do uporządkowanej części kart (początkowo zawierającej jedną kartę)

• Ostatnim krokiem jest zamiana miejscami elementów tablicy: pierwszego i poprzedzającego wskazywany przez zmienną granica – chcemy, aby element osiowy był