乱序执行的简单概念

谈乱序执行和内存屏障 十多年前的程序员对处理器乱序执行和内存屏障应该是很熟悉的,但随着计算机技术突飞猛进的发展,我们离底层原理越来越远,这并不是一件坏事,但在有些情况下了解一些底层原理有助于我们更好的工作,比如现代高级语言多提供了多线程并发技术,如果不深入下来,那么有些由多线程造成问题就很难排查和理解. 阅读详情
乱序执行技术
为了进一步提高处理速度, Pentium Pro等最新推出的高档微处理器采用了一种乱序执行
技术来支持其超标量、超流水线设计。所谓乱序执行技术就是允许指令按照不同于程序中指
定的顺序发送给执行部件的一套方法,通过把不能立刻执行的指令搁置在一边而把能立刻执
行的后续指令提前处理,可以避免拖延处理器的运行,缩短程序的执行时间。每执行完一条
指令时,剩下的指令又重新组合为适当的序列。
乱序执行技术必须以数据流分析和微指令操作数、执行状态和执行结果的缓冲寄存为前
提。通过数据流分析,决定哪些微指令已准备好了所有的操作数并可被发送到执行部件执行。
支持这项工作的关键部件是重排序缓冲器ROB(Reorder Buff e r )和称之为保留站的特殊指令缓
冲区。保留站位于指令译码器和指令执行部件之间,里面存有一些已译码的指令,以便执行
部件即使在译码器延迟期间也不会闲置;反过来,如果执行部件繁忙,保留站又可以提供一
种缓冲,使得译码器能继续操作。R O B是一个循环的F I F O队列,它可保存带相关操作数的各
条微指令及其执行状态和结果。只有当一条微指令之前的所有微指令都被执行完时,该指令
才能退出,并且把结果写到体系结构寄存器和内存中。R O B和保留站在同一时刻均从译码器
中接收同一微指令。在R O B记录微指令程序顺序的同时,保留站中缓冲寄存着多条微指令,
并根据每条微指令的所有操作数是否齐备和执行部件是否空闲等条件,决定何时将它发送给
相关的执行部件。前一条微指令的执行结果可能是随后的微指令的源操作数,这样每个执行
部件的所有结果都被送回保留站中。这种交叉开关式的互联结构允许将一个执行部件的输出
传送给需要该输出作为输入操作数的另一个执行部件。执行部件的结果还被传回给R O B,由
此决定一条微指令是否可以退出,以保证所有微指令按程序次序退出。每条微指令只有退出
后才能向体系结构寄存器或内存提交它的执行结。
 
第五章:乱序执行 认识CPU 阅读详情

相关推荐

关于多线程同步的一切:乱序执行和内存屏障

所以CPU0收到Read消息后,会把b的0值发给CPU1,所以继续在`while (b);简而言之,Core执行到write memory barrier(wmb)的时候,如果Store Buffer还有悬而未决的store操作,则都会被mark上,直到被标注的Store操作进入内存后,后续的Store操作才能被执行,因此wmb保障了barrier前后操作的顺序,它不关心barrier前的多个操作的内存序,以及barrier后的多个操作的内存序,是否与Global Memory Order一致。...

m0_73311735的博客 1367

计算机组成原理:乱序执行,CPU里的“线程池”

可以通过增加资源、停顿等待以及主动转发数据的方式,来解决结构冒险和数据冒险问题。 对于结构冒险,由于要限制来自于统一时钟周期不同的指令,对访问相同的硬件资源,可以通过增加资源来解决 对于数据冒险,由于要限制来自于数据之间的依赖,我们可以提前把数据转发到下一个指令。 但是计算综合运用这三种技术,我们仍然会遇到不得不停下整个流水线,等待前面的指令完成的情况,也就是采用流水线停顿的解决方案。比如说下面,因为第二条加法指令依赖于第一条指令从内存中取出来的数据,我们还是要获取一次NOP的操作。 ...

OceanStar的博客 4602

CPU乱序执行基础 —— Tomasulo算法及执行过程

Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 IBM 360/91浮点单元最先实现Tomasulo算法从而允许乱序执行。360体系只有4个双精度浮点寄存器,限制了编译器调度的有效性。而且,IBM 360/91的访存和浮点延迟都很长,如果顺序执行指令,虽然只有RAW hazard,但是后面无关的指令只能被stall。如果乱序

pythonxxoo的博客 2916

volatile原理详解

volatile关键字有如下两个作用 保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。 禁止指令重排序优化。 volatile的可见性 volatile无法保证原子性 ...

qq_37904966的博客 409

那些没用的计算机知识四(乱序执行-编译器乱序)

编译器指令乱序属于编译器优化的一种,如果允许在不进行编译优化的条件下运行,直接禁止编译器优化即可(包括编译器指令乱序、可见性的问题都可以解决);如果代码需要再优化的条件下运行,那么针对编译器乱序需要显式的使用编译器屏障解决。

u011116085的博客 1357

Carsim与AVL CRUISE联合仿真:从零搭建整车模型的实战指南

本文详细介绍了如何从零开始搭建Carsim与AVL CRUISE联合仿真整车模型,涵盖软件环境配置、接口设置、模型连接及调试技巧。通过联合仿真,可充分发挥Carsim在车辆动力学和AVL CRUISE在动力系统仿真方面的优势,为电动车和混合动力汽车的研发提供精准的整车模型分析。

weixin_29067143的博客 940

从计算机底层理解Java并发

网上有不计其数的并发编程文章,甚至有不计其数的书来介绍这个主题。你为什么要花10分钟时间来读完这篇文章呢?我给的答案:“他们全是废话。”,我觉得这个主题用10分钟就可以说完,根本不要用花这么长时间,也不用去折腾Java内存模型之类的东西。 我只讲原理,不会告诉你怎么用Java的并发库,这是java doc干的事情 理解Java并发原理或者其他语言的并发(没错,这篇文章是“跨语言”的!!!还这么

wu_cai_的专栏 1600

TMS320F280049C 学习笔记21 交叉开关 Crossbar (X-BAR)

简单介绍了X-BAR。

whyorwhnt的专栏 2万+

java.lang.thread类有_扩展java.lang.Thread类

package com.multithread.learning;/***@functon 多线程学习*@author 林炳文*@time 2015.3.9*/class Thread1 extends Thread{private String name;public Thread1(String name) {this.name=name;}public void run() {for (in...

weixin_29825411的博客 112

电子元器件基础:电阻、电容、电感的特性与应用解析

本文深入解析了电子元器件中电阻、电容和电感三大基础元件的核心特性、工作原理与选型应用。电阻作为电路中的‘交通警察’,控制电流与分配电压,其额定功率与精度是关键选型参数。文章结合实战经验,详细阐述了它们在电源滤波、信号处理及高频电路中的不同表现与避坑指南,是电子设计与维修的必备基础知识。

weixin_29213655的博客 379

Q3D提取PCB走线RLCG参数

介绍一种提取PCB走线寄生电容和寄生电感的方法

sinat_15150363的博客 2924

理解并发编程中的重要概念:指令重排序和指令乱序执行

看过了很多介绍指令重排序的文章,可惜由于自己硬件和计算机理论知识缺乏,很难理解深层次的奥秘和实现原理。不过也有很多帖子,讲的浅显易懂,使用的例子很形象。大牛就是能用简单的解释和通俗的比喻,给我们讲明白很高深的东西。这里做个摘抄和总结,和大家分享下,希望大家能够对指令重排序有个形象的认识,不至于在并发编程中犯一些简单的错误。如果理解有错误,希望看到的大神指正。 从源码变成可以被机器(或虚拟机)识别的程序,至少要经过编译期和运行期。重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境。由于重排

aty 5201

后台管理系统-7-vue3之引入配置文件baseURL

mock=false,本地模拟。mock=true,线上模拟。baseURL+url=实际请求的URL。get请求param参数,post请求data参数。

qq_20466211的博客 208

CPU 的乱序执行

CPU 的乱序执行 为什么要乱序执行 CPU 的乱序执行本质上是为了提升效率,比如有这样两行命令 int a = new OtherClass().method(); int b = 0 在这种情况下,a 的结果可能需要很长时间才可以返回,而 b 的值则可以直接得出,同时 b 的值又不依赖于 a ,在这种情况下 CPU 就会乱序执行 ...

繁星 2034

一文学会python基础知识

1. python 运行环境 1.1 脚本式环境 1.2 交互式环境 2. python 注释 3. 变量及变量命名 4. 关键词 BIFS 5. 标准操作符 6. 条件判断 7. 循环 8. python 数据类型 9. python 序列 9.1 序列-字符串(str) 9.2 序列-列表 9.3 序列-元组 10. 字典 11. 集合 12. python内存管理及可变、不可变对象 13. 函数 13.1 函数参数 13.2 return and yiled(生成器) 13.3 参数传递处理 ...

weixin_43178406的博客 26万+

边缘计算与产业生态系统

目录 文章目录目录边缘计算产业参与者边缘计算产业生态系统 边缘计算产业参与者 边缘计算领域参与者众多,主流公司以打造生态优势为目标,基于自身服务层级向产业链上下两端进行拓展,目前市场主要参与者有: 系统集成商:在产业头部,具有广泛的能力,可以集成不同生态系统公司的产品,具有一定的全球性属性,在边缘计算领域大多由云服务商、电信运营商担任。 云服务商:具有领先的云技术优势与应用生态体系,同时拥有全球性资源布局与市场资源生态,并渴望成为边缘计算主导者。 电信运营商:具有边缘基础设施优势,以及不可替代的

烟云的计算 2104

CPU乱序执行

CPU乱序执行 文章目录CPU乱序执行前言CPU乱序执行编译器乱序优化GCC编译器优化屏障和内存屏障C语言中的内存屏障CPU存储模型实际遇到的问题 前言 乱序优化包括: CPU乱序执行优化 编译器乱序优化 对应的限制乱序优化的方式: 内存屏障 优化屏障 CPU乱序执行 CPU在保证结果一致的情况下,把原来有序的指令列表,按照指令依赖关系和指令执行周期,重 新安排执行顺序。 // 原代码 int a = 10; int b = a; int c = 20; int d = c; // 实际

枫潇潇 4174

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

并发编程:乱序执行的那些事儿五分钟给你整明白

什么是乱序执行 乱序执行 [1] ,简单说就是程序里面的代码的执行顺序,有可能会被编译器、CPU 根据某种策略调整顺序(俗称,“打乱”)——虽然从单线程的角度看,乱序执行不影响执行结果。 为什么需要乱序执行 主要原因是 CPU 内部采用 流水线技术 [2] 。抽象且简化地看,一个 CPU 指令的执行过程可以分成 4 个阶段:取指、译码、执行、写回。 这 4 个阶段分别由 4 个独立物理执行单元来完成。这种情况下,如果指令之间没有依赖关系,后一条指令并不需要等到前一条指令完全执行完成再开始执行。而是前

m0_63213529的博客 2601

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

乱序执行技术

乱序执行技术    乱序执行(out-of-orderexecution),是指CPU允许将多条指令不按程序 规定的顺序分开发送给各相应电路单元处理的技术。这样将根据个电路单元的状 态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相 应电路单元执行,在这期间不按规定顺序执行指令,然后由重新排列单元将各执 行单元结果按指令顺序重新排列。采用乱序执行技术的目的是为了使CP

joker0910的专栏 5558

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[architecture]-处理器的顺序和乱序执行

(说明:本文 不是博主原创文章,原文链接:https://aijishu.com/a/1060000000216149) 现在的处理器执行方式分为两种,顺序执行和乱序执行。根据不同的产品定位,不同的应用场景,所使用的微架构也是不相同的。 1、顺序执行解析 顺序执行的处理器一般用于低功耗类型的处理器,比如ARM公司的cortex-M系列都是顺序执行的,如果要稍微性能和功耗兼顾的产品,也是使用的顺序执行的方式。 何为顺序执行,顾名思义,亦就是按照PC的取指顺序,一条一条的执行。遇到数据相关性就停下等待,当然,可

baron-周贺贺-代码改变世界ctw 5590

乱序执行

乱序执行的目的就是尽可能的防止分发停顿,比如真正的写后读相关时,流水线必须停顿。思路就是让相关的指令离独立的指令远一点。 乱序执行的条件 需要在值的生产者和消费者之间建立通信,这里消费者指的是当前这条指令,生产者指的是在与这条指令相关的指令。 寄存器重命名:给每个值一个tag。 需要给指令提供缓冲区。 保留站。 指令需要持续监测值是否可用。 当这个值准备好了,就广播自己的t...

沉潜 881

指令乱序执行给我们带来了什么?

为什么CPU会乱序执行? 在冯.洛伊曼时代计算机各个操作只能串行完成,任何时刻都只能进行一条指令待上一条指令执行完了才能执行下一条指令,随着社会生产力水平提高,人们追求的目标之一就是高运算速度,因此并行处理技术便成为计算机发展的主流。 一条指令是如何执行的? CPU一条指令执行包含了取指令、指令译码、执行指令、访存取数、结果写回等5个阶段。如图所示 ...

u013351117的博客 1316

处理器的乱序执行

1. Buffer的作用——去耦合 在顺序执行内核中,指令依次流经各个流水线单元,不需要进行缓存,而为了要能乱序执行,首先需要一个Buffer来缓存还没有执行的指令,然后在这个Buffer中去调度指令的执行顺序。乱序执行内核的基本模型如下: Buffer两大功能: (1)去耦合 (2)抗波动 2. 指令调度 调度器: 处理器的乱序执行内核需要一个调度器,分析指令间的相关性,分析指令什么时候开始执行。 指令什么时候开始执行: 经过寄存器重命名后,目的寄存器总是新的,因此只.

Leo ICer的博客 2142

CPU的流水线,分支预测与乱序执行

流水线 转自:http://www.elecfans.com/emb/dsp/20180405657563.html 流水线的概念来源于工业制造领域,以汽车装配为例来解释流水线的工作方式,假设装配一辆汽车需要四个步骤: 第一步冲压:制作车身外壳和底盘等部件。 第二步焊接:将冲压成形后的各部件焊接成车身。 第三步涂装:将车身等主要部件清洗、化学处理、打磨、喷漆和烘干。 第四步总装:将各部件(包括发动机和向外采购的零部件)组装成车。 汽车装配则同时对应需要冲压、焊接、涂装和总装四个工人。最简单的方法是一辆汽车依

weixin_40710708的博客 4056
上一篇: 关于CPU流水线详解...高主频≠高性能
下一篇: long long data type in GCC and what's the meaning of 1LL
DigBug
博客等级 码龄20年 15粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值