linux-mips
[Top] [All Lists]

Re: Cycle counter

To: Richard Hodges <rh@matriplex.com>
Subject: Re: Cycle counter
From: Gareth <g.c.bransby-99@student.lboro.ac.uk>
Date: Mon, 16 Sep 2002 10:02:25 +0100
Cc: linux-mips@linux-mips.org
In-reply-to: <Pine.BSF.4.10.10209130937060.47912-100000@mail.matriplex.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <20020913172824.5c7ed0a4.g.c.bransby-99@student.lboro.ac.uk> <Pine.BSF.4.10.10209130937060.47912-100000@mail.matriplex.com>
Sender: linux-mips-bounce@linux-mips.org
Thanks for the help. This program is not running in linux, it is running as a
single application on the core. The processor is a 4kc. I tried your code and it
works fine. I just deleted your do_something() so the timer starts and stops
immediatly. I get 21 ticks now rather than the 8000 or so I was getting with my
code which is much more realistic.





On Fri, 13 Sep 2002 09:41:27 -0700 (PDT)
Richard Hodges <rh@matriplex.com> wrote:

> On Fri, 13 Sep 2002, Gareth wrote:
> 
> > Another question reagarding the mips malta board. I am wanting to be
> > able to find out how many cycles a certain loop takes to execute. I
> > understand there is a cycle counter built into the processor that I
> > want to use for this. I have a bit of inline assembly to do the job
> > but the results I am getting are not consistent so i think there is
> > probably something wrong with my attempt at the inline assembly. Here
> > is the code :
> 
> >   void al_signal_start(void)
> >   {
> >       int zero,temp;
> >       __asm__("move $2, $zero");
> >       __asm__("nop");
> >           __asm__("mtc0 $2, $9" :  : "r" (temp));
> 
> Is this from user space?  If so, this may fail from user space.  (I sure
> hope it does!)
>  
> > As you can see, main just starts and stops the counter with no
> > instructions in between. I expexcted the cycle count to be zero or
> > close to it because of the instructions required to get the count but
> > this is not the case. I am getting numbers like 8499. Is there just
> > something wrong with my assembly or is there something else I am
> > missing?
> 
> Try something like this:
> 
> #define GET_CLOCK(var){__asm__ volatile("mfc0 %0,$9":"=r"(var));}
> {
>       unsigned int clock1, clock2;
> 
>       GET_CLOCK(clock1);
>       do_something();
>       GET_CLOCK(clock2);
> 
>       printf("ticks = %d\n", clock2 - clock1);
> }
> 
> -Richard
> 
> 
> 

<Prev in Thread] Current Thread [Next in Thread>