处理器结构--PipeLine&SuperScalar

https://www.jianshu.com/p/36c80a15a226
 0.1 2018.06.12 16:12* 字数 1483 阅读 1833评论 1喜欢 1

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

[转帖]处理器结构--PipeLine&SuperScalar的更多相关文章

  1. S3C2440的Linux启动过程分析(一)——SC2440处理器结构

    1.1.     S3C2440处理器结构 S3C2440处理器的结构如下图所示,其核心单元为ARM9TDMI处理器核,主要包括16K的指令Cache和16K的数据Cache,以及分开的指令和数据MM ...

  2. 【Gstreamer开发】TI嵌入式处理器GStreamer pipeline

    Example GStreamer Pipelines From Texas Instruments Embedded Processors Wiki Jump to: navigation, sea ...

  3. [转帖]龙芯下一代处理器微结构GS464E细节曝光

    龙芯下一代处理器微结构GS464E细节曝光 [日期:2015-05-26] 来源:Linux公社  作者:Linux [字体:大 中 小] http://www.linuxidc.com/Linux/ ...

  4. ARM处理器全解析:A8/A9/A15都是什么?

    前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列产品,以此来扩大ARM在高性能与低功耗领域的领先地位,进一步抢占移动终端市场份额.Cortex-A50是继Cortex-A15 ...

  5. ARM处理器:开放者的逆袭

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 1981年,英国BBC电视台策划了一系列关于计算机的电视节目.但导演发现一个问题:怎么给没见过电脑的观众画 ...

  6. 瑞芯微RKnanC芯片处理器介绍

    RKnanC是一种低成本.低功耗.高效率的数字多媒体芯片,它是基于ARM的低功耗处理器结构和硬件加速器.它是专为便携式音频产品应用,如MP3播放器等. RKnanC可以支持各种音频标准的解码,如MP3 ...

  7. [转帖]ARM 相关内容

    ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57 http://www.myir-tech.com/resource/448.asp ...

  8. Netty源码分析第4章(pipeline)---->第1节: pipeline的创建

    Netty源码分析第四章: pipeline 概述: pipeline, 顾名思义, 就是管道的意思, 在netty中, 事件在pipeline中传输, 用户可以中断事件, 添加自己的事件处理逻辑, ...

  9. SEH结构

    首先有几点问题 1.在后文中看到的PE的节中的配置信息表Load configuration是对SEH回调函数的注册,那么Exception Table是加载的什么信息. 2.什么时候走进系统异常,什 ...

随机推荐

  1. CDOJ 1132 酱神赏花 dp+单调栈降低复杂度+滚动数组

    酱神赏花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 262143/262143KB (Java/Others) Submit St ...

  2. 【译】XMLHttpRequest和Fetch, 谁最适合AJAX?

    原文地址:https://www.sitepoint.com/xmlhttprequest-vs-the-fetch-api-whats-best-for-ajax-in-2019/ 目录 从AJAX ...

  3. [CSP-S模拟测试]:走路(期望DP+分治消元)

    题目传送门(内部题100) 输入格式 第一行两个整数$n,m$,接下来$m$行每行两个整数$u,v$表示一条$u$连向$v$的边.不保证没有重边和自环. 输出格式 $n-1$行每行一个整数,第$i$行 ...

  4. [题解] [CF518D] Ilya and Escalator

    题面 题解 期望dp入门题 设\(f[i][j]\)为到\(i\)时间有\(j\)个人上了电梯的概率, 我们可以得到转移方程 \[ f[i][j]=\begin{cases}f[i-1][j]\cdo ...

  5. beta week 2/2 Scrum立会报告+燃尽图 05

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9957 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名: ...

  6. 学习 vue 需要了解的内容

    总结 vue 的目录 1. vue 基础 指令 事件 动态的属性 组件 动画 2. vue 组件通信 1. 父传子 props 2. 子传父 ref 3. 插槽 4. 组件的生命周期 3. vue 的 ...

  7. javascript的历史和入门

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. python jieba分词小说与词频统计

    1.知识点 """ 1)cut() a) codecs.open() 解决编码问题 b) f.readline() 读取一行,也可以使用f.readlines()读取多行 ...

  9. React的Sass配置

    React提供的脚手架creact-react-app创建的工程文件不像vue那种暴露出webpack来,所以添加依赖需要拐个弯. 为了配置sass需要按以下步骤进行: 一.安装sass-loader ...

  10. postman提交数组格式方式

    提交数组格式数据,对应的服务器端接收的是@RequestBody 和对应的接收值