SMS Derfflinger
Just for fun.
首页
文章
标签
分类
关于
Lec21-23 Pipelining
最近更新:2025-01-26
|
字数总计:1.1k
|
阅读估时:3分钟
|
阅读量:
次
Performance Measures
性能有很多测量指标,可以用程序执行的时间来衡量
处理器性能铁律
程序的运行时间等于
指
令
数
周
期
数
每
个
周
期
的
时
间
不同的处理器实现可能有不同的cpi
能效损失主要在电容充电放电的耗散和晶体管的泄露
每个程序消耗的能量可以分解为该程序包含的指令数量乘以每条指令消耗
主要与CV的平方成正比,电容用于切换导线的状态,电压保证晶体管的速度
由于摩尔定律和电源电压的降低,能效一直在提高
流水线不能缩短单个任务的时间,但能提高整个工作负载的吞吐量
整个流水线的吞吐量由系统中最慢的任务决定
Pipelining RISC-V
单流水线CPU往往效率低下
时钟周期由系统中最慢的任务决定,处理单条指令的时间可能变长
Pipeline Hazards
流水线冒险:前面的指令出错影响到后面的指令
阻止在有指令执行的时候启动新指令的情况
有三种类型的冒险
Structural hazard
多条指令对于元件的争抢
解决方法:
停顿 (引入空操作:addi x0, x0, x0)
增加硬件资源:例如将寄存器设计为有两个读取口和一个写入口、在处理器芯片上增加缓存
Pipeline Datapath
在流水线中,时钟周期用于在执行阶段之间转换或者移动数据
* 要支持流水线,在适当的地方加入寄存器、将对应的控制位发送到下游即可
Data hazard
指令之间的数据依赖问题,可能导致错误或延迟
例如一个周期内读取写入相同寄存器
可以将寄存器设计为支持单周期写入读取,在周期的第一阶段写入,第二阶段读取
前一条指令要更新的值未更新完成就被后一条指令读取
在数据通路中增加转发路径和数据选择器,不经过寄存器直接转发给下一个元件
Load Data Hazard
一些情况下,例如load指令后,下一条指令需要的数据在上一条指令的下一个周期才会更新,这种情况下没有办法使用转发路径,需要使流水线暂停一个周期,即在该条指令处
插入一个nop指令
Load delay slot
需要一种硬件机制,可以使当前指令无效,并在下一个周期重复它
Code Scheduling to Avoid Stalls
由于停顿可以在编译期就加入,而且会导致性能损失,可以通过调度来避免停顿
往往由编译器完成
Control Hazard
与分支指令和跳转指令相关
在执行分支指令时,在执行完毕之前,分支指令后面的指令也会开始执行
如果在分支指令时后面什么都不做,会导致较为严重的性能损失(2个周期)
如果正常执行,分支指令不执行的情况下是正确的,分支指令执行的情况下需要刷新流水线
由于分支指令应用最多的场景是在循环语句中,对于多次执行的分支指令可以进行分支预测
预测方式:存在很多复杂的预测器,但最简单的方法是追踪上一次预测的结果
Superscalar Processors
在以增加流水线层级的方式提高处理器性能时,遇到冒险的概率会提高,CPI > 1
一种解决方案是使用超标量处理器,在理论上CPI << 1
超标量处理器是一种能够在每个时钟周期内发射并执行多条指令的计算机处理器架构。与传统的标量处理器(每次只能执行一条指令)相比,超标量处理器通过并行处理来提高性能。
通常采用乱序执行的方式执行
2024-09-24
该篇文章被 Derfflinger
打上标签:
Arch
Pipeline
Hazard
归为分类:
CS61C