As-If-Serial 理解
as-if-serial语义的意思指:
不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器,runtime 和处理器都必须遵守as-if-serial语义。为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改变执行结果。但是,如果操作之间不存在数据依赖关系,
这些操作可能被编译器和处理器重排序。为了具体说明,请看下面计算圆面积的代码示例:
double pi = 3.14; //A
double r = 1.0; //B
double area = pi * r * r; //C
上面三个操作的数据依赖关系如下图所示:
如上图所示,A和C之间存在数据依赖关系,同时B和C之间也存在数据依赖关系。因此在最终执行的指令序列中,C不能被重排序到A和B的前面(C排到 A和B的前面,程序的结果将会被改变)。
但A和B之间没有数据依赖关系,编译器和处理器可以重排序A和B之间的执行顺序。下图是该程序的两种执行顺序:
as-if-serial语义把单线程程序保护了起来,遵守as-if-serial语义的编译器,runtime 和处理器共同为编写单线程程序的程序员创建了一个幻觉:单线程程序是按程序的顺序来执行的。as-if-serial语义使单线程程序员无需担心重排序会 干扰他们,也无需担心内存可见性问题。
转载于:https://www.cnblogs.com/jiuya/p/10791903.html
As-If-Serial 理解相关推荐
- 理解AXI Quad Serial Peripheral Interface(SPI) IP核
reference : PG153-AXI Quad SPI v3.2 LogiCORE IP Product Guide.pdf 在使用MicroBlaze过程中,调用了此IP,所以有必须仔细学 ...
- 《深入理解Java虚拟机》(第二版)学习3:垃圾收集器
垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 我们这里讨论的收集器主要是基于JDK 1.7 Update 14之后的 Hotspot VM . Serial 收 ...
- 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析
Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...
- 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析
来自:好好学java 话不多说,今天就分析一下一些常用的Java虚拟机的参数设置,以及如何更好的使用! 1 JVM参数简介 首先想说的是其实这些参数我们并不是陌生的,在平时的开发和使用中经常都会遇到, ...
- 深入理解 Java 注解
本文内容基于 JDK8.注解是 JDK5 引入的,后续 JDK 版本扩展了一些内容,本文中没有明确指明版本的注解都是 JDK5 就已经支持的注解. :notebook: 本文已归档到:「blog」 : ...
- [深入理解Android卷一全文-第九章]深入理解Vold和Rild
为什么80%的码农都做不了架构师?>>> 由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的 ...
- 《深入理解Java虚拟机》-----第3章 垃圾收集器与内存分配策略
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. 3.1 概述 说起垃圾收集(Garbage Collection,G ...
- 深入理解SERDES接口
http://blog.sina.com.cn/s/blog_aec06aac01013m5g.html 理解SerDes www.blog.sina.com.cn/fpgatalk FPGA发展到今 ...
- 大型企业网络配置系列课程详解(五) --Frame-Relay配置与相关概念的理解
大型企业网络配置系列课程详解(五) --Frame-Relay配置与相关概念的理解 实验原理: Frame-Relay(帧中继)简称FR,是国际电信联盟通信标准化组(ITU ...
- 理解并取证:广域网上的PPP协议
目标: 1理解在广域网上数据的封装形式 2最初的SLIP协议 3PPP协议的组件 4理解并取证:PPP协议中LCP的工作原理(从数据帧的角度分析) 5理解并取证:PPP协议中NCP的工作原理(从数据帧 ...
最新文章
- 腾讯SNG举办TSAIC大会,学术和工业界共话AI前沿趋势
- 使用扩展方法和静态门面类实现伪领域对象
- GitHub被“中介”攻击了?啥是中间人攻击?
- JBPM流程部署校验之java利用XSD校验XML
- ASP权限管理系统源码下载
- 征战蓝桥 —— 2016年第七届 —— C/C++A组第10题——最大比例
- Zeppelin-源码编译
- 移动web的适配问题
- Linux的crond的配置流程,Linux之定时任务Crond详解
- 笔记本连网线显示服务器拒绝连接怎么办,笔记本插上网线没反应怎么办【解决方法】...
- c语言读写txt坐标文件数据,用c语言读写sgy格式的地震数据文件.pdf
- 2021-7-20 指针:强大而危险的灵魂【C++指针的应用---中下】(炉边小坐)
- 大数据预测房价湖北暂未实施
- 安装Kaggle库,常见问题上之目录中没有.kaggle文件夹(附解决办法!)
- 微博视频代发(流程b)
- 优优聚:一文搞懂美团外卖新业务“拼好饭”
- 数字电路5(基本CMOS逻辑门电路)
- 点评阿里云盛大云代表的云计算IaaS产业---中国云计算
- 运行时:Linux 和 Windows 2000上的高性能编程技术
- 前端入门练习之将psd文件转换为HTML文件
热门文章
- 图解think php,图解ThinkPHP5框架(三):配置类Config.php源码解读
- 获取文件夹下所有文件名(window+linux)
- python37安装失败怎么搞_Linux 安装Python37
- 福州大学数学与计算机科学学院 地址,福州大学数学与计算机科学学院导师介绍:陈神灿...
- nyoj1140鸡蛋栈(怒切一水)
- springboot开启缓存_springBoot与缓存使用
- 【clion】自定义优美的代码配色(主题)
- 【数位dp】HDU3555:Bomb(入门题目)
- C语言数组旋转问题(C笔记)
- android 替代map,Android为什么推荐使用SparseArray来替代HashMap?