[Top] [All Lists]

RE: Cycle counter

To: 'Gareth' <>,
Subject: RE: Cycle counter
From: "Zajerko-McKee, Nick" <>
Date: Fri, 13 Sep 2002 12:40:41 -0400
Original-recipient: rfc822;
Is this under a OS or a single execution?  Are there interrupts enabled? If
so, disable them for measurements. (Clock interrupt, serial port, etc.).

BTW, most MIPS implementations for OS's and monitors use the count/compare
for their main tick. If you set it to zero you may be stepping on someone's
tick.  A better method might be to read the count register and read it again
at the end and do a difference - that way you preserve other's values.   

Other reasons for a delay: to fetch code (external mem ->cache -> cpu) and
push items onto/off the stack...  Theres probably more that I can't think of
right now...

-----Original Message-----
From: Gareth []
Sent: Friday, September 13, 2002 12:28 PM
Subject: Cycle counter


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
a cycle counter built into the processor that I want to use for this. I have
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
inline assembly. Here is the code : 

  void al_signal_start(void);
  size_t al_signal_finished(void);
  unsigned int GetcpuCycles(void);

  char str[8];

  int main (void)
      double x;
      x = al_signal_finished();
      printf("GetcpuCycles says : %f \n",x);

      return 0;

  size_t al_signal_finished(void)
      return GetcpuCycles();    

  void al_signal_start(void)
          int zero,temp;
          __asm__("move $2, $zero");
          __asm__("mtc0 $2, $9" :  : "r" (temp));

  unsigned int GetcpuCycles(void)
          int temp;
          __asm__(".set reorder");
          __asm__("mfc0 $2, $9" : : "r" (temp));
          /*__asm__("jr $31" );*/

As you can see, main just starts and stops the counter with no instructions
between. I expexcted the cycle count to be zero or close to it because of
instructions required to get the count but this is not the case. I am
numbers like 8499. Is there just something wrong with my assembly or is
something else I am missing?

Thanks for any help

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