prev up inhalt next


8.6 Quicksort im Hypercube

Die rekursive Sortiermethode Quicksort läßt sich als sequentielles Programm wie folgt darstellen:

PROCEDURE quicksort(Menge M)
BEGIN
     waehle Pivotelement x;
     partitioniere M in M1 und M2 mit M1 $\leq$ x < M2 ;
     quicksort (M1) ;
     quicksort (M2)
END

Bei optimaler Wahl des Pivotelements und bei linearem Aufwand zum Partitionieren gilt für die Laufzeit t(n) zum Sortieren von n Zahlen

Würden beide rekursive Aufrufe parallel laufen, beträgt die Laufzeit

Bei n Prozessoren entstehen Kosten O(n 2) . Eine Verbesserung ist nur zu erreichen, wenn die Partitionierung beschleunigt wird.
Folgende Quicksort-Variante verwendet p = 2k Prozessoren im Hypercube. Zu Beginn hat jeder Prozessor ${\frac{n}{p}}$ Zahlen in seiner lokalen Menge M gespeichert. In jeder Iteration wird in jedem Subwürfel ein Pivotelement zufällig gewählt und durch one-to-all-broadcast im Subwürfel verbreitet.

PROCEDURE HC_quicksort(Menge M)
BEGIN
     sortiere M sequentiell;
     FOR i := 0 TO k-1 DO
         x := Pivotelement;
         partitioniere M in M1 und M2 mit M1 $\leq$ x < M2 ;
         IF BIT (my-id, i) = 0
         THEN
             verschicke M2 ueber Dimension i;
             erhalte C ueber Dimension i;
             M := M1 $\cup$ C durch Mischen
                 ELSE
             erhalte C ueber Dimension i;
             verschicke M1 ueber Dimension i;
             M := M2 $\cup$ C durch Mischen
         END
     END
END




prev up inhalt next