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) · ( - 1) .
Die zweite Phase benötigt wegen der bereits angesammelten Daten(ts + th + tw · m · ) · ( - 1) .
Daraus ergibt sichTall - to - all = 2 · (ts + th) · ( - 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 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 = (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 .