Zeit der Anwendung messen?
-
Hallo Leute
habe meinen C-Code compiliert ohne Fehler juhuuu. Es funktioniert auch alles wunderbar, jedoch würde ich gerne die Performance/Geschwindigkeit messen. Welche funktion macht das?
Also Struktur sollte so aussehen:
main() { start messung //Funktion ende messung ausgabe Zeit in ms oder us }
Grüße
Hibert
-
Habe eine Lösung gefunden
DWORD tick = GetTickCount(); DWORD time= timeGetTime(); // Code printf("Time needed: %i ms",GetTickCount()-tick);// printf("Time needed: %i ms \n",timeGetTime()-time); //
Ich bekomme unterschiedliche Ergebnise welches Ergebnis kann ich eher trauen?
Wie kann ich in us Messen? Bräuchte es genauer
-
Ich weiß nicht, ob das genauer ist:
#include <time.h> clock_t start, finish; double elapsed_time; start = clock(); finish = clock(); elapsed_time = ((double)(finish - start))/CLOCKS_PER_SEC; // in Sekunden
-
Hallo,
die bisher genannten Timer sind recht ungenau: min. +- 10 msschau mal dort nach:
QueryPerformanceCounter, QueryPerformanceFrequency
Gruß Frank
-
Danke Frank!
//1. Messung QueryPerformanceCounter((LARGE_INTEGER*)&g_CurentCount); // Code //2. Messung QueryPerformanceCounter((LARGE_INTEGER*)&g_LastCount); dTimeDiff = (((double)(g_LastCount-g_CurentCount))/((double)g_Frequency)); printf("Time: %d ????ns/ms???) \n", dTimeDiff);// ms? ns?
Jetzt hätte ich nur noch eine Frage: Was für einen Wertebereich bekomm ich als Ergebnis im jetztigen Code bekomm ich da eine komsich Zahl mal minus mal plus. Wie stell ich das Ergebnis in us und ms dar?
Gruß
Hilbert
-
Es könnte daran liegen, dass Du schon während der Berechnung auf double castest.
Das Ergebnis erst casten...
-
hmm klappt nicht! jetzt kommt 0 raus... aber die berechnung sollte ja eigentlich auf us genau sein!
Kann mir vlt jemand am obigen Code sagen wie ich Werte in us und ms bekomme wär echt super!
-
Hallo,
Wenn du so genau messen willst, musst du auch präziese programmieren.
Mache dir folgende Punkte klar:+ Welche Bandbreite haben die verwendeten Variabeln ?
+ Wann (Zeit) läuft der verwendete Counter über ?
+ Wie genau ist der verwendete Counter maximal ?
+ Wann (Zeit) läuft meine verwendete Formel über ?
+ Wieviel Zeit benötigt eine Zeitmessung + Umrechnung ?
+ Also wie genau ist der verwendete Counter + Formel tatsächlich,
bzw. inweiweit beeinflusst er meine Messung ?Hilfe:
Bitte verwende nicht double sonder arbeite solange wie möglich mit int64Für kleine Zeiten (nehme ich mal an):
tUsed = (t0 - t1) * 1000000 / f0; // [µs]Wichtig ist das die Multiplikation vor der Division erfolgt,
sonst kommt 0 raus!Für große Zeiten verwendet man diesen Counter besser nicht
Darstellung z.B.:
printf("tUsed = %d.%d [s]\n", tUsed / 1000000, tUsed % 1000000);Viel Erfolg, Gruß Frank
ps. ich hab was gut bei dir
-
Danke Frank! Ja du hast recht ich hab was gut bei dir :)!
Die Zeitmessung ist für einen Bildverarbeitungsalgorithmus das nur auf 1 Bild läuft, wo ich nur die Zeit der Formel-berechnung brauche, also Bild einlesen/ausgeben und so ist unwichtig! Deswegen sollte die Zeit auf mindestens +-1ms genau sein. Wenn das durch den QueryPerformanceCounter gegeben ist, dann ist mein Problem damit besiegelt :)!
Nochmals danke und ein schönes WE
Hilbert