Dauer einer Schleife messen?
-
lord_fritte schrieb:
Hm ne geht irgendwie auch nicht.
geht schon, steht doch alles in dem pdf.
du bist einfach nur zu blöd dazu
-
Ist rdtsc nicht falsch, wenn zwischendurch der Thread wechselt?
-
Diese Variante geht nur mit Intel CPUs und nur wenn der Thread nicht wechselt.
Es gibt jedoch eine einfachere und zuverlässigere Methode, den Performance Counter. Dieser zählt die CPU-Tackte seit systemstart, jedoch AUßERHALB der CPU. Dadurch ist er Threadunabhängig. Mit den Funktionen QueryPerformanceCounter und QueryPerformanceFrequency kannst du die Zahl der CPU Tackte seit Systemstart und die Zahl der CPU-Tackte pro Sekunde berechnen.
Dieser Code lässt sich jedoch nur unter Windows benutzen.#include <windows.h> int main() { LONGLONG llFrequency = 0; double dFrequency = 0.0; LONGLONG llStartTime = 0; LONGLONG llEndTime = 0; double dTime = 0.0; // Frequenz abfragen (letztendlich die Hz deiner CPU) QueryPerformanceFrequency((LARGE_INTEGER*)(&llFrequency)); dFrequency = (double)llFrequency; // Startzeit messen QueryPerformanceCounter((LARGE_INTEGER*)(&llStartTime)); // Hier führst du deine Schleife aus // Endzeit messen QueryPerformanceCounter((LARGE_INTEGER*)(&llEndTime)); // Millisekunden berechnen dTime = ((double)(llEndTime - llStartTime) / (dFrequency * 0.001)); // Ausgabe printf("Vergangene Zeit: %.8f ms", dTime); return 0; }
-
Hallo,
ich bin mir nicht sicher, ob es wirklich angebracht ist; vielleicht ja auch zu altertümlich:
Ich arbeite mit "einfachen" Prozessoren (µController). Wenn ich genauer wissen muss, wie lange ein Programmteil läuft mache ich Folgendes:1. Den Prozessortaktfrequenz herausfinden und Taktdauer berechen. Dabei reicht oft der theoretische Wert.
1b. Wieviele Takte beinhaltet ein Taktzyklus des jeweiligen Geräts. (zZ. arbeite ich zB mit µControllern, die 6 oder 12 Takte je Zyklus unterstützen)2. Herausfinden, wieviele Taktzyklen die einzelnen Befehle des Programmteils zur Abarbeitung benötigen.
2b. Optional einbeziehen, wie oft eine Schleife durchlaufen wird.3. Taktdauer * Takte pro Zyklus * Anzahl der Taktzyklen (* Durchläufe) = Laufzeit des Programm(teil)s
Ist natürlich mit Aufwand verbunden
Nur so als Anregung
-
Kolumbus schrieb:
ich bin mir nicht sicher, ob es wirklich angebracht ist; vielleicht ja auch zu altertümlich:
Ich arbeite mit "einfachen" Prozessoren (µController). Wenn ich genauer wissen muss, wie lange ein Programmteil läuft mache ich Folgendes:
...eigentlich macht der µC-bastler das so:
1. GPIO togglen
2. oszi dranhalten
3. fertich.
wenn's ganz genau sein soll kann man ja noch die laufzeiten der asm-befehle abziehen, die den portpin schalten
-
gibt's ja gar nicht
schrieb:
eigentlich macht der µC-bastler das so:
1. GPIO togglen
2. oszi dranhalten
...Schlaumeier! Was hälst du jetzt ran, wenn Du kein Oszi hast?
Oder wolltest Du mir ein Oszi stiften?
-
Kolumbus schrieb:
gibt's ja gar nicht
schrieb:
eigentlich macht der µC-bastler das so:
1. GPIO togglen
2. oszi dranhalten
...Schlaumeier! Was hälst du jetzt ran, wenn Du kein Oszi hast?
Oder wolltest Du mir ein Oszi stiften?
Man baut sich einen einfachen Zeitnehmer mit einem µc, ist doch klar
-
Kolumbus schrieb:
Schlaumeier! Was hälst du jetzt ran, wenn Du kein Oszi hast?
dann besorg dir schnell eins. gehört zur grundausstattung eines jeden µC-hobbyisten.
-
Tim schrieb:
Man baut sich einen einfachen Zeitnehmer mit einem µc, ist doch klar
gar nicht so abwegig:
http://sharon.esrac.ele.tue.nl/mirrors/zl1bpu/micro/CNTR/CNTR.htm
-
klar, geht auch
schrieb:
Tim schrieb:
Man baut sich einen einfachen Zeitnehmer mit einem µc, ist doch klar
gar nicht so abwegig:
http://sharon.esrac.ele.tue.nl/mirrors/zl1bpu/micro/CNTR/CNTR.htmNatürlich ist das nicht abwegig. Ich würde nie etwas abwegiges vorschlagen.