8.3-指令流水(学习笔记)

【README】

本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;


【1】如何提高机器速度


1 提高访存速度
多体并行:对多个存储体进行交叉访问,在一个主存周期中,有多个存储体向cpu提供数据,或 cpu在一个主存周期中访问多个存储器;

2 提高IO和主机之间的传送速度
起初,io和主机之间是采用程序控制方式,该方式下,CPU与外设直接不能并行工作;

  • 2.1 中断: cpu和外部设备可以在部分实现中并行工作,提高了cpu使用率;
  • 2.2 DMA: 直接主存访问;用DMA控制器直接在内存和外设之间进行数据传送;减少cpu在数据传送过程中的占用率;进而提高cpu的使用率;
  • 2.3 通道: DMA可以划分为多个子通道(netty的实现原理);子通道间可以同时准备数据,但传送需要串行占用cpu周期,进一步提高了IO外设与内存间的数据传输率;
  • 2.4 IO处理机:内存和IO设备间的数据传输,整个传输过程和数据校验过程,完全由IO处理器来做,cpu被独立出来和解放出来,效率会更高 ;
  • 2.5 多总线: ;

【2】系统并行性

1 并行概念
2.1 并发: 两个或多个事件在同一时间段发生;
2.2 同时: 两个或多个事件在同一时刻发生(时间上相互重叠);
流水线方式是同时方式的一种;

2 并行性的等级
2.1 过程级 ;
2.2 指令级 ;

【3】指令流水原理

2)指令的二级流水

当取指令1完成后,进入执行指令1;  这时取指令部件空闲,可以取指令2;
 当执行指令1完成后,转而执行指令2,而不是取指令2;这样,取指和执行阶段在时间上完全重叠;指令周期减半,速度提高1倍

3)影响指令流水加倍的因素:

因素1 执行时间 大于 取指时间;
因素2 条件转移指令对指令流水的影响:
因为只有当指令执行后,才知道结果,根据结果判断是否转移; 如果转移的话,将要执行的指令就不是按序的下一条指令;

4)指令的六级流水

4.1)指令周期被分为6个阶段

  • 1)    FI:取指令;fetch instruction
  • 2)    DI:指令译码; decode instruction
  • 3)    CO: 形成操作数地址;
  • 4)    FO: 取操作数; fetch operand
  • 5)    EI: 执行; execute instruction
  • 6)    WO: 结果写回;write operand

4.2)横轴表示时间; 纵轴表示指令;

4.3)由上图可以看出流水线的执行性能优于串行执行(干货):

完成一条指令需要6个时间单位;

1.串行执行,则完成9条指令,需要54个时间单位;

2.采用六级流水线执行,完成9条指令,仅需要14个时间单位;

5)小结(以m级流水线,n个指令为例)

5.1)m级流水线的含义:同一个时钟周期中最多有m条指令在同时执行;

5.2)本文结论:流水线中指令执行速率是串行方式的 X=m*n/(m+n-1) 倍; 又m可以看做常量,当n取无限大时,则X取m倍即m级流水线的指令执行速度是串行方式的m倍(干货)

--  流水线中指令执行分析过程如下:

第1条指令执行完成的时钟周期是m;

第2条指令执行完成的时钟周期是m+1;

第n条指令执行完成的时钟周期是 m+n-1;(由数学归纳法很简单就可以得出)

-- 串行方式指令执行分析过程:

第1条指令执行完成的时钟周期是m;

第2条指令执行完成的时钟周期是m*2;

第n条指令执行完成的时钟周期是m*n;(由数学归纳法很简单就可以得出)


【3.5】 影响指令流水线性能因素

【3.5.1】结构相关

【因素1】 结构相关
如 指令a使用运算器计算下一条指令的地址;指令b使用运算器完成指令运算;这两条指令就会发生资源冲突;

上图蓝色标识的始终周期就会发生冲突
如时钟周期4, 指令1的FO是访存取操作数;指令4的FI是访存取指令,这就会产生冲突; 这些冲突就会降低流水线性能;

解决方法:

  • 1,    停顿;第4条指令的FI不在时钟周期4取指令,而停顿到时钟周期5取指令;
  • 2,    指令存储器和数据存储器分开;
  • 3,    指令预取技术(一次取多条指令,而不是每执行一条取一条指令);

【3.5.2】数据相关

不同指令重叠操作,流水线分为多个段,可能多个读段,或多个写段,通常情况下前段是读,后段是写,可能改变操作数的读写顺序; (如 指令1 先读后写; 指令2 先读后写;)

  • 2.1 写后读相关;先写后读相关;
  • 2.2 读后写相关;
  • 2.3 写后写相关;

2.4 解决方法:

  • 2.4.1 后推法;以写后读为例,等待写入R1成功后,然后再读R1的数据;
  • 2.4.2 采用旁路技术;以写后读为例,不需要等待指令1的结果写入R1,只要指令1的结果一旦在运算器的输出端生成以后,直接把结果送入到指令2的运算器的输入端; 这样会更好节约时间;

【3.5.3】控制相关

指令3是转移指令;若需要转移,则转移到第15条指令;
而这期间,已经进入流水线的指令(指令4~指令7)的操作因指令转移会被作废,从而造成损失;


【4】指令流水线性能

  • 1 吞吐率:单位时间内流水线所完成指令或输出结果的数量;

  • 2 加速比: Sp;表示采用m段流水线的速度与同功能的不采用流水线的速度之比;

3 流水线效率:流水线中硬件使用率;

  • 3.1 建立时间: 指令进入流水,到执行完成从流水线输出的时间;
  • 3.2 排空时间: 最后一条指令进入流水线,到最后一条指令从流水线输出的时间;

总的时间=流水段被加电的总的时间;


【5】流水线多发技术

上面讲了,利用流水线提高指令执行速度;
下面看一下,在流水线的基础上,对指令的解释(包括取指令+执行指令)速度进一步提高的方法

如果用多条流水线,即几条指令同时进入到不同流水线(多套流水线部件)进行解释,那这样的话, 指令速度可以被进一步提高; 这就是超标量技术(流水线多发技术)


【5.1 】超标量技术(多套流水线部件)

每个时钟周期内,多条独立指令进入到不同流水线中进行解释;

  • 1 需要配置多条流水线,多个部件;
  • 2 不能调整指令的执行顺序:

通过编译优化技术,把可并行的指令搭配起来; (这就是jvm指令重排序的原因所在了)
把多条可以并行执行的指令,把它挑选出来,让它们同时进入到3条流水线


【5.2】超流水线技术(仅一套流水线部件)

超流水线: 把一个时钟周期分为3份;

  • 时钟周期(0-1)有3根竖线,就把一个时钟周期(流水段)分为了3份;

1) 普通流水线的设计,每个时钟周期叫做流水段;
流水段之间加入锁存器,把每个流水段的执行结果在锁存器中进行锁存;
作为下一个流水段执行时的操作信号,或控制信号,或操作的数据;

2)超流水线的设计:
把一个时钟周期或一个流水段再分为3份;这3份之间是没有锁存器的;
不同指令处于同一个流水段或时钟周期中;相互之间的信号不能叠加;

例子:mips处理器, 采用了超流水技术;
超流水技术也不在指令执行过程中,调整指令执行顺序(jvm指令重排序),而是由编译器优化来调整

【小结】

由上文分析知:m级流水线的指令执行速度是串行方式的m倍;

p分段m级超流水线技术的指令执行速度是串行方式的 m*p 倍 (理论情况下,因为还有很多影响流水线性能的因素);


【5.3】超长指令字


【6】流水线结构

【6.1】指令流水线结构

译码: 来确认这条指令要做什么操作;
地址形成部件:解析出操作数地址;
理想情况下, 6级流水线的速度是不采用流水线的6倍;
分为6段后,在流水段之间要加上锁存器;锁存器用于保存上一个流水段的操作结果;同时为下一个流水段提供操作数据和操作信号;


【6.2】运算流水线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java虚拟机是如何执行线程同步的

转载自 [译]Java虚拟机是如何执行线程同步的想介绍下synchronized的原理,但是又不知道从何下手,在网上看到一篇老外的文章,介绍了和线程同步相关的几个基础知识点。所以想把它翻译一下给大家看看。相信看过这些基础知识之后再看我后面要写的s…

python开方运算符_Pytorch Tensor基本数学运算详解

1. 加法运算示例代码:import torch# 这两个Tensor加减乘除会对b自动进行Broadcastinga torch.rand(3, 4)b torch.rand(4)c1 a bc2 torch.add(a, b)print(c1.shape, c2.shape)print(torch.all(torch.eq(c1, c2)))输出结果:torch.Size([3, 4]) torch.…

重新审视演进式设计

演进式设计是一种理念,它曾经颠覆过传统笨拙的计划式设计,如今,它依旧焕发着生命力,但我们不能以静止的眼光去看待它,而应该尝试着引入一些新的方法、框架乃至技术。 ♦ ♦ 说起来,所谓Evolutionary Design…

9.1-微操作命令的分析(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 1)完成一条指令需要4个周期: 取值周期;间址周期(或有)&…

小知识 | Java中的“魔数”

转载自 小知识 | Java中的“魔数”在编程过程中,我们可能经常听到“魔数”这个词,那么这个词到底指的是什么呢?什么数叫做魔数呢?一、标识文件类型的“魔数”大多数情况下,我们都是通过扩展名来识别一个文件的类型的&a…

python setup.py 指定文件到指定路径_linux下python安装到指定目录

由于使用公司服务器时没有root权限,只能把python安装到个人文件夹下,使用源码包方式安装,这里记录一下。1.python下载cd到目录/users/w,在此目录下安装python。通过wget命令下载python源码包:2.解压python到当前目录$ …

9.2-控制单元CU的功能(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】CU功能(CPU内部不采用总线方式) 控制单元的功能: CU发出各种控制命令或微指令…

WEB API 系列(二) Filter的使用以及执行顺序

在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理。引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想,通过Filter能统一地对一些通用逻辑进行处理&…

图解 SQL 里的各种 JOIN

转载自 图解 SQL 里的各种 JOIN 从业以来主要在做客户端,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付。现在偶尔需要到后台的 SQL Server 里追查一些数据问题,就显得有点捉襟见肘了,特…

python cmd闪退_使用cmd python模块时,如何使程序正常崩溃?

会发生的是,如果您的代码引发运行时异常并且您的完成不起作用,您就不知道为什么因为没有打印回溯.尝试这个非常短的代码来看看我的意思:程序应该在c 2“ddda”行崩溃,显然你要添加一个字符串和一个int,这根本不起作用.但是不是崩溃,而是异常被抓住了,你不知道发生了…

10.1-控制单元CU的组合逻辑设计

【README】 1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 2.精简指令集RISC(简单指令集合)采用的就是这种组合逻辑设计的硬连方式(非常重要…

ENode 2.8 最新架构图简介

ENode架构图 什么是ENode ENode是一个.NET平台下,纯C#开发的,基于DDD,CQRS,ES,EDA,In-Memory架构风格的,可以帮助开发者开发高并发、高吞吐、可伸缩、可扩展的应用程序的一个应用开发框架。 开源项目地址:https://github.com/tang…

Hibernate注解(一)之持久化实体

翻译自 Hibernate Annotations1. 创建POJO作为持久化实体 每个持久化POJO类都是一个实体,并使用 Entity注解(在类级别)声明: Entity public class Flight implements Serializable {Long id;Idpublic Long getId() { return id;…

python请输入你的名字_实现《你的名字》同款滤镜,python+opencv

好久没有上简书,最近上来一看发现这篇文章阅读量远超了其他的文章,还有评论提到说在讲技术的时候卖萌不好。哈哈,当时写的时候完全没想过会有人搜到看,只是为自己的作品留个念想,所以文风比较散漫随意。于是这次来小修…

10.2-控制单元CU的微程序设计

【README】 1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 2.微指令:1条微指令就是多个bit位,如8个bit,每个bit位表示一种微操作&#xff1b…

微服务的误读与误解

微服务确实很受欢迎,但是对于微服务的误解也是事实,本文对这些误解一一来介绍下: 一、微服务不够“微”? 尽管微服务定义的很明确,但是开发者社区对它的解释却颇有争议,主要的一些问题如下: 1.它是否是单体架构的代表…

Hibernate注解(二)之映射简单的属性

翻译自 Hibernate Annotations2. 映射简单的属性 2.1.声明基本的属性映射每个非静态非瞬态属性(取决于访问类型的字段或方法)都被认为是持久性的,除非您将其注释为Transient。没有为您的财产注释等同于适当的 Basic注释。该Basic 注释允许…

进程与服务的签名_苹果app签名需要注意哪几点

现在部分的智能手机系统设备和工作一个应用软件,都需求证书的签名认证。未经任何签名的程序是不能在智能手机上设备和工作的。验证签名的底子进程则:智能手机操作系统或软件渠道对收到的原始数据选用相同的杂凑运算得到消息摘要,将与被签署时分的消息摘要…

8.4-中断系统

【README】 1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 2.采用一问一答的方式对中断进行总结(中断7问题),refer2 8.4-中断系统小结&…

ASP.NET Core的配置(1):读取配置信息

提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置信息定义在这两个文件之中。到了.NET Core的时候,很多我们…