Für alle, die glauben, daß ein Programm in Binärform immer gut und schnell läuft, sei einmal folgendes Beispiel des Performance-Vorteils, der durch das Kompilieren auf der eigenen Maschine entsteht, aufgezeigt. Der Vorteil dieser Optimierung ist teilweise sehr gravierend, da der Compiler den für die eigene Maschine am schnellsten ausführbaren Binärcode erzeugt.
Ich habe dazu ein wirklich kleines und einfaches Programm in C geschrieben, daß im Prinzip nur aus einer For-Schleife besteht, die 100.000 Mal "Hallo Welt" ausgibt und die für die For-Schleife benötigte Zeit misst. Die genutzte IDE ist Code::Blocks 8.02, der Compiler dazu ist der GCC.
Einmal habe ich den Code auf meiner Voodoo-Kiste (siehe Sig) übersetzt und einmal auf meinem aktuellen System mit Athlon64 X2 4200+ @ 2500 MHz, beide Male im Debug-Modus, also ohne jegliche Optimierung. Beide Programme liefen anschließend auf meinem Athlon64 X2.
Das hier ist der Code des "Programms":
/* Dieses Programm gibt 100.000 Mal "Hallo Welt" aus und misst die dafür benötigte Zeit */
#include <stdio.h>
#include <time.h>
#define GRENZE 100000. /* Anzahl der "Hallo Welt"-Meldungen */
int main(void)
{
int i;
for(i=0; i <= GRENZE; i++)
{
printf("Hallo Welt, zum %i. Mal\n", i);
}
printf("\nEnde erreicht! \nZeit: %8.3lf Sekunden\n", (double) clock() /CLOCKS_PER_SEC);
getchar(); /* Damit man das Ergebnis sehen kann */
return 0;
}
Alles anzeigen
Folgendes Ergebnis eröffnete sich mir:
Code kompiliert auf AMD Athlon Thunderbird 900 MHz, Windows XP, Debugmodus (keine Optimierungen), ausgeführt auf Athlon 64 X2 4200+ @ 2500 MHz
[Blockierte Grafik: http://www.abload.de/img/athlon91go.png]
Code kompiliert auf AMD Athlon64 X2 4200+ @ 2500 MHz, Windows XP, Debugmodus (keine Optimierungen), ausgeführt auf Athlon 64 X2 4200+ @ 2500 MHz
[Blockierte Grafik: http://www.abload.de/img/athlon64x2h2nq.png]
Man sieht also, daß der für die eigene Maschine generierte Binärcode ~14 mal schneller ist, als der fremde Binärcode. Umgedreht ergibt sich ein ähnliches Ergebnis auf meiner Voodoo-Kiste.
Ein ähnliches Ergebnis habe ich auch schon beobachtet, wenn man den Code auf einem Athlon XP 2600+ ausführt. Die Unterschiede sind zwar nicht so extrem wie in diesem Beispiel, aber deutlich zu bemerken.
Auf meinem Voodoo-System schaffe ich es auf eine Laufzeit von unter 20 Sekunden (~19,2s, Shot reiche ich eventuell noch nach), auf meinem alten Hauptsystem mit dem Athlon XP 2600+ schaffte ich es NICHT unter 23 Sekunden, obwohl das System deutlich schneller war, als meine Voodoo-Kiste.
Dieses Programm lässt sich übrigens besonders dafür misbrauchen, den Geschwindigkeitszuwachs, der durch das Übertakten entsteht, anzuzeigen und zu messen. Es reagiert auch auf Timing-Änderungen des RAM's. Ein Single-Core-Prozessor wird zu 100% ausgelastet und stürzt bei der Ausführung des Programms normal nicht ab, wenn er durch Übertakten instabil ist, das Programm stockt dann lediglich (zumindest bei meinen Experimenten) und die benötigte Zeit zum Ausführen wird mehr.
Daraus folgt: Wenn man z.B. den Grafiktreiber der Voodoo's eigens auf dem eigenem System kompiliert, ist die Chance SEHR HOCH, deutlich BESSERE Performance aus seiner Voodoo herauszuholen. Man muß den Code aber leider so anpassen, damit man ihn auch mit einem modernen Compiler übersetzen kann.
EDIT: Ich sollte nicht so große Postings machen, denn da entstehen viele Fehler