On Tue, 30 Apr 2002 22:46:41 +0200, Torsten Werner wrote:
Hallo,
Ich versuche mich gerade mit Codeoptimierung und benutze dazu den Profiler 'oprofile', der die 'Performance Monitoring Counters' der Pentium- und Athlon-Prozessoren ausnutzt. Leider bin ich etwas überfordert mit der Bedeutung dieser Counter. Was bedeutet z. B. 'RETIRED_INSNS' oder 'RETIRED_OPS'? Der 'AMD Athlon Processor x86 Code Optimization Guide' umfasst 328 Seiten, aber hilft mir auch nicht wirklich weiter. Hat jemand Hinweise?
Kein Ahnung was das Ding genau tut. CPUs ab Pentium aufwärts (und Athlons) können jedenfalls Takte zählen, was für mich als "Profiling" bisher reicht. Ich habe das schonmal an jemanden gemailt und jetz wieder rausgekramt: ----------------- ... und ein Beispiel zum Takte zählen mit gcc auf PCs:
#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; }
Je nach Rechner vergehen natürlich allein durch den 2-maligen Aufruf von rdtsc direkt hintereinander schon ein paar Takte, die man ggf. rausrechen muß. Auf meinem Rechner sind das 11 Takte. Man kann das ganze auch noch aufbohren und statt nur 32 Bit die vollen 64Bit des Zählers auswerten. In http://cedar.intel.com/software/idap/media/pdf/rdtscpm1.pdf erzählt Intel, wozu der Befehl rdtsc gut ist. ----------------
Reinhard