Roses 发表于 2017-11-13 10:34

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);

复制代码











shenmu2012 发表于 2017-11-13 14:07

这个效率测试还是非常必要的
页: [1]
查看完整版本: ADSP-BF609 乘除运算需要的周期数及测试方法