Retourner au contenu associé (entrée de forum : Mesurer le temps d'exécution d'un fragment de code)
Posté par Damien Lespiau le 19 juin 2008 à 02:32. En réponse au message Mesurer le temps d'exécution d'un fragment de code. Évalué à 2.
#ifdef ARCH_X86_64 static inline guint64 counter_read_time(void) { guint64 a, d; __asm__ __volatile__ ( "rdtsc\n\t" : "=a" (a), "=d" (d) ); return (d << 32) | (a & 0xffffffff); } #elif ARCH_X86 static inline guint64 counter_read_time(void) { guint64 l; __asm__ __volatile__ ( "rdtsc\n\t" : "=A" (l) ); return l; } #endif static inline guint64 counter_elapsed(guint64 t0, guint64 t1) { return t1 - t0; }
guint64 start, end, cycles_nb; start = counter_read_time(); { /* code à mesurer */ } end = counter_read_time(); cycles_nb = counter_elapsed(start, end);
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
[^] # Re: TSC
Posté par Damien Lespiau . En réponse au message Mesurer le temps d'exécution d'un fragment de code. Évalué à 2.
#ifdef ARCH_X86_64
static inline guint64 counter_read_time(void)
{
guint64 a, d;
__asm__ __volatile__ (
"rdtsc\n\t"
: "=a" (a), "=d" (d)
);
return (d << 32) | (a & 0xffffffff);
}
#elif ARCH_X86
static inline guint64 counter_read_time(void)
{
guint64 l;
__asm__ __volatile__ (
"rdtsc\n\t"
: "=A" (l)
);
return l;
}
#endif
static inline guint64 counter_elapsed(guint64 t0, guint64 t1)
{
return t1 - t0;
}
et ça s'utilise avec :
guint64 start, end, cycles_nb;
start = counter_read_time();
{
/* code à mesurer */
}
end = counter_read_time();
cycles_nb = counter_elapsed(start, end);