在5个功能段的指令流水线吞吐率中,假设每段的执行时间分别是

当前位置: >
假设一条指令的执行过程可以分为取指、分析和执行三段,每一段的执行时间分别为△t、2△t和3△t,顺序执行n条指令需要花费的时间是()。
所属学科:
试题类型:主观题
所属知识点:
试题分数:1.0 分
暂未组卷。
暂无学习笔记。
&&&&&&&&&&&&&&&希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-第三章习题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
32页免费46页免费8页免费12页免费13页免费12页免费8页免费30页免费6页免费7页免费
喜欢此文档的还喜欢3页1下载券6页1下载券7页免费17页1下载券8页2下载券
第三章习题|《​系​统​结​构​》​课​后​习​题​答​案
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢为什么CPU流水线设计的级越长,完成一条指令的速度就越快?
百度百科和一些文章中都谈到,超标量是通过内置多条流水线来提高速度,实质是以空间换取时间。——这个很容易理解,提升并行效率嘛。在提到超流水线的时候,文中说是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至更多操作。——请问提高主频和流水线有什么样的关系?——文中还说“实质是以时间换取空间”,这一点我是不能理解的,为什么说是以时间换取空间,空间指的不就是CPU的核心面积吗,而且用时间来换取这个空间岂不是本末倒置,而且这个逻辑我也没看出是时间换取空间。另外,对流水线的讲解还谈到,流水线设计的步(级)越长,完成一条指令的速度就越快。——能否简单谈谈为什么会有这样的效果。——一条指令是否需要走完整个流水线才算完成。最后一个问题,扩展指令集中指令的条数是否受到了制造工艺的限制,如果没有的话,为什么不集成更多的扩展指令集呢。而且我看完CPU的大致概述后,对指令的工作原理仍然不了解。指令是否就是指指令集中的指令,他们与终端的软件程序有什么关系?软件程序的运行是否全部转化为这些指令,随后让这些指令到处理器的流水线中进行执行?
按投票排序
流水线是一般CS的同志或者做架构的人考虑比较多,然而这个问题的本质需要从数字后端的角度解释:流水线的引入提高的只是得系统的Throughput (吞吐率),即全速工作时候,单位时间内执行的指令数目增加了。但是如果仅看单条指令的绝对执行时间,这个量必然是增加的:因为 每多插入一级D flip-flop必然引入sequencing overhead(中文翻译时序支出?我不知道我翻译的对不对)。具体来说,举例子:a没流水线的时候,时钟周期最小Tclk1&=Tsetup+Tpd_critical
,每条指令一个时钟周期执行完。其中Tsetup为触发器的建立时间,Tpd_critical为关键路径的最坏传输延迟。b假设我采用级流水线,每一级组合逻辑的critcal delay均分 (是之前critical delay的1/3,
即Tpd_critical/3) ,新时钟周期 Tclk2&=Tsetup+Tpd_critical/3 ,每条指令要花三个时钟周期执行完。当全速执行的时候,每个时钟周期结束都有一条指令处理完,而新时钟周期Tclk2明显比之前没流水线时候Tclk1小了,所以我们说吞吐率提高了。如果你只关注一条指令的实际执行时间(注意每条指令花三个时钟周期完成): 3* Tsetup+Tpd_critical/3)= 3*Tsetup + Tpd_critical 你发现绝对时间来看,单条指令执行时间反而比没流水线时候大了。多出来2个Tsetup就是所谓的sequencing overhead。注意实际情况可能比上述复杂,但是上述例子用来解释本问题是足够的了。接下来还要注意一点:我们说吞吐率提高了,只是在“全速工作”的情况下。前面还有人作答提到P4的高频低能问题。其实这个问题又得从流水线的本质来解释。比如,如果由于某种原因processor就是没法全速工作怎么办?这种情况还不少见:比如我们有指令1指令2指令3,其中 指令2的执行依赖于指令1的结果,然后指令3的执行又依赖于指令2的结果。当出现这种情况时候,必须等前面一条指令完全执行完毕,产生结果之后,下条指令才能开始执行。当这种情况出现过多的时候,流水线的存在不仅没有多大帮助,反而因为多出来的sequencing overhead让性能降低。总之,很多关于计算机硬件的问题如果想要究其本质,需要离开你平时所工作的level of abstraction(抽象层级)到更加底层的层次中去。
理想情况下流水线越长,cpu时钟周期可以做得越短(也就是频率越高,当然不能无限高)相对非流水的结构而言,流水线可以提高指令执行的并行度。在理想情况下,流水线级数越多,可同时流水执行的指令数越多,正比增长。这就是推出该问题的理论基础。并行度越大,在宏观上看其实就等效于每一条指令的执行速度都变快了。但现实不是这样理想的。流水的时候,会遇见各种冒险机制(某硬件不支持同时钟周期被多个资源访问,数据依赖或逻辑关系不被满足的情况,跳转指令等)。造成流水设计的困难。所以在理想情况并有上限的前提下,这句话是对的。但考虑到太长的流水线可能造成的冒险机制会变得更复杂,所以“CPU流水线设计的级越长,完成一条指令的速度就越快”不过说的是理想或者近似理想的情况罢。至于超流水线的时间换取空间……时间减少了(cycles per instruction减少),空间增加了(增加了好多pipline寄存器还有其他逻辑)。。个人感觉这样理解就行了吧。不过根据楼主的“用时间来换取这个空间岂不是本末倒置”看出楼主有个误区:时间的减少的确重要,但是不是唯一的考虑。空间的增大会大约以平方的关系增加芯片成本,所以有时候为了空间应该要牺牲掉一些性能。扩展指令集中指令的条数当然是受制约的。指令越多,片上的逻辑越复杂,而RISC处理器的成功已经说明问题了,它的流水线简单高效,现在x86也把CISC指令转换成RISC指令在内部计算了。指令是否就是指指令集中的指令?是。他们与终端的软件程序有什么关系?软件其实就是一坨指令,它是从高级语言(c++之类)经过编译链接等操作得到的。软件程序的运行是否全部转化为这些指令,随后让这些指令到处理器的流水线中进行执行?额……差不多吧……软件除了指令还有数据。期待补充
从来没听说过流水线级数越长,完成一条指令的速度就越快的说法。不管是什么情况,采用流水线结构,处理一条指令的速度一定会比比不用流水线的要慢。不过,如果是计算一段时间内完成指令的条数的话,流水线能处理的指令就会比不用流水线的处理机处理得多。原因也很简单,流水线处理机里面,各个完成不同功能的部件都复用了,都在并行的工作。像上图的例子,完成一条指令需要五个步骤,每一个步骤一个节拍。那么,假设经过了10个节拍(从流水线空开始计算),那么非流水线只能处理两条,而流水线机,在第五个节拍的时候完成一条,第六个节拍的时候又完成一条,所以一共能完成六条指令。在这个意义下,流水线处理机比非流水线的处理机快很多。原因也很简单,流水线处理机里面,各个完成不同功能的部件都复用了,都在并行的工作。像上图的例子,完成一条指令需要五个步骤,每一个步骤一个节拍。那么,假设经过了10个节拍(从流水线空开始计算),那么非流水线只能处理两条,而流水线机,在第五个节拍的时候完成一条,第六个节拍的时候又完成一条,所以一共能完成六条指令。在这个意义下,流水线处理机比非流水线的处理机快很多。
流水线长度跟速度没有直接关系,一般来说流水线越长,整体性能越差。参考intel的官方文档:这里记录着每条指令需要的时钟周期,在每条指令时钟周期确定的情况下,主频越高,性能越好。而有些指令只消耗一个时钟,这种情况下流水线是没有意义的,一个指令至少需要一个时钟的时间去执行(严格说不太准确,新的intel CPU已经能做到0.5个周期执行一个指令了)主频不等于每秒执行的指令数,但每秒能执行的指令数通常不能超过主频。在没有流水线的情况下,假设所有指令都需要2个周期,那么100Mhz的CPU每秒能执行50M个指令,而有流水的情况下,就能执行100M个指令。实际情况是多数执行要消耗超过2个周期(多的需要十几个周期),所以100Mhz的CPU每秒能执行的指令数一般小于30M个,这种情况下,流水线越长,可并发的指令越多,那么每秒能执行的指令数就越高,但永远不能超过100Mhz这个主频上限。“实质是以时间换取空间”这句话我不太理解,但我猜空间应该不是指芯片面积。流水线越长,单条指令执行越慢,只是从并发的角度上说整体性能更高而已,一条指令需要5个周期,如果用流水线设计,则是5条指令消耗9个周期,只是看上去平均每条指令更快了,实际单条指令速度仍然不改变。新一代intel CPU已经不重视主频和流水线的性能提高,而是提高单个指令的周期,所以从发展局势上看,缩短流水线是技术的发展方向,拉长流水线只是过去技术不过关的时候的补充手段。扩展指令集有制造工艺的限制,但不明显,实际上集成更多扩展指令的想法是错误的。硬件指令都是编译器编译生成的,过多的扩展指令对于编译器来说是个负担,用简单的指令做复杂的事情是编译器的主流思想,也方便编译器优化。现在各种架构的CPU指令扩展的都不少,但实际上软件用的上的并不多。并且扩展指令没有统一标准,可能在这台电脑上可用,换个电脑就不能用了,对于软件设计的负担就更大了,软件设计更重视通用性。最后,指令确实就是指指令集的那些指令,但是,你确认你真的了解CPU指令集吗?CPU指令集是非常庞大的,手册就上百页。终端软件确实也执行的就是这些指令,不管任何软件,最终执行的都是机器指令(也就是你前面说的那种指令)------------------------------------------------------------看到很多争论,那我用数据说话:以下是一段PPC汇编:_text: loc_28:_text:
%r3, %r0_text:0000002C
loc_38_text:
%r3, %r3, 1_text:
loc_28实际C语言源码是:
while(i & v)
i++;在主频为264Mhz的主板上,执行264M次,耗时约2670ms,实际一共执行了4*264M条指令,但实际消耗时间小于4秒,这个CPU有流水线,单核,型号是SBC8349,其中所有指令都至少需要一个周期,由于流水线的作用,看上去最终的结果是平均一个指令小于一个周期。ARM上有类似的结果,MIPS的板子找不到了,x86的我就不实验了。因为CPU和板子都是公司生产的,我专门问过,单个指令消耗不会小于1个周期,至于为什么实际情况是小于,看wiki的这里,有数学证明,
这个说法是错误的,而且还有前车之鉴。著名的奔腾四,就是因为流水线过长,而落得个高频低能的名声。而且,拜糟糕的奔腾四所赐, AMD 在那个时代全面超越了 intel,这也是历史上唯一的一小段 AMD 主营 CPU 在性能上完全超越 intel 主营 CPU 的年代。(这个年代持续得不长,就因为酷睿的出世而结束了。)流水线过长对性能没有帮助,只对提升主频有帮助。长流水线能够使你提升主频更容易,所以容易造就高频低能的芯片。
一句话回答,你这个说法是错的....
流水线长顶多就是有利于提升主频,而事实证明超长流水线带来的性能提升很有限。
流水线的级数增加方便于提高主频,因为木板效应嘛。最短的那个木板决定装水量,同理、最耗时间的流水线级就决定了周期的最小长度。说白了就是,如果流水线加长,那就有机会让最耗时的那个流水线级所花时间降低。最后一段的那段假设性的描述完全正确。楼主没做过软件调试么?如果完全没做过计算机编程,恐怕就算完全理解了这些知识,心里也很不安稳吧……VS调试C/C++的时候有一个反汇编窗口,你在那里面调试就可以看到CPU逐条的在执行指令了。也可以下载一个OllyIce/OllyDbg来运行一个程序试试。“实质是以时间换取空间”这个我很不理解,怀疑是出错了。楼主能说下是在哪看到的么,我去找找。为什么不扩展指令集,这个容易理解,因为指令编码的空间有限啊……不过编码空间的限制可以靠增加处理器的模式来实现,就像现在Intel的EM64T、AMD的x86-64都是增加了处理器模式。我看ARM的32位处理器也总是支持多个模式的。另外就算你扩展了处理器的指令集,达到一种兼容的效果,那旧代码还是享受不到新增指令带来的好处嘛。
通俗一点的说法是,比如作为富二代的你帮你爹经营饭店,为了展示你不坑爹的管理能力,你决定改善厨房效率:以前洗菜(取指令)切菜(取数据)做菜(运算),装盘(存数据)都是同一个大厨,他切菜的时候就不能洗菜,也不能做菜;然后你把切菜洗菜做菜装盘分成4个人完成,这样某人切菜的同时另一个人也在洗菜。虽说做某一道特定菜的时间会变长(人员之间要沟通嘛),但是总体来说速度是变快了。如果你把这件事情做到极致呢?比如切菜都分成100个人,第一个人切第一刀,第二个人切第二刀,诸如此类,你可以想象结果是整个过程变的更慢。这就是本质上来说并非越长越快的道理。然后你的跟班提议,我们雇个1000个厨师来做菜好了。但是你发现你没那么大的厨房(芯片大小限制,生产工艺,良率等等),你也没那么多钱付工资(电能,散热等等)。所以这个也不靠谱。当然实际上问题更复杂。比如客人点个佛跳墙,切火腿准备菜的大哥很快就搞定了,而准备高汤的兄弟还在慢慢熬汤呢。这时候整个流水线就被迫停下来等熬汤。然后有人就提议,我们把很慢菜单独分组让那些弟兄慢慢玩不要影响流水线速度。然后你又发现,你有时候连炒花生糟毛豆还没上,就把大龙虾给端上去了(程序的数据间是有依赖的,比如a=b+c; d=a+1; 这里第二个指令必须在第一个有结果之后才能运算)。。。于是你又找了个人来调度:“冷菜还没好呢,热菜的兄弟先等等。” 有了简单调度之后你发现有些厨师弟兄有时候闲得蛋疼。于是你又找了个学数学的博士来做厨房调度(各种奇怪的流水线调度算法)。。。这么折腾之后你终于长叹一声,不坑爹真心不好搞,富二代容易么。原本以为工序多分几个步骤,做更长的流水线就能更快,哪想到这么恶心啊。
简单粗暴得地说,假如如果只有一级流水线,每条指令需要10周期的话,现在假如能切成10级 每级能单独运行的话,那么理想情况下,每条指令只需要一个周期。换句话说,同一时刻,有10条指令同时在运行。为什么呢?因为没有流水线的话 执行一天指令的时间内 每个计算资源有十分之九的时间是闲着的
快:指的是吞吐量 Throughput慢:指的是延迟 Latency流水线长,一般来讲,频率可以更高,所以吞吐量会更大,但延迟很有可能会提高
意味着机器运行更充分
好比把砖头从A到搬到B中间人越多就会越快,
可以达到每个人都没偷懒
好比这个5级流水线图 WB
ID IF可以同时工作
简单的理解就是级数越多
等的时间越短

我要回帖

更多关于 plc段码指令 的文章

 

随机推荐