CPU流水线

合集下载

第8章 中央处理器-流水线CPU

第8章 中央处理器-流水线CPU

Load Ifetch Reg/Dec Exec Mem Wr
R-type Ifetch Reg/Dec Exec Wr
R-type Ifetch Reg/Dec Exec Wr
°上述流水线有个问题: 两条指令试图同时写寄存器,因为
• Load在第5阶段用寄存器写口 • R-type在第4 阶段用寄存器写口
• 每个周期有五个功能部件同时在工作 • 后面指令在前面完成取指后马上开始 • 每个load指令仍然需要五个周期完成 • 但是,吞吐率(throughput)提高许多,理想情况下,有:
• 每个周期有一条指令进入流水线 • 每个周期都有一条指令完成 • 每条指令的有效周期(CPI)为1
含R-type和 Load 指令的流水线
这样使流水线中的每条指令都有相同多个阶段!
Store指令的四个阶段
Cycle 1 Cycle 2 Cycle 3 Cycle 4 Store Ifetch Reg/Dec Exec Mem Wr
NOOP!
°Ifetch:取指令并计算PC+4 °Reg/Dec: 从寄存器取数,同时指令在译码器进行译码 °Exec:12位立即数符号扩展后与寄存器值相加,计算主存地址 °Mem:将寄存器读出的数据写到主存
Delay through Control Logic New Value
PC+4 PC
Old Value
New Value
Old Value
New Value
Old Value Old Value
New Value New Value
Register Write Occurs
Old Value
Register File Access Time New Value

中央处理器CPU——指令流水线

中央处理器CPU——指令流水线

中央处理器CPU——指令流⽔线指令流⽔线概念:⼀条指令的执⾏过程划分为不同阶段,占⽤不同硬件资源,多条指令重叠操作实现并⾏处理1.顺序执⾏:⼜称串⾏执⾏⽅式;传统的冯诺依曼机器优点:控制简单,硬件代价⼩缺点:速度慢,各功能部件利⽤率低2.⼀次重叠执⾏⽅式:优点:时间缩短三分之⼀,各功能部件利⽤效率提⾼缺点:控制复杂,硬件开销增⼤3.⼆次重叠执⾏⽅式:优点:时间缩短三分之⼆,理想状态指令执⾏过程图:⽤于分析指令执⾏过程和影响流⽔线因素时空图:⽤于分析流⽔线的性能吞吐率TP:单位时间内流⽔线完成的任务数量或输出结果的数量加速⽐S:同⼀任务下,不使⽤流⽔线⽤时与使⽤流⽔线⽤时之⽐效率E:流⽔线的设备利⽤率锁存器(缓冲寄存器):作⽤是保存本流⽔段的执⾏结果,提供给下⼀流⽔段使⽤。

影响因素:结构相关(资源冲突):多条指令同⼀时间争⽤同⼀资源解决:1.后⼀相关指令暂停⼀周期;2.资源重复配置(数据存储器+指令存储器)数据相关(数据冲突):在⼀个程序中,上⼀条指令执⾏完才能执⾏下⼀条指令(这两条指令即为数据相关)解决:将数据相关的指令和后续指令暂停时钟周期到问题消失再执⾏;1.硬件阻塞stall和软件插⼊NOP;2.数据旁路技术;3.编译优化:通过编译器调整指令顺序控制相关(控制冲突):转移指令和改变PC值的指令造成断流解决:1.尽早判别转移是否发⽣,尽早⽣成转移⽬标地址2.预取转移成功和不成功两个控制流⽅向上的⽬标指令3.加快和提前形成条件码4.提⾼转移⽅向的猜准率流⽔线的分类1.根据流⽔线使⽤级别:部件功能级、处理机级和处理机间级流⽔线部件功能级流⽔:将复杂的算术逻辑运算组成流⽔线⼯作⽅式处理机级流⽔:把⼀条指令解释过程分成多个⼦过程,如取指、译码、执⾏、访存及写回5个⼦过程。

处理机间流⽔:是⼀种宏流⽔,其中每⼀个处理机完成某⼀专门任务,各个处理机所得到的结果需存放在与下⼀个处理机所共享的存储器中2,按流⽔线可以完成的功能分为:单功能流⽔线和多功能流⽔线单功能流⽔线:指只能实现⼀种固定的专门功能的流⽔线;多功能流⽔线:指通过各段间的不同连接⽅式可以同时或不同时地实现多种能的流⽔线。

cpu的ipc机制

cpu的ipc机制

CPU的IPC机制什么是IPCIPC(Inter-Process Communication)即进程间通信,是指不同进程之间进行数据交换和共享的机制。

在计算机系统中,多个进程可能需要相互协作完成任务,而IPC机制提供了一种有效的方式来实现进程间的通信。

CPU的IPC在计算机体系结构中,指令级并行(Instruction-Level Parallelism,简称ILP)是指在一个程序中的不同指令之间存在的并行性。

而CPU的IPC(Instructions Per Cycle)机制就是一种用于提高指令级并行性的技术。

IPC是衡量CPU性能的一个重要指标,它表示在一个时钟周期内可以执行的指令数量。

IPC的值越高,表示CPU在同一时间周期内可以执行更多的指令,从而提高了CPU的效率。

提高IPC的技术1. 流水线流水线是一种将指令执行过程划分为多个阶段的技术。

在流水线中,每个阶段都可以同时处理不同的指令,从而实现指令级并行。

流水线可以将指令的执行时间缩短,提高CPU的吞吐量。

流水线的基本原理是将指令的执行过程划分为取指、译码、执行、访存和写回等多个阶段,并将这些阶段连接起来,使得每个阶段都可以同时处理不同的指令。

通过这种方式,CPU可以在同一时钟周期内同时执行多条指令,提高IPC的值。

2. 超标量超标量是指在一个时钟周期内可以同时发射多条指令的技术。

传统的CPU一次只能发射一条指令,而超标量技术可以同时发射多条指令到不同的执行单元,从而提高了IPC的值。

超标量技术需要具备多个执行单元和指令调度器。

指令调度器负责将多条指令按照其依赖关系进行调度,并将其发送到不同的执行单元执行。

通过这种方式,CPU可以在同一时钟周期内同时执行多条指令,提高了CPU的效率。

3. 动态调度动态调度是指在运行时根据指令的依赖关系动态地调度指令的执行顺序。

传统的静态调度是在编译时根据指令的依赖关系确定指令的执行顺序,而动态调度可以在运行时根据实际情况进行调度。

处理器系列之CPU流水线科普

处理器系列之CPU流水线科普

处理器系列之CPU流水线科普1989年推出的i486处理器引入了五级流水线。

这时,在CPU中不再仅运行一条指令,每一级流水线在同一时刻都运行着不同的指令。

这个设计使得i486比同频率的386处理器性能提升了不止一倍。

五级流水线中的取指阶段将指令从指令缓存中取出(i486中的指令缓存为8KB);第二级为译码阶段,将取出的指令翻译为具体的功能操作;第三级为转址阶段,用来将内存地址和偏移进行转换;第四级为执行阶段,指令在该阶段真正执行运算;第五级为退出阶段,运算的结果被写回寄存器或者内存。

由于处理器同时运行了多条指令,大大提升了程序运行的性能。

处理器一般由如下功能单元组成:取指单元译码单元执行单元Load/store单元(load用于从内存中取数据,而STORE用于存数据到内存)例外/中断单元电源管理单元流水线通常由取指、译码、执行及Load/Store等单元组成。

各单元按图所示的几个步骤循环重复自身工作。

流水线的含义:与工厂生产线类似,将一件工作分成若干个固定的工序进行。

cpu流水线技术是一种将指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理,以加速程序运行过程的技术。

指令的每步有各自独立的电路来处理,每完成一步,就进到下一步,而前一步则处理后续指令。

(原理和生产流水线一样)CPU指令流水线根据之前描述的基础,指令进入流水线,通过流水线处理,从流水线出来的过程,对于我们程序员来说,是比较直观的。

I486拥有五级流水线。

分别是:取指(Fetch),译码(D1, main decode),转址(D2, translate),执行(EX, execute),写回(WB)。

某个指令可以在流水线的任何一级。

但是这样的流水线有一个明显的缺陷。

对于下面的指令代码,它们的功能是将两个变量的内容进行交换。

1 XOR a, b2 XOR b, a3 XOR a, b从8086直到386处理器都没有流水线。

流水线CPU技术获奖课件

流水线CPU技术获奖课件

FD
I E E EW

F
D
I E E EW
(b)8 条指令顺序
(c)8 条指令的流水线
图 4-12 流水线的相关延迟
指令发射:开启指令去处理器功能单元执行旳过程
静态调度:编译检测
编译器优化后,所需时间为
17个时钟周期 ① R1←M(Y)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
(R1)×(R2)->R3 (R4) + (R5)->R3
局部性有关:数据有关
(1) I1: ADD R1,R2,R3 ; I2: SUB R4,R1,R5 ;
(R2) + (R3)->R1 (R1) - (R5)->R4
第(1)组指令中,I1指令运算成果应先写入R1,然 后在I2指令中读出R1内容。因为I2指令进入流水线, 变成I2指令在I1指令写入R1前就读出R1内容,发生 RAW(写后读)有关。
② 增设一种存储器,将指令和数据分开存储;
③ 采用双端口存储器。
局部性有关:数据有关
在程序中,一条指令旳执行需等前一条指令执行完后才 干进行,则有数据有关。
例:SUB R1,R2,R3;(R2)(R3) R1
ADD R4,R1,R5;(R1)(R5) R4
时钟 1 2 3 4
指令
SUB 取指 译码 取数 执行
图 4-15 基于计分牌发射逻辑的流水线调度过程
动态调度-计分牌法
记分牌旳缺陷 依托流水线停止来处理有关性 没有消除数据有关 集中式调度
记分牌部件是性能瓶颈
动态调度-保存站法
FD
RS
RS
E
E

CPU指令的流水线执行

CPU指令的流水线执行

CPU指令的流⽔线执⾏指令集是CPU体系架构的重要组成部分。

C语⾔的语法是对解决现实问题的运算和流程的⽅法的⾼度概况和抽象,其主要为算术、逻辑运算和分⽀控制,⽽指令集就是对这些抽象的具体⽀持,汇编只不过是为了让开发⼈员更好地记住指令,但它跟CPU所认的机器码其实是⼀⼀对应的,因此汇编也是低级语⾔。

CPU的指令执⾏⼀般包括取指、译码和执⾏,这是经典的三级指令执⾏流⽔线,教科书上往往以这三种过程来描述,arm7也是。

但是现代的CPU设计往往使⽤更⼴泛使⽤的5级流⽔线,也就是分为取指、译码、执⾏、访存和回写。

为什么要分为5级?这是由流⽔线的各个阶段的时间来决定的。

我们可以考虑现实⽣活的⼯⼚的流⽔线。

假设某流⽔线只有三个⼯序,有三个⼯⼈A、B、C,则这条⽣产线的效率就取决于效率最低的那个⼯⼈的效率。

现假设B做完其负责的⼯序需要10秒,⽽A和C完成只需要5秒,总共要完成4个产品。

那总时间应该是:5+10*4+5 = 50秒,(第⼀个5是A先做第⼀道⼯序的时间,这时B和C都得等,⽽最后⼀个5是C必须要等B全部完成后才能开始)即会出现C在等待,⽽B⼀直在忙死忙活的场景。

当然,⽆论怎样,流⽔线的执⾏总⽐完成没有流⽔好,就好⽐A、B、C负责的⼯作都由⼀个⼈去做,那做完⼀个得20秒。

全部做完得20*4 = 80秒。

最理性的场景就是三个⼈做事的效率是⼀样的,那就不会出现等待的情况。

那现在确实遇到B⼯作效率最低的问题,怎么解决呢?就是将B的⼯作重新分解,平均分成两个⼯序,也就是B1和B2,分别都是5秒完成,那完成的总时间是40秒。

CPU指令的三级流⽔执⾏正是遇到各步骤流⽔时间不均的问题,也就是取指和译码往往⽐较快,⽽执⾏包括运算和访问寄存器、内存或者回写等功能,因此执⾏的时间⼀般⽐取指和译码要长,取指和译码可以在单时钟周期内完成,但执⾏需要2到3个时钟周期才能完成。

要想得到更⾼的流⽔效率,就需要将执⾏部分分解为执⾏(运算等)、访存(内存)和回写(寄存器)。

数字系统设计-流水线CPU设计

数字系统设计-流水线CPU设计

实验报告课程名称:数字系统设计实验Ⅱ学院:信电系数字系统设计实验Ⅱ流水线MIPS微处理器设计ContentsPart 1实验目的 (3)Part 2实验任务 (3)Part 3实验原理 (4)Part 4实验步骤 (12)1.IF级设计 (12)2.ID级设计 (14)3.Decode单元设计 (16)4.ALU单元设计 (22)5.EX级设计 (27)6.顶层模块设计 (29)Part 5仿真和波形分析 (37)1.IF级仿真分析 (37)2.Decode单元仿真分析 (38)3.ALU仿真分析 (40)4.顶层仿真分析 (41)Part 6心得 (42)实验报告一、实验目的(1)了解提高CPU性能的方法。

(2)理解数据冒险、控制冒险的概念以及流水线冲突的解决方法。

(3)掌握流水线MIPS微处理器的工作原理。

(4)掌握流水线MIPS微处理器的测试方法。

二、实验任务设计一个32位流水线MIPS微处理器。

设计要求:(1)至少执行下列MIPS32指令。

①算数运算指令:ADD ADDU SUB SUBU ADDI ADDU②逻辑运算指令:AND OR NOR XOR ANDI ORI XORI SLT SLTI SLTU SLTIU③移位指令:SLL SLLV SRL SRLV SRA④条件分支指令:BEQ BNE BGEZ BGTZ BLEZ BLTZ⑤无条件跳转指令:J JR⑥数据传输指令:LW SW⑦空指令:NOP(2)在用5级流水线技术,对数据冒险实现转发或阻塞功能。

(3)在XUP Vietex-II Pro开发系统中实现MIPS微处理器,要求CPU的运行速度大于25MHz.三、实验原理1.流水线MIPS CPU总体设计与构建流水线是数字系统中一种提高系统稳定性和工作速度的方法,广泛应用在高档CPU的构建中。

根据MIPS处理器指令的特点,将整体的处理过程分为取指令(IF)、指令译码、执行、存储器访问和寄存器写回五级,对应多周期CPU的五个处理阶段。

流水线结构在cpu中的运用是一种

流水线结构在cpu中的运用是一种

高效的计算方式。

流水线结构是一种在CPU中实现的技术,它允许在一个时钟周期内完成多条指令的执行。

流水线结构通过将一条指令分为若干个独立的阶段来实现,每个阶段都负责执行一部分指令。

这样,在一个时钟周期内就可以同时执行多条指令。

这样,CPU 就可以在一个时钟周期内完成多条指令的执行。

流水线结构带来了很多优点,主要有以下几点:
提高了CPU的运行速度,由于在一个时钟周期内可以同时执行多条指令,所以CPU的运行速度得到了提高。

提高了CPU的并行度,可以同时执行多条指令,并行度提高了。

降低了CPU的功耗。

缺点:但是流水线结构也带来了一些问题,比如流水线控制和数据相关性等,这些问题需要程序员在编程时进行特别处理。

当流水线执行过程中出现数据相关性时,就会导致流水线活动的阻塞,这种现象称为流水线冒险(Pipeline Hazard)。

数据相关性通常发生在两条指令之间,而在这两条指令之间的那些指令就会因为数据相关性而被阻塞。

解决这个问题的方法有两种:
数据相关性检测和预流控制(Data Hazard Detection and Control)。

这种方法可以在指令执行之前检测出数据相关性,
并采取适当的措施防止阻塞。

流水线重排(Pipeline Rescheduling)。

这种方法可以在程序运行过程中,重新调整指令的执行顺序,以避免数据相关性。

流水线控制是一种很复杂的问题,需要综合考虑很多因素,比如指令的类型、指令的执行顺序、流水线的结构等等。

在这些因素的综合影响下,程序员需要在编程时特别注意这些问题,以避免流水线的阻塞。

流水线结构在cpu中的运用是一种

流水线结构在cpu中的运用是一种

流水线结构在cpu中的运用是一种随着现代科技的飞速发展,计算机已经成为当今社会不可或缺的重要部分。

其中,主要由中央处理器(CPU)驱动,因此,研究CPU性能和效率非常重要。

流水线结构是增强CPU性能和效率的重要手段,它已经成为CPU设计的核心技术。

流水线结构实际上是围绕一组有序的处理指令,将其分解为一系列子步骤,其中每个子步骤都在独立的层次上进行处理的一种结构。

流水线的工作原理是,不同的指令或操作在不同的阶段完成,每一节点都具有特定的功能和任务。

它允许几个指令同时处理,从而提高了CPU的效率。

由于指令可以并行执行,流水线技术允许CPU在一个时钟周期中完成较多的操作。

流水线结构被用于处理机架构和微型计算机中,以及处理更大更复杂操作的个人计算机系统。

流水线结构的术语指的是一系列的处理步骤,称为管道。

当一条指令进入流水线时,就开始执行。

每条指令在每个管道中都有自己的子步骤,在子步骤完成后,接下来的步骤继续执行,直到完成所有的操作。

流水线结构的主要优势在于可以将CPU处理速度提高数十倍,大大提高系统性能和效率。

管道技术可以更有效地利用CPU时钟周期,并减少完成指令所需时间。

除此之外,流水线结构还可以增加指令集的复杂性,以及增大对存储器的容量要求。

当前,流水线结构可以在几乎所有的微处理器中找到应用。

流水线结构在处理器中发挥着至关重要的作用,它几乎已经成为处理器设计的基础和关键技术要素。

例如,Intel Pentium处理器采用流水线结构,共有5个独立管道,每个管道中都有一系列子步骤,以处理特定指令。

这使得处理器能够在极短的时间内完成较多的操作,从而实现极高的吞吐量。

此外,流水线结构也可以应用于多核处理器的设计中,使每个核心能够独立地处理指令,极大地提高处理器的效率。

例如,AMD的多核处理器都采用流水线结构,它们可以同时处理多个指令,从而提高处理器的性能和效率。

虽然流水线结构可以极大地增加处理器的效率,但是它也存在一些缺点。

带中断系统的五级流水线CPU设计

带中断系统的五级流水线CPU设计

优化缓存设计:通过优化缓存设计,提高缓存命中率,减少缓存未命中的情况。
优化分支预测:通过优化分支预测算法,提高分支预测的准确性,减少分支预测错误导致的性能损失。
实际应用中的考虑因素
PART 06
硬件资源的占用
处理器核心数量:根据实际需求选择合适的处理器核心数量
内存容量:根据实际需求选择合适的内存容量
பைடு நூலகம்
中断优先级和向量表的作用:保证中断系统的高效性和稳定性,提高CPU的性能和可靠性
带中断系统的五级流水线CPU设计实现
PART 04
中断处理在流水线的实施
中断处理单元:负责处理中断请求,并控制中断响应
中断响应:当接收到中断请求时,CPU暂停当前指令的执行,跳转到中断处理程序
中断优先级:根据中断请求的优先级,决定中断响应的顺序
THANK YOU
汇报人:
中断响应:CPU接收到中断请求信号后,暂停当前任务,进入中断处理状态
中断服务:CPU执行中断服务程序,处理中断请求
中断返回:中断服务完成后,CPU返回到被中断的任务继续执行
中断优先级和向量表
中断优先级:中断系统在处理多个中断请求时,根据优先级的高低来决定处理顺序
向量表:中断系统在处理中断请求时,通过向量表来查找中断处理程序的入口地址
研究方法:采用理论分析、实验验证、仿真模拟等方法进行研究
研究意义:新型中断处理技术的研究与应用可以提高计算机系统的性能和可靠性,提高计算机系统的安全性和稳定性,推动计算机技术的发展。
流水线设计中的新思路和新方法
硬件加速技术:利用专用硬件加速流水线处理过程
自适应流水线设计:根据任务需求自动调整流水线结构
流水线设计的概念
五级流水线设计原理

处理器流水线的概念和相关技术

处理器流水线的概念和相关技术
IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB
IF ID EX MEM WB
28
动态调度
❖ 有些信息在译码时难以确定,如是否发生异 常、访存操作需要多少周期等,静态调度就 不能完成。
❖ 动态调度:硬件会重新安排指令的执行顺序 以减少停顿并同时保持数据流和异常行为。
❖ •乱序执行: •指令进入是有序的 •执行可以乱序,只要没有相关就可执行,多条 指令同时执行 •结束可以乱序,也可以有序(主要是精确例外 的需要),乱序结束会导致WAR相关(静态 流水线中只有RAW和WAW相关)
30
Tomasulo算法
❖ IBM 360/91中首次使用,由Robert Tomasulo提出 的一种支持乱序执行的高级方案。它会跟踪指令的 操作数何时可用,将RAW冒险降至最低,并在硬件 中引入寄存器重命名功能,将WAW和WAR冒险降 至最低。
24
编译器调度(静态调度)
❖ 插入阻塞对于流水线来说仍然是暂停了流水 线的执行。既然转发技术无法消除指令序列 中所包含的这种暂停,那么能否让编译器在 进行代码生成时就消除这些潜在的暂停呢?
❖ 实际上,编译器的确可以通过重新组织代码 顺序来消除这种暂停。通常称这种重新组织 代码顺序消除暂停的技术为 指令调度 (instruction scheduling)。
令需要等待DADD在WB阶段写回数据后才
可以执行。
15
2.4 数据冒险的解决办法
❖ 根据指令中读写访问的顺序,可以将数据冒 险分为三类。分别是:
❖ 写后读(RAW) ❖ 写后写 (WAW) ❖ 读后写 (WAR)
16
写后读冒险(RAW: Read After Write)

流水线CPU原理

流水线CPU原理

7.3 流水线的性能评价
7.3.3 Amdahl定律
实验与设计
7-1 高速硬件乘法器设计实验
实验与设计
7-1 高速硬件乘法器设计实验
实验与设计
7-2 高速硬件除法器设计实验
实验与设计
7-2 高速硬件除法器设计实验
实验与设计
7-3 CACHE实验
实验与设计
7-3 CACHE实验
实验与设计
7.3.2 流水线性能评估举例 1.一般流水线的性能分析
7.3 流水线的性能评价
7.3.2 流水线性能评估举例 2.流水线延时对其性能的影响
7.3 流水线的性能评价
7.3.2 流水线性能评估举例 3.流水线竞争对流水线性能的影响 (1)结构竞争。 (2)数据竞争。 (3)控制竞争。
7.3 流水线的性能评价
7.1.2流水线CPU的时空图
7.1 流水线的一般概念
7.1.2流水线CPU的时空图
7.1 流水线的一般概念
7.1.3 流水线分类
指令流水线 指令流水线 算术流水线 算术流水线
处理机流水线 处理机流水线
7.2 与流水线技术相关的问题及处理 方法
7.2.1 资源相关及其冲突
7.2.2 数据相关及其分类
7.3 流水线的性能评价
7.3.1 流水线的性能指标 1.流水线的主要性能指标 (1)吞吐率。
7.3 流水线的性能评价
7.3.1 流水线的性能指标 1.流水线的主要性能指标 (2)加速比。
(3)使用效率。
7.3 流水线的性能评价
7.3.1 流水线的性能指标 2.CPU性能公式
7.3 流水线的性能评价
7.2 与流水线技术相关的问题及处理 方法
7.2.3 数据竞争的处理技术

CPU流水线详解

CPU流水线详解

CPU流⽔线详解为什么Intel处理器主频这么⾼,⽽AMD处理器主频都很低?是不是AMD处理器性能不如Intel?我们⼀般的回答都是,因为Intel处理器与AMD处理器内部构架不同,所以导致了这种情况,还有⼀种具体⼀点的回答就是因为Intel处理器流⽔线长,那到底流⽔线与CPU主频具体有什么关系呢?今天给⼤家带来⼀篇我以前刊登在《电脑报》硬件板块技术⼤讲堂版⾯的⼀篇原创⽂章。

关于CPU流⽔线的知识,很多报纸杂志都介绍过了,但以往的很多⽂章对某些问题的解释不够清楚,⽐如报纸杂志上曾多次提及增加流⽔线级数有利于提⾼CPU主频,但对其原因的解释却少有触及,⼜⽐如对于流⽔线的级数与其周期的关系是什么?CPU流⽔线与⼯⼚流⽔线的区别和联系等问题的解释也不够清楚,本⽂将带领您找到以上问题的答案。

关于流⽔线的基本原理本⽂就不再说明了,对于增加流⽔线级数有利于提升CPU主频这⼀观点笔者将通过理论论证和事实举例两⽅⾯对其进⾏解释说明。

我们先对流⽔线的级数与其周期的关系给出⼀个公式,⼀个k级流⽔线,处理n个任务总共需要花费“k+(n-1)”个周期,这是因为先是处理第⼀个任务就需要k个时钟周期,k个周期后流⽔线被装满,剩余n-1个任务只需n-1个周期就能完成。

如果同样数量的n个任务不采⽤流⽔线处理,那么就需要n*k个周期,我们把两者做⽐,得到另⼀个概念,叫做流⽔线加速⽐C,所以C=n*k / [k+(n-1)],当n远远⼤于k时,C的值趋进于k,也就是说,理论上k级流⽔线⼏乎可以提⾼k倍速度,但这仅限于理论。

看到这也许有的读者可能会感到⼀头雾⽔,不⽤急,下⾯就将举例对其进⼀步说明。

举例前先对流⽔线周期选取的问题进⾏⼀下解析,我们假设⼀辆成品车的⽣产过程分为车轮⽣产,车门⽣产,最后组装三个步骤,每辆车的车轮⽣产需要8s,车门需要12s,⽽最后的组装需要10s,在本例中⽣产⼚商针对此情况设计了1条3级流⽔线,分别是车轮⽣产流⽔线,车门⽣产流⽔线以及组装流⽔线,整条流⽔线的周期选取为12s,注意,在此为什么设置整条流⽔线的周期为三个步骤中最长的12s呢?其实在现实⽣产中由于⼯艺⽔平,原料特性以及制造难度的不同,每级流⽔线完成任务的时间都可能是不同的,这⾥如果选择8s或10s为整条流⽔线的周期将会导致车门⽣产线的任务不能在单位周期内完成,也就⽆法及时向下⼀级提交任务,所以在k级流⽔线中只能选择完成任务所需时间最常的那级流⽔线的时间作为整条流⽔线的周期。

CPU流水线性能分析

CPU流水线性能分析
若菜用度为4的处理机,则因为同时运行四条流水线,平均每条流水线只执行3条指令,则需要3t + (3 -1)t = 5t
流水线的最佳段数选择
一般处理机种流水线的段数在2-10段,一般把8段以上的流水线成为超流水线,采用超流水线的处理机称为超流水线处理机。
E = n (t1 + t2,… + tk)t / K((t1 + t2,… + tk) + (n - 1)max(t1,t2,…,tk))
多条流水线
假设指令由取指、分析、执行三个子部件完成,且每个子部件的时间为t, 则采用单条流水线的处理机(处理机度为1)连续执行12条指令,则共需要时间Tk = 3t + (12 - 1)t = 14t
CPU流水线性能分析
衡量流水线的性能指标主要有吞吐率、加速比、效率和流水线的最佳段数。
吞吐率(Though Put rate, Tp)
单位间内完成的任务数量,也称为平均吞吐率或实际吞吐率。
Tp = n / Tk = n / (k + n - 1)t 当 n >> k 时,最大吞吐率Tpmax = 1 / t
例:某流水线分为四段,执行时间分别为t、t、3t、t,则吞吐率Tp = n / (6t + (n-1)t),
最大吞吐率Tpmax = 1 / max(t1,t2,t3,t4) = 1 / 3t
加速比(Speedup Ratio)
完成同样的一批任务,不使用流水线的所有时间与用流水线的所用时间之比。
S = nkt / ((t1 + t2 + t3,…+ tk) + (n - 1)max(t1, t2, t3,..,tk))

五段式流水线CPU

五段式流水线CPU

五段式流⽔线CPU流⽔线CPU⼀、流⽔线CPU概述1、流⽔线CPU的原理流⽔线CPU是为提⾼吞吐量⽽创造的,五段式流⽔线CPU的吞吐量是单周期CPU的五倍,同⼀时间CPU上最多有五条指令在运⾏。

如何达到同⼀CPU上五条指令呢?答案就在于把每条指令都拆分成五个阶段,按照CPU硬件执⾏流来拆成五段:IF(instruction fetch)、DEC(decode)、EXE(execute)、ME(memory)、WB(write back),CPU上五段部分分别执⾏⼀条指令的⼀个阶段。

因为CPU上五段分别进⾏不同指令的不同阶段,每段都需要⾃⼰当前执⾏指令的数据:IF段所⽤数据为指令地址,可有pc寄存器提供;DE、EXE、ME、WB段所⽤数据包含但不限于指令内容,⼀定需要对应流⽔线寄存器保存。

2、流⽔线CPU设计的难点流⽔线CPU同时有多条指令运⾏,⼀个很重要的设计因素是解决冲突。

冲突包含硬件冲突、控制冲突和数据冲突。

硬件冲突硬件冲突是说同⼀时刻需要对同⼀互斥硬件(⼀次只允许⼀次读或写)进⾏访问,举例来说,D段需要从存储器中取出指令,M段需要对存储器写⼊数据,这两个操作同时进⾏就会带来冲突,在这⾥IM和DM是独⽴的两个存储器,因此不必考虑。

控制冲突控制冲突是分⽀指令和跳转指令带来的冲突。

分⽀指令的最终分⽀地址晚于下⼀周期到来,导致下⼀条指令的地址不能及时算出或者决定;跳转指令的跳转地址晚于下⼀周期到来,导致上述同样冲突。

解决这样的冲突主要是通过假设不跳转或者延迟槽。

假设不跳转是说先假设不跳转和分⽀,正常执⾏下⼀条指令,当计算出要跳转时清楚已执⾏的结果。

延迟槽是说跳转指令后⾯加空指令nop,即等待跳转地址计算出来再决定是继续下⼀条指令还是跳转。

数据冲突数据冲突是关于数据“新鲜性”的冲突。

指令的执⾏离不开寄存器,有的指令会利⽤寄存器数据,有的指令会写回寄存器,有的指令两者皆有,当前序执⾏的指令的⽬的寄存器(将要写回的寄存器)和后序执⾏的指令的源寄存器(利⽤其数据的寄存器)相同时,就存在数据关联。

(完整word版)MIPS流水线CPU的verilog实现

(完整word版)MIPS流水线CPU的verilog实现

(完整word版)MIPS流水线CPU的verilog实现一、实验目的1.了解提高CPU性能的方法。

2.掌握流水线MIPS微处理器的工作原理。

3.理解数据冒险、控制冒险的概念以及流水线冲突的解决方法。

4.掌握流水线MIPS微处理器的测试方法。

二、实验任务设计一个32位流水线MIPS微处理器,具体要求如下:1.至少运行下列MIPS32指令。

(1)算术运算指令:ADD、ADDU、SUB、SUBU、ADDI、ADDIU。

(2)逻辑运算指令:AND、OR、NOR、XOR、ANDI、ORI、XORI、SLT、SLTU、SLTI、SLTIU。

(3)移位指令:SLL、SLLV、SRL、SRLV、SRA。

(4)条件分支指令:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ。

(5)无条件跳转指令:J、JR。

(6)数据传送指令:LW、SW。

(7)空指令:NOP。

2.采用5级流水线技术,对数据冒险实现转发或阻塞功能。

3.在XUP Virtex-Ⅱ Pro 开发系统中实现MIPS微处理器,要求CPU的运行速度大于25MHz。

三、实验原理1.总体设计流水线是数字系统中一种提高系统稳定性和工作速度的方法,广泛应用于高档CPU的架构中。

根据MIPS处理器的特点,将整体的处理过程分为取指令(IF)、指令译码(ID)、执行(EX)、存储器访问(MEM)和寄存器会写(WB)五级,对应多周期的五个处理阶段。

如图3.1所示,一个指令的执行需要5个时钟周期,每个时钟周期的上升沿来临时,此指令所代表的一系列数据和控制信息将转移到下一级处理。

图3.1 流水线流水作业示意图由于在流水线中,数据和控制信息将在时钟周期的上升沿转移到下一级,所以规定流水线转移变量命名遵守如下格式:名称_流水线级名称例如:在ID级指令译码电路(Decode)产生的寄存器写允许信号RegWrite在ID级、EX级、MEM级和WB级上的命名分别为RegWrite_id、RegWrite_ex、RegWrite_mem和RegWrite_wb。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

作为程序员,CPU在我们的工作中扮演了核心角色,因此了解处理器内部的工作方式对程序员来说不无裨益。

CPU是如何工作的呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有12级流水线还是18级流水线,甚至是更深的31级流水线时,这到些都意味着什么呢?应用程序通常会将CPU看作是黑盒子。

程序中的指令按照顺序依次进入CPU,执行完之后再按顺序依次从CPU中出来,而内部到底发生了什么,我们通常并不了解。

对我们程序员来说,尤其是对做程序性能调优工作的程序员来说,学习CPU内部的细节非常必要。

否则,如果你不知道CPU的内部结构,那如何才能针对CPU做性能优化?本文所关注的就是专门针对X86处理器流水线的工作原理。

你需要掌握的预备知识首先,阅读本文你需要了解编程,最好了解一点汇编语言。

如果你还不知道指令指针(instruction pointer)是什么,那么本文对你来说可能有些难。

你需要知道什么是寄存器,指令和缓存,如果不明白它们是什么,你需要尽快查找资料了解一下。

第二,CPU的工作原理是一个非常庞大和复杂的话题,本文仅仅是匆匆一瞥,很难以用一篇文章详尽叙述。

如果我有什么疏漏,请通过评论告诉我。

第三,我仅仅关注英特尔处理器及其X86架构。

当然除了X86,还有很多其他架构的处理器。

虽然AMD公司引入了很多新特性到X86架构,但是X86架构是Intel公司发明,并且创造了X86指令集,其中绝大多数特性是由Intel引入的。

所以为了保持叙述的简单和一致性,我仅关注Intel的处理器。

最后,当你读到这篇文章时,它已经是“过时”的了。

更新款的处理器已经设计出来,其中一些会在未来几个月之内发布。

我很高兴技术能如此快速的发展,我希望有一天所有这些技术都会过时,创造出拥有更惊人计算能力的CPU。

处理器流水线基础从一个非常广的角度来说,X86处理器架构在近35年来并没有变化太多。

虽然X86架构被附加了很多新功能,但是最初的设计(包括几乎所有最初的指令集)仍然基本上是完整保留的,即使在最新的处理器上仍然被支持。

最初的8086处理器支持14个寄存器,这些寄存器在如今最新的处理器中仍然存在。

这14个寄存器中,有4个是通用寄存器:AX,BX,CX和DX;有4个是段寄存器,段寄存器用来辅助指针的实现:代码段(CS),数据段(DS),扩展段(ES)和堆栈段(SS);有4个是索引寄存器,用来指向内存地址:源引用(SI),目的引用(DI),基指针(BP),栈指针(SP);有1个寄存器包含状态位;最后是最重要的寄存器:指令指针(IP)。

指令指针寄存器是一个拥有特殊功能的指针。

指令指针的功能是指向将要运行的下一条指令。

所有的X86处理器都按照相同的模式运行。

首先,根据指令指针指向的地址取得下一条即将运行的指令并解析该指令(译码)。

在译码完成后,会有一个指令的执行阶段。

有些指令用来从内存读取数据或者向内存写数据,有些指令用来执行计算或者比较等工作。

当指令执行完成后,这条指令会通过退出(retire)阶段并将指令指针修改为下一条指令。

译码,执行和退出三级流水线组成了X86处理器指令执行的基本模式。

从最初的8086处理器到最新的酷睿i7处理器都基本遵循了这样的过程。

虽然更新的处理器增加了更多的流水级,但基本的模式没有改变。

35年来发生了什么改变相较于现今的标准,最初的处理器设计显得太过简单。

最初的8086处理器的执行过程可以简述为从当前指令指针取得指令,通过译码,执行最后退出,然后继续从指令指针指向的下一条指令处取得指令。

新的处理器增加了新的功能,有些增加了新的指令,有些增加了新的寄存器。

我将主要关注和本文主题有关系的改变,这些改变影响了CPU指令执行的流程。

其他的一些变化比如虚拟内存或者并行处理虽然都很有意义而且有趣,但是并不在本文主题的范围内。

指令缓存在1982年被加入到处理器中。

通过指令缓存,处理器可以一次性从内存读取更多指令并放在指令缓存中,而不用每条指令都从内存中取。

指令缓存仅有几个字节大小,只能容纳数条指令,但是因为消除了之后每次取指往返内存和处理器的时间,极大的提高的效率1985年的386处理器引入了数据缓存,而且扩展了指令缓存的设计。

数据访存请求通过一次性读取更多的数据放在数据缓存中,从而提升了性能。

而且,数据缓存和指令缓存都从几个字节扩大到几千字节。

1989年推出的i486处理器引入了五级流水线。

这时,在CPU中不再仅运行一条指令,每一级流水线在同一时刻都运行着不同的指令。

这个设计使得i486比同频率的386处理器性能提升了不止一倍。

五级流水线中的取指阶段将指令从指令缓存中取出(i486中的指令缓存为8KB);第二级为译码阶段,将取出的指令翻译为具体的功能操作;第三级为转址阶段,用来将内存地址和偏移进行转换;第四级为执行阶段,指令在该阶段真正执行运算;第五级为退出阶段,运算的结果被写回寄存器或者内存。

由于处理器同时运行了多条指令,大大提升了程序运行的性能。

1993年Intel推出了奔腾(Pentium)处理器。

由于诉讼问题,Intel无法继续沿用原来的数字编号。

因此,用奔腾替代了586作为新款处理器的代号。

奔腾处理器相对i486处理器对流水线做出了更多修改。

奔腾处理器架构增加了第二条独立的超标量流水线。

主流水线工作方式类似于i486,第二条流水线则并行的运行一些较简单的指令,比如说定点算术,而且该流水线能更快的进行该运算。

1995年Intel推出了奔腾Pro(Pentium Pro)处理器。

和之前的处理器相比,奔腾Pro采用了完全不同的设计。

该处理器采用了诸多新特性以提高性能,包括乱序(Out-of-Order, OOO)执行的部件以及猜测执行。

流水线扩展到了12级,而且引入了“超标量流水线”的概念,使得许多指令可以被同时处理。

我们稍后将详尽的介绍乱序执行的部件。

在1995-2002年之间,乱序执行部件经过了数次重大改进。

处理器中加入了更多的寄存器;单指令多数据(Single Instruction Multiple Data, or SIMD)的引入使得一条指令可以进行多组数据运算;现有的缓存变得更大而且引入了新的缓存;有些流水级被拆分成更多流水级,有些流水级被合并,使得更加适合实际的应用。

这些改变对整体性能的提升有重要作用,但它们都没有从根本影响数据在处理器中的流动方式。

2002年发布的奔腾4处理器引入了超线程技术。

乱序执行部件的设计使得指令被执行的速度比处理器能够提供指令的速度更快。

因此对于大部分应用,CPU的乱序执行部件在大部分时间处于空闲状态,甚至在高负载的情况下也不能充分利用。

为了让指令流能充分的流入乱序执行部件,Intel加入了第二套前端部件(译注:在处理器结构中,前端是指取指,译码,寄存器重命名等模块,经过前端部件的处理后,指令等待发射进入乱序执行部件)。

虽然实际上只有一个乱序执行部件,但对于操作系统来说,它能看到两个处理器。

前端部件包含两组同样功能的X86寄存器,两个指令译码器根据两个指令指针指向的地址分别处理。

所有的指令被一个共享的乱序执行部件执行,但对应用程序来说并不知情。

当乱序执行部件执行完成,像之前一样退出流水线后,最终结果返回虚拟的两个处理器。

2006年Intel发布了酷睿(Core)微架构。

为了品牌效应,它被称做酷睿2(二总比一好)。

令人惊讶的是,处理器频率不升反降,而且超线程也被去掉了。

通过降低时钟频率,每一级流水线可以做更多工作。

乱序执行部件也被扩展的更宽。

各种不同的缓存和队列都相应做的更大。

而且处理器被重新设计,以适应双核和四核的共享缓存结构。

2008年,Intel开始用酷睿i3, i5, i7的方式来命名新的处理器。

新处理器重新引入了超线程。

这三个系列的处理器主要区别在于内部缓存大小不同。

未来的处理器:Intel的下一代微结构被称为Haswell。

Haswell据称将于2013年发布。

目前已知的文档说明它将拥有14级流水级的乱序执行部件,所以它仍然遵循从奔腾Pro以来的基本设计思路。

那么,流水线到底是什么?乱序执行部件是什么?他们如何提升了处理器的性能呢?CPU指令流水线根据之前描述的基础,指令进入流水线,通过流水线处理,从流水线出来的过程,对于我们程序员来说,是比较直观的。

I486拥有五级流水线。

分别是:取指(Fetch),译码(D1, main decode),转址(D2, translate),执行(EX, execute),写回(WB)。

某个指令可以在流水线的任何一级。

但是这样的流水线有一个明显的缺陷。

对于下面的指令代码,它们的功能是将两个变量的内容进行交换。

1 2 3 XOR a, b XOR b, a XOR a, b从8086直到386处理器都没有流水线。

处理器一次只能执行一条指令。

再这样的架构下,上面的代码执行并不会存在问题。

但是i486处理器是首个拥有流水线的x86处理器,它执行上面的代码会发生什么呢?当你一下去观察很多指令在流水线中运行,你会觉得混乱,所以你需要回头参考上面的图。

第一步是第一条指令进入取指阶段;然后在第二步第一条指令进入译码阶段,同时第二条指令进入取指阶段;第三步第一条指令进入转址阶段,第二条指令进入译码阶段,第三条指令进入取指阶段。

但是在第四步会出现问题,第一条指令会进入执行阶段,而其他指令却不能继续向前移动。

第二条xor指令需要第一条xor指令计算的结果a,但是直到第一条指令执行完成才会写回。

所以流水线的其他指令就会在当前流水级等待直到第一条指令的执行和写回阶段完成。

第二条指令会等待第一条指令完成才能进入流水线下一级,同样第三条指令也要等待第二条指令完成。

这个现象被称为流水线阻塞或者流水线气泡。

另外一个关于流水线的问题是有些指令执行速度快,有些指令执行速度慢。

这个问题在奔腾处理器的双流水线架构下显得更加明显。

奔腾Pro拥有12级流水线。

当这个数字被首次宣布后,所有的程序员都倒抽了一口气,因为他们知道超标量流水线是如何工作的。

如果Intel仍然按照以前的思路设计超标量流水线的话,流水线的阻塞和执行速度慢的指令会严重影响执行速度。

但同时,Intel宣布了完全不同的流水线设计,叫做乱序执行部件(Out-of-Order core)。

单从叙述上很难理解这些改变带来的好处,但Intel确信这些改进是令人激动的。

让我们来更深入的看看这个乱序执行的部件吧!乱序执行流水线在描述乱序执行流水线时,往往是一图胜千言。

所以我们主要以图例进行介绍。

CPU流水线图例I486处理器拥有5级流水线。

这种设计在现实世界中的其他处理器中很常见,而且效率不错。

而奔腾处理器的流水线比i486更好。

两条流水线可以并行运行,而且每条流水线可以同时有多条指令在不同流水级执行。

相关文档
最新文档