I don't know about the BlackFin, but on the ADSP SHARC family, there is a
"hidden" register called EMUCLK (emulator clock) that is useful for counting
cycles. It is read-only, so you can't zero it out, but as long as your function
won't wrap more than once, you can simply compensate for any wrapping (which is
unlikely on the SHARC, since it is a 32-bit counter and typically doesn't wrap
for hours). But I think your method looks fine.
--
Jon Harris
SPAM blocker in place:
Remove 99 (but leave 7) to reply
<t_gatu@hotmail.com> wrote in message
news:1123662998.742308.233720@g43g2000cwa.googlegroups.com...
> Hi all, I'm new to programming the ADSP-BF533 and I would like to know
> the recommended way to count the nr of cycles used by a function.
>
> Here's what I'm doing now:
>
> main()
> {
> int start, stop, overhead, cycles;
>
> start = sysreg_read(reg_CYCLES);
> stop = sysreg_read(reg_CYCLES);
> overhead = stop - start;
>
> sysreg_write(reg_CYCLES, 0x0); // don't want any overflow
> start = sysreg_read(reg_CYCLES);
> filter(); // function I want to profile
> stop = sysreg_read(reg_CYCLES);
> cycles = stop - start - overhead;
> }
>
> Will this give an accurate cycle count? Or is there another, better way
> to do this?
>
> Thanks,
> T.
>
Reply by ●August 10, 20052005-08-10
Hi all, I'm new to programming the ADSP-BF533 and I would like to know
the recommended way to count the nr of cycles used by a function.
Here's what I'm doing now:
main()
{
int start, stop, overhead, cycles;
start = sysreg_read(reg_CYCLES);
stop = sysreg_read(reg_CYCLES);
overhead = stop - start;
sysreg_write(reg_CYCLES, 0x0); // don't want any overflow
start = sysreg_read(reg_CYCLES);
filter(); // function I want to profile
stop = sysreg_read(reg_CYCLES);
cycles = stop - start - overhead;
}
Will this give an accurate cycle count? Or is there another, better way
to do this?
Thanks,
T.