Abstract: 本文为CUDA内存的概述,介绍共享内存的模型,分配,访问,配置,同步等内容Keywords: 模型,分配,访问,配置,同步

开篇废话

这里首先要进一步说明一下,前面我们在说缓存的时候说其是可编程的,这是不准确的,应该说是可以控制的,而我们今天要说的共享内存才是真正意义上的可编程的。
废话不多说了,一套CUDA内容写到现在,一大半已经进行完了,希望我们在一个系列完成后都能有所成长,而不是纯粹的阅读或者码字。
GPU内存按照类型(物理上的位置)可以分为
- 板载内存
- 片上内存

全局内存是较大的板载内存,延迟高,共享内存是片上的较小的内存,延迟低,带宽高。前面我我们讲过工厂的例子,全局内存就是原料工厂,要用车来运输原料,共享内存是工厂内存临时存放原料的房间,取原料路程短速度快。
共享内存是一种可编程的缓存,共享内存通常的用途有:
1. 块内线程通信的通道
2. 用于全局内存数据的可编程管理的缓存
3. 告诉暂存存储器,用于转换数据来优化全局内存访问模式

本章我们研究两个例子:
1. 归约核函数
2. 矩阵转置核函数

共享内存

共享内存(shared memory,SMEM)是GPU的一个关键部分,物理层面,每个SM都有一个小的内存池,这个线程池被次SM上执行的线程块中的所有线程所共享。共享内存使同一个线程块中可以相互协同,便于片上的内存可以被最大化的利用,降低回到全局内存读取的延迟。
共享内存是被我们用代码控制的,这也是是他称为我们手中最灵活的优化武器。
结合我们前面学习的一级缓存,二级缓存,今天的共享内存,以及后面的只读和常量缓存,他们的关系如下图:

SM上有共享内存,L1一级缓存,ReadOnly 只读缓存,Constant常量缓存。所有从Dram全局内存中过来的数据都要经过二级缓存,相比之下,更接近SM计算核心的SMEM,L1,ReadOnly,Constant拥有更快的读取速度,SMEM和L1相比于L2延迟低大概20~30倍,带宽大约是10倍。
下面我们了解下共享内存的生命周期和读取性质。
共享内存是在他所属的线程块被执行时建立,线程块执行完毕后共享内存释放,线程块和他的共享内存有相同的生命周期。
对于每个线程对共享内存的访问请求
1. 最好的情况是当前线程束中的每个线程都访问一个不冲突的共享内存,具体是什么样的我们后面再说,这种情况,大家互不干扰,一个事务完成整个线程束的访问,效率最高
2. 当有访问冲突的时候,具体怎么冲突也要后面详细说,这时候一个线程束32个线程,需要32个事务。
3. 如果线程束内32个线程访问同一个地址,那么一个线程访问完后以广播的形式告诉大家

后面的全章内容都是基本围绕如何避免访问冲突,高效的是有共享内存来展开的。

注意我们刚才说的共享内存的生命周期是和其所属的线程块相同的,这个共享内存是编程模型层面上的。物理层面上,一个SM上的所有的正在执行的线程块共同使用物理的共享内存,所以共享内存也成为了活跃线程块的限制,共享内存越大,或者块使用的共享内存越小,那么线程块级别的并行度就越高。
共享内存,高端有限资源,合理使用!

接着说说可编程,矩阵乘法的串行形式,最简单的方式是三层循环,通过调整循环可以获得更好的缓存命中率,这个题在找工作笔试的时候有,当时在大学笔试工作的时候,我会很傻x的在笔试习题上写上注释,可以通过调整循环顺序提高缓存命中率,但是现在想一下,CPU的缓存是不可控制的,你只能调整自己的程序来适应它。
GPU高端的一点,就是你不止有一个缓存可以编程控制,而是有好几个。

共享内存分配

完整内容参考 https://face2ai.com/CUDA-F-5-1-CUDA共享内存概述/

访问时发生了共享冲突是什么意思_【CUDA 基础】5.1 CUDA共享内存概述相关推荐

  1. 页面访问时发生错误 For input string fullname

    出错堆栈信息: <!DOCTYPEhtmlPUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN""http://www.w3. ...

  2. 投放共享单车需要什么批文_浙江绍兴叫停所有共享单车:需审批才能投放

    执法人员暂扣"小鸣单车". 原标题:绍兴叫停所有共享单车 查扣小鸣单车,叫停摩拜单车:今后会在总量控制前提下,引入符合标准的单车企业 处在互联网风口的共享单车一经推出,便引来年轻人 ...

  3. Windows Server 2008 使用“net use”挂载网络共享时“发生系统错误53”的解决方案

    Windows Server 2008 通过net命令挂载网络共享,命令如下 net use z: \\10.9.13.33\nfsbackup /user:bak backup 抛出错误:发生系统错 ...

  4. 解决访问远程共享时发生 请检查名称的拼写. 否则, 网络可能有问题 故障

    解决访问远程共享时发生 请检查名称的拼写. 否则, 网络可能有问题 故障 参考文章: (1)解决访问远程共享时发生 请检查名称的拼写. 否则, 网络可能有问题 故障 (2)https://www.cn ...

  5. 计算机共享的媒体设备,多台计算机、手机和平板电脑中共享对文件和媒体的访问时怎么做...

    今天小编向您介绍一下NAS与RAID.随着科技的发展,大批的花式存储设备涌向市场,并占据了存储市场的大片江山.但是,当您的数据量已经超出台式硬盘存储容量,您希望从多台计算机.手机和平板电脑中共享对文件 ...

  6. 用于调用的参数太少/写入位置时发生冲突/检测到无效的异常处理程序例程

    用于调用的参数太少/写入位置时发生冲突/检测到无效的异常处理程序例程 针对新人学C过程中可能遇到的一类问题 我们在学习中经常遇到这种情况: #include<stdio.h> void m ...

  7. 0x00007FF8DC013526(ntdll.dll) 处(位于XXX.exe中) 引发的异常 osg 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF时发生访问

    环境:Qt + VS2019 + osgearth 在加载数据界面操作成功,程序转到主界面时,弹出异常.这个问题困扰了我好长时间,终于下定决心要解决了. 下面这篇文章给我很大的启发:​​​​​​​ . ...

  8. 打开FTP服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹

    当您使用FTP上传数据的时候,经常会遇到"打开FTP"无权限的提示,这是由于您的浏览器设置了防火墙的缘故,下面是正确的设置流程: 1. 首先打开一个IE浏览器(如果打开了多个浏览器 ...

  9. “打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹

    阿里云虚拟主机上传网站程序 问题场景:网页制作完成后,程序需上传至虚拟主机 注意事项: 1.Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . 2. 如果网页文件较多,上传较慢 ...

最新文章

  1. 如何保证缓存和数据库的双写的一致性
  2. android去掉button默认的点击阴影
  3. 成绩差的同学为何大多当老板?
  4. 我国法定报告的传染病分为几类?包括哪些传染病?
  5. Matlab之DNN:基于Matlab利用神经网络模型(epochs=10000000)预测勒布朗詹姆斯的2018年总决赛(骑士VS勇士)第一场得分、篮板、助攻
  6. 采购订单单位与基本计量单位不一致问题案例
  7. c++ primer 5th,习题11.33
  8. 【题解】大床Nim (2019,5.23)
  9. linux path环境变量起什么作用,shell基础(5)PATH环境变量的作用和使用方法
  10. java list 分组_Java 将List中的实体类按照某个字段进行分组并存
  11. python类的魔法方法基础
  12. Enterprise Library: Data Access Application Block使用向导,Part 1
  13. 新版Excel和Word全屏打印预览的设定方法
  14. LayoutInflater类的作用与用法
  15. 集群通信:从心跳说起
  16. Excel 输入内容自动生成条形码
  17. java设计模式之-策略模式
  18. 光E电做好个人理财规划理财如此简单
  19. 卡马克快速平方根(平方根倒数)算法(转)
  20. 亚马逊获取买家信息,店铺申请,ERP系统,MWS迁移SPAPI,SPAPI注册,PII权限获取

热门文章

  1. 聊聊我做亚马逊测评被骗的那些经历!希望你的创业之路一帆风顺!
  2. matlab电力电子仿真研究背景,MATLAB的电力电子技术仿真文献综述
  3. php框架 s,开源免费的PHP框架|轻量级PHP框架(DecSoft's Humm PHP)下载 V2019.4 官方版 - 比克尔下载...
  4. Win11右键怎么直接显示所有选项?
  5. C语言算平均数,让用户输入一系列的正整数,输入-1表示输入结束,算出这些数字的平均数
  6. EasyExcel设定了表格底色但是不生效的问题
  7. 老司机人手必备xxlive 仅供学习交流 勿传播以及商业用途
  8. docker:解决重装显卡驱动后,docker中找不到显卡的问题
  9. 南琼考试系统服务器怎么填,南琼考试系统N5
  10. 阿里巴巴Java开发手册(详尽版)-个人未注意到的知识点