处理器结构--PipeLine&SuperScalar

PipeLine由来

最初开始,指令一条一条顺序执行,后来当工艺进步了,CPU中的元件越来越多,而在原来的顺序执行的过程中,只有一条指令的某一个阶段在执行,如取指,取数据等等,其他元件都处于等待的状态,于是为了提高CPU吞吐量,以及指令并行的效率,于是PipeLine应运而生


5级PipeLine

PipeLine原理

PipeLine是指将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度。其具体执行过程类似工厂中的流水线,并因此得名。

  • 把一个重复的过程分解为若干子过程
  • 每个子过程可以与其它子过程并行进行
  • 将每个指令分解成取指,译码,执行,写回等阶段
  • 将分解的每个阶段交给不同的元件进行处理

虽然分解完后,每个指令需要多个cycle后才能完成,但是通过多个指令的并行运算每个讯号内一个指令可以完成,因此通过这个方法整个速度可以提高

PipeLine

PipeLine的风险与问题(Harzard)

假如,一个指令在执行的时候,需要等待流水线上前一个指令先执行完毕的话,那么这两个指令相互之间彼此有依赖关系。这可能导致流水线冲突的现象发生。以下三种冲突情况可能出现:

  • 资源冲突:流水线上的一个指令需要使用已经被另一个指令占据的资源,多条指令同时访问同一个硬件单元,目前L1缓存已经被分为指令缓存和数据缓存,所以原来有的结构冲突也就没有了

  • 数据冲突:

    • 指令层的数据冲突:指令需要的数据还没有计算出来,如下指令,R1中的值还未写回寄存器,下条指令就需要使用
// 前后指令间存在数据相关性,由于流水线导致read before write
// 上条指令还没将结果写回reg,后面的指令就错误操作了reg中之前的数据
add R1,R2,R3;
add R4,R1,R5;
  • 传输层的数据冲突:指令需要的暂存器(register)内容还没有被存入暂存器

  • 控制流冲突:流水线必须等待一个有条件Goto指令是否会被执行。

这些冲突导致相对应的指令,必须在流水线的开始处等候,这会在流水线上导致空缺。这样的话流水线就不能顺利运行,处理速度便开始下降。因此要尽量避免这样的冲突。

PipeLine的解决方案

  • 资源冲突
    通过增加功能单位可以解决资源冲突,通常CPU中有很多通用寄存器,x86有8个通用寄存器,Arm有16个,但是RISC处理器通常会内置32或者64个寄存器堆(Register File)以供使用。通过把流水线后面的计算结果立刻向前传可以避免许多数据冲突。通过RAT(Register Alias Table)将指令中寄存器进行重命名,以达到寄存器的充分利用以及数据计算的分离。

  • 数据冲突
    使用out-of-order(ROB,RRF)执行;在冲突指令间插入不相关指令;Forwarding,上条指令的数据有效后就直接送个下条指令而不是先写回存储器;插入Nop空指令(软件解决,但是不好)等。


    Forwading
  • 控制流冲突
    通过分支预测器(BTB,Static Predictor)可以减少控制冲突。在这里处理器预测性地继续运算,直到正式预测是正确为止。假如预测错误的话那么在其中已经执行的指令要被推翻。尤其流水线非常长的处理器(比如英特尔的奔腾4或者IBM的PowerPC在这种情况下要浪费许多时间。因此这些处理器拥有非常高级的分支预测技术,只有百分之一的分支预测会发生错误,其流水线需要清除。
控制流冲突

超标量(SuperScalar)的概念

处理器的内核中一般有多个执行单元(或称功能单元),如算术逻辑单元、位移单元、乘法器等等。未实现超标量体系结构时,CPU在每个时钟周期仅执行单条指令,因此仅有一个执行单元在工作,其它执行单元空闲。超标量体系结构的CPU在一个时钟周期可以同时分派(dispatching)多条指令在不同的执行单元中被执行,这就实现了指令级的并行。


超标量流水线

超标量实现原理

标量流水线在运行的过程中,每一个Cycle只取一条指令,发射的时候也只发射一条指令。
而超标量流水线是指在取指的时候,某一时刻读取N条指令(X86 Nehalem每次读4条指令共16bytes),然后将N条指令同时解码(4个解码器),并且解码完毕后将解码完毕的Micro Ops交付给ALU执行,最后在一个cycle内将执行结果分发。就称为这样的流水线为N级发射超标量流水线。

即:在同一时刻,有多条指令被读取,译码,执行,存储,写回。

ARM Cortex-A9超标量流水线

X86 Nehalem4发射16级超标量流水线
ARM与X86比较

参考资料

http://www-inst.eecs.berkeley.edu/~cs61c/sp15/lec/13/2015Sp-CS61C-L13-kavs-Pipelining-1up.pdf
https://compas.cs.stonybrook.edu/~nhonarmand/courses/sp16/cse502/slides/06-pipelining.pdf
https://www.zhihu.com/question/35024996/answer/62322067
https://www.coursera.org/learn/jisuanji-zucheng/lecture/dL6g2/604-liu-shui-xian-de-mou-xian

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容