-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi, Am Freitag, 10. September 2004 19:40 schrieb Friedrich W. H. Kossebau:
Hallo,
ich versuche gerade, etwas Delphi nach C unter Linux zu transportieren.
Zur Zeitmessung^WZeitschätzung wird unter Delphi auf den Zyklusticker des Pentium zugegriffen:
<code> var: Start,Now,SystemFrequency: Int64;
queryPerformanceFrequency( SystemFrequency ); queryPerformanceCounter(Start);
queryPerformanceCounter(Now); Time := (Now-Start)/ SystemFrequency)*1000; // in ms
</code>
queryPerformanceCounter() hat sein Pendant (im Falle eines Pentium) sicher in <code src="asm/msr.h"> #define rdtscll(val) \ __asm__ __volatile__("rdtsc" : "=A" (val))
</code> Aber queryPerformanceFrequency()? <code>grep "cpu MHz" /proc/cpuinfo</code> kann es ja wohl nicht sein. Kann da jemand einen Tip geben?
Wenn ich das richtig verstehe, willst du die Taktfrewuenz in MHz berechnen. Folgender Code sollte es können:
include <stdio.h> #include <unistd.h>
#define rdtsc(X) asm volatile("rdtsc":"=A" (X))
int main(void) { long long start, stop, takte, speed;
rdtsc(start); sleep(10); rdtsc(stop); takte=stop-start; speed=takte/10000000; printf("Tasktgeschwindigkeit: %d MHz.\n",speed);
}
Wobei die 10 sekündische Wartezeit (sleep(10);) wohl etwas sehr lang ist. ;-) Prinzipiell zählt das Programm einfach die Takte, die die Befehle zwischen rdtsc(start); und rdtsc(stop); brauchen.
Ciao, Martin
- -- | Martin Eisfeld martin.eisfeld@gmx.net | GnuPG-KeyID: 0x70AC13D5 | Homepage: http://www.martin-eisfeld.de/ | LinuxInfoTag Dresden * 30.10.2004 * http://www.linuxinfotag.de/