编写高效代码(9) 减少处理器不擅长的操作——不要逼我做我不喜欢的事情
2012-12-17 22:20
274 查看
尺有所短,寸有所长,每种处理器都有自己擅长与不擅长的操作。
在与处理器配套发布的指令集手册中,都会描述每个指令的执行周期,单周期指令是处理器最喜欢的,不仅执行时间短,而且利于流水线执行。加、减、逻辑运算等,常常是单周期指令,乘、除、分支指令、浮点指令、内存存取操作等,常常需要较多的时钟周期。我们在编程时,就应该少使用执行时间长的指令。
Q:这些复杂指令都有它的用途,说少用就能少用的吗?
A:茴香豆的‘茴’字都有4种写法,更何况是号称艺术的软件,很多时候,我们只需要稍微变通一下,就可以化腐朽为神奇。正所谓,条条大路通罗马,不过代价各不同。
编程是门艺术
len = len*4;
改为下面的写法更好:
len = len <<2;
f = f /5.0;
可以将它转换为乘法:
#define cof 1.0/5
f = f * cof;
来源:http://blog.csdn.net/muxiqingyang/article/details/7051454
在与处理器配套发布的指令集手册中,都会描述每个指令的执行周期,单周期指令是处理器最喜欢的,不仅执行时间短,而且利于流水线执行。加、减、逻辑运算等,常常是单周期指令,乘、除、分支指令、浮点指令、内存存取操作等,常常需要较多的时钟周期。我们在编程时,就应该少使用执行时间长的指令。
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;
来源:http://blog.csdn.net/muxiqingyang/article/details/7051454
相关文章推荐
- 连载:编写高效代码(9) 减少处理器不擅长的操作——不要逼我做我不喜欢的事情
- 编写高效代码(3) 减少处理器不擅长的操作——不要逼我做我不喜欢的事情
- 编写高效代码(1) 减少函数调用——不要老打断我
- 编写高效代码(7) 减少函数调用——不要老打断我
- 编写高效代码(1) 减少函数调用——不要老打断我
- 连载:编写高效代码(7) 减少函数调用——不要老打断我
- 【原创】数据库辅助类库(Ling.Dber),大幅减少重复编写操作数据库代码
- 连载:编写高效代码(11) 尽量减少分支
- 编写高效Lua代码的方法 - 4 - 减少,重用,回收
- 傻瓜式建立数据库,高效数据库操作代码的编写--android 推荐
- [编写高质量代码:改善java程序的151个建议]建议72 生成字列表后不要再操作原列表
- 编写高效代码(5) 尽量减少分支
- 编写高效代码(11) 尽量减少分支
- [改善Java代码]生成子列表后不要再操作原列表
- #区别辨析#对控件的操作之,拖拽与代码编写的#区别辨析#
- 如何编写高效的Android代码
- J2EE开发中减少编写代码工作量的几种方法
- [编写高质量代码:改善java程序的151个建议]建议31-在接口中不要存在实现代码
- 连载:编写高效代码(8) 空间换时间——我们总是在走,却忘了停留