Sie sind auf Seite 1von 6

Fakultt fr Mathematik und Informatik

Bitonisches Sortieren
Christian Schubert
Angewandte Informatik
Matrikel: 50433

Sommersemester 2014

Betreuer/1. Korrektor:

Prof. Dr. rer. nat. habil. Ingo Schiermeyer

2
Bitonisches Sortieren

1. Einleitung

Sortieralgorithmen spielen in der Datenverarbeitung eine sehr wichtige Rolle. Es kommt oft vor, dass
einzelne Werte aus riesigen Datenmengen herausgesucht werden mssen. Hierbei ist der Vorteil, diese
Daten sortiert vorliegen zu haben nicht hoch genug einzuschtzen. Vergleichbar wre dies mit der Suche
nach einer Telefonnummer in einem Telefonbuch. Wre dieses unsortiert, so wre der Aufwand die
gesuchte Nummer herauszufinden erheblich grer. Deshalb ist es nur wenig erstaunlich, dass immer
weiter nach mglichst effizienten Sortieralgorithmen gesucht wird und stets neue Mglichkeiten entdeckt
werden. Die Notwendigkeit stetig steigender Effizienz solcher Algorithmen lsst sich einfach an Hand der
stets wachsenden Datenmengen erklren, die mit aktueller Rechentechnik immer schneller erstellt werden
knnen.

2. Bitonisches Sortieren

Inzwischen existiert eine Vielzahl an Sortieralgorithmen mit unterschiedlichen Laufzeiten. Diese


Unterschiede begrnden sich hufig anhand der Eingabe der Elemente, innerhalb desselben Algorithmus.
Der parallele Algorithmus von K.E. Batcher (1968), der im Folgenden vorgestellt wird, erreicht eine Laufzeit
von ((log 2 )2 ). Dieser Algorithmus ist noch nicht optimal. Jedoch beschreibt er sehr gut die Grundlagen
des parallelen Sortierens. Weiterhin existieren verbesserte Varianten, welche sich jedoch auf parallele
Vergleichsoperatoren sttzen. Sie besitzen zwei Eingnge, zwei Ausgnge und knnen innerhalb von (1)
zwei Elemente vergleichen. Auerdem besteht die Mglichkeit, dass sie zu einem Netzwerk zu verknpft
werden knnen. Hier kann eine Laufzeit von (log 2 )erreicht werden.
Die allgemeine Grundlage fr das bitonische Sortieren bildet stets eine bitonische Folge von Elementen.
Diese besteht aus ganzen Zahlen 1 , 2 , , und muss folgende Bedingungen erfllen:

Der erste Teil der Folge ist aufsteigend und der zweite Teil absteigend sortiert

Oder die Folgenglieder sind so verschiebbar, dass die erste Bedingung gilt

Die Liste muss eine Lnger von 2 Elementen besitzen

C. Schubert: Bitonisches Sortieren

3
Bitonisches Sortieren

Beispiel fr bitonische Folgen:


5, 8, 11, 12, 33, 29, 8, 2

oder

13, 42, 15, 19, 1, 6, 15, 3

oder

3, 4, 5, 6 ,7 ,8 ,9 ,10, 11

3. Algorithmus

Angenommen es liegt bereits eine bitonische Folge vor, dann werden beide sortierten Teilfolgen zu einer
sortieren Folge gemischt und der Algorithmus bricht ab.
Anderenfalls wird rekursiv vorgegangen und der Algorithmus versucht den gewnschten Zustand einer
bitonischen Folge herzustellen. Dies lsst sich am besten an Hand eines Beispiels erklren.
Beispiel:

22 | 17 | 3

| 2

| 45 | 13 | 21 | 6

17

22 | 3

22 | 45

17

| 13

45 | 21

21

13

bitonisches
Zahlenachttupel

Um die bitonische Zahlenfolge der Lnge 2 in je eine aufsteigende und eine absteigende Hlfte sortiert
wurden, muss die Folge gemischt werden. Dabei geht man wie folgt vor:
1. Schritt: jedes Element , 1 der ersten Hlfte wird mit dem korrespondierenden Element
+ der zweiten Hlfte verglichen und vertauscht wenn > + .
Nach diesem Schritt sind alle Elemente der ersten Hlfte kleiner als die Elemente der zweiten Hlfte.
2. Schritt: Dieses Verfahren aus Schritt eins wird jeweils rekursiv auf die beiden Hlften der
Zahlenfolge angewandt.

C. Schubert: Bitonisches Sortieren

4
Bitonisches Sortieren

17

22 | 45

21

3 |

13

21 | 17

2 |

3 |

13 | 6

13

| 45

13

22

| 17 | 21 | 45 | 22

17

21

22

45

Die Folge ist offensichtlich sortiert, wenn das Verfahren abbricht.

4. Implementierung

Die Geschwindigkeit von parallelen Berechnungen ist stark von der berechnenden Maschine abhngig.
Aktuelle Rechner bieten eine Vielzahl an Mglichkeiten zur parallelen Berechnung:
-

Mehrkern-Prozessoren (2-8 Kerne)

Rechner mit mehreren Prozessoren (Anzahl8)

Grafikprozessoren mit bis zu 1000 Shaderprozessoren

Co-Prozessoren (bis zu 61 CPU-Kerne)

Kombination CPU + GPU/Co-Prozessor

Verknpfung von Rechnern zu Clustern

Je nach Datenmenge sollte eine entsprechende Anordnung gewhlt werden. Denn der energetische
Aufwand geht teilweise weit auseinander. Es macht einen groen Unterschied, ob Daten von der Festplatte
zur CPU bewegt werden, ob sie darber hinaus auch noch zur Grafikkarte oder gar ber Kabel zu anderen
Rechnern transportiert werden mssen. Ebenso kann die Laufzeit der Berechnungen stark ansteigen, wenn
die Daten zu weit aufgeteilt werden.
Fr eine Anwendung auf einem hoch parallelen Rechner bietet es sich an, die Vergleichsoperatoren selbst
zu implementieren. Hierfr wird die Liste mit 2 Elementen in separate Threads aufgeteilt, damit jeder
C. Schubert: Bitonisches Sortieren

5
Bitonisches Sortieren

Prozessor zwei Elemente zum Vergleich bekommt und diese Entsprechend sortiert ausgibt. Es mssen
lediglich die zwei Elemente und eine Variable fr die aufsteigende oder absteigende Sortierung bergeben
werden. Im Anschluss wird eine Barriere bentigt, welche alle Ergebnisse einsammelt und die neue Liste
weiter verarbeitet.
Beispiel bitonisches Sortieren auf der CPU:

BitonicSort::bitonicSortCPUReference(
cl_uint * input,
const cl_uint length,
const cl_bool sortIncreasing)
{
const cl_uint halfLength = length/2;
cl_uint i;
for(i = 2; i <= length; i *= 2)
{
cl_uint j;
for(j = i; j > 1; j /= 2)
{
cl_bool increasing = sortIncreasing;
const cl_uint half_j = j/2;
cl_uint k;
for(k = 0; k < length; k += j)
{
const cl_uint k_plus_half_j = k + half_j;
cl_uint l;
if(i < length)
{
if((k == i) || ((k % i) == 0) && (k != halfLength))
{
increasing = !increasing;
}
}
for(l = k; l < k_plus_half_j; ++l)
{
if(increasing)
{
swapIfFirstIsGreater(&input[l], &input[l + half_j]);
}
else
{
swapIfFirstIsGreater(&input[l + half_j], &input[l]);
}
}
}
}
}
}

Quelle: AMD App SDK

C. Schubert: Bitonisches Sortieren

6
Bitonisches Sortieren

5. Quellen

Universitt Passau - Fakultt fr Informatik und Mathematik Effektive GPU-Algorithmen im


Hauptseminar Multicore-Programmierung - Martin Vielsmaier http://www.infosun.fmi.unipassau.de/cl/lehre/sem-ws11/VielsmaierHandout.pdf
Bitonisches Sortieren - bersicht ber Informatik und Softwaresystemtechnik WS 99/00, Prof. Dr.
Andreas Schwill http://ddi.cs.uni-potsdam.de/Lehre/UebersichtInfoSST/BitonischesSortieren.pdf
Paralleles Sortieren- Stefan Lang Interdisziplinres Zentrum fr Wissenschaftliches Rechnen
Universitt Heidelberg http://conan.iwr.uni-heidelberg.de/teaching/phlr_ws2011/lecture18.pdf
AMD App SDK 2.9 http://developer.amd.com/tools-and-sdks/opencl-zone/opencl-tools-sdks/amdaccelerated-parallel-processing-app-sdk/

C. Schubert: Bitonisches Sortieren