prev up inhalt next


Store-and-Forward

Im Ring sendet jeder Prozessor zunächst seine Nachricht an seinen rechten Nachbarn und reicht danach von links erhaltene Nachrichten weiter.


  All-to-All im Ring
  Gestrichelte Kanten sind markiert mit dem Zeitschritt und, in Klammern, mit der Absenderkennung der Nachricht.
  Knoten sind beschriftet mit der Menge von vorliegenden Absenderkennungen.

Die Gesamtzeit beträgt

Tall - to - all = (ts + th + tw · m) · (p - 1)

Im Gitter erhält zunächst jeder Prozessor einer Zeile mit Hilfe von All-to-All im Ring die gesamte Zeileninformation. Danach werden innerhalb der Spalten diese angesammelten Informationen herumgeschickt. Die erste Phase dauert

(ts + th + tw · m) · ($\displaystyle\sqrt{p}$ - 1) .

Die zweite Phase benötigt wegen der bereits angesammelten Daten

(ts + th + tw · m · $\displaystyle\sqrt{p}$) · ($\displaystyle\sqrt{p}$ - 1) .

Daraus ergibt sich

Tall - to - all = 2 · (ts + th) · ($\displaystyle\sqrt{p}$ - 1) + tw · m(p - 1) .

Im Hypercube vereinigen im i -ten Durchlauf die Prozessoren, die sich im i -ten Bit unterscheiden, ihre Informationen (siehe Bild 4.1).


     result := my_msg;
     for i := 0 to d-1 do
         partner := my_id XOR 2i;
         send result to partner;
         receive msg from partner;
         result := result $\cup$ msg;
     end;
end

In der i -ten Phase ist die Nachrichtengröße m · 2i. Ein Austausch dauert ts + th + 2i - 1. Also beträgt die Gesamtzeit

Tall - to - all = $\displaystyle\sum_{i = 1}^{\log p-1}$(ts + th + 2i · tw · m)

= (ts + th) · logp + tw · m · (p - 1) .

Wird statt einer Vereinigung von Daten eine Verknüpfung durchgeführt, so entsteht aus All-to-All eine Reduktion, bei der die Informationsmenge in jedem Schritt gleich bleibt. Für die Summenbildung ist m = 1 , und es folgt

Treduktion = (ts + th + tw) · logp .


All-to-All im Hypercube


prev up inhalt next