Data Dependency
https://en.wikipedia.org/wiki/Data_dependency
(There’s some misleading expression on the flow/data dependency statement.)
1, what is data dependency
A data dependency in computer science is a situation in which a program statement (instruction) refers to the data of a preceding statement.
2, Bernstein Condition
The Bernstein Condition defines what data dependency’s logic format:

If above conditions are met, we say S2 depends on S1.
3, types
There’re 3 types of data dependencies: ante-dependency, flow(data) dependency and output dependency.
Their definitions as followed:
(1) ante-dependency
definition: I(S1) AND O(S2), S1->S2, S1 reads a memory location before S2 writes it.
To be more specific, S1->S2 means this is the correct order that S1 reads first before S2 writes, otherwise there may be execution error.
This is also known as WAR, writer-after-read.
Be aware that WAR is not an error; we should not confuse it with WAR hazard.
WAR hazard is a ‘hazard’, and WAR is the rule that’s violated that caused the hazard. The hazard happens because the rule of WAR is not followed.
Let’s see an example below:
1, B = 3
2, A = B+1
3, B = 7
(2, 3) is an ante-dependency example.
In this example, S1 is (A=B+1), and S2 is (B=7), so I(S1) targets memory B (read from B), and O(S2) also targets memory B(write to B).
(2) flow/data dependency
definition: O(S1) AND I(S2), S1->S2, S1 writes a memory location before S2 reads it.
This is also named as RAW. Some people also call this true data dependency.
Note: Statement in wikipedia is a little misleading.
(3) output dependency
definition: O(S1) AND O(S2), S1->S2, both write to the same memory location
This is WAW.
4, how to reduce data dependency
One of the disadvantages is data dependency may hinder parallelism. One of the ways to avoid that is :
(1) use scoreboarding to avoid RAW;
(2) use register renaming to cover WAR and WAW.
Data Dependency的更多相关文章
- How to bind to data when the DataContext is not inherited【项目】
http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherit ...
- data hazard in CPU pipeline
1, background info 5 stages in CPU pipeline: IF, ID, EX, MM, WB IF – Instruction Fetch ID – Instruct ...
- 初识pipeline
1.pipeline的产生 从一个现象说起,有一家咖啡吧生意特别好,每天来的客人络绎不绝,客人A来到柜台,客人B紧随其后,客人C排在客人B后面,客人D排在客人C后面,客人E排在客人D后面,一直排到店面 ...
- Falcon Genome Assembly Tool Kit Manual
Falcon Falcon: a set of tools for fast aligning long reads for consensus and assembly The Falcon too ...
- C11 memory_order
概念: 摘录自:http://preshing.com/20120913/acquire-and-release-semantics/ Acquire semantics is a property ...
- springdata+redis配置详解
springdata设计初衷是位简化数据类型和数据的持久化存储,它并不局限是关系型数据库还是nosql数据库,都提供了简化的数据库连接,让数据获取变得更加的简单.所有这些的实现有统一的api提供. 本 ...
- The JSR-133 Cookbook for Compiler Writers(an unofficial guide to implementing the new JMM)
The JSR-133 Cookbook for Compiler Writers by Doug Lea, with help from members of the JMM mailing lis ...
- 用Go造轮子-管理集群中的配置文件
写在前面 最近一年来,我都在做公司的RTB广告系统,包括SSP曝光服务,ADX服务和DSP系统.因为是第一次在公司用Go语言实现这么一个大的系统,中间因为各种原因造了很多轮子.现在稍微有点时间,觉着有 ...
- Golang源码探索(三) GC的实现原理
Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短. 停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服 ...
随机推荐
- java-day16
FileWriter 文件字符输出流 extends Writer 构造方法 FileWriter(String filename) FileWriter(File file) flush()方法:刷 ...
- Caused by: java.io.FileNotFoundException: class path resource [com/cxy/springboot/mapping/] cannot be resolved to URL because it does not exist
java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...
- selenium基础(滚动条操作)
滚动条操作:当待操作的元素在页面可是区域外时,要将待操作的元素滚动到可视区域当中 步骤:1.先找要将要操作的元素element = driver.find_element_by_xxxx(" ...
- 转载:ASP.NET Core 在 JSON 文件中配置依赖注入
在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac.Untiy.Stri ...
- DOM基础及事件基础
DOM:功能:控制html文档的内容代码:获取页面标签(元素)对象 Element document.getElementById("id值"):通过元素id获取元素对象操作Ele ...
- Activiti学习笔记6 — 变量与历史记录
一. 变量的使用 1.创建流程引擎对象 private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); ...
- 什么是哈希Hash(散列函数)
Hash(散列函数) Hash,一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就 ...
- ubuntu自带截图工具
ubuntu自带的截图工具感觉能够满足基本的截图功能,可以不必安装另外的截图软件. 一般用到的截图类型有三种:全屏.当前活动窗口.自定义区域,其中自定义区域截图是最灵活也是我们用的最多的方式.在ubu ...
- 数据库的元数据抽取SQL
一.数据库驱动类.端口.默认用户名密码 数据库 驱动 端口 用户名 密码 MySQL com.mysql.jdbc.Driver 3306 root root DB2 com.ibm.db2.jcc. ...
- 解决vs code 内置终端,字体间隔过大问题。(linux centos7 ubuntu成功)
去文件-首选项-设置里修改. "terminal.integrated.fontFamily": ""注意此处默认为空白,所以显示的就比较奇怪. 此处我改为&q ...