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

因为CPU的乱序执行技术虽然可以极大的提高流水线的工作效率,但是导致了实际运行次序和program的次序不一致,如果不做多余的防护措施,在逻辑次序上最后写入内存的数据未必最后写入。 也就是说,如果你期望最后写入一个标记数据表示前面的数据都已经准备好,然后在另外一个核心上依靠判断这个标记来判定一些数据就绪,这个策略并不可靠;

比如以下代码:

char* g_Data = nullptr;//processor 1 code:
char* pTemp = new char[1000];
g_Data = pTemp;//processor 2 code:
if(g_Data != nullptr)
{//do something...
}

这样的代码,在核心2上进行判断是不准确的,有可能核心1上的g_Data的值已经不是nullptr了,但是真正的1000个char还没有new出来,也就是说核心1上的g_Data保存着pTemp[0]的地址(标记位先被存到g_Data里面了),但是后面999个char还没真正开辟出来,这样,在核心2上进行访问就会造成程序crash。

也就是说,在一个核心写入内存的数据未必真的最后写入,核与核之间作为一个整体来看的话,不能保证self-consitent。

解决的办法是在标记为被写入前,强迫CPU串行化(也就是在上面demo中g_Data被赋值前强行CPU串行化):

char* g_Data = nullptr;//processor 1 code:
char* pTemp = new char[1000];
MemoryBarrier();//add barrier, different platform has different API
g_Data = pTemp;//processor 2 code:
if(g_Data != nullptr)
{//do something...
}

这样,在核心1上的g_Data被赋值前pTemp的内存就会是完整开辟出来的,就不会对核心2上的代码在访问g_Data的时候产生crash隐患。

另:当CPU要访问的内存存在于cache的时候,像Interxxx(如InterLockedIncrement等)这样的原子操作命令是不会被发送到总线上的,取而代之会锁住cache。加锁,其实也是会锁住cpu的cache的,如果此时该核心又被让出去其他线程使用,那么这些原有的cache会被清掉,所以大量的锁也有这个副作用。

PS:关于CPU的推测执行技术和乱序执行技术:

推测执行技术:处理器为了提高性能,会去提前猜测接下去需要执行什么动作,然后提前执行,如果发现推测错误,则回滚至正常状态。通常应用的推测执行技术都能达到80%-90%的推测准确率。需要指出的是,推测执行技术是一个大类技术的统称,包括分支预测,预读取,推测性内存访问,缓存缺失的重叠/乱序处理(MESR)等等;

乱序执行技术:当处理器遇到需要发生停顿的时间时(例如需要装在的数据发生了混存确实,需要去高延迟的内存中查找),处理器可以越过这个停顿事件,继续超前执行指令。同样,如果超前执行中发生了错误,也需要回滚至正常状态。

乱序执行的微结构框图:

posted on 2017-06-28 01:40 DeanWang 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/DeanWang/p/7087959.html

《为什么在多核处理器下需要内存屏障(MenmoryBarrier)?》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 单词计数WordCountApp.class
  2. netty cpu 占用率 高_Netty 是如何支撑高性能网络通信的?
  3. Harbor升级和数据库迁移手册
  4. 在5G时代,微信还能活多久?
  5. linux添加Qt的fontconfig,qt – 如何在Red Hat 5.3中将fontconfig更新为更新版本?
  6. 【实习之T100开发(1),韩顺平Java视频教程百度云盘
  7. 两种播放m3u8链接的方法
  8. Django中ForeignKey和ManyToMany使用探究:
  9. 罗格斯的计算机科学博士奖学金,本科直博如何“牛”转乾坤斩获全奖博士录取,师兄制胜申请经历大揭秘!...
  10. H3C 路由器中VLAN隔离
  11. WPF - Visual调试工具Snoop
  12. linux的tar命令的exclude,mac 的tar命令--exclude和linux的tar命令--exclude的区别
  13. 港科夜闻|全国政协副主席梁振英先生率香港商企及机构代表一行到莅临香港科大(广州)访问交流...
  14. 设备驱动中的kobject(kernel-4.7)
  15. 每日一算法7--35选7彩票程序
  16. js 排班插件_排班小程序
  17. 西电李航 操作系统课程笔记 day10 IO hardware principles
  18. 1月FOMC会议连连放鹰 现货金转空大跌35美元
  19. 介绍一款Visual Studio下的arduino插件Visual Micro (Arduino IDE for Visual Studio)
  20. 06_多窗口文档编辑器(小钱版)[Qt开发][2012-03-07]

热门文章

  1. python3.6安装opencv-python3.6、opencv安装环境搭建过程(图文教程)
  2. python3菜鸟教程-Python3 快速入门教程
  3. python游戏脚本实例-Python使用pygame模块编写俄罗斯方块游戏的代码实例
  4. python基础代码事例-python基础第三章
  5. python3各个版本是通用的吗-python3各版本
  6. python 仪表盘-Python笔记:制作和自定义仪表盘
  7. python免费入门教程-python入门免费教程看这些就够了
  8. 怎样学好python-如何学习 Python
  9. python中语法错误-python中的语法错误是指什么
  10. python装饰器实例-python装饰器案例