GPU 内存结构

article/2025/1/19 3:21:19

GPU 和CPU通过 VLink  或者PCLe 相连。

每个SM 又含有多个cuda core,多个SM共享全局内存,通过L2 高速缓存和全局内存进行相连,不同代的GPU之间的体系结构有所不同。

右边是一个SM 上的 内存,有共享内存,局部内存,寄存器,可以访问全局内存、常数内存、纹理内存。

每个线程 有自己的私有本地内存(local memory)、每个线程块包含共享内存,可以被线程块中的所有线程共享,其生命周期与线程块一致。共享内存的访问速度非常块,比全局内存的访问要快100倍。

所有的线程都可以访问全局内存,量大,但是访问速度是最慢的

常量和纹理内存用的比较少,所有的线程都能对它们进行读操作,不能进行写操作。

多个MP共享L2

 

存储量越大  访问速度越慢。CPU/GPU 的内存结构中,一级和二级缓存都是不可编程的,对用户是不开放的(完全不可控制的存储设备)。比如 L1 L2 缓存,寄存器,是不可编程的,是有cpu 、GPU进行管理控制的。

全局内存生命周期是从开始申请到释放,如果程序结束了,但是没有对释放内存的操作,全局内存的生命周期还是没有结束、

全局内存生命周期(显存):

当一个线程开始执行,它会拥有自己的本地内存、寄存器,当线程结束时,对应的内存也就结束了。

线程块有自己的共享内存,对线程块内的所有线程可见,当线程块执行结束时,这些共享内存的生命周期就结束了。

寄存器的生命周期:

寄存器位于SM  中,访问的速度非常快,比全局内存的访问速度要快两个数量级,寄存器是稀缺资源,程序在执行过程中,会把一些最常用的变量放在寄存器中,每个线程中寄存器的数量是一定的,如果线程的变量太多,溢出的话,必须把一部分的数据放在全局内存中,效率就会变得很低。尽量少使用寄存器,这样可以使处于活跃状态的线程数更多。

核函数中,符合存储在寄存器,但不能进入被核函数分配的寄存器空间中的变量将存储在本地内存中,编译器中可能放在本地内存中的变量有以下几种:

使用未知索引的引用的本地数组

可能会占用大量寄存器空间的较大本地数组或者结构体

不满足核函数寄存器限定条件的变量

本地内存实质上和全局内存一样在同一块存储区域中,高延迟低带宽。

本地内存存储在每个SM 的一级缓存或者是设备的二级缓存。

 

共享内存

延迟低,带宽高。由线程块分配的共享内存,共享内存是片上内存,可以被编程。过度使用共享内存会导致SM 上活跃的线程束减少。也就是说,一个线程块使用的共享内存过多,导致更多的线程块没有办法被SM启动,这样活跃的线程束数量减少。

共享内存在核函数内声明,生命周期和线程块一致,线程块被运行,共享内存被分配,当此块结束,则共享内存被释放。共享内存是块内线程可见的,存在竞争问题,也可以通过共享内存进行通信。为了避免竞争,使用同步语句:_syncthreads()

频繁使用这样的语句会影响程序执行效率。

为了实现内存高带宽的同时访问,shared memory  被划分成了同时访问的等大小内存块。内存读写n 个地址的行为可以以b个独立的bank同时操作的方式进行,这样可以有效提高到b倍。如果多个线程请求的内存地址被映射到同一个bank上,那么这些请求就变成了窜行的。硬件将把这些请求分成x个没有冲突的请求序列,带宽就降为原来的x分之一。但是如果一个wrap内所有线程都访问一个内存地址的话,就会产生一次广播(boardcast),这些请求会一次完成。

全局内存访问对齐,一次要读取指定大小(32,64,128)整数倍字节的内存。内存请求的实物越多,未使用字节被传输的可能性越大。对齐的读写模式使得不需要的数据也被传输。

一级缓存

二级缓存

只读常量缓存

只读纹理缓存

CPU 读写过程都可能被缓存,GPU 只有读的过程被缓存,写的过程没有缓存。

常量缓存和纹理缓存,它们被用于设备内存来提高各自内存空间的读取性能。

GPU内存管理    申请 拷贝 释放

cudaMalloc((void **) & ptr, size)

cudaMemcpy(dst,src,size,directory)

cudathreadsynchronize()

cudaFree()

cudaMallocHost()//申请锁页内存


http://chatgpt.dhexx.cn/article/9ClBShxr.shtml

相关文章

计算机专业电脑内存,电脑内存大小是否和速度有关?

我们总觉得内存大一点,就是运行速度一定是快。现在市面上的电脑,配置已经很强大了,动不动内存就上12G、16G的笔记本、一体机电脑随处可见。电脑已经到了瓶颈且性能过剩的年代,其实内存越大就代表电脑速度越快,这里有些误区,今天就让小编跟大家说说内存这点事儿。 计算机运…

linux怎么看内存时序,内存速度和时序重要么

描述 最近是跟内存耗上了,其一是手里没有其它硬件可测,更重要的是想趁着这段时间,把内存与性能之间的影响都慢慢测一下。今天测的就是时序与内存性能之间的关系了。时序很重要吗?答案是肯定的,但是时序对内存性能的影响到底有多大呢?下面就详细的测试一下。 用来测试的内…

手机测试内存速度的软件,如何查看手机内存速度?手机内存读取速度测试_手机内存速度多少算正常...

如何查看手机内存速度?手机内存速度多少算正常?下面小编就给大家介绍下手机内存读取速度测试发方法! 今早,手机内存问题再度引起热潮,很多朋友都在讨论手机内存速度问题。那么问题来了,如何正确测试自己手机…

双倍数据率同步動態隨機存取記憶體(英語:,簡稱DDR SDRAM)

双倍数据率同步動態隨機存取記憶體(英語:,簡稱DDR SDRAM)為具有雙倍資料傳輸率的SDRAM,其資料傳輸速度為系統時脈的兩倍,由於速度增加,其傳輸效能優於傳統的SDRAM。 DDR SDRAM 研發商SamsungJED…

古风排版java_古风排版java版-Go语言中文社区

7-7 古风排版(20 分) 中国的古人写文字&#xff0c;是从右向左竖向排版的。本题就请你编写程序&#xff0c;把一段文字按古风排版。 输入格式&#xff1a; 输入在第一行给出一个正整数N(<100)&#xff0c;是每一列的字符数。第二行给出一个长度不超过1000的非空字符串&#…

古风排版问题

7-7 古风排版 中国的古人写文字&#xff0c;是从右向左竖向排版的。本题就请你编写程序&#xff0c;把一段文字按古风排版。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;<100&#xff09;&#xff0c;是每一列的字符数。第二行给出一个长度不超过1000…

古风排版 (

中国的古人写文字&#xff0c;是从右向左竖向排版的。本题就请你编写程序&#xff0c;把一段文字按古风排版。 输入格式 输入在第一行给出一个正整数 NN&#xff0c;是每一列的字符数。第二行给出一个长度不超过 10001000 的非空字符串&#xff0c;以回车结束。 输出格式 按…

开源中文古风排版样式,简约美观,超级好用!

只推荐用过的好用工具&#xff0c;关注DD帮你提高效率 如果有一篇古诗&#xff0c;要放在Web页面上&#xff0c;你会如何排版呢&#xff1f;如果要实现类似语文书中的那种效果&#xff0c;有没有办法快速实现呢&#xff1f; 今天给大家推荐一个非常好用的开源项目&#xff0c;就…

微分和导数的关系是什么?

在初学微分和导数时&#xff0c;虽然感觉概念不复杂&#xff0c;但是我对两者的关系有点模糊&#xff0c;比如以下问题就觉得模棱两可&#xff1a; 对于导数链式法则&#xff0c; d y d x d y d u d u d x \frac {dy}{dx} \frac {dy}{du} \frac {du}{dx} dxdy​dudy​dxdu​…

重新认识微分和导数

之前写过不少关于微分和导数的文章&#xff1a; 微分是什么&#xff1f; dx&#xff0c;dy是什么&#xff1f; 微分和导数的关系是什么&#xff1f; 今天这篇文章再换一个角度来谈论微分和导数&#xff0c;让我们从微分出现的原因说起。 1 微分出现的原因 出于种种原因…

第七章——微分方程

目录 一、求常系数线性齐次微分方程的通解 二、可分离变量的一阶微分方程 三、齐次方程 四、一阶线性微分方程 五、 可降解的高阶微分方程 六、常系数非齐次线性微分方程的特解形式 注&#xff1a;//之后的都是注释&#xff0c;不是过程。 一、求常系数线性齐次微分方程…

【数学问题2】向量微分

一、反对称矩阵 定义运算 ⋅ ~ \tilde{\cdot} ⋅~ 为&#xff1a; l ~ ( 0 − c b c 0 − a − b a 0 ) \tilde{l} \begin{pmatrix} 0 & -c & b\\ c & 0 & -a\\ -b & a & 0 \end{pmatrix} l~⎝⎛​0c−b​−c0a​b−a0​⎠⎞​ 其中 l [ a b c ]…

微分滤波器总结

微分滤波器 本质&#xff1a;逻辑上&#xff0c;平滑使用的是积分&#xff0c;锐化则应使用微分。 1.索贝尔&#xff08;Sobel&#xff09;导数 索贝尔算子可以实现任意阶导数和混合偏导数。 本质&#xff1a;求得图像的一阶或二阶近似梯度图像。 void Sobel( InputArray sr…

微积分——外微分形式的微积分

在我们所讨论的三度空间&#xff08;三维&#xff09;中&#xff0c;能够出现的微分形式只有四种&#xff1a; 零次微分形式——函数 f 一次微分形式——线积分中出现的微分dx,dy,dz的一次式 二次微分形式——面积分中出现的微分dx,dy,dz的二次式 三次微分形式——体积分中出…

微分的积公式推导

因为学习图形学的时候&#xff0c;好多次涉及到、谈论到要使用线性代数和微积分的知识&#xff0c;所以怀着要学就学好的精神将他们都学习一遍&#xff0c;至少都了解清楚一些&#xff0c;更利于后面图形学的学习&#xff0c;在看到微分的积推导公式时&#xff0c;觉得讲的有些…

matlab中常微分方法,MATLAB常微分方程

4.8 微分方程 微分方程是数值计算中常见的问题,MATLAB提供了多种函数来计算微分方程的解。 4.8.1 常微分方程 众所周知,对一些典型的常微分方程,能求解出它们的一般表达式,并用初始条件确定表达式中的任意常数。但实际中存在有这种解析解的常微分方程的范围十分狭窄,往往…

如何通俗的解释全微分?

微积分这门学科&#xff0c;从字面上拆开来看&#xff0c;就是“微分”“积分”。按道理把这个两个概念作为学科的名字&#xff0c;很显然是非常重要&#xff0c;但是我觉得很奇怪&#xff0c;《高等数学》同济版并不怎么讲“微分”这个概念&#xff0c;而是着重在讲解“微分”…

自动微分(Auto differentiation)

1.自动微分是干什么的&#xff1a; 自动微分现在已经是深度学习框架的标配&#xff0c;我们写的任何模型都需要靠自动微分机制分配模型损失信息&#xff0c;从而更新模型。简言之&#xff0c;就是在模型更新计算梯度的时候会用到自动微分。 在数学和计算机代数中&#xff0c;…

高数 | 【一元函数微分学】一元函数微分的本质 导数与微分的区别

一、微分的本质 微分本质是一个微小的线性变化量&#xff0c;是用一个线性函数作为原函数变化的逼近&#xff08;或者叫近似&#xff09;。 现在我们将 定义为dy。而 表示的是函数值的变化&#xff0c;显然dy的真正含义是对这种变化的逼近。也就是说我们定义微分&#xff0c;就…

图像微分

图像微分 考虑到图像中值离散一般为前后像素作差&#xff0c;这是一阶微分。应用中效果不佳&#xff0c;与此相比二阶微分效果较好&#xff0c;二阶微分是对一阶微分的再微分,数学表达为&#xff08;考虑x方向时&#xff09;f(x,y0)’f(x,y0)-f(x-1,y0) f(x-1,y0)’f(x-1,y0)-f…