全局存储带宽(DRAM)

全局内存是动态随机访问的方式访问内存.我们希望访问DRAM的时候非常快,实际情况是DRAM中出来的数据非常非常慢,这就好比,理想状态是泄洪,水倾巢而出,气势宏伟,实际取水却像是用吸管在喝饮料,速度非常慢.

通常来看,我们会通过优化算法减少DRAM的访问次数.

由上图可以看出,用户访问需要的Address会被分成Row addr和Column address, 通过row decoder -> Core Array -> Sense Amps -> Column Latches ->到这里会非常宽,但是到-> Mux 会变得非常窄,然后通过off-chip data bus 给到处理器 .这就是DRAM bank的组织框架.

DRAM 中从core array中读取一个cell是非常慢的,cell是指一个存储单元.

• DDR: Core speed = 1⁄2 interface speed
• DDR2/GDDR3: Core speed = 1⁄4 interface
speed
• DDR3/GDDR4: Core speed = 1⁄8 interface
speed
• ... likely to be worse in the future

随着时间的推移,市场上DDR的容量越来越大,但是访问速度却是越来越慢.

为什么core array中读取非常慢,如下图:

如下图:

假设我们有1000个cells,在水平方向(因为是行吗)是很长的,当访问其中的一个cell,其实是访问在访问某一个bit,当为1时表示存在,0表示不存在.而这个bit是存储在一个很小的电容里面,当想这个电容的晶体管里面充电,这个值是1,不充电则是0. 这个在纵向会连接到一个检测放大器(sense amplifier),纵向线是一个非常缓慢的过程,记得这个即可.

DRAM Bursting

对于DDR{2,3}  cores 核心的频率是接口频率的1/N. 为了提高访问的速度,DRAM中提供更多的端口数目(lanes),类似收费站提供很多的收费口来减轻拥堵问题一样.虽然单一时间慢,但是同时执行的多,所以总的情况会变快.

DDR2/GDDR3: buffer的宽度是借口宽度的4倍

为了降低访问的次数,当处理器访问一段数据时,实际上传递给处理器的是围绕这一段数据的一个更大的数据.这个就是dram burst 设计.所以一个时钟周期访问的数据,其实是把这个之后的几个时钟周期也访问的数据一起取出来,如果CPU不需要这些多余的数据,其实就可以说是浪费了,所以为了充分利用DRAM的这个特性.

上面提到的增加更多的接口数目说的是DRAM bank.

例子:

nVidia GTX280 GPU的极限带宽是141.7GB/s

DDR3的接口速度是1.1GHz,  core speed是276Mhz, 是接口速度的1/4.

对于一个64bit的接口,时钟应该是2倍,因为在上升沿和下降沿都由数据传输.

64bit/8 = 8Bytes.

8*2 *1.1 = 17.6GB/s 这个远远达不到141.7.

141.7/17.6 = 8 memory channels  . 这样可以达到这个速度.

内存合并访问

为了利用dram burst的特性,所以我们就有了合并内存访问.通过合并内存访问的次数提高访问memory的效率.

GPU的存储是row-major,是以行来组织数据的.

对于GPU来说,由于thread是异步执行的.下面这两种访问模式一种是合并访问的,利用到DRAM,一种是非合并访问:

B是合并访问, A不是.B是以纵向的访问方向,A是横向的访问方向.

所以总结一条规则是:
GPU纵向访问内存可以实现合并访问的效果.

3.1 全局存储带宽与合并访问 -- Global Memory(DRAM) bandwidth and memory coalesce的更多相关文章

  1. 【并行计算-CUDA开发】有关CUDA当中global memory如何实现合并访问跟内存对齐相关的问题

    ps:这是英伟达二面面的一道相关CUDA的题目.<NVIDIA CUDA编程指南>第57页开始          在合并访问这里,不要跟shared memory的bank conflic ...

  2. 【python】为什么修改全局的dict变量不用global关键字

    转自:http://my.oschina.net/leejun2005/blog/145911?fromerr=qnPCgI19#OSC_h4_8 为什么修改字典d的值不用global关键字先声明呢? ...

  3. [Swift]LeetCode775. 全局倒置与局部倒置 | Global and Local Inversions

    We have some permutation Aof [0, 1, ..., N - 1], where N is the length of A. The number of (global) ...

  4. CUDA 进阶学习

    CUDA基本概念 CUDA网格限制 1.2CPU和GPU的设计区别 2.1CUDA-Thread 2.2CUDA-Memory(存储)和bank-conflict 2.3CUDA矩阵乘法 3.1 全局 ...

  5. Flipping Bits in Memory Without Accessing Them: An Experimental Study of DRAM Disturbance Errors

    目录 . Rowhammer Introduction . Rowhammer Principle . Track And Fix 1.  rowhammer introduction 今天的DRAM ...

  6. Nodejs随笔(三):全局对象之global

    首先,进入node REPL: mesogene@mesogene-team:~$ node > 查看global对象,发现其他全局对象(包括Buffer.require对象)以及全局方法都包含 ...

  7. python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。

    1.动态参数的作用: 能够接收不固定长度参数 位置参数过多时可以使用动态参数 * args是程序员之间约定俗称(可以更换但是不建议更换) * args获取的是一个元组 ** kwargs获取的是一个字 ...

  8. Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法

    一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Orac ...

  9. oracle_分区表的新增、修改、删除、合并。普通表转分区表方法

    一. 分区表理论知识Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Oracl ...

随机推荐

  1. [scalability] Find all documents that contain a list of words

    Given a list of millions of documents, how would you find all documents that contain a list of words ...

  2. [转载]Unity3D 访问Access数据库

    在开始这个小教程之前呢,其实在网上你已经可以找到相关的资料了,但是我还是要把我自己做练习的一点东西分享出来.写这个教程的主要原因呢,是一个朋友在u3d的官网论坛里,找到了这个demo,但是在他使用的过 ...

  3. PAT-乙级-1012. 数字分类 (20)

    1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...

  4. WPF 位置转化和动画

    位置转化 private void DrawScale() { double majorTickUnitValue = this.ScaleSweepLenth / this.MajorDivisio ...

  5. JSP中脚本、声明和表达式的本质区别

     JSP脚本元素 使用JSP脚本元素可以将Java代码嵌入到JSP页面里,这些Java代码将出现在由当前JSP页面生成的Servlet中,使JSP将静态内容与动态内容分离出来.脚本元素包含:  1. ...

  6. PreparedStatement是如何大幅度提高性能的

    本文讲述了如何正确的使用prepared statements.为什么它可以让你的应用程序运行的更快,和同样的让数据库操作变的更快.  为什么Prepared Statements非常重要?如何正确的 ...

  7. 13. 求链表倒数第k个节点

    题目:输入1个链表,输出该链表倒数第k个节点,有头指针和尾指针.链表倒数第0个节点是链表的尾指针节点. 代码: /* 尾指针是倒数第0个,则倒数第k个是正数第len-k个,计算len */ #incl ...

  8. ANDROID_MARS学习笔记_S01_012_RatingBar

    1.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...

  9. Windows10搭建PHP7开发环境

    原文:Windows10搭建PHP7开发环境 3年前写了一篇<Windows下搭建PHP开发环境>之后就再也没有碰过PHP了,最近新发布了PHP7然后回去看了一下之前写的文章,发现很多配置 ...

  10. caffe简易上手指南(二)—— 训练我们自己的数据

    训练我们自己的数据 本篇继续之前的教程,下面我们尝试使用别人定义好的网络,来训练我们自己的网络. 1.准备数据 首先很重要的一点,我们需要准备若干种不同类型的图片进行分类.这里我选择从ImageNet ...