打印

ADSP-BF609 乘除运算需要的周期数及测试方法

[复制链接]
842|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Roses|  楼主 | 2017-11-13 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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);

复制代码









相关帖子

沙发
shenmu2012| | 2017-11-13 14:07 | 只看该作者
这个效率测试还是非常必要的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

709

主题

1023

帖子

7

粉丝