Open alicemare opened 5 years ago
先看看什么是pipeline,有一个大致的概念 再思考如何去设计,以及中间可能有的问题矛盾
In computing, a pipeline, also known as a data pipeline, is a set of data processing elements connected in series, where the output of one element is the input of the next one. The elements of a pipeline are often executed in parallel or in time-sliced fashion. Some amount of buffer storage is often inserted between elements.
至于RISC中所谈论的指令pipeline 查阅wiki 指令流水线(英语:Instruction pipeline)是为了让计算机和其它数字电子设备能够加速指令的通过速度(单位时间内被运行的指令数量)而设计的技术。
流水线在处理器的内部被组织成层级,各个层级的流水线能半独立地单独运作。每一个层级都被管理并且链接到一条“链”,因而每个层级的输出被送到其它层级直至任务完成。 处理器的这种组织方式能使总体的处理时间显著缩短。
未流水线的架构产生的效率低,因为有些CPU的模块在其他模块运行时是闲置的。流水线虽并不会完全消除CPU的闲置时间,但是能够让这些模块并发运作而大幅提升程序运行的效率。
但并不是所有的指令都是独立的。在一条简单的流水线中,完成一个指令可能需要5层。如右图所示,要在最佳性能下运算,当第一个指令被运行时,这个流水线需要运行随后4条独立的指令。如果随后4条指令依赖于第一条指令的输出,流水线控制逻辑必须插入延迟时脉周期到流水线内,直到依赖被解除。而转发技术能显著减少延时。凭借多个层,虽然流水线在理论上能提高性能,优胜于无流水线的内核(假设时脉也因应层的数量按比例增加),但事实上,许多脚本设计中并不会考虑到理想的运行。
拿wiki上的一个例子来说明: 下图是一般有4层流水线的示意图:
运行顺序如以下列表所示:
时序 | 运行情况 |
---|---|
0 | 四条指令等待运行 |
1 | 从存储器(memory)中读取绿色指令 |
2 | 绿色指令被解码从主存储器中读取紫色指令 |
3 | 绿色指令被运行(事实上运算已经开始(performed))紫色指令被解码从主存储器中读取蓝色指令 |
4 | 绿色指令的运算结果被写回到寄存器(register)或者主存储器紫色指令被运行蓝色指令被解码从主存储器中读取红色指令 |
5 | 绿色指令被运行完毕紫色指令的运算结果被写回到寄存器或者主存储器蓝色指令被运行红色指令被解码 |
6 | 紫色指令被运行完毕蓝色指令的运算结果被写回到寄存器或者主存储器红色指令被运行 |
7 | 蓝色指令被运行完毕红色指令的运算结果被写回到寄存器或者主存储器 |
8 | 红色指令被运行完毕 |
9 | 所有指令皆运行完毕 |
流水线的控制信号 所有控制信号名称及其功能与非流水线版本相同
流水线段寄存器:每个周期写入一次,不需要单独的写控制
流水线的hazard冒险问题
ILP(发生资源冲突等 结构相关 数据相关 控制相关
μArchitecture