CPU为什么会乱序?

本质原因是为了提高CPU的效率,挖掘程序并行度,将不相关的操作并行执行,排在后面的指令不等前面的指令执行结束就开始执行,并且在前面的指令执行结束前结束,例如在CPU0上执行下面两条指令:

在上述情况下,b=2会早于a=1执行完。这种乱序,在其他流水线上是可见的,因为毕竟内存是共享的,如果另一条流水线运行的业务依赖这个赋值的先后顺序,如果不加处理,则有可能会导致业务逻辑出现错误。在单个流水线上乱序执行有没有这种问题呢?我认为是没有的,原因如下:

1.首先,如果a先于b完成自闭不言,本身就符合逻辑顺序。

2.b先于a完成,但是都早于assert完成,这种执行上虽然是乱序,但是从结果上和逻辑一致,也不会有问题。

3.b先于a完成,assert执行时,a还没有退役,这种情况下,a虽然没有完成,但是a最新状态要么在保留站中,要么在ROB中,要么由于数据相关指向另一个ROB或者保留站,无论哪种情况,最新状态都会从流水线内部的状态获得,而不会直接取内存(具体分析可以看量化这本书),所以仍然能够获取新值,不会出错。

a的最新值要么在流水线中,要么在内存中,即便执行顺序被打乱,但是仍然能够获取到正确的数据,所以ÿ

关于处理器静态动态内存屏障的原理和应用相关推荐

  1. 《为什么在多核处理器下需要内存屏障(MenmoryBarrier)?》

    <为什么在多核处理器下需要内存屏障(MenmoryBarrier)?> 因为CPU的乱序执行技术虽然可以极大的提高流水线的工作效率,但是导致了实际运行次序和program的次序不一致,如果 ...

  2. java内存屏障的原理与应用

    目录 1. java内存屏障 2.java内存屏障的使用 一. java内存屏障 1.1 什么是内存屏障(Memory Barrier)? 内存屏障(memory barrier)是一个CPU指令.基 ...

  3. 解析原理和实战Linux中如何正确地使用内存屏障

    圈里流传着一句话"珍爱生命,远离屏障",这足以说明内存屏障是一个相当晦涩和难以准确把握的东西.使用过弱的屏障,会导致软件不稳定.使用过强的屏障,会引起性能问题.所以工程上,追求恰到 ...

  4. java内存屏障_java内存屏障

    java内存屏障 java的内存屏障通常所谓的四种即LoadLoad,StoreStore,LoadStore,StoreLoad实际上也是上述两种的组合,完成一系列的屏障和数据同步功能. LoadL ...

  5. 内存屏障(cpu内存屏障 与java内存屏障)

    文章目录 CPU 内存屏障 定义 读写屏障指令 为什么会出现内存屏障 java内存屏障 java内存屏障存在意义 java中内存屏障的主要类型 LoadLoad 屏障 StoreStore 屏障 Lo ...

  6. 谈乱序执行和内存屏障

    10多年前的程序员对处理器乱序执行和内存屏障应该是很熟悉的,但随着计算机技术突飞猛进的发展,我们离底层原理越来越远,这并不是一件坏事,但在有些情况下了解一些底层原理有助于我们更好的工作,比如现代高级语 ...

  7. 多线程基础——内存屏障

    内存屏障 内存屏障(memory barrier)是一种概念.编译器和CPU可以在保证输出结果一样的情况下对指令重排序,使性能得到优化.插入一个内存屏障,相当于告诉CPU和编译器先于这个命令的必须先执 ...

  8. 让你了解什么是内存屏障

    重排 内存屏障 内存屏障种类 编译器和处理器必须同时遵守重排规则.多核处理器需使用内存屏障指令来确保一致性.即使编译器优化掉了一个字段访问(因为一个读入的值未被使用),需要产生内存屏障,就像这个访问仍 ...

  9. [zz]Memory Barriers(内存屏障): a Hardware View for Software Hackers 阅读笔记

    Memory Barriers: a Hardware View for Software Hackers(原文地址:http://www.puppetmastertrading.com/images ...

最新文章

  1. 爱奇艺才被做空又爆裁员,技术研发为裁员重灾区
  2. 使用FIO对SATA、SSD和PCIe Flash进行测试
  3. Error: Cannot find module ‘webpack-cli/bin/config-yargs‘
  4. Java--缓存热点数据,最近最少使用算法
  5. python爬虫编程100例_哪种Python程序员最赚钱?爬虫数据告诉你!
  6. 程序员如何高效的学习?
  7. [css] 使用css的attr()写一个类似a标签title的提示框
  8. 【转】ubuntu 开机sudo启动应用程序
  9. MAC 安装 pygraphviz 找不到头文件
  10. nil和NSNull
  11. 学生选课系统,第二版
  12. js对日期进行升序排序
  13. “衣带渐宽终不悔,为伊消得人憔悴” 读《唐宋词十七讲》有感二 —— 2021.12.23 晚八时
  14. 什么是 promise?
  15. coffeescript html5,CoffeeScript语法
  16. r7 6800u核显相当于什么显卡
  17. Android仿朋友圈照片定点放大和滑动查看(未完待续)
  18. 知乎上那些简短却让你印象深刻的回答
  19. 大学生常用网站链接汇总
  20. 判断子序列(C语言)

热门文章

  1. Fisher线性判别分析
  2. 使用计算机录音需要准备什么,初入录音圈,你需要知道些什么?
  3. 浅析SaaS的渠道推广
  4. 2.STC15W408AS单片机时钟
  5. linux脚本里用expect,如何在bash脚本中使用expect
  6. du 查看使用 linux命令,Linux命令(17)du 查看文件和目录磁盘使用情况
  7. GNSS说第(二)讲----加权最小二乘法(WLS)相关概念及基本步骤解析
  8. 只要2.5分钟!机器手轻松完成最危险复杂的手术
  9. MTK芯片功能机改IMEI+智能机,合并软件工具介绍
  10. Android ListView点击事件无反应