[转帖]处理器结构--PipeLine&SuperScalar
处理器结构--PipeLine&SuperScalar
https://www.jianshu.com/p/36c80a15a226
PipeLine由来
最初开始,指令一条一条顺序执行,后来当工艺进步了,CPU中的元件越来越多,而在原来的顺序执行的过程中,只有一条指令的某一个阶段在执行,如取指,取数据等等,其他元件都处于等待的状态,于是为了提高CPU吞吐量,以及指令并行的效率,于是PipeLine应运而生
PipeLine原理
PipeLine是指将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度。其具体执行过程类似工厂中的流水线,并因此得名。
- 把一个重复的过程分解为若干子过程
- 每个子过程可以与其它子过程并行进行
- 将每个指令分解成取指,译码,执行,写回等阶段
- 将分解的每个阶段交给不同的元件进行处理
虽然分解完后,每个指令需要多个cycle后才能完成,但是通过多个指令的并行运算每个讯号内一个指令可以完成,因此通过这个方法整个速度可以提高
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级发射超标量流水线。
即:在同一时刻,有多条指令被读取,译码,执行,存储,写回。
参考资料
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的更多相关文章
- S3C2440的Linux启动过程分析(一)——SC2440处理器结构
1.1. S3C2440处理器结构 S3C2440处理器的结构如下图所示,其核心单元为ARM9TDMI处理器核,主要包括16K的指令Cache和16K的数据Cache,以及分开的指令和数据MM ...
- 【Gstreamer开发】TI嵌入式处理器GStreamer pipeline
Example GStreamer Pipelines From Texas Instruments Embedded Processors Wiki Jump to: navigation, sea ...
- [转帖]龙芯下一代处理器微结构GS464E细节曝光
龙芯下一代处理器微结构GS464E细节曝光 [日期:2015-05-26] 来源:Linux公社 作者:Linux [字体:大 中 小] http://www.linuxidc.com/Linux/ ...
- ARM处理器全解析:A8/A9/A15都是什么?
前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列产品,以此来扩大ARM在高性能与低功耗领域的领先地位,进一步抢占移动终端市场份额.Cortex-A50是继Cortex-A15 ...
- ARM处理器:开放者的逆袭
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 1981年,英国BBC电视台策划了一系列关于计算机的电视节目.但导演发现一个问题:怎么给没见过电脑的观众画 ...
- 瑞芯微RKnanC芯片处理器介绍
RKnanC是一种低成本.低功耗.高效率的数字多媒体芯片,它是基于ARM的低功耗处理器结构和硬件加速器.它是专为便携式音频产品应用,如MP3播放器等. RKnanC可以支持各种音频标准的解码,如MP3 ...
- [转帖]ARM 相关内容
ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57 http://www.myir-tech.com/resource/448.asp ...
- Netty源码分析第4章(pipeline)---->第1节: pipeline的创建
Netty源码分析第四章: pipeline 概述: pipeline, 顾名思义, 就是管道的意思, 在netty中, 事件在pipeline中传输, 用户可以中断事件, 添加自己的事件处理逻辑, ...
- SEH结构
首先有几点问题 1.在后文中看到的PE的节中的配置信息表Load configuration是对SEH回调函数的注册,那么Exception Table是加载的什么信息. 2.什么时候走进系统异常,什 ...
随机推荐
- List集合、泛型、装箱拆箱
1.List集合 Vector:增删改查都慢 线程同步 线程安全 LlinkedList:以链表结构存储数据,查询慢.增删快 ArrayList:的运行速度比较快 连续数据空间存储数据,查询快(下标) ...
- OpenCV使用Cmake来管理工程
写篇入门级别的文章,对于配置OpenCV很多人不知道有这种方法,其实这种方法在OpenCV编译过程中已经使用到的了,如果有手动编译OpenCV经验的同学可以很快的学会这种工程管理方法 方法优点,只要有 ...
- Luogu P5564 [Celeste-B]Say Goodbye (多项式、FFT、Burnside引理、组合计数)
题目链接 https://www.luogu.org/problem/P5564 题解 这题最重要的一步是读明白题. 为了方便起见下面设环长可以是\(1\), 最后统计答案时去掉即可. 实际上就相当于 ...
- 关于lower_bound()和upper_bound()
关于lower_bound()和upper_bound(): 参考:关于lower_bound( )和upper_bound( )的常见用法 注意:查找的数组必须要是排好序的.因为,它们查找的方式也是 ...
- Latex的beamer幻灯片图形不编号的问题
在beamer幻灯片中如果插入图形,一般不会显示图形编号,这是其默认模式,但我们可以通过设置给图形编号.解决办法是: 在导言区加上命令: \setbeamertemplate{caption}[num ...
- 20165213 Exp7 网络欺诈防范
Exp7 网络欺诈防范 一. 实践内容 简单应用SET工具建立冒名网站 1.首先使用sudo vi /etc/apache2/ports.conf 进行查看listen的端口号,若不是80改为80. ...
- Nginx之监控进程和工作进程
1. 函数调用分析 在开启 master 的情况下,多进程模型的下的入口函数为 ngx_master_process_cycle,如下: int mian() { ... if (ngx_proces ...
- How to Fix Grub error: no such partition Grub Rescue
错误信息: error: no such partition Entering rescue mode... grub rescue> _ 错误原因: grub找不到文件normal.mod 解 ...
- CentOS7 yum install elasticsearch
首先安装 JDK 环境 # 本机是否已经安装,ElasticSearch 最低支持 jdk 1.7 yum list installed | grep java # 查看 yum 库中的 java 安 ...
- Anaconda 改为国内镜像的方法
Anaconda的conda 特别好用 但如果用国外的镜像,慢的出奇 可以改为了国内镜像会好很多 conda config --add channels https://mirrors.tuna.ts ...