@SV3N
danke, aber das bestätigt meinen Verdacht ein wenig. Da wurde auf der CPU ein relativ einfacher Workload geladen, bei dem man die Größe des Problems recht gut und beliebig skalieren kann.
Was hier dann für ARM sprechen würde wäre, dass der Verwaltungsaufwand geringer ausfällt. Bei Intel als auch AMD wird da wohl SMT dazwischen funken und der damit verbundene Verwaltungsaufwand.
boonstyle schrieb:
Vielmehr deckt amdahl die Lücken von Gustafson hiermit ab.
In dem Fall ist es aber - historisch betrachtet - genau anders rum. Gustafson erweitert Amdahls Betrachtungsweise um eine einen weiteren Blickwinkel und das ist hier auch wichtig.
Und nein Amdahl deckt hier nicht Gustafsons Lücke ab, sondern beide Gesetze behandeln dasselbe Thema, gehen aber von zwei unterschiedlichen Blickwinkeln darauf zu.
Amdahl betrachtet ein Problem fester Größe und gibt dafür an, dass man abhängig von der Parallelität nur einen maximalen Speedup erwarten kann. Dazu definiert Amdahl ein paar feste Variabeln und ich werde nun ein nicht nur theoretisches Beispiel benutzen, dadurch ergibt sich für tp auch eine Feste Grenze.
Ein Programm soll 5000 (
n
) Bilder berechnen. Die Initialisierung des Programmes benötigt immer 10 Sekunden (
ts
). Jedes Bild wiederum benötigt 5 (
tp(min)
) Sekunden, mit der Anzahl der Bilder er gibt sich jedoch ein
tp(max)
. Nach Amdahl habe ich nun zwei "Grenzwerte":
T(max)
und
T(min)
.
T(max) = ts + tp(max) | tp(max) = tp(min) * n.
T(min) = ts + tp(min)
Er gibt hier für
T(max) = 25010 Sekunden
und für
T(min) = 15 Sekunden
. Daraus kann ich nun den maximal zu erwartenden Speed-Up berechnen und der liegt bei 1667. Mehr werde ich nie erreichen, egal wie viele Kerne (
c
) ich hinzutue.
Der Speed-Up (
S
) für die einzelnen Kerne errechne ich nun wie folgt:
S = T(max) / (ts + tp(max) / c)
.
Wir wissen nun, der maximale
theoretische Speed-Up liegt hier bei 1667, wir wissen wie viel Zeit wir maximal benötigen und wie viel Zeit der parallele Teil braucht, also Formen wir um und können
c(max)
berechnen (
c(min)
ist 1.
):
c(max)
ist hier 5000. Also, egal wie ich hier vorgehe, besser wird es nicht. (Ergibt sich aus
tp(max) / tp(min)
.)
Da aber CPU-Kerne Verwaltungsaufwand bedeuten, sagen wir, dass nun auch noch die Zeit für die Verwaltung (
tv
) hinzukommt und die beträgt pro Kern (Einfachheit) 2 Sekunden. Daraus kommen wir nun zu:
S = T(max) / (ts + tv * c + tp(min)
.
Da wir bereits wissen, unser
c(max)
ist 5000, können wir damit nun den realen Speed-Up bei maximal möglichen Kernen berechnen.
S = 25010 / (10 + 2 * 5000 + tp(min))
. Ist hier nun 2,5.
Und das ist das, ist mal Amdahls Gesetz in Anwendung.
Gustafson gibt mir nun - in diesem Beispiel vor: Du hast
T = 25010 Sekunden
.
ts = 10
Sekunden und
tp(min) = 5 Sekunden
. Nun nimm mehr Kern (
c
) und schau wie viele Bilder (
n
) herauskommen. Habe ich die letzte Zahl, kann ich auch hier ein Speed-Up berechnen.
Die idealisierte Formel für die Anzahl der Bilder:
n = (T - ts / tp(min)) * c
.
Nehme ich nun 1 Kern, komme ich wieder auf die 5000 Bilder, nehme ich 2 Kerne, komme ich auf 10000 und so weiter. Ich erhalte also eine lineare Skalierung, da ich nun die Menge der Bilder, die ich in der fest vorgegebenen Zeit erhöhen kann. Auch hier handelt es sich um eine theoretische Skalierung. Wie bei Gustafson kann ich nun auch hier einen Verwaltungsaufwand mit ein beziehen. Nehmen wir wieder die 2 Sekunden pro CPU-Kern an, dann weiß ich, dass irgendwann
tv
meine T auffressen wird.
n = (T - ts - tv * c / tp(min)) * c
. Die maximale Kernanzahl hier wird also durch
tv
bestimmt. Maximaler tv ist hier 24995
T - tp(min) - ts
. Daraus ergibt sich, dass wir maximal 12497 Kerne nutzen können, sonst frisst der Verwaltungsaufwand die Zeit vollkommen aus.
Man kann nun bis zu den 12497 Kernen die einzelnen Speed-Ups berechnen und dann auch den maximalen Speed-Up finden.
Zwei Blickwinkel auf dasselbe Problem, nur einmal nehme ich die Anzahl der Bilder als Fest an, einmal die Zeit.
-- edit --
Wegen des "Verwaltungsaufwandes" ergeben sich im übrigen bei beiden dann ein S(max) und damit ein optimaler C-Wert, danach gehts wieder runter.
Nur - und das ist wichtig - der Verwaltungsaufwand hängt von der CPU, dem OS als auch dem Problem selbst ab. Dieser ist also variable.