【每周至少一篇 160901】语句级别的代码优化

来源:互联网 发布:定时继续 python 编辑:程序博客网 时间:2024/04/30 02:34

接着上一篇,我们继续总结《并行算法设计与性能优化》中的语句级别优化。对于语句级别的优化来说,要尽量避免语句生成不需要的指令,或者让语句生成更为高效的指令。

减少对内存的读写

需要多次访问函数参数指针指向的值,则可将其保存在寄存器中

for(int i = 0; i < len; i++){    a[i] += a[i-1];}

进行优化之后

temp = a[0];for(int i = 0; i < len; i++){    temp += a[i];    a[i] = temp;}

选用尽量小的数据类型

根据所需要的数据空间定义相应的数据类型。

机构体对齐

尽量保证大数据类型再前,小数据类型在后,这样编译后的结构体所占用的字节数就会少一些。

表达式移除

表达式移除指的是去掉重复的、共同的计算或者访存。
下面的代码表示:前者每次循环都需要比较索引以检查访存是否越界,后者则只需要实现一次:

void reedVI(VI *vi, int id){    int len = vi->size();    if(id < len) return vi[id];    else return ERROR;}for(int i = 0; i < len; i++){    readVI(a,i);}

代码进行改进之后:

if(len >= a->size)  return ERROR;for(int i=0; i < len; i++){    a[i]    ...}

分支优化

分支优化的前提是CPU在遇到条件判断时,会事先判断一下运行方向,并进行预运行。分支优化就是在这上面进行代码优化。有下面几条习惯需要注意:

尽量避免把判断放在循环里面

拆分循环

有时候循环中分支可能非常多,需要将其拆分成几个小循环有可能改善处理器的分支预测正确率,例子是:奇偶分支模型

合并多个条件

使用条件状态值生成掩码来移除条件分支

示例的代码为:
if(a > 0){    x = a;}else{    x = b;}

可以被优化为:

x = a > 0;a = a*x + b * (1 - x);

使用条件复制指令来移除分支

查表法移除分支

注意调节分支的顺序

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 pdf文件超过了怎么办 pdf电脑删不了怎么办 联想笔记本摄像头横屏调竖屏怎么办 pdf文件打开失败怎么办 pdf复制文字乱码怎么办 电子发票乱码了怎么办 超星尔雅挂了怎么办 电脑应用双击打不开怎么办 电脑控制面板打不开怎么办 转换器无法打开文件怎么办 电脑文件无法打开怎么办 手机上jpg打不开怎么办 脸上全是黄褐斑怎么办 容易发胖的体质怎么办 感冒后一直咳嗽怎么办 感冒咳嗽怎么办小窍门 到了减肥平台期怎么办 减肥遇见平台期怎么办 脚冻伤了痒怎么办 冬天脚后跟冻了怎么办 夏天脚冻了怎么办 导航软件删了怎么办 婆婆爱打孩子怎么办 乙肝婆婆带孩子怎么办 婆婆不会教孩子怎么办 婆婆不会带孩子怎么办 公婆枪带孩子怎么办 婆婆要带孩子怎么办 婆婆太惯孩子怎么办 三个月宝宝溢奶怎么办 孩子半夜咳嗽吐怎么办 中老年人转氨酶和血指高怎么办 孩子逆反心强怎么办 孩子学习逆反了怎么办 翼支付登陆不了怎么办 微波炉鸡蛋炸了怎么办 百部书挂了怎么办 高考物理零基础怎么办 装修后地面胶怎么办 装修地面上的胶怎么办 厂房顶楼太热怎么办