连载:编写高效代码(9) 减少处理器不擅长的操作——不要逼我做我不喜欢的事情

        尺有所短,寸有所长,每种处理器都有自己擅长与不擅长的操作。

        在与处理器配套发布的指令集手册中,都会描述每个指令的执行周期,单周期指令是处理器最喜欢的,不仅执行时间短,而且利于流水线执行。加、减、逻辑运算等,常常是单周期指令,乘、除、分支指令、浮点指令、内存存取操作等,常常需要较多的时钟周期。我们在编程时,就应该少使用执行时间长的指令。

        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;

 

你可能感兴趣的:(软件开发,处理器)