常数优化之循环展开

常数优化之循环展开

背景

各位读者可能在兴高采烈要死要活地码完一道题兴奋地交题后也遇到过下面的情况:
在这里插入图片描述
或者更OI一点:
在这里插入图片描述
大家大概都是一边抱怨毒瘤出题人,一边真香地改代码。如果复杂度是对的,那就要考虑程序的常数是不是太大了,进而考虑怎么优化。啥,你说开O2吸个氧不就完了?yysy,确实问题是正式比赛不知道给不给开,而且编译器优化最重要的是在不改变程序行为的前提下优化,总不能优化错吧,所以如果程序写得实在是很难优化,编译器也无能为力,还是要自己来。考虑到OI选手都是初、高中生巨佬小学生巨佬暂且不考虑,还没有接触大学课程,尤其是深入理解计算机系统这门课,可能对这种方法了解的也比较少,下面就介绍一种不知道常不用的常数优化方法——循环展开就是介绍点深入理解计算机系统(CSAPP)的内容,下文的图片也都出自该书

观前提示:以下内容仅供参考,本大学狗也只是刚学完这门课,有些内容可能有疏漏,为了能将内容讲得更容易理解,说法也不是很严谨

循环展开——CPU友好型代码

原理

流水线

现代CPU采用流水线设计(可以类比汽车生产流水线,分多阶段),把一条机器指令的执行分成多个阶段,然后每个时钟周期尽可能多地执行不同指令的不同阶段,我们可以从下面两张图看出流水线和不流水线的区别:

非流水线:
在这里插入图片描述
流水线:
在这里插入图片描述

  • I1、I2、I3I1、I2、I3I1I2I3表示待三条不同的机器指令,A、B、CA、B、CABC代表指令的阶段(当然不止3个,由CPU设计者决定)

显然流水线只要流起来可以大大提高CPU的工作效率,前提是流起来,如果I2I2I2AA

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值