无锡网站制作价格多少,网站备案号查询系统,松江新桥网站建设,上海百度研发中心02计算机组成原理-流水线技术概述1.流水线概述2.流水线过程3.流水线的性能比较1.流水线概述 流水线(pipelining) 技术是一种在处理器设计和其他领域中广泛采用的并行处理技术,其核心思想是在程序执行期间#xff0c;通过将指令处理过程分解为多个连续的阶段(如取指、译码、执…02计算机组成原理-流水线技术概述1.流水线概述2.流水线过程3.流水线的性能比较1.流水线概述流水线(pipelining) 技术是一种在处理器设计和其他领域中广泛采用的并行处理技术,其核心思想是在程序执行期间通过将指令处理过程分解为多个连续的阶段(如取指、译码、执行、访存和写回等)使得多条指令能够在不同阶段上同时执行尽管每个单独的指令仍然按照顺序完成这些阶段。这种重叠执行的方式显著提高了处理器的吞吐量和效率,允许在一个时钟周期内启动多条指令的不同部分,从而加速了整体的计算过程。所谓并行字面意思上就是两条指令一起执行串行就是执行完一条指令再去执行下一条指令那如何去执行这个并行呢可从两方面提高处理机的并行性:①时间上的并行技术将一个任务分解为几个不同的子阶段每个子阶段在不同的功能部件上并行执行以便在同一时刻能够同时执行多个任务进而提升系统性能这种方法被称为流水线技术。②空间上的并行技术在一个处理机内设置多个执行相同任务的功能部件并让这些功能部件并行工作这样的处理机被称为超标量处理机。比如在餐厅中顾客点餐到用餐完毕的整个过程可以看作是一条指令的执行。而餐厅的厨房和服务员们则构成了流水线的各个阶段取指阶段点餐顾客坐下后服务员会前来询问顾客想要点什么菜。这相当于指令的取指阶段服务员记录下顾客的点餐要求。译码阶段下单服务员将顾客的点餐要求传达给厨房并告诉厨房哪些菜需要准备。这类似于指令的译码阶段将顾客的点餐要求转化为具体的烹饪指令。执行阶段烹饪厨房接收到指令后开始准备各种食材并进行烹饪。这相当于指令的执行阶段厨房按照烹饪指令完成菜肴的制作。访存阶段取料在烹饪过程中厨师可能需要从冰箱或储物柜中取出一些食材。这类似于指令的访存阶段从内存中获取数据或指令。写回阶段上菜当菜肴制作完成后服务员将其送到顾客的桌子上。这相当于指令的写回阶段将执行结果返回给顾客即指令的发起者。一个服务员询问完一桌客人后就可以去询问下一桌的客人了不会影响上一卓客人的上菜速度这是因为是不同的人员在不同的阶段处理事务。同样一条指令的执行过程也可分解为若干阶段每个阶段由相应的功能部件完成。如果将各阶段视为相应的流水段则指令的执行过程就构成了一条指令流水线。同样地在计算机处理器中流水线技术使得处理器可以同时处理多条指令的不同阶段从而提高了处理器的吞吐量和执行效率。这种并行处理的方式大大提高了计算机的性能使得我们能够更快地完成任务和处理数据。流水线技术不仅限于CPU设计在现代计算机体系结构中它还应用于图形处理器GPU的渲染流水线、内存系统、网络设备的数据包处理以及其他需要高效并行处理的场景。此外流水线技术的概念也扩展到了软件工程和数据分析中比如持续集成/持续部署CI/CD流程以及数据流水线这些应用帮助快速处理大量数据或任务提高开发和分析的效率。随着技术的进步现代处理器的流水线可能包含更多的阶段并且引入了更复杂的机制来处理指令间的依赖关系、分支预测、以及乱序执行等问题以进一步提升性能。同时针对特定领域的应用如深度学习加速器也会设计定制化的流水线架构以优化特定类型的工作负载。除了这些流水线还有个更重要的应用场–工厂工厂的工作方式就是流水线。比如我造车有三个阶段每个阶段1min要造两辆车并不是336min而是4min如图所示明显提高了效率。假设一个过程一共有n个阶段每两个过程就有n-1个阶段是重合。但是流水线技术会有一定的问题如果阶段划分的不好会发生冲突比如数据的冲突硬件资源的冲突。计算机实际处理指令的一个基本的步骤取指、译码、执行、访存和写回。注这个划分不是唯一的不同的架构 不同的教材可能有不同的划分要灵活处理。通过流水线技术这些步骤可以在不同指令间重叠执行为了使问题具体化我们首先创建一个流水线结构用我们接触过的8条指令lw, sw, add, sub,AND, OR, slt, beq去对应我们的各个阶段。slt:slt rd rt rsrs和rt是源寄存器rd是目标寄存器作用是从rs和rt两个寄存器中取出两个操作数如果第一个操作数小于第二个操作数那么就把1存进目的寄存器rd里面否则就存0。这条指令通常用于分支判断等。基于提供的指令集lw, sw, add, sub, AND, OR, slt, beq我们可以将其划分为取指Fetch、译码Decode、执行Execute、访存Memory Access和写回Write Back。请注意实际处理器的流水线可能更加复杂包括更多预取、分支预测等高级功能但这里我们专注于基础概念。这里有个问题比如说R型指令不会有访存的阶段但是lwsw有所以这个阶段怎么划分呢。从上图我们可以看成我每条指令的执行过程得是一样的每个阶段的所用时间要是一样的。但不同指令执行时间长短肯定不一样各个阶段的所用时间也不一样。这里直接给出流水线设计原则1.指令流水段个数以最复杂指令所用的功能段个数为准; 2.流水段的长度(即一段花费的时间)以最复杂的操作所花时间为准。相信也不难理解。2.流水线过程取指Instruction Fetch, IF在这一阶段处理器从内存中读取下一条指令。通常处理器会有一个程序计数器PC它指向当前正在执行指令的下一条指令的地址。处理器根据PC的值从内存中取出指令并将其放入指令缓存或队列中准备解码。功能从内存中读取下一条指令。对于各指令所有指令都需要从内存中取出因此这一阶段对所有指令都是相同的。这一阶段肯定大家都是相同的 因为不管什么样的指令第一步都得取指吧译码/寄存器读取Instruction Decode/Register Fetch, ID处理器在这一阶段对取指阶段获取的指令进行解码确定指令的操作类型如加法、减法、跳转等、操作数以及目标寄存器。同时如果指令需要用到寄存器中的数据这一阶段还会从寄存器文件中读取这些数据作为操作数。功能解析取出的指令确定操作类型、操作数等信息。对于各指令lw, sw: 需要识别内存地址和寄存器。add, sub, AND, OR, slt: 识别操作数寄存器和目标寄存器。beq: 识别两个比较寄存器和分支地址。执行Execution, EX根据指令的操作类型实际的运算在这个阶段执行。例如如果是加法指令ALU算术逻辑单元会执行加法运算。如果指令包含条件转移或逻辑运算相应的逻辑处理也会在此阶段完成。功能根据指令执行相应的算术逻辑运算。对于各指令lw, sw: 跳过或准备访存阶段的地址计算。add, sub, AND, OR, slt: 执行相应的运算。beq: 比较两个寄存器值决定是否分支。存储器访问Memory Access, MEM如果指令涉及内存访问比如加载LOAD或存储STORE操作这一阶段会与内存交互。对于LOAD指令从内存中读取数据对于STORE指令则是将数据写入内存。并非所有指令都需要这一阶段比如纯粹的寄存器到寄存器操作就不需要访问内存。功能对于涉及内存访问的指令lw, sw进行读/写操作。对于各指令lw: 从内存读取数据到寄存器。sw: 将寄存器数据写入内存。其余指令: 无需访问内存直接跳到写回阶段或等待前一阶段的结果。写回Write Back, WB在最后一个阶段计算或加载得到的结果会被写回到寄存器文件中或者在某些情况下如STORE指令执行后确认数据已正确写入内存。这个阶段标志着指令执行的完成之后处理器可以开始处理下一条指令。功能将执行或访存阶段的结果写入寄存器或更新PC对于分支指令。对于各指令lw, add, sub, AND, OR, slt: 将计算结果写入指定寄存器。sw: 此时内存操作已完成无须写回在M阶段已处理。beq: 根据比较结果更新程序计数器PC实现分支跳转。3.流水线的性能比较我们为了比较流水线指令执行与单周期指令执行的平均执行时间首先需要确定在单周期模型中时钟周期的长度然后计算在流水线模型下指令的平均执行时间。在单周期模型中所有指令的执行都花费一个时钟周期。因此时钟周期的长度必须是最慢操作所需的时间即存储器访问和ALU操作中的较大者因为它们不能直接并行执行。注意如果是单周期一条指令就是一个时间周期如果是流水线把每一个阶段的时间对应一个时间周期这样的话这个计算机我们定时间周期就要定800要保证最慢的那条指令的总时间执行完。假设所有的操作如多选器 控制单元没有时延的前提下这个就是我们的总时间。也就是说。单周期下我们的执行顺序是假设一条指令所花时间的时钟周期为Tn条指令即为nT如果使用流水线我们的执行方式就变成了这种情况下我们每一个阶段的时长都得是最长的那个阶段所用的时间这样的话如果是lw我们发现算出来是1000反而大于了单周期的800但注意流水线不是针对于一条指令的执行时间的长度而针对的是总的指令数。这种情况下我们流水线下的单周期能缩短到200ps性能提高的四倍。第一与第四条指令之间的时间差距缩短为 3 x200ps 600ps 。单周期下执行第四条指令的话我们需要2400ps的时间。综上来看我们可以把上面讨论的流水线模型能够获得的性能加速比归纳成一个公式。在理想情况下当流水线各阶段的操作平衡时即每个阶段都花费相同的时间流水线机器上的指令执行时间 指令执行时间 流水线 可以通过以下公式来表示这个公式也被称为流水线的性能加速比指令执行时间 流水线 ≈ 指令执行时间 非流水线 / 流水线级数在理想情况且有大量指令的情况下流水线所带来的加速比与流水线的级数近似相同。 例如一个5级流水线即5段流水线能获得的加速比接近于5。当然这是在理想状况下。理想情况下如果流水线的各个阶段完美平衡且没有流水线冲突比如数据冒险、结构冒险、控制冒险等导致的停顿 既流水线填充和排空的时间以及可能存在的数据相关性和分支预测错误等因素后面我们会讲这些开销问题那么理论上确实可以通过增加流水线级数来提高执行效率。但是提到的“加速比接近于流水线级数”是指在长时间运行大量指令的前提下的平均加速效果而非单个指令的加速比。可能有的同学有疑惑为什么非流水线指令n条指令需要5n因为我们说非流水线指令的时钟周期是按照最慢的那个指令划的而电脑一造出来它的时钟周期是固定的所以即使存在一些指令快一点我们也得等到最一段时间直到下一次上升沿去执行下一条指令。在这种理想化的分析中加速比 S 可以通过总时钟周期比来计算非流水线时钟周期/流水线时钟周期5/5(−1)当 n 趋向于无穷大时加速比 S 接近于流水线级数即 S≈5。同时我们一直在强调是大量指令。刚才的例子即使我们在前面的分析中断言能将指令的执行速度提高 4 倍但在本例中并没有反映出来它实际获得的加速比为 2 400ps/1 400ps, 这是因为执行指令的数量不够多。如果我们提高指令数量在流水线处理器中性能的提高主要是通过增加指令的吞吐率来实现的而不是通过减少单条指令的执行时间。当执行指令的数量足够多时流水线填充和排空的时间相对于整个执行时间来说变得微不足道因此流水线的性能加速比将趋近于流水线的级数。这在实际应用中是非常重要的因为现代处理器通常都会执行数百万甚至数十亿条指令因此流水线的性能优势将非常明显。所以指令的吞吐率的提升至关重要使得系统能够更高效地完成任务。它们两个在n趋向于无穷大的时候CPI算出来都等于1但由于非流水线取得时钟周期是整条指令执行得时间而流水线取的时钟周期只是某个阶段的时间所以它们的主频是流水线非流水线所以流水线快。MIPS指令集具有如下特点利于实现流水线但是流水线指令执行过程中也可能出现的一些问题:流水线冒险。这个问题留到我们明天再给大家讲述。大概先写这些吧今天的博客就先写到这谢谢您的观看。