Code: Select all
unsigned int cycles;
unsigned int cpuidRDTSCcycles;
__forceinline void startRDTSC()
{
__asm
{
xor eax, eax
cpuid
rdtsc
mov [cpuidRDTSCcycles], eax
xor eax, eax
cpuid
rdtsc
sub eax, [cpuidRDTSCcycles]
mov [cpuidRDTSCcycles], eax
xor eax, eax
cpuid
rdtsc
mov [cpuidRDTSCcycles], eax
xor eax, eax
cpuid
rdtsc
sub eax, [cpuidRDTSCcycles]
mov [cpuidRDTSCcycles], eax
xor eax, eax
cpuid
rdtsc
mov [cpuidRDTSCcycles], eax
xor eax, eax
cpuid
rdtsc
sub eax, [cpuidRDTSCcycles]
mov [cpuidRDTSCcycles], eax
xor eax, eax
cpuid
rdtsc
mov [cycles], eax
}
}
__forceinline void stopRDTSC()
{
__asm
{
xor eax, eax
cpuid
rdtsc
sub eax, [cycles]
sub eax, [cpuidRDTSCcycles]
mov [cycles], eax
}
}
Code: Select all
void main (int argc, char**argv)
{
for ( int i = 0; i < 7; i++)
{
startRDTSC();
code2measure ...
stopRDTSC();
}
printf("cycles by rdtsc = %d\n", cycles);
}
Code: Select all
void main (int argc, char**argv)
{
const int N_TRIALS = 100000;
unsigned int performanceHistogram[1024];
memset (performanceHistogram, 0, sizeof (performanceHistogram));
for ( int i = 0; i < N_TRIALS; i++)
{
startRDTSC();
code2measure ...
stopRDTSC();
++performanceHistogram[cycles & 1023];
}
// print histogram
}
Winapi has QueryPerformanceCounter Function
http://msdn.microsoft.com/en-us/library ... S.85).aspx

