python编写程序计算1+2+3+......+100和_编程实现从 1 加到 100 和从 100 加到 1 两个程序,哪个更快?为什么?...

在x86/ARM之类的主流架构上和RISC-V这种较新的架构上,如果不做任何优化,直接硬算,100加到1指令数会少一些。在单发射顺序执行的处理器上,100加到1会更快。

比如说RISC-V汇编,从1加到100:

li a0, 0

li a1, 100

li a2, 0

L0:

addi a0, a0, 1

add a2, a2, a0

beq a0, a1, L0

从100加到1,就是

li a0, 0

li a1, 100

L1:

add a0, a0, a1

addi a1, a1, -1

beqz a1, L1

如果是在单发射顺序执行的处理器上,显然100加到1比1加到100少运行一条指令(其他都一样)。所以显然100加到1会略快一些,不会快过几个周期。

但是在多发射的处理器上,循环体前的3条指令大概率被处理器流水线同时执行,所以最终结果极有可能是两者运行时间相等。

4/23 7:10PM补充一下:

循环体中的三条指令在乱序执行的处理器中完全也可以重新排序后同时执行。对于从100加到1的程序而言,循环体内a0 a1之间是不存在显式的数据依赖的,因此两条加法指令是可以同时运行的。对于beqz指令而言,即使是简单的前跳后不跳分支预测器在这个场景下也能猜对99次,设计较为激进的处理器甚至可以同时运行这三条指令。

而对于从1加到100的程序而言,其实在流水线dispatch这一步把指令顺序做一个重排,和从100加到1的循环体就完全一样了。场景也应该是完全一样的。

综上所述,硬算100加到1对于嵌入式应用或者较老的处理器来讲,应该是比硬算1加到100快的。对于比较现代的处理器来讲,应该是不会有显著差别,甚至执行时间是完全相同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值