2023 CUDA线上春训营笔记 线程层次和存储概念梳理

4 篇文章 0 订阅
文章详细介绍了CUDA的线程模型,包括线程、线程块和线程格的概念,以及CUDA内存层次,如SharedMemory、Registers、LocalMemory、ConstantMemory和TextureMemory的特性和用途。此外,还提到了性能分析工具NVPROF在Jetpack5.0.2上的替代品nsight,以及CUDAevent作为时间戳的作用。
摘要由CSDN通过智能技术生成

术语:

  • Host:CPU和内存host memory
  • Device :GPU和显存ldevice memory
  • NVPROF:一种性能分析软件,不过在jetpack 5.0.2上不能用,可以使用nsight代替,具体没有试过。
  • CUDA event 本质上是一个时间戳这个时间戳是在用户指定的时间点上记录的。由于GPU本身支持记录时间戳,因此就避免了当使用CPU定时器来统计GPU执行时间时可能遇到的诸多问题。

概念

CUDA线程层次

线程(Thread)、线程块(Block)、线程格(Grid)

  1. Thread:sequential execution unit 所有线程执行相同的核函数并行执行
  2. Block: a group of threads 执行在一个Streaming Multiprocessor 【SM】同一个Block中的线程可以协作
  3. Grid: a collection of thread blocks 一个Grid当中的Block可以在多个SM中执行

CUDA存储层次:

  1. Shared Memory是目前最快的可以让多个线程沟通的地方

这张图引用自:CUDA内存类型memory_Augusdi的博客-CSDN博客_cuda local memory

Registers

  1. 寄存器是GPU最快的memory
  2. kernel中没有什么特殊声明的自动变量都是放在寄存器中的。
  3. 当数组的索引是constant类型且在编译期能被确定的话,就是内置类型,数组也是放在寄存器中。
  4. 寄存器变量是每个线程私有的,一旦thread执行结束,寄存器变量就会失效。寄存器是稀有资源。(省着点用,能让更多的block驻留在SM中,增加Occupancy--maxrregcount 可以设置大小不同设备架构,数量不同

Local Memory:

  1. Registers 不够了,就会用Local Memory 来替代。但是,更多在以下情况,会使用LocalMemory .

  2. 无法确定其索引是否为常量的数组。

  3. 会消耗太多寄存器空间的大型结构或数组。

  4. 如果内核使用了多于可用寄存器的任何变量[这也称为寄存器溢出

  5. 关于local memory的解释,可以参考CUDA优化的冷知识14|local memory你可能不知道的好处 - 知乎

Constant Memory:

  • 固定内存空间驻留在设备内存中,并缓存在固定缓存中 (constant cache) :
  • constant的范围是全局的,针对所有kernel。
  • 在同一个编译单元,constant对所有kernel可见。
  • kernel只能从constant Memory读取数据,因此其初始化必须在host端使用下面的function调用:cudaError_t cudaMemcpyToSymbollconst void* symbol, const void* src,size tcount);当一个warp中所有thread都从同一个Memory地址读取数据时,constant Memory表现会非常好会触发广播机制。

Texture Memory:

  • Texture Memory驻留在device Memory中,并且使用一个只读cache。Texture Mmeory是专门为那些在内存访问模式中存在大量空间局部性 (SpatialLocality) 的图形应用程序而设计的。意思是,在某个计算应用程序中,这意味着一个Thread读取的位置可能与邻近Thread读取的位置“非常接近”Texture Memory实际上也是qlobal Memory在一块,但是他有自己专有的只读cache。纹理内存也是缓存在片上的,因此一些情况下相比从芯片外的DRAM上获取数据,纹理内存可以通过减少内存请求来提高带宽

引用自:《CUDA C 编程指南》导读 - 知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值