Prev_concept

前言

本系列是基于 sonder 的博客内容的学习笔记,既是作为学习记录,也是完善这个难得的高质教程,为后来者铺路。


此文档面向的是 CUDA 编程的新手或希望了解GPU硬件架构的读者,由浅入深阐述 GPU 硬件架构、 CUDA 并行编程模型、基本概念和语言特点,期望在以下方面对读者有所裨益:

  1. 能知道 GPU 一般硬件架构并和软件层进行联系
  2. 能帮助读懂一个复杂 Kernel 的实现逻辑,具备 CUDA 编程思维
  3. 能帮助判断一个 kernel 是计算密集型还是访存密集型
  4. 能掌握部分算子优化方法以及进一步优化方法
  5. 能以此为跳板,具备自主深入调研、系统学习CUDA优化方法论,具备写 Demo 验证的能力

术语释意

设备

主机

SEME(SHARE MEMORY)

CACHE LINE

DRAM

动态随机存取存储器

WARP

纹理内存

指令缓存器

CLK

CUDA 硬件架构

所有的优化出发点都是为了更加高效地压榨硬件性能,因此开始优化之前需要先掌握设备的硬件架构

由于不同的GPU架构不同,SM中的组成单元的类型和数量也会不同,但总体而言相差不是很大(除非硬件架构相差特别大),这里以A100为例进行说明

存储硬件 Part

GPU 中最小的功能单元是 SM(Streaming Multiprocessor,流式多处理器),在 SM 外通过 L2 (cache line 2)以及 Global Memory(DRAM)进行数据交换

SM中包括

  1. 寄存器(register)
  2. cache line 1(简称L1)
  3. share memory
  4. 只读内存(还可以细分)

Register

注意,一个 SM 的寄存器数量是一定的,SM中的寄存器会均分给里面的处理块,每个处理块中的寄存器自有进行分配。

每个 thread 专用,这意味着分配给该线程的寄存器对其他线程不可见,编译器做出有关寄存器利用率的决策(或者在程序中使用关键词、内联汇编等方式自主利用寄存器)。 * L1/Shared memory (SMEM):每个 SM 都有一个快速的 on-chip scratched 存储器,可用作 L1 cache 和 shared memory。CUDA block 中的所有线程可以共享 shared memory,并且在给定 SM 上运行的所有 CUDA Block 可以共享 SM 提供的物理内存资源。

Cache Line 1

Share Memory

只读内存

纹理内存

常量内存

附语

  1. 解释一下为什么空间越小访存越快【可以使用导论中的工厂的例子】

SM 硬件组成

这里阐述 SM 硬件的具体组成

SM 中由一定的处理块组成,从图中可以看见 A100 的一个 SM 由4个处理块组成

可以看见一个 SM 中有:

公用的:

  1. 纹理内存
  2. L1 Data cache 和 share memory(这里是同一硬件的不同名还是不同硬件?)
  3. L1 introduction cache

处理块内私有的:

  1. L0introduction cache
  2. Warp scheduler
  3. dispatch unit
  4. register file

块内的计算硬件:

  1. int32
  2. fp32
  3. fp64
  4. tensor core
  5. LD/ST
  6. SFU

2025年4月15日 创建
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
Copyright 2025-2025 @ Ziyang
Running Time days H M S