流水线

计算机组成与设计(十)—— 流水线的冒险

混江龙づ霸主 提交于 2020-04-03 04:35:15
冒险 流水线技术之所以能提高性能 究其本质是利用了时间上的并行性, 那它让原本应该先后执行的指令 在时间上一定程度的并行起来,然而这也会带来一些冲突和矛盾, 进而可能引发错误。 冒险( Hazard ) :在流水线中我们希望当前每个时钟周期都有一条指令进入流水线可以执行。但 在某些情况下,下一条指令无法按照预期开始执行,这种情况就被称为冒险 。 冒险分为三种: 结构冒险:如果一条指令需要的硬件部件还在为之前的指令工作,而无法为这条指令提供服务,那就导致了结构冒险。(这里结构是指硬件当中的某个部件) 数据冒险:如果一条指令需要某数据而该数据正在被之前的指令操作,那这条指令就无法执行,就导致了数据冒险 控制冒险:如果现在要执行哪条指令,是由之前指令的运行结果决定,而现在那条之前指令的结果还没产生,就导致了控制冒险。 结构冒险 示例一:如果指令和数据放在同一个存储器中,则不能同时读存储器 解决方案一:我们有一个方便又简便的方法,即流水线停顿( stall ),产生空泡( bubble )。 虽然流水线停顿能用来解决各种冒险,但它的效率低下,应尽量避免。 解决方案二:在存储器中设置单独的指令高速缓存和数据高速缓存。(要强调的在计算机中主存储器也就是内存是统一存放指令和数据的, 这也是冯诺依曼结构的要求,只是在CPU当中 的一级高速缓存会采用指令和数据分别存放的方式) 示例二

计网-2.3、万维网与HTTP协议

眉间皱痕 提交于 2020-03-12 06:38:41
引子 如何定位网页的信息 HTTP协议(请求与相应) http协议:超文本传输协议(需要可靠,用TCP协议) http1.0的工作过程 非流水线模式传每个东西动需要建立TCP请求 流水线模式:一次请求可以传多个文件 如果html太长会分段传输 HTTP1.1的工作过程 多条连接,且每条连接多个请求 请求报文的数据部分有时候也会带数据:比如登录的账号密码等 HTTP协议可以上传和下载文件 来源: CSDN 作者: 墨九南烟 链接: https://blog.csdn.net/qq_44157281/article/details/104804550

计算机组成原理5-预测和冒险

做~自己de王妃 提交于 2020-03-06 17:30:28
1、 CPU 的流水线设计的三大冒险 结构冒险(Structural Hazard)、数据冒险(Data Hazard)以及控制冒险(Control Hazard)。 2、 结构冒险  结构冒险的本质是硬件层面资源的竞争。CPU 在同一个时钟周期,同时在运行两条计算机指令的不同阶段。但是这两个不同的阶段,可能会用到同样的硬件电路。 可以看到,在第 1 条指令执行到访存(MEM)阶段的时候,流水线里的第 4 条指令,在执行取指令(Fetch)的操作。访存和取指令,都要进行内存数据的读取。内存只有一个地址译码器的作为地址输入,那就只能在一个时钟周期里面读取一条数据,没办法同时执行第 1 条指令的读取内存数据和第 4 条指令的读取指令代码。解决这种资源冲突的本质方法就是增加资源,在 CPU 的结构冒险里面。对于访问内存数据和取指令的冲突,一个直观的解决方案就是内存分成两部分,让它们各有各的地址译码器。这两部分分别是存放指令的程序内存和存放数据的数据内存。 现代的 CPU 并不会直接读取主内存。它会从主内存把指令和数据加载到 高速缓存 中,这样后续的访问都是访问高速缓存。而指令缓存和数据缓存的拆分,使得 CPU 在进行数据访问和取指令的时候,不会再发生资源冲突的问题了。 3、 数据冒险 数据冒险是程序逻辑层面的事,有三种类型:分别是 先写后读 (Read After Write,RAW)、

Mindmanager2018 官方中文版下载

拈花ヽ惹草 提交于 2020-03-03 17:35:14
Mindmanager是一个可视化的工具,可以用在脑力风暴(brainstorm)和计划(plan)当中。为商务人士提供更有效的、电子化手段捕捉、组织和联系信息(information)和想法(idea)。MindManager运用形象思维方法,使信息同时刺激大脑两个半球,其编辑界面使得用户可以通过“形象速记法”创建并相互交流各种想法和信息。它设计了一个与人的思考方式一致的自然、直接的工作环境,因此能够减少您所花费的时间、精力,减轻压力,从而提高您的工作效率。它简明、直观、弹性伸缩的界面,合理的流水线式交流沟通方式和特别的创新灵感触发机制,最终对项目管理、产品质量监控、服务质量改进,甚至决策,都起到了很好的促进作用。 mindmanager2018官方版下载 mindmanager2018新增特点: 1、优先视图。 2、时间表视图。 3、仪表盘向导。 4、数字结构。 5、业务战略工具包。 6、只能过滤。 7、自我发布。 8、互动演示导出。 点击下载哈 来源: 51CTO 作者: YQF17 链接: https://blog.51cto.com/14140524/2344757

体系结构复习3

送分小仙女□ 提交于 2020-02-16 02:45:28
流水线技术 访问主存的冲突解决 设置两个独立编址的存储器 指令和数据依然混合放在同一个主存,但设置两个Cache:指令Cache和数据Cache。程序空间和指令空间相互独立的系统结构称为哈佛结构。 指令和数据依然混合放在统一主存,但主存采用多体交叉结构。(有一定的局限性) 在主存和指令分析部件之间增设指令缓冲站 先行指令缓冲站 先行程序计数器PC1 先行程序计数器PC 指令缓冲 存储区 主 存 指令分析部件 指令寄存器IR 控 制 控制逻辑 器 指令缓冲存储区&控制逻辑 a) 按队列方式工作 b) 只要指令缓冲站不满,他就自动地向主存控制发取指令请求,不断地取指令 指令分析部件 a) 每分析完一条指令,就自动向指令缓冲站发出取下一条指令的请求。指令取出之后就把指令缓冲站中的指令作废。 b) 指令缓冲器中存放的指令条数是动态变化的 两个程序计数器 a) 先行程序计数器PC1:用于从主存预取指令 b) 现行程序计数器PC:用来记录指令分析部件当前正在分析的指令的地址 先行控制 先行控制技术:缓冲技术和预处理技术的结合 a) 缓冲技术:在 工作速度不固定 的两个功能部件之间设置缓冲器,用以 平滑 它们的工作。 b) 预处理技术:预取指令、对指令进行加工以及预取操作数等。 采用先行控制方式的处理机结构 主存储器 存储控制器 先行指令缓冲站 先行读数站 指令分析部件 先行操作站 运算控制器

JAVA多线程通信之流水线

帅比萌擦擦* 提交于 2020-01-30 17:57:29
JAVA多线程通信之流水线 上道工序为:生产手机主板,下道工序为:利用刚生产的主板,组装成手机。 通过多线程的通信进行类之间的函数的相互调用,建立了两个线程,生产手机主板的流水线MadeBoard 线程和消费主板组装成手机的流水线MadePhone线程 //Product类,产品类 public class Product { String name; int count=100; boolean flag = true; public synchronized void set(String name) { if(!flag) { try { this.wait(); } catch (InterruptedException e1) { e1.printStackTrace(); } } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } this.name = name; System.out.println("已生产了主板第"+name); this.notify(); flag = false; } public synchronized void get() { if(flag) { try { this.wait(); } catch

蜂鸟E203 硬件学习-两级流水线的实现(三)

蓝咒 提交于 2020-01-26 06:40:16
(二)EXU模块 EXU段包括指令译码,指令派发,指令发射,指令执行,内存操作,数据写回。而E203是简单的顺序单发射,顺序执行,顺序写回类型的处理器。 将IFU通过IR寄存器发送给EXU的指令进行译码和派遣。 通过译码出的操作数寄存器索引(Index)读取Regfile(如图中RD-Regfile) 维护指令的数据相关性(如OITF) 将指令派遣(Dispatch)给不同的运算单元执行(ALU、Long-Pipes、LSU、以及EAI) 将指令交付(检查指令分支预测是否正确,是否产生中断和异常) 将指令运算的结果写回Regfile(WB ARB) (1)EXU译码模块 (e203_exu_decode.v) 译码模块的输入信号来自于IR阶段,包含当前需要译码的指令,执行PC,预测结果,非对齐和存储器访问错误。 首先根据最后两个比特位判断当前译码指令是RV32还是RV16,再根据指令格式,产生不同的指令类型信息。如:寄存堆的索引和控制信号,跳转类型和所需计算的信息。 输出dec_info包含很多模块的控制信息,有BJP单元的控制信息,ALU单元的控制信息,CSR单元的控制信息,乘除单元的控制信息,AGU单元的控制信息。同时还要生成后面执行所需要的各类型立即数,当执行的指令为非法指令时,译码器模块还将产生各类型的异常指令异常信息。 (2)整数通用寄存器组 (e203_exu

并行,串行,流水线,线程和进程傻傻分不清楚

那年仲夏 提交于 2020-01-20 03:35:56
漫谈并行,串行,流水线,线程和进程 在说并行串行流水线时,我们先要说一个概念双核四程,四核八程代表什么。 双核四程 指处理器中有两个核心, 但是利用了超线程技术,一个核心就有2个线程,所以两个核心就有4个线程。一般来说,两个核心就只有2线程。 超线程技术 就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。因此支持Intel超线程技术的cpu,打开超线程设置,允许超线程运行后,在操作系统中看到的cpu数量是实际物理cpu数量的两倍,就是1个cpu可以看到两个,两个可以看到四个。有超线程技术的CPU需要芯片组、软件支持,才能比较理想的发挥该项技术的优势。 上述是一种减少命令执行时间的一种方式,Linux自从2.6内核开始,就会把不同的线程交给不同的核心去处理。Windows也从NT.4.0开始支持这一特性。 然后说下:并行,串行,流水线 并行: 时间片机制( 也有其他的机制,自己百度 ),让每个进程占用相同的cpu时间,在宏观上,可以实现多个进程同时完成。 串行: 一个进程完成,在执行下一个进程 流水线: 在A命令在执行时,B命令在解析,C命令在读取。这样子循环。 再说下线程和进程关系 我们开发应用程序,基本上分为2种进程:io消耗(文件读写);cpu消耗

动态调度-CA

孤街浪徒 提交于 2020-01-19 15:17:02
文章目录 影响指令流水线的因素 影响因素 程序的相关性 指令调度技术 编译器的静态调度 软件调度与硬件调度 动态调度技术 静态流水线的问题 动态调度思想 解决WAW和WAR的办法 Tomasulo算法 历史 Tomasulo算法结构 Tomasulo算法的流水阶段 举例 小结 动态流水线的例外处理 例外(Exception)与流水线 动态流水线的精确例外处理 硬件支持动态流水线的精确例外处理 指令重排序缓存Reorder Buffer (ROB) 假设ADD发生了溢出例外 龙芯1号把ROB和队列合并 总结 补:Meltdown攻击的基本原理(幽灵、熔断漏洞) 影响指令流水线的因素 影响因素 运行时间 = 程序指令数 * CPI (每条指令时钟周期数) Pipeline CPI=Ideal pipeline CPI + Structural stalls + RAW stalls + WAR stalls + WAW stalls + Control stalls 程序的相关性 程序的相关性容易引起流水线堵塞,可以通过软件和硬件的方法避免堵塞或降低堵塞的影响; • 编译调度:如循环展开 • 乱序执行:需要等待的指令不影响其他指令 (1)数据相关 :(真相关):导致RAW 1)定义:指令j数据相关于指令i,指令j使用了指令i产生的结果; 2)传递性:指令j数据相关于指令k

Jenkins2构建pipeline流水线

拥有回忆 提交于 2019-12-27 21:18:32
流水线有两种方式: 1、脚本式流水线 2、声明式流水线 构建流水线的简单示例: 脚本式流水线 node ('master'){ stage("Source"){ //从Git仓库中获取代码 git 'https://github.com/brentlaster/gradle-greetings.git' } stage("Build"){ } stage("Test"){ } stage("push"){ } } 声明式流水线 pipeline { agent {label 'master'} stages { stage('Source') { //拉取构建源码 steps { //从git仓库中获取代码 git 'https://github.com/brentlaster/gradle-greetings.git' } } stage('Build') { steps { //运行构建 bat "echo 'Build'" } } stage('Test') { steps { //测试 bat "echo 'Test'" } } stage('Push') { steps { //发布上线 bat "echo Push" } } } } 脚本式流水线和声明式流水线的区别: 脚本式流水线 优点:脚本灵活性更高、可以构建更复杂的流水线 缺点:脚本代码结构不清晰不容易维护