尺有所短,寸有所长,每种处理器都有自己擅长与不擅长的操作。
在与处理器配套发布的指令集手册中,都会描述每个指令的执行周期,单周期指令是处理器最喜欢的,不仅执行时间短,而且利于流水线执行。加、减、逻辑运算等,常常是单周期指令,乘、除、分支指令、浮点指令、内存存取操作等,常常需要较多的时钟周期。我们在编程时,就应该少使用执行时间长的指令。
Q:这些复杂指令都有它的用途,说少用就能少用的吗?
A:茴香豆的‘茴’字都有4种写法,更何况是号称艺术的软件,很多时候,我们只需要稍微变通一下,就可以化腐朽为神奇。正所谓,条条大路通罗马,不过代价各不同。
编程是门艺术
6.3.1 少用乘法
定点乘法在DSP中需要两个Cycle,而移位操作只要1个Cycle,如果是一个数乘以2的N次方,就可以用移位代替乘法。例如:
len = len*4;
改为下面的写法更好:
len = len <<2;
6.3.2 少用除法、求余
除法、求余需要消耗大量的时间,很多处理器没有相应的指令,是通过软件来实现的,应尽量少用。如果要除以一个常数,如下面的浮点除法:
f = f /5.0;
可以将它转换为乘法:
#define cof 1.0/5
f = f * cof;