CUDA: GPU内存架构示意

news/2024/11/24 11:35:54/

GPU内存架构示意


GPU架构示意图: 流处理器+内存

请添加图片描述


内存访问速度示意图请添加图片描述


Kernel执行内存各部示意图

请添加图片描述
请添加图片描述




CUDA异构并行编程内存模型

对于一种并行语言、技术、或系统,可以从四个方面进行考虑

  • 编程模型
  • 执行模型
  • 内存模型
  • 硬件模型

其中内存模型包括内存资源的申请和释放,不同内存数据之间的移动,读写访问方式等。当前CPU处理器和GPU加速卡都配有多级高速缓存(CPU一般有L1D+L1T,L2,L3三级Cache缓存,GPU一般有L1,L2两级Cache),有些缓存资源对程序可见,比如GPU的共享内存(Shared Memory), 一些底层指令可以影响到数据读入和写出(Load/Store)使用缓存策略。大多数并行计算都需要处理大规模数据,其中多数可归类为内存访问密集型应用(memory-bound application),如何根据应用特点高效利用不同内存资源,使用合适读写策略,都会对整体性能产生很大影响。

本篇笔记对CPU和GPU上个内存相关资源进行分类介绍,依据CUDA开发手册资料,列出相关API函数,同时配有代码片段描述API函数使用方式和场景


系统内存(System Memory)

操作系统可直接管理的内存资源,主要指主板上配置的各类DDR内存。

系统内存使用
  • malloc/free
  • cudaHostAlloc/cudaHostFree
  • cudaManagedMalloc

GPU卡上全局内存(Global Memory)/设备内存(Device Memory)


Constant Memroy(Device)

位于设备内存某处,Grid全局可见。只读方式访问,系统会将数据放在只读高速缓存内加速访问。


设备内存使用
  • 申请和释放: cudaMalloc/cudaFree
  • 申请和释放: cudaMallocAsync/cudaFreeAsync
  • 数据移动: cudaMemcpy/cudaMemcpyAsync
  • ZeroCopy
  • UVM

GPU卡上缓存&SM流处理器上资源


L2 Cache(off-chip)

L1 Cache(on-chip,SM流处理器上)

Shared Memory(on-chip,SM流处理器上)

Registers File(on-chip,SM流处理器上)

Local Memory(Resigter Spilling)

参考资料

  • Better Performance at Lower Occupancy Volkov 2010
  • Better Performance at Lower Occupancy解读
  • Benchmarking GPUs to Tune Dense Linear Algebra 2008
  • Maximizing Unified Memory Performance in CUDA
  • CUDA C Best Practices Guide: 9 Memory Optimization
  • Local Memory and Register Spilling 2011

http://www.ppmy.cn/news/464714.html

相关文章

GPU error:CUDA超内存

RuntimeError: CUDA error: out of memory CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING1. 出现此错误并不是调整batchsize或者with torch…

torch.cuda.empty_cache无法释放显存的原因

众所周知,Pytorch中简单地del某个tensor并不能释放掉该tensor占用的显存,还需要搭配torch.cuda.empty()来进行。但是,这也有例外。比如,如果该tensor在一个依然alive的计算图中,就无法被释放显存。下面是示例&#xff…

torch.cuda.empty_cache()运行时主动清理GPU memory

这篇forum信息量很大,先马住: https://discuss.pytorch.org/t/how-can-we-release-gpu-memory-cache/14530 另外还有这篇blog也可以参考

CUDA——L1缓存全局内存加载

已知A和B两个数组类型int,尺寸100。现在使用一些thread来将A中的一些元素复制到B中去。通过一些对比,来明确一些基本概念。 L1缓存的载入事务粒度是128字节。 #- 编译中显式开启L1缓存,启动一个warp,加载的数据为128字节&#x…

pytorch的显存机制torch.cuda.empty_cache()

转自:https://oldpan.me/archives/pytorch-gpu-memory-usage-track 注意 本文撰写时间为2019年,相关内容可能已失效 Pytorch已经可以自动回收我们不用的显存,类似于python的引用机制,当某一内存内的数据不再有任何变量引用时&…

【pytorch】torch.cuda.empty_cache()==>释放缓存分配器当前持有的且未占用的缓存显存

Pytorch 训练时无用的临时变量可能会越来越多,导致 out of memory ,可以使用下面语句来清理这些不需要的变量。 torch.cuda.empty_cache() 官网 上的解释为: Releases all unoccupied cached memory currently held by the caching allocato…

为什么一打开Adobe Creative Cloud 桌面上就会出现一个GPUCache文件夹

是因为Adobe Creative Cloud打开后,后台有baiAdobe Creative Cloud要进行的项目,但是还没完全进du行完成zhi卡住了导致。GPUCache文件夹dao正常删除或对文件夹的任何操作皆为文件被占用(与adobecloud开启与否无关),用c…

Tensorflow100%占用GPU内存

在使用GPU进行“炼丹”的过程中,经常会出现,明明数据不是很大,网络规模也很小,batch_size也不大,但是GPU内存占用瞬间拉满。GPU内存拉满的原因可能时Tensorflow默认将内存全部沾满,以利用大块内存&#xff…