2012-04-10 8 views
0

Ich habe einen einfachen Code in ANSI C geschrieben und möchte nun einige Messungen durchführen.Wie berechnet man ANSI C-Code-Leistung?

Ich habe die Ausführungszeit gemessen (mit clock() Funktion unter dem Windows-Betriebssystem und clock_gettime() unter dem Linux-Betriebssystem).

Jetzt möchte ich berechnen, wie viele IPSes (Anweisungen pro Sekunde) meine CPU ausführt, während dieser Code von mir ausgeführt wird. (Ja, ich weiß, dass MIPS ein pathetischer Parameter ist, aber selbst das möchte ich berechnen)

Es wäre auch schön zu sehen, wie viele CPIs (Zyklen pro Befehl) es braucht, um z.B. Zusatz von 3 Elementen und anderen Operationen, die ich ausführe. Google sagt, wie man die Anzahl von MIPS mit Taschenrechner berechnet, etwas über meine CPU (seine Taktgeschwindigkeit), einfache Mathematik und eine Reihe anderer Parameter (wie CPI), aber nicht wie man diese bekommt!

Ich habe auch keine C/C++ - Funktion gefunden, die die Anzahl der Taktzyklen zurückgeben würde, die benötigt werden, um z.B. Zugriff auf eine lokale Variable. Es gibt auch ein Problem, ein Referenzhandbuch von Intel/AMD für eine moderne CPU zu finden, das Informationen über Opcodes und andere hätte.

Ich habe manuell berechnet, dass mein ANSI C-Code 37 Operationen benötigt, aber das sind ANSI C-Operationen, keine CPU-Anweisungen.

+3

Haben Sie sich die "Related" -Liste auf der rechten Seite angesehen? –

+0

Haben Sie gprof angeschaut? – Kevin

+0

@phresnel - viele von denen sind für den MIPS-Prozessor, die Sinus OP erwähnt Windows nehme ich an, dass sie nicht verwenden. Gzegorz - Vielleicht möchten Sie das MIPS-Tag entfernen –

Antwort

0

Der einfachste Weg, auf Fenster hohe Genauigkeit Timing des Erhaltens ist Performance finden How to use QueryPerformanceCounter?
Dann einfach einige Funktionen benötigen, die die Operationen, die Sie in Timing Interesse durchzuführen. Sie müssen ein wenig vorsichtig sein, Caching etc., so führen Sie die Berechnung mehrmals und schauen Sie sich die Verteilung der Zeiten