GPU\textbf{GPU}GPU架构与CUDA\textbf{CUDA}CUDA编程模型
1. GPU\textbf{1. }\textbf{GPU}1. GPU体系结构
1️⃣计算单元组织架构
![]()
结构 功能 CUDA\text{CUDA}CUDA核心 类似ALU\text{ALU}ALU(但远没CPU\text{CPU}CPU的灵活),可执行浮点运算/张量运算/光线追踪(高级核心) Warp\text{Warp}Warp 多核心共用一个取指/译码器,按SIMT\text{SIMT}SIMT工作(所有线程指令相同/数据可不同) SM\text{SM}SM 包含多组Warps\text{Warps}Warps,所有CUDA\text{CUDA}CUDA核心共用一套执行上下文(缓存)&\&&共享内存 2️⃣存储层次架构:
- 不同SM\text{SM}SM能够Access\text{Access}Access相同的L2 Cache\text{L2 Cache}L2 Cache
- 显存与缓存之间的带宽极高,但是相比GPU\text{GPU}GPU的运算能力仍然有瓶颈
2. \textbf{2. }2. CUDA\textbf{CUDA}CUDA编程模型
1️⃣CUDA\text{CUDA}CUDA程序简述
- CUDA\text{CUDA}CUDA程序的两部分
程序 运行位置 主要职责 Host程序CPU\text{CPU}CPU 任务管理/数据传输/启动GPU\text{GPU}GPU内核 Device程序GPU\text{GPU}GPU 执行内核/处理数据 - Kernel\text{Kernel}Kernel即在GPU\text{GPU}GPU上运行的函数,如下简单内核定义示例
//通过__global__关键字声名内核函数 __global__ void VecAdd(float* A, float* B, float* C) { int i = threadIdx.x; C[i] = A[i] + B[i]; } int main() { //通过<<<...>>>中参数指定执行kernel的CUDA thread数量 VecAdd<<<1, N>>>(A, B, C); }2️⃣线程并行执行架构
- 线程层次:
结构 地位 功能 Thread\text{Thread}Thread 并行执行最小单元 执行Kernel\text{Kernel}Kernel的一段代码 Warp(32Threads)\text{Warp(32Threads)}Warp(32Threads) 线程调度的基本单位 所有线程以SIMD\text{SIMD}SIMD方式执行相同指令 Block\text{Block}Block GPU\text{GPU}GPU执行线程基本单位 使块内线程内存共享/指令同步 Grid\text{Grid}Grid 并行执行的最大单元 执行整个内核(启动内核时必启动整个Grid\text{Grid}Grid) - 线程在计算单元的映射:线程层次↔层次对应GPU\xleftrightarrow{层次对应}\text{GPU}层次对应GPU物理架构
![]()
- 注意SM\text{SM}SM和Block\text{Block}Block不必1v1\text{1v1}1v1对应也可Nv1\text{Nv1}Nv1对应
- 线程在存储单元的映射
线程结构 可Access\textbf{Access}Access的内存结构 访问速度 Thread\text{Thread}Thread 每线程唯一的Local Memory\text{Local Memory}Local Memory 极快 Block\text{Block}Block 每块唯一的Shared Memory\text{Shared Memory}Shared Memory(块中每个线程都可访问) 较快 所有线程 唯一且共享的Global Memory\text{Global Memory}Global Memory 较慢
3. CPU\textbf{3. CPU}3. CPU与GPU\textbf{GPU}GPU
![]()
1️⃣CPU/GPU\text{CPU/}\text{GPU}CPU/GPU结构对比
GPU\text{GPU}GPU CPU\text{CPU}CPU ALU\text{ALU}ALU 功能强但数量少(只占GPU\text{GPU}GPU小部),时钟频率极高 功能弱但数量大,时钟频率低 Cache\text{Cache}Cache 容量大并分级,缓存后续访问数据 容量很小,用于提高线程服务 控制 复杂串行逻辑,如流水/分支预测/乱序执行 简单(但大规模)并行逻辑 3️⃣CPU↔数据/指令传输PCIeGPU\text{CPU} \xleftrightarrow[数据/指令传输]{\text{PCIe}} \text{GPU}CPUPCIe数据/指令传输GPU交互
设备 逻辑地位 IO\textbf{IO}IO模块 任务分配 GPU\text{GPU}GPU 外设 IO Block\text{IO Block}IO Block(南桥) 控制逻辑和任务调度 CPU\text{CPU}CPU 主机 Copy Engine\text{Copy Engine}Copy Engine 执行大量并行计算任务


5275

被折叠的 条评论
为什么被折叠?



