Benchmark / Additionen pro Sekunde ungenau
-
Hi
ich habe ein Programm das die Geschwindigkeit der CPU Testen soll.
Die Meßschleife sieht etwa so aus:
a = -429479, b = 20039732, c = 3576367; start = clock(); for( n = 1000000000; n; n--) { a = c + b; b = a + c; c = b + a; a = c + b; b = a + c; c = b + a; a = c + b; b = a + c; c = b + a; a = c + b; } ende = clock(); zeit = ende - start - zeit_leer;
wenn ich die Schleife mehrmals hintereinander kopiere kommen jedes mal andere Ergebnisse raus (Die Zeit schwankt zwischen 1800 und 2200 ms) interessanter weise ist die 1. Schleife immer am schnellsten. (immer zw. 1800 und 1840 ms). Ich teste das Programm im Dos-Modus, es kann also nicht daran liegen dass Windows dem Programm weniger CPU-Leistung zuteilt.
Habt ihr ne Idee warum die CPU irgendwann keine Lust mehr hat und langsamer wird?
-
Was heißt DOS-Modus (Konsole oder richtig DOS bzw. DOS unter Win9x)?
Ist dein Programm auch 16Bit compiliert? Welchen Datentyp haben a, b und c?Meine Vermutung ist, dass es an den Additionen liegt bzw. an den großen Zahlen, die da verwendet werden und zustande kommen durch die Additionen.
clock() ist übrigens recht ungenau. Der Wert wird nur ca. alle 18 ms aktualisiert.
-
Du solltest die Prozess Priorität hoch setzen und die unterschiedliche Zeiten können durch Cache-Effekte etc. herbeigeführt werden.
-
Wenn du in windows wärest könntest du den QueryPerformanceCounter verwenden.
Wieso machst du ein solches Programm eigentlich in DOS? (wenn man fragen darf)
-
Ich habs extra in DOS und nicht in Windows gemacht damit ich immer die volle CPU-Leistung habe. Ich starte das Programm auch im "richtigen" DOS-Modus unter Win98.
AJ schrieb:
Ist dein Programm auch 16Bit compiliert? Welchen Datentyp haben a, b und c?
Meine Vermutung ist, dass es an den Additionen liegt bzw. an den großen Zahlen, die da verwendet werden und zustande kommen durch die Additionen.
a, b, c sind int. Kompiliert habe ich mit dem DJGPP, da hat ein int IMHO doch 32-Bit.
AJ schrieb:
clock() ist übrigens recht ungenau
Wenn Clock nur ne Auflösung von 18 ms hat, gibts denn 'nen genaueren Befehl?
kingruedi schrieb:
die unterschiedliche Zeiten können durch Cache-Effekte etc. herbeigeführt werden.
klingt logisch, kann ich dass irgendwie verhindern?
-
j_freeze schrieb:
a, b, c sind int. Kompiliert habe ich mit dem DJGPP, da hat ein int IMHO doch 32-Bit.
Wie groß ein int ist, hängt davon ab für welches System das Programm kompiliert ist. Wenn dein int 32 Bit hätte, dann hättest du auch für ein 32Bit-System kompiliert und das läuft IMHO nicht unter DOS, da DOS ein 16Bit-System ist.
Wenn Clock nur ne Auflösung von 18 ms hat, gibts denn 'nen genaueren Befehl?
Nicht in den Standard-Bibliotheken.
kingruedi schrieb:
die unterschiedliche Zeiten können durch Cache-Effekte etc. herbeigeführt werden.
klingt logisch, kann ich dass irgendwie verhindern?
Evtl. kannst du es im BIOS einstellen, aber während des Programmablaufs siehts da eher duster aus.
-
www.delorie.com/djgpp/ schrieb:
DJGPP is a complete 32-bit C/C++ development system for Intel 80386 (and higher) PCs running DOS
sizeof( a)
sagt auch 4 Byte