Nein. Sie müssen dazu plattformspezifischen Code verwenden. Auf x86 und x86-64 können Sie 'rdtsc' verwenden, um den Zeitstempelzähler zu lesen.
Portieren Sie einfach die rdtsc-Assembly, die Sie verwenden.
__inline__ uint64_t rdtsc(void) {
uint32_t lo, hi;
__asm__ __volatile__ ( // serialize
"xorl %%eax,%%eax \n cpuid"
::: "%rax", "%rbx", "%rcx", "%rdx");
/* We cannot use "=A", since this would use %rax on x86_64 and return only the lower 32bits of the TSC */
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return (uint64_t)hi << 32 | lo;
}
Ich brauche einen hochauflösenden Timer für den eingebetteten Profiler im Linux-Build unserer Anwendung. Unser Profiler misst Bereiche, die so klein sind wie einzelne Funktionen, daher benötigt er eine Timer-Präzision von besser als 25 Nanosekunden.
Haben Sie an oprofile
gedacht? oder perf
? Sie können die Leistungsindikatorhardware auf Ihrer CPU verwenden, um Profilerstellungsdaten abzurufen, ohne dem Code selbst Instrumentierung hinzuzufügen. Sie können Daten pro Funktion oder sogar pro Codezeile anzeigen. Der "einzige" Nachteil besteht darin, dass es nicht die verbrauchte Zeit der Wanduhr misst, sondern die verbrauchte CPU-Zeit, sodass es nicht für alle Untersuchungen geeignet ist.