Hallo,
mal eine Programmierfrage. Ich wollte die Laufzeit eines Codeteils mal Pi*Daumen messen. Dazu, hab ich mir ueberlegt, waere es ganz nett, den time stamp counter der CPU auszulesen. Also eine Funktion schnell eingefuegt, die nichts weiter macht als diesen auszulesen und vor und nach dem Codeteil diese Funktion aufgerufen und das Ergebnis ausgegeben. Gibt es eine bessere Idee? Falls nicht, koennte mir jemand mal einen Tip fuer eine gebrauchsfaehige derartige Funktion geben, so cookbook-maessig?
danke im Voraus, Ulf
On Thu, 14 Nov 2002 22:08:05 +0100, Ulf Lorenz wrote:
mal eine Programmierfrage. Ich wollte die Laufzeit eines Codeteils mal Pi*Daumen messen. Dazu, hab ich mir ueberlegt, waere es ganz nett, den time stamp counter der CPU auszulesen. Also eine Funktion schnell eingefuegt, die nichts weiter macht als diesen auszulesen und vor und nach dem Codeteil diese Funktion aufgerufen und das Ergebnis ausgegeben. Gibt es eine bessere Idee? Falls nicht, koennte mir jemand mal einen Tip fuer eine gebrauchsfaehige derartige Funktion geben, so cookbook-maessig?
#include <stdio.h> #define rdtscl(low) \ __asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx")
int main() { int t1, t2; rdtscl(t1); // zu testender Code rdtscl(t2); printf("%d Takte benoetigt\n",t2-t1); return 0; }
Reinhard
Hallo Ulf,
Am Donnerstag, 14. November 2002 22:08 schrieb Ulf Lorenz:
Hallo,
mal eine Programmierfrage. Ich wollte die Laufzeit eines Codeteils mal Pi*Daumen messen. Dazu, hab ich mir ueberlegt,
Für Zeitmessungen Pi*Daumen sollten die Funktionen aus time.h (ich setze jetzt mal spontan C/C++ voraus) ausreichen (time(...), difftime(...)). Allerdings läufst du du bei Linux immer Gefahr, das die Zeitmessung durch das Multitasking verfälscht wird. (Ob man das umgehen kann, würde mich auch mal intressieren)
MfG Torsten
On Thursday 14 November 2002 22:08, Ulf Lorenz wrote:
mal eine Programmierfrage. Ich wollte die Laufzeit eines Codeteils mal Pi*Daumen messen.
time (als bash-Kommando) für das gesamte Programm: z.B.: time find ~ -name "mp3"
man gettimeofday
(liest bei entsprechender Kernel-Konfiguration den TSC)
Bernhard
Hallo Ulf :)
in etwas so:
/// #include <stdio.h> #define rdtsc (X) asm volatile("rdtsc":"=A" (X))
int main (void) { long long start, stop;
rdtsc(start); sleep(1); // oder irgendwas anderes rdtsc(stop); printf("%d\n", stop-start); } ///
gruesse Wolfgang
On 14-Nov-2002 Ulf Lorenz wrote:
Hallo,
mal eine Programmierfrage. Ich wollte die Laufzeit eines Codeteils mal
Pi*Daumen messen. Dazu, hab ich mir ueberlegt, waere es ganz nett, den time stamp counter der CPU auszulesen. Also eine Funktion schnell eingefuegt, die nichts weiter macht als diesen auszulesen und vor und nach dem Codeteil diese Funktion aufgerufen und das Ergebnis ausgegeben. Gibt es eine bessere Idee? Falls nicht, koennte mir jemand mal einen Tip fuer eine gebrauchsfaehige derartige Funktion geben, so cookbook-maessig?
danke im Voraus, Ulf
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Thursday 14 November 2002 22:08, Ulf Lorenz wrote:
mal eine Programmierfrage. Ich wollte die Laufzeit eines Codeteils mal Pi*Daumen messen. Dazu, hab ich mir ueberlegt, waere es ganz nett, den time stamp counter der CPU auszulesen. Also eine Funktion schnell eingefuegt, die nichts weiter macht als diesen auszulesen und vor und nach dem Codeteil diese Funktion aufgerufen und das Ergebnis ausgegeben. Gibt es eine bessere Idee? Falls nicht, koennte mir jemand mal einen Tip fuer eine gebrauchsfaehige derartige Funktion geben, so cookbook-maessig?
man 1 time man 2 gettimeofday man 1 gprof
Konrad
Am Freitag, dem 15. November 2002 um 06:12:54, schrieb Konrad Rosenbaum:
man 1 time man 2 gettimeofday man 1 gprof
oprofile wurde wohl noch nicht genannt. Wenn mir dann bei Gelegenheit die Profilingregister der Athlons erklären könnte...
Torsten
On Sat, 16 Nov 2002 17:16:31 +0100, Torsten Werner wrote:
Wenn mir dann bei Gelegenheit die Profilingregister der Athlons erklären könnte...
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/2200... S. 235ff
Reinhard
Am Samstag, dem 16. November 2002 um 17:48:34, schrieb Reinhard Foerster:
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/2200... S. 235ff
Danke! Ich kannte zwar diese Datei schon, nur hatte ich bisher diese Tabelle nicht gefunden...
Torsten
Hallo,
mal eine Programmierfrage. Ich wollte die Laufzeit eines Codeteils mal Pi*Daumen messen. Dazu, hab ich mir ueberlegt, waere es ganz nett, den time stamp counter der CPU auszulesen. Also eine Funktion schnell eingefuegt, die nichts weiter macht als diesen auszulesen und vor und nach dem Codeteil diese Funktion aufgerufen und das Ergebnis ausgegeben. Gibt es eine bessere Idee? Falls nicht, koennte mir jemand mal einen Tip fuer eine gebrauchsfaehige derartige Funktion geben, so cookbook-maessig?
Kann man z.B. per Inline Assembler machen:
#include <stdio.h> #define rdtsc(X) asm volatile("rdtsc":"=A" (X))
int main(void) { long long start, stop; rdtsc(start); <zu messender Code> rdtsc(stop); printf("Zeit %d\n", stop-start); }
Einmal genügt allerdings nicht, da ja z.B. der Prozess während der Ausführung unterbrochen werden kann. Also häufiger machen.
Gruss Steffen
On Thu, Nov 14, 2002 at 10:08:05PM +0100, Ulf Lorenz wrote:
Hallo,
mal eine Programmierfrage. Ich wollte die Laufzeit eines Codeteils mal Pi*Daumen messen. Dazu, hab ich mir ueberlegt, waere es ganz nett, den time stamp counter der CPU auszulesen. Also eine Funktion schnell eingefuegt, die nichts weiter macht als diesen auszulesen und vor und nach dem Codeteil diese Funktion aufgerufen und das Ergebnis ausgegeben. Gibt es eine bessere Idee? Falls nicht, koennte mir jemand mal einen Tip fuer eine gebrauchsfaehige derartige Funktion geben, so cookbook-maessig?
Für pi*daumen taugt "time" auf der Kommandozeile. Dafür brauchst du jedoch eine main-Funktion, die nur den gewünschten Codeteil ausführt.
Beispiel: ==root@sonne:~# time updatedb
real 2m44.957s user 0m8.600s sys 0m4.630s
thomas
lug-dd@mailman.schlittermann.de