一边学习一边记录(本文中英结合,专业名词统统不翻译)

在CUDA里,host和devices有不同的记忆体空间。

首先呢,CUDA的memory有很多种类啦

1. Global memory

2. Constant memory

这两种memory可以由CPU上运行的函数呼叫读写。

Global memory 这个,学过一点点CUDA的都知道,一般说device memory  指的就是它,

Constant memory 有低延迟,高带宽,但是device只能读它不能写它,并且所有线程可以同时访问同一地址。

3. Register

4. Shared memory

这两种memory是片上记忆体(on-chip),换句话说,读写速度要比前两种memory多很多,至于到底多多少,有空测试哈,而且可以以高度并行的模式读写。

Registers是被分配给单独的线程的,每个线程只能链接自己的register。

Shared memory 是被分配给block的。block里所有的线程都可以访问属于这个block的Shared Memory,共享记忆体是一个十分有效的工具,可以共享他们的输入信息和他们计算出来的中间结果。

各个记忆体的编程模型:

Global memory  VS Register

1. Global memory: "The von Neumann Model": 这个记忆体在cuda编程模型中可以映射到冯诺依曼结构中的记忆体。

global memory 是在处理器芯片之外独立的记忆体,且应用的是动态随机存取存储器(Dynamic Random Access Memory,DRAM)技术。

所以会有很长的链接延迟,和相对来说较低的带宽。

2. Registers: 它有点类似于The von Neumann Model 中的“register file”,它在处理器芯片里面,所以链接的延迟非常的低,以及非常高的带宽。一般器件的Register的综合接入带宽是global memory的两个数量级大。此外,无论何时,链接Register的带宽不占用个global的带宽。另外比起链接global memory, 所需要的执行的指令也要少很多。一般的处理器对于算数指令都有内嵌的寄存器运算数,例如,浮点加法指令:

fadd r1,r2,r3

其中 r2,r3是寄存器的编号,用来提取要做加法的数,最后存到r1中去 。

如果要做加法的数字存在global memory里,首先要从global memory中把数据提取到ALU中,然后在进行浮点运算。

load r2,r4,offset

fadd r1,r2,r3

load命令可以把数据从r4中提取出来,存入r2 再进行加法。

另外还有一个是建议把运算数值存在register的原因,在现代计算机中,从一个register里调用数据一般比从global memory中调用数据所消耗的能量要低一个数量级。

补充说明:执行单位和线程之间的关系,现在我们介绍一下冯诺依曼结构,现代计算机中的线程是一个虚拟化的冯诺依曼处理器,一个线程包含了程式的一部分代码,正要执行的那部分,还有涉及到的数据和数据结构。    在基于冯诺依曼模型的计算机中,代码是存储在记忆体中的,PC不停的访问程式正要进行的那部分,IR则用来存储正要执行的指令。而寄存器和记忆体贼存储数据和数据结构。    现代处理器允许

Shared memory VS Register

他们都是 on-chip 记忆体,但是当处理期要从Shared memory中调用数据时,需要有从记忆体载入数据这个操作,如同从global memory中调用数据一样。但是因为它是片上记忆体,所以无论延迟还是带宽,都比global memory有明显的优势。但因为有load这个步骤,所以无论带宽还是延时比较register都有明显的劣势。

Shared memory存储的变量是被一个block里所有线程共享的。但是register里的变量是线程私有的。Shared memory 能很好地支持thread之间资料共享。

参考书籍:《Programming Massively Parallel Processors》

《CUDA 5.0编程指南》

CUDA Memories--CUDA记忆体(翻译+整理+测试)的更多相关文章

  1. JavaScript 作用域和闭包——另一个角度:扩展你对作用域和闭包的认识【翻译+整理】

    原文地址 --这篇文章有点意思,可以扩展你对作用域和闭包的认识. 本文内容 背景 作用域 闭包 臭名昭著的循环问题 自调用函数(匿名函数) 其他 我认为,尝试向别人解释 JavaScript 作用域和 ...

  2. CUDA开发 - CUDA 版本

    "CUDA runtime is insufficient with CUDA driver"CUDA 9.2: 396.xx CUDA 9.1: 387.xx CUDA 9.0: ...

  3. 【CUDA学习】结构体指针复制

    内核函数中要用data结构作用参数 typedef struct { int* value; int* num; } data; //host端 data* h_input; h_input=(dat ...

  4. 【CUDA】CUDA框架介绍

    引用 出自Bookc的博客,链接在此http://bookc.github.io/2014/05/08/my-summery-the-book-cuda-by-example-an-introduct ...

  5. 【CUDA】CUDA开发环境搭建

    http://blog.csdn.net/tracer9/article/details/50484764 标签: CUDA并行计算NVIDIAlinux 2016-01-08 18:35 637人阅 ...

  6. CUDA并行计算 | CUDA算法效率提升关键点概述

    文章目录 前言 存取效率 计算效率 性能优化要点 展现足够的并行性 优化内存访问 优化指令执行 前言   CUDA算法的效率总的来说,由存取效率和计算效率两类决定,一个好的CUDA算法必定会让两类效率 ...

  7. 【好文翻译】测试必看:使用Spire.XLS来生成自动化报表!

    Download C# project - 7.1 KB 介绍  在我的编程博客中,我经常会比较不同算法或原理的性能特征.我常常会把性能日志(如花费时间)输出到控制台或者文本文件,然后复制到电子表格中 ...

  8. C#与C++数据类型比较及结构体转换[整理]

    //c++:HANDLE(void   *)                          ----    c#:System.IntPtr//c++:Byte(unsigned   char)  ...

  9. JavaScript:如何获得 Private、Privileged、Public 和 Static 成员(属性和方法)【翻译+整理】

    本文内容 背景 把我们的对象放在一起 添加一个私有(Private)的属性 添加一个特权(Privileged)的方法 添加一个公共(Public)的属性和方法 添加一个静态(Static)的属性 我 ...

随机推荐

  1. 解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题

    问题背景: 在使用asp.net mvc 结合jquery esayui做一个系统,但是在使用使用this.json方法直接返回一个json对象,在列表中显示时发现datetime类型的数据在转为字符 ...

  2. C# 一个简单的秒表引发的窗体卡死问题

    一个秒表程序也是我的一个心病,因为一直想写这样的一个东西,但是总往GUI那边想,所以就比较怵,可能是上学的时候学MFC搞出的后遗症吧,不过当我今天想好用Win Form(话说还是第一次写win for ...

  3. 从cocos2dx中寻找函数指针传递的方法

    目的 看到群里有个朋友搞了好几天函数指针传递,没搞好.所以写一篇文章,旨在从cocos2dx中帮朋友们找到如何传递指针. 旧版本的函数指针传递 全局函数函数指针调用 一般在C++11之前,我们一般是这 ...

  4. 【LeetCode】228 - Summary Ranges

    Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...

  5. [转]一些实用的图表Chart制作工具

    最近工作过程中需要用到前端一些JS框架,看到一篇博文就转过来备份使用,后续会再完善一些材料.   Flot   Flot一个纯javascript绘画库,基于jQuery开发.它能够在客户端根据任何数 ...

  6. BITED数学建模七日谈之六:组队建议和比赛流程建议

    今天进入数学建模经验谈第六天:组队建议和比赛流程建议 数学模型的组队非常重要,三个人的团队一定要有分工明确而且互有合作,三个人都有其各自的特长,这样在某方面的问题的处理上才会保持高效率. 三个人的分工 ...

  7. oracle 体系结构解析

    三.oracle 体系结构 1.oracle内存由SGA+PGA所构成 2.oracle数据库体系结构数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. oracl ...

  8. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  9. 读取proc信息的可扩展实现

    需求 1. 将内存.线程数等信息注册到zk上进行监控 2. 统计信息,为下一步做负载均衡做准备. 实现 本文只解决问题1. 从网上查询了下,这些信息可以从proc文件系统中获取,如果不知道proc的, ...

  10. ACM之数学题

    数学题,始终记得,第一次被带飞师大校赛以及省赛,毫无例外的在数学题上卡死....因此,现在开始,有意识的保留遇见的数学题...(下列知识点按遇见先后顺序排列: 1欧拉公式 欧拉公式的用处是,找出小于N ...