【CUDA 基础】4.1 内存模型概述
title: 【CUDA 基础】4.1 内存模型概述
categories:
- CUDA
- Freshman
tags:
- CUDA内存模型
- CUDA内存层次结构
- 寄存器
- 共享内存
- 本地内存
- 常量内存
- 纹理内存
- 全局内存
toc: true
date: 2018-04-28 22:28:08
Abstract: 本文介绍CUDA编程的内存模型个概述,主要讲解CUDA包含的几种内存,以及各种内存的主要特点和用途,这篇作为内存部分地图一样,指导我们后面的写作和学习。
Keywords: CUDA内存模型,CUDA内存层次结构,寄存器,共享内存,本地内存,常量内存,纹理内存,全局内存
开篇废话
废话少说,我们直接进入主题,如果说我进入写程序的行业的印象最深刻的一本书,看过我博客的人应该能猜到,我也不止一遍的向大家推荐过《深入理解计算机系统》那本书告诉了我基本所有的计算机基础知识,编程基础知识,真的很基础,里面有CPU结构,内存管理模型,汇编等等,从知识层次来讲,非常偏底层,但是难度确实够让人难受,那本书,我估计我只看了一半,看懂的应该有一半的三分之二,也就是我只看懂了全书的三分之一,推荐有时间一定要看看,内存访问和管理是程序效率的关键点,高性能计算更是如此,上一篇举得例子关于运输原材料的例子,就是我们平时天天遇到的问题,我们希望有大量的高速度的大容量内存可以给我们的工厂(GPU核心)输送数据,但是根据我们目前的技术,大容量高速的内存不仅造价高,而且不容易生产,到目前为止(2018年5月)计算结构还是普遍采用内存模型获得最佳的延迟和带宽。
下面我们要看一条新闻,昨天还是前天看到的,刚才又搜了一下,效果大概是这样的
为了方便大家多年后理解时代背景:三周前,美国商务部制裁中兴公司(中兴公司倒闭了,你可以去查查Google)七年不允许美国公司向中国出售任何芯片类产品,中国人说这是贸易战,但是美国没说什么,直说制裁中兴公司。
新文内容是这样的:
我们把这个截图放在这,看看明年后年能不能上市,如果成功了,我算是松了口气,毕竟当年立的亩产三万八千斤的Flag到现在还没实现。
CUDA也采用的内存模型,结合了主机和设备内存系统,展现了完整的内存层次模型,其中大部分内存我们可以通过编程控制,来使我们的程序性能得到优化。
如果你之前写的程序都没怎么管理过内存,那请先练习下C语言,可能会有更好的理解。
内存层次结构的优点
程序具有局部性特点,包括:
- 时间局部性
- 空间局部性
解释一下,时间局部性,就是一个内存位置的数据某时刻被引用,那么在此时刻附近也很有可能被引用,随时间流逝,该数据被引用的可能性逐渐降低。
空间局部性,如果某一内存位置的数据被使用,那么附近的数据也有可能被使用。
现代计算机的内存结构主要如下:
这个内存模型在程序局部性原则成立的时候有效。学习过串行编程的人也应该知道内存模型,速度最快的是寄存器,他能和cpu同步的配合,接着是缓存,在CPU片上,然后是主存储器,现在常见的就是内存条,显卡上也有内存芯片,然后是硬盘,这些内存设备的速度和容量相反,越快的越小,越慢的越大。
局部性是个非常有趣的事情,首先局部性的产生并不是因为设备的原因,而是程序从一开始被编写就有这个特征,与生俱来,所以当我们发现此特征后,就开始设计满足此特征硬件结构,也就是内存模型,当内存模型设计成如上结构的时候,如果你想写快速高效的程序,就要让自己的程序局部性足够好,所以这就进入了一个死循环,最后为了追求高效率,设备将越来越优化局部性,而程序也会越来越局部化。
总结下最后一层(硬盘磁带之类的)的特点:
- 每个比特位的价格要更低
- 容量要更高
- 延迟较高
- 处理器访问频率低
CPU和GPU的主存都是采用DRAM——动态随机存取存储器,而低延迟的内存,比如一级缓存,则采用SRAM——静态随机存取存储器。虽然底层的存储器延迟高,容量大,但是其中有数据被频繁使用的时候,就会向更高一级的层次传输,比如我们运行程序处理数据的时候,程序第一步就是把硬盘里的数据传输到主存里面。
GPU和CPU的内存设计有相似的准则和模型。但他们的区别是:CUDA编程模型将内存层次结构更好的呈献给开发者,让我们显示的控制其行为。
CUDA内存模型
完整内容参考 https://face2ai.com/CUDA-F-4-1-内存模型概述/
【CUDA 基础】4.1 内存模型概述的更多相关文章
- 【Java_基础】JVM内存模型与垃圾回收机制
1. JVM内存模型 Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间. JVM内存模型如下图所示 1.1 程序计数器 程序计数器( ...
- JVM 内存模型概述
我们都知道,Java程序在执行前首先会被编译成字节码文件,然后再由Java虚拟机执行这些字节码文件从而使得Java程序得以执行.事实上,在程序执行过程中,内存的使用和管理一直是值得关注的问题.Java ...
- 【Java并发基础】Java内存模型解决有序性和可见性
前言 解决并发编程中的可见性和有序性问题最直接的方法就是禁用CPU缓存和编译器的优化.但是,禁用这两者又会影响程序性能.于是我们要做的是按需禁用CPU缓存和编译器的优化. 如何按需禁用CPU缓存和编译 ...
- JVM基础学习(一):JVM内存模型
在Java进阶知识的学习中,JVM都是避不过去的一关,我个人对于JVM的理解其实就是相当于在操作系统的外层再加了一层中间层,从来屏蔽了具体硬件之间的不同实现,使得Java实现了最重要的特性:一次编译, ...
- 【C# 线程】内存模型(C#)---非常重要 【多线程、并发、异步的基础知识】
内存模型概述 MSDN:理论与实践中的 C# 内存模型 MSDN:理论与实践中的 C# 内存模型,第 2 部分 内存模型就是内存一致性模型. 以下内如来自维基百科 内存一致性模型列表 线性一致性(Li ...
- java内存模型及分块
转自:http://www.cnblogs.com/BangQ/p/4045954.html 1.JMM简介 2.堆和栈 3.本机内存 4.防止内存泄漏 1.JMM简介 i.内存模型概述 Ja ...
- 全面理解Java内存模型(JMM)及volatile关键字(转载)
关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoad ...
- 全面理解Java内存模型(JMM)及volatile关键字
[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72772461 出自[zejian ...
- Inside JVM 内存模型
Inside JVM 内存模型 来源 原文:https://blog.csdn.net/silentbalanceyh/article/details/4661230 参考:IBM开发中心文档,&l ...
随机推荐
- TIPTOP之分割split函数方法、getIndexOf、subString、replace、临时表创建;
范例(cnmq001): 原:每次查询都把数据全部查询到临时表后再筛选: 现:查询到临时表的时候,增加可行的筛选条件,再二次筛选临时表的数据,进行优化: 1)临时表创建: PRIVATE FUNCTI ...
- 5.Shell变量
5.Shell变量本章介绍 shell 中所使用的变量.Bash 会自动给其中一些变量赋默认值.5.1 波恩Shell的变量Bash 使用一些和波恩 shell 同样的变量.有时,Bash 会给它赋默 ...
- js ajax return false了,仍然会往下执行
function checkMust(){ var flag=false; $.getJSON("../Ajax/Carton/Ajax_TMSOrder_Create.ashx?r=&qu ...
- 一个小时前,美国主流媒体,头条,谷歌两位创始人突然宣布退下来,把万亿美元的帝国交给Sundar Pichai
一个小时前,美国各大主流媒体头条,谷歌两位创始人,放弃了万亿美元的帝国控制权,交给了CEO Sundar Pichai.
- 【科创人上海行】Tinyfool郝培强 :始于不惑的微服务式创业,背负身心病痛贴地飞行
Intro 科创人,分享技术创业者的成长与创业经验. 何谓创业?勇于面对未知.肩负重任的人生抉择. 何谓经验?沟沟坎坎.有笑有泪,各有其宝贵. 科创人的价值支点是"人",我们不以市 ...
- 云端js动态效果
效果图: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- nginx 配置简单的静态页面
nginx 文件服务配置,MIME和 default_type https://blog.csdn.net/qq_26711103/article/details/81116900 nginx 静态页 ...
- python制作一个简单词云
首先需要安装三个包:# 安装:pip install matplotlib# 安装:pip install jieba# 安装pip install wordcloud 1.制作英文字母的词云 效果图 ...
- oracle解锁
--以下几个为相关表SELECT * FROM v$lock;SELECT * FROM v$sqlarea;SELECT * FROM v$session;SELECT * FROM v$proce ...
- asp.net中的比较完美的验证码
要实现如图的效果的验证码,分以下步骤: 第一.布局好调用验证码的登录页面(命名:Login.aspx),注意:验证码位置可以是服务器控件 Image,也可以是html标签写的<img>,但 ...