GPU设备端存储器的主要分类和特点:

大小:

全局(Global)和纹理(Texture)内存:大小受RAM大小的限制。

本地(local)内存:每个线程限制在16KB

共享内存:最大16kB

常量内存:总共64KB

每个SM共有8192或者16384个32位寄存器

速度:

Global,local,texture << constant << shared,register

数据对齐:

设备可以在一次操作中从全局内存读取4-byte,8-byte或者16-byte内容到寄存器中,读取不对齐的8-byte或者16-byte内容的可能产生错误的结果。

如何利用合并访问提高访存效率:

1、使用数组结构体(structure of arrays:SOA)代替结构体数组(array of structures:AOS):

2、使用共享内存来实现合并访问。

内存衬底(memory padding):

通常的访问模式:二维数组

当一个索引为(tx,ty)的线程去访问一个宽度为N且基地址为BaseAddress的二维数组时,使用的是下面的地址:BaseAddress + N*ty + tx。在这种情况下,我们如何来保证合并访问呢:

blockDim.x = 16x 并且 N= 16x。

我们可以控制blockDim.x,但是数组宽度并不总是16x。内存衬底就是创建一个宽度为16x的数组,然后将未使用部分填充0。这里介绍一个概念:数组A的主要尺寸(leading dimension)——pitch,简称Ida。因为c/c++是行主导的,所以主要尺寸为行宽(即一行里面的元素个数)。cuda提供了相应的API,cudaMallocPitch()来分配2D数组。类似的函数同样存在于3D的情况。

转载于:https://www.cnblogs.com/quincy-qiu/archive/2013/04/15/4014372.html

CUDA编程中内存管理机制相关推荐

  1. python中内存管理机制一共分为多少层_python 内存管理机制

    内存管理机制 ​python中万物皆对象,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 ​Python的内存管理机制:引入计数.垃圾回收.内存池机制 ...

  2. C++中运行一个程序的内存分配情况及qt中的内存管理机制

    一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一 ...

  3. 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制

    今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...

  4. 【精华】详解Qt中的内存管理机制

    前言 内存管理,是对软件中内存资源的分配与释放进行有效管理的方法和理论. 众所周知,内存管理是软件开发的一个重要的内容.软件规模越大,内存管理可能出现的问题越多.如果像C语言一样手动地管理内存,一会给 ...

  5. java中创建类的时候有没有分配内存,你必须了解的java内存管理机制(一)-内存分配...

    前言 在上一篇文章中,我们花了较大的篇幅去介绍了JVM的运行时数据区,并且重点介绍了栈区的结构及作用,相关内容请猛戳!在本文中,我们将主要介绍对象的创建过程及在堆中的分配方式.from 你必须了解的j ...

  6. 什么是 Python 的 「内存管理机制」?

    什么是内存管理器(what) Python作为一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存 ...

  7. JVM内存管理机制线上问题排查

    本文主要基于"深入java虚拟机"这本书总结JVM的内存管理机制,并总结了常见的线上问题分析思路.文章最后面是我对线上故障思考的ppt总结. Java内存区域 虚拟机运行时数据区如 ...

  8. 浅析java内存管理机制

    内存管理是计算机编程中的一个重要问题,一般来说,内存管理主要包括内存分配和内存回收两个部分.不同的编程语言有不同的内存管理机制,本文在对比C++和java语言内存管理机制的不同的基础上,浅析java中 ...

  9. 什么是python语言的动态类型机制_python的内存管理机制

    一.python是一个什么样类型的语言 1.python是一种动态解释性强类型定义的高级.通用性编程语言. 解释型:执行的时候,才一条一条的解释成机器语言给计算机来执行.如:python.js.rub ...

最新文章

  1. aws搭建java项目_AWS下S3之java开发
  2. Select控件可选可输入
  3. An example of using Pandas for regression
  4. mysql不复制数据_windows mysql不停止服务复制数据
  5. matlab怎么画园与椭圆,[转载]【MATLAB】画圆和椭圆
  6. 单元测试 : Googel test测试框架
  7. 如何进行文件管理、备份
  8. gitlab 使用配置
  9. UITableView 删除cell
  10. python设计选择题代码_《Python程序的设计》试题库完整
  11. ssl 1606 选课
  12. 如何书写软件应用发明专利说明书(实例)
  13. win10下u盘检测的到,但是盘符不显示
  14. TreadLocal理解
  15. Python 三维姿态估计+Unity3d 实现 3D 虚拟现实交互游戏
  16. 微博机型Android怎么去掉,如何设置微博来源中显示出的手机型号 怎么去掉微博来源中的android字样...
  17. QQ的群消息关键字屏蔽
  18. 怎么判断自己的牙齿是否需要做矫治
  19. 英语不好学不好编程?程序员记忆单词专属诀窍,效果简直要逆天
  20. 硼碳氮纳米管的制备(碳纳米管包裹磁性金属复合纳米结构/多孔氧化物掺杂的碳纳米管包裹的碳纳米球/碳氮纳米管包裹纳米金属粒子/碳纳米管包裹Ni纳米线复合材料)

热门文章

  1. pcb过孔与电流对照一览表_PCB设计项目能不能成功,这个因素占了30%
  2. 谷歌浏览器修复一键修复_谷歌发布Chrome 86.0.4240.198 修复两个零日漏洞 - Google Chrome 谷歌浏览器...
  3. C#中split的用法
  4. linux 不能发送邮件可能的原因
  5. Error during artifact deployment. See server log for details解决办法
  6. C/C++函数调用的压栈模型
  7. 《数据库SQL实战》统计出当前各个title类型对应的员工当前薪水对应的平均工资。
  8. 不错的递归题:输入123,返回“321”。 要求必须用递归,不能用全局变量,输入必须是一个参数,必须返回字符串。
  9. 《剑指offer》孩子们的游戏---约瑟夫问题
  10. Java Calendar使用指南