怎么提高指令执行的速度
问题描述
- 精选答案
-
CPU其实执行单一程序用的大多数都是教科书上的基本指令,包括三大类,数据运算指令,访问内存的指令和分支指令。衡量一颗CPU的性能,例如各种跑分,其实也是在衡量执行这三大类指令的速度。加快第一类指令的速度。就是增加执行资源,比如增加用于计算的ALU,加快第二类指令的速度,就是增加缓存大小。降低内存延迟。第三类指令主要影响流水化的CPU取指令的连续性,利用分支预测和推测执行技术。可以尽可能连续不断的取指。现代CPU面临的瓶颈主要是因为指令,数据之间相互依赖而形成的ILP墙。这是单纯增加规模很难解决的事情。
题主提到了连加,一般代码会这么写
int sum,i
for(i=0;i<N;i++)
sum+=i;
这是个循环,每层循环要做这样的事,首先执行一条分支语句,判断i是否小于N,如果i小于N,那么执行sum+=i和i++两个算术指令,显然,后面两个算术指令无法和条件指令并行执行,条件指令必须先执行,这里存在逻辑上的依赖关系,其次,sum+=i和i++这两个指令存在先后关系,i的自加不可以先执行,否则i值就改变了,导致sum结果出错。假设假设顺序处理器A有一条流水线。具有一个ALU,分为取指,译码,取数据,计算,写回5级,顺序处理器B有2条流水线,具有两个ALU,也是同样的5级。A,B同时执行连加,那么,A先算条件,条件算完后,顺序重叠执行后两天算术指令,没任何问题,B规模比A大一倍,但B的一条流水线在执行条件的时候,另一条流水线不可以执行任何指令,直到分支有结果了,才可以开始执行接下来指令,这时候,两条流水线可以同时读取sum和i的寄存器,并行执行累加和自加,对于顺序执行的处理器来说,这不会导致写后读。那么,执行一个循环体,单流水处理器需要5+6=11个周期,B需要5+5=10个周期,B的规模比A大一倍,但执行连加的性能只少了一个周期。
继续提升处理器的性能,我们可以给处理器B加上静态分支预测器,这就是继续加晶体管了,加分支预测器后,我们就可以不需要等待分支的结果,直接预测总是不跳转,在分支指令出来之前,第一条流水线开始执行累加。第二条流水线开始执行自加,这样速度加快到了6个周期,因为循环大多数时候都是不跳转的,所以6个周期大多数时候都能实现。在循环结束的地方,分支预测错误将导致流水线冲刷,损失5个周期,但如果循环够大,总体来说性能提高一倍。
继续给处理器增加规模,加入乱序执行,但是由于分支预测后,代码重叠得很好。流水线空泡很少,乱序执行因为需要要额外的周期对指令进行重排序,处理写后读的问题,因此有可能降低性能。
那么加入第三条流水线呢? 我们来看一下,我们一共就两个需要用到寄存器,i和sum,当前两条流水线执行循环的时候,第三条流水线同时开始执行分支语句,读取i值,并马上读取sum值进行加运算,这时候,下一次循环的i值和sum值还未计算好,第三条流水线做的事情实际上和第一条一模一样。重复的工作,浪费了功耗,却无法提高性能。所以继续增加第三条流水线已经对性能影响微乎其微。第三条流水线的问题涉及到了另一个概念,就是真数据相关性,显然,进行第二次循环需要第一次循环的结果,因此我们不可能并行执行第一次循环和第二次循环,真数据相关性的解决通常是乱序执行,在等待的时间里插入不相关的指令,但并没真正减少数据相关的两条指令的执行时间。
在现实世界的应用程序中,有些论文把两条条件分支语句中间的顺序语句称为基本块,发掘并行IPC的办法实际上就取决于基本块,第三条流水线并不是什么时候都没有性能提升的。当需要同时处理3个互不关联的寄存器时,还是会有提升。
猜你喜欢内容
-
简单网:构建全网教育数据枢纽,让知识检索化繁为...
简单网:构建全网教育数据枢纽,让知识检索化繁为“简”回答数有0条优质答案参考
-
去三亚有什么好玩的地方
去三亚有什么好玩的地方回答数有1条优质答案参考
-
石狮一日游必去景点推荐
石狮一日游必去景点推荐回答数有1条优质答案参考
-
电气工程师的证书考取条件是什么
电气工程师的证书考取条件是什么回答数有1条优质答案参考
-
房地产估价师的具体报考条件有啥
房地产估价师的具体报考条件有啥回答数有1条优质答案参考
-
房产经纪人的工作内容具体包含什么
房产经纪人的工作内容具体包含什么回答数有1条优质答案参考
-
学习小提琴都有哪些难点
学习小提琴都有哪些难点回答数有1条优质答案参考
-
企业行政管理证书的含金量怎么样
企业行政管理证书的含金量怎么样回答数有1条优质答案参考
-
初学者要怎么入门小提琴
初学者要怎么入门小提琴回答数有1条优质答案参考
-
报考珠宝鉴定师要啥条件
报考珠宝鉴定师要啥条件回答数有1条优质答案参考
















