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的更多相关文章

  1. 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 ...

  2. data hazard in CPU pipeline

    1, background info 5 stages in CPU pipeline: IF, ID, EX, MM, WB IF – Instruction Fetch ID – Instruct ...

  3. 初识pipeline

    1.pipeline的产生 从一个现象说起,有一家咖啡吧生意特别好,每天来的客人络绎不绝,客人A来到柜台,客人B紧随其后,客人C排在客人B后面,客人D排在客人C后面,客人E排在客人D后面,一直排到店面 ...

  4. Falcon Genome Assembly Tool Kit Manual

    Falcon Falcon: a set of tools for fast aligning long reads for consensus and assembly The Falcon too ...

  5. C11 memory_order

    概念: 摘录自:http://preshing.com/20120913/acquire-and-release-semantics/ Acquire semantics is a property ...

  6. springdata+redis配置详解

    springdata设计初衷是位简化数据类型和数据的持久化存储,它并不局限是关系型数据库还是nosql数据库,都提供了简化的数据库连接,让数据获取变得更加的简单.所有这些的实现有统一的api提供. 本 ...

  7. 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 ...

  8. 用Go造轮子-管理集群中的配置文件

    写在前面 最近一年来,我都在做公司的RTB广告系统,包括SSP曝光服务,ADX服务和DSP系统.因为是第一次在公司用Go语言实现这么一个大的系统,中间因为各种原因造了很多轮子.现在稍微有点时间,觉着有 ...

  9. Golang源码探索(三) GC的实现原理

    Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短. 停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服 ...

随机推荐

  1. iOS开发静态库冲突——如何查看静态库(.O)中方法名

    1.bug产生 应用第三方静态库之后提示冲突错误: 2.bug分析 一般会提示哪两个库冲突: CameraShowGLView.o是自己创建的类编译生成的: libLechangeSDK.a是添加的静 ...

  2. String类的substring()方法

    截取字符串,在java语言中的用法 1.  public String substring(int beginIndex) 返回一个新字符串,它是此字符串的一个子字符串.该子字符串始于指定索引处的字符 ...

  3. Ctrl快捷键

    Ctrl + a - Jump to the start of the lineCtrl + b - Move back a charCtrl + c - Terminate the command ...

  4. Maven如何发布jar包到Nexus私库

    Nexus2可以通过管理界面来上传jar包到私库中,而最新的Nexus3却找不到了上传界面,只能通过以下方式来发布到私库. 发布第三方jar包 这种情况是maven远程仓库没有,本地有的第三方jar包 ...

  5. SpringMVC(AbstractController,拦截器,注解)

    1.Controller接口及其实现类 Controller是控制器/处理器接口,只有一个方法handleRequest,用于进行请求的功能处理(功能处理方法),处理完请求后返回ModelAndVie ...

  6. springboot + ajax + mybatis 实现批量删除

    实现思路: 1. checkbox全选获取批量删除的id数组 2. ajax以字符串的形式将id数组传给控制器 3. 控制器将字符串分割成List数组作为参数传给mapper 具体代码: 1. 前端代 ...

  7. Mysql集群和主从

    1.Mysql cluster: share-nothing,分布式节点架构的存储方案,以便于提供容错性和高性能. 需要用到mysql cluster安装包,在集群中的每一个机器上安装. 有三个关键概 ...

  8. 国行iphone第一次安装APP网络状况

    国行手机第一次安装APP,会有请求网络权限的一个弹框出现,在这期间APP是没有任何网络连接的. 想必大部分APP的需求和这个逻辑有冲突. 先推荐一个链接:http://www.cocoachina.c ...

  9. write -在一个文件描述符上执行写操作

    概述 #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); 描述 write 向文件描述符 f ...

  10. 获取linux性能数据

    import reimport osimport sysimport jsonimport socketfrom urllib import request,parseimport urllibfro ...