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_t goProfile;
- PROFBEG(goProfile); //在需要测试的代码前加PROFBEG()
- Result = 14.05/177777777.888888888;
- PROFEND(goProfile); //在结束点加PROFEND()
- printf("[CORE 0]1: need cycles = %d!\n",goProfile.nCycles);
复制代码
|
|
|
|