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. hive表操作(转)

    转载于:http://blog.csdn.net/lovelovelovelovelo/article/details/52234971 数据类型 基本数据类型 集合类型,array.map.stru ...

  2. 基于Netty的RPC架构学习笔记(一):NIO

    文章目录 传统的socket分析 举个

  3. .net 接受请求过来的流

    //接收POST过来的数据 System.IO.Stream s = Request.InputStream; int count = 0; byte[] buffer = new byte[1024 ...

  4. stelller插件与background-attachment配合使用,制作滚动页面

    stelller插件与background-attachment:fixed配合使用,制作滚动页面

  5. RAKsmart新出香港服务器的优势

    RAKsmart为了更好地服务用户,所以最近RAKsmart新推出得香港服务器又带给了用户更多的选择,那这次RAKsmart新推出香港服务器有哪些优势呢? 1.带宽更大可升至10Mpbs 香港服务器的 ...

  6. Navicat Premium下载、安装、破解

    Navicat Premium 是一套数据库管理工具,让你以单一程序同時连接到 MySQL.MariaDB.SQL Server.SQLite.Oracle 和 PostgreSQL 数据库. 此外, ...

  7. 在vue项目引入阿里巴巴矢量图标

    1.在阿里矢量图标库将想要的图标加入购物车,然后在购物车中将图标添加到项目: 2.到我的项目中,将图标下载到本地 3.在vue项目的assets文件夹下新建一个iconfont文件夹(名字自定义),将 ...

  8. MySQL架构和索引

    MySQL架构 逻辑架构图: 大概分为四层,这个见仁见义,有不同的分法: 第一层Connectors:处理不同语言与SQL的交互 第二层Connection Pool :连接池,管理缓存用户连接,线程 ...

  9. thinkphp 模板继承

    模板继承是一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区 ...

  10. E: Sub-process /usr/bin/dpkg returned an error code (1)解决办法

    解决方法: 先将info文件夹更名 sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bk 新建一个新的info文件夹 sudo mkdir /var/lib ...