Non. Vous devrez utiliser un code spécifique à la plate-forme pour le faire. Sur x86 et x86-64, vous pouvez utiliser 'rdtsc' pour lire le compteur d'horodatage.
Portez simplement l'assembly rdtsc que vous utilisez.
__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;
}
J'ai besoin d'un minuteur haute résolution pour le profileur intégré dans la version Linux de notre application. Notre profileur mesure des étendues aussi petites que des fonctions individuelles, il a donc besoin d'une précision de minuterie supérieure à 25 nanosecondes.
Avez-vous pensé à oprofile
ou perf
? Vous pouvez utiliser le matériel du compteur de performances sur votre processeur pour obtenir des données de profilage sans ajouter d'instrumentation au code lui-même. Vous pouvez voir les données par fonction, ou même par ligne de code. Le "seul" inconvénient est qu'il ne mesurera pas le temps d'horloge murale consommé, il mesurera le temps CPU consommé, il n'est donc pas approprié pour toutes les enquêtes.