Sponsored Content
Full Discussion: RDTSC use in C:
Top Forums Programming RDTSC use in C: Post 302237580 by GloriousDaisy on Thursday 18th of September 2008 12:58:16 AM
Old 09-18-2008
RDTSC use in C:

I have to use rdtsc on ubuntu for performance evaluation. But i am not getting the correct value. I am placing a sleep on 10 seconds, but value i get is some 1 sec... i dont know where im going wrong?

Code:
#include<sys/time.h>
#include<time.h>
#include<stdio.h>
typedef unsigned long long ticks;

static __inline__ ticks getticks(void)
{
     unsigned a, d;
     asm("cpuid");
     asm volatile("rdtsc" : "=a" (a), "=d" (d));

     return (((ticks)a) | (((ticks)d) << 32));
}
int main(){
     int r = 0;
     ticks tick,tick1,tickh;
     unsigned time =0;

     tick = getticks();
   
     sleep(10);
   
     tick1 = getticks();
   
     time = (unsigned)((tick1-tick)/1662543);
    printf("\ntime in MS%u\n",time);
return 0;
}

cat /proc/cpuinfo gives
Code:
pprocessor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 14
model name      : Genuine Intel(R) CPU           T2300  @ 1.66GHz
stepping        : 8
cpu MHz         : 1662.543
cache size      : 2048 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe constant_tsc up arch_perfmon bts pni monitor vmx est tm2 xtpr
bogomips        : 3328.87
clflush size    : 64


Last edited by vino; 09-18-2008 at 03:45 AM.. Reason: added code tags
 
SLEEP(3)						   BSD Library Functions Manual 						  SLEEP(3)

NAME
sleep -- suspend thread execution for an interval measured in seconds LIBRARY
Standard C Library (libc, -lc) SYNOPSIS
#include <unistd.h> unsigned int sleep(unsigned int seconds); DESCRIPTION
The sleep() function suspends execution of the calling thread until either seconds seconds have elapsed or a signal is delivered to the thread and its action is to invoke a signal-catching function or to terminate the thread or process. System activity may lengthen the sleep by an indeterminate amount. This function is implemented using nanosleep(2) by pausing for seconds seconds or until a signal occurs. Consequently, in this implementa- tion, sleeping has no effect on the state of process timers, and there is no special handling for SIGALRM. RETURN VALUES
If the sleep() function returns because the requested time has elapsed, the value returned will be zero. If the sleep() function returns due to the delivery of a signal, the value returned will be the unslept amount (the requested time minus the time actually slept) in seconds. SEE ALSO
nanosleep(2), usleep(3) STANDARDS
The sleep() function conforms to ISO/IEC 9945-1:1990 (``POSIX.1''). HISTORY
A sleep() function appeared in Version 7 AT&T UNIX. BSD
February 13, 1998 BSD
All times are GMT -4. The time now is 06:43 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy