ADSP-BF609 乘除运算需要的周期数及测试方法
ADSP-BF609 乘除运算需要的周期数及测试方法1 cycle = 1/主频;当BF609运行在最高主频500MHz时,1 cycle = 2ns;
需要说明的是:DSP是流水线指令,同样的运算,放到代码的不同位置,测得的时间不完全相同,看编译效果;
1.完成1次常量的乘法:6 cycles;例如:14.05 * 177777777.888888888;
2.完成1次常量的除法:10 cycles;例如:14.05 / 177777777.888888888;
3.完成1次变量的乘法:72 cycles;例如:float i * float k ;
4.完成1次变量的除法:251 cycles;例如:float i / float k ;
5.完成变量的乘除法:317 cycles;例如:float i * float j/ float k ;
测试方法:
CCES提供代码运行周期数的测试函数,
[*]#include <adi_types.h>
[*]#define PROFBEG(TAG) asm volatile("%0=cycles;" : "=d"(TAG.nCycles))
[*]#define PROFEND(TAG) asm volatile("r0=cycles; %0=r0-%0; %1=%0+%1;" : "+d"TAG.nCycles), "+d"TAG.nSum)::"R0")
[*]typedef struct
[*]{
[*] uint32_t nCycles;
[*] uint32_t nSum;
[*]} prof_tgoProfile;
[*]PROFBEG(goProfile);//在需要测试的代码前加PROFBEG()
[*]Result = 14.05/177777777.888888888;
[*]PROFEND(goProfile);//在结束点加PROFEND()
[*]printf("1: need cycles = %d!\n",goProfile.nCycles);
复制代码
这个效率测试还是非常必要的
页:
[1]