Current and correct CPU clock and asm("cpuid")

Peter Senna Tschudin peter.senna at gmail.com
Mon Oct 3 14:33:36 EDT 2011


Hi Rohan.

It is really good reference. Thanks!

Peter

On Mon, Oct 3, 2011 at 1:17 AM, rohan puri <rohan.puri15 at gmail.com> wrote:
>
>
> On Mon, Oct 3, 2011 at 6:57 AM, Peter Senna Tschudin <peter.senna at gmail.com>
> wrote:
>>
>> Dear list members,
>>
>> I'm following:
>>
>> http://people.virginia.edu/~chg5w/page3/assets/MeasuringUnix.pdf
>>
>> And I'm trying to measure executing time of simple operations with RDTSC.
>>
>> See the code below:
>>
>> #include <stdio.h>
>> #define CPU_THOUSAND_HZ 800000
>> 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));
>> }
>>
>> void main() {
>>        ticks tickBegin, tickEnd;
>>        tickBegin = getticks();
>>
>>        // code to time
>>
>>        tickEnd = getticks();
>>        double time = (tickEnd-tickBegin)/CPU_THOUSAND_HZ;
>>
>>        printf ("%Le\n", time);
>> }
>>
>> How can the C code detects the correct value for CPU_THOUSAND_HZ? The
>> problems I see are:
>>  - It is needed to collect the information for the CPU that will run
>> the process. On Core i7 processors, different cores can run at
>> different clock speed at same time.
>>  - If the clock changes during the execution of process, what should
>> it do? When is the best time for collecting the clock speed?
>>
>> The authors of the paper are not sure about the effects of
>> "asm("cpuid");" Does it ensure that the entire process will run on the
>> same CPU, and will serialize it avoiding out of order execution by the
>> CPU?
>>
>> Thank you very much! :-)
>>
>> Peter
>>
>>
>> --
>> Peter Senna Tschudin
>> peter.senna at gmail.com
>> gpg id: 48274C36
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
> Hi Peter,
>
> Excellent reference http://en.wikipedia.org/wiki/Time_Stamp_Counter
>
> Also, your interpretation is right. There are lots of things which need to
> be considered instead of setting CPU_THOUSAND_HZ to any particular value,
> some of them are whether its multi-core or single core CPU. On multi-core
> its quite difficult to get the correct answers, The problems are mentioned
> in the above wiki link.
>
> Regards,
> Rohan Puri
>



-- 
Peter Senna Tschudin
peter.senna at gmail.com
gpg id: 48274C36



More information about the Kernelnewbies mailing list