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é