0 Daumen
360 Aufrufe

Gegeben ist ein Programm mit 30% Integer, 40% Floating Point, 10% Sprung und 20% Speicher Operationen. Jede Integer Opertation braucht einen Zyklus, jede Floating Point Operation 4 Zyklen, jeder Sprung 3 Zyklen und jede Speicheroperation 5 Zyklen. Die Speichereinheit des Systems kann doppelt so schnell gemacht werden. Welchen Speedup hat das Programm im Vergleich zur nicht doppelt so schnellen Speichereinheit, wenn die Taktfrequenz gleich bleibt? 

Mir fehlt hier jeder Ansatz.

von

2 Antworten

+3 Daumen
 
Beste Antwort

Hallo,

zuerst berechnen wir die average CPI des Programms (CPI = Cycles per Instruction):

\(CPI=0.3\cdot 1+0.4\cdot 4+0.1\cdot 3+0.2\cdot 5=3.2\)

Den Speedup-Faktor \(S\) berechnen wir mit Amdahl's Gesetz. Es gilt:

\(S=\dfrac{1}{1-F+\frac{F}{E}}\)

Dabei ist \(F\) der prozentuale Zeitanteil, der optimiert wird (und nicht die Anzahl an Instruktionen; das machen viele Studies falsch!). \(E\) ist die Verbesserung. Es ist:

\(E=\dfrac{\text{Memory speed}_{\text{neu}}}{\text{Memory speed}_{\text{alt}}}=\dfrac{2}{1}=2\)

\(F=\dfrac{\text{Anteil Memory Instructions}}{CPI}=\dfrac{0.2\cdot 5}{3.2}=0.3125\)

Mit diesen Werten und Amdahl's Gesetz folgt:

\(S=\dfrac{1}{1-0.3125+\frac{0.3125}{2}}\approx1.185\)

Das Programm läuft auf dem System mit der (Hardware-) Optimierung also \(18.5\%\) schneller. Interessant wäre vielleicht noch die Frage, welcher Wert (für dieses Programm) theoretisch überhaupt erreicht werden kann. Computerhersteller wissen nämlich mit Hardware-Spezifikationen zu werben, die bei weitem nicht das Einhalten, was sie dem Laien vorgaukeln:

\(S(E)=\dfrac{1}{0.6875+\frac{0.3125}{E}}\)

\(\lim_{E\rightarrow\infty}{S(E)}=\dfrac{1}{0.6875}\approx 1.45\)

Allgemein gilt für eine "unendlich hohe" Verbesserung:

\(S=\dfrac{1}{1-F}\)

Es gibt also einen Punkt, ab dem eine alleinige Verbesserung der Memory-Unit keinen Effekt mehr auf die Performance des Programms hat, was logisch ist, wenn man bedenkt, dass hier nur \(20\%\) Speicher-Operationen verwendet werden. Nur so als Gedanke ...

André

von
+3 Daumen

Gegeben ist ein Programm mit 30% Integer, 40% Floating Point, 10% Sprung und 20% Speicher Operationen. Jede Integer Opertation braucht einen Zyklus, jede Floating Point Operation 4 Zyklen, jeder Sprung 3 Zyklen und jede Speicheroperation 5 Zyklen.

0.3 * 1 =0.3
0.4 * 4 = 1.6
0.1 * 3 = 0.3
0.2 * 5 = 1.0
Summe 3.2

Die Speichereinheit des Systems kann doppelt
so schnell gemacht werden.

0.3 * 1 =0.3
0.4 * 4 = 1.6
0.1 * 3 = 0.3
0.2 * 2.5 = 0.5
Summe 2.7

3.2 * ( 1 - x ) = 2.7
x = 0.15625

Das neue Programm läuft 15.625 %
schneller als das alte Programm.

Alle Angaben ohne Gewähr.

von

Am Programm wird nichts verändert...

Lieber georgborn,

ich komme leider auf ein anderes Ergebnis. Mich würde Deine Meinung zu meiner Lösung interessieren. Vielleicht habe ich da einen Denkfehler, aber ich hätte das jetzt über Amdahl's Gesetz gelöst. Auf die Berechnung der average CPI sind wir ja beide gekommen.

Ich würde mich sehr über Dein Feedback freuen!

André

Hallo André,

Beachte:

$$ { (1-0,15625) }^{ -1 }={ 0.84375 }^{ -1 }\approx 1,185 $$

die Ergebnisse sind also verträglich. Ich würde sagen, das Programm läuft auf der neuen Plattform 18,5% schneller. Und auf der alten Hardware ca. 15% langsamer, als auf der neuen.

Gruß

Hallo Fragesteller,
hallo André ,

ich habe etwas falsch gerechnet. Mein
Ergebnis kam mir direkt etwas zweifelhaft vor.

Analogie : ein 100 m Läufer läuft die Strecke
in 10 sec. Er kann sich bei einem Lauf auf 9,5 sec
verbessern. Wieviel % sind dies ?
Hier muß man über die Geschwindigkeit rechnen.
v(alt) = 100 m / 10 sec = 10 m / sec
v(neu) = 100 m / 9,5 sec = 10.53 m / sec

10 / 100 = 10.53 / x
x = 105.3 %
Steigerung 5.3 %

Analog dazu die Computerberechnung
v(alt) = 1 / 3.2
v(neu) = 1 / 2.7

( 1 / 3.2 ) / 100 = ( 1 / 2.7 ) / x
x = 118..52
Die Steigerung beträgt beträgt 11.852 %.
und stimmt somit mit deiner Berechnung
überein.

mfg Georg

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community