GPU架构概述

GPU\textbf{GPU}GPU架构与CUDA\textbf{CUDA}CUDA编程模型

1. GPU\textbf{1. }\textbf{GPU}1. GPU体系结构

1️⃣计算单元组织架构

image-20241030201057518
结构功能
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️⃣存储层次架构:
image-20241031001314018

  1. 不同SM\text{SM}SM能够Access\text{Access}Access相同的L2 Cache\text{L2 Cache}L2 Cache
  2. 显存与缓存之间的带宽极高,但是相比GPU\text{GPU}GPU的运算能力仍然有瓶颈

2. \textbf{2. }2. CUDA\textbf{CUDA}CUDA编程模型

1️⃣CUDA\text{CUDA}CUDA程序简述

  1. CUDA\text{CUDA}CUDA程序的两部分
    程序运行位置主要职责
    Host程序CPU\text{CPU}CPU任务管理/数据传输/启动GPU\text{GPU}GPU内核
    Device程序GPU\text{GPU}GPU执行内核/处理数据
  2. 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️⃣线程并行执行架构

  1. 线程层次:
    结构地位功能
    Thread\text{Thread}Thread并行执行最小单元执行Kernel\text{Kernel}Kernel的一段代码
    Warp(32Threads)\text{Warp(32Threads)}Warp(32Threads)线程调度的基本单位所有线程以SIMD\text{SIMD}SIMD方式执行相同指令
    Block\text{Block}BlockGPU\text{GPU}GPU执行线程基本单位使块内线程内存共享/指令同步
    Grid\text{Grid}Grid并行执行的最大单元执行整个内核(启动内核时必启动整个Grid\text{Grid}Grid)
  2. 线程在计算单元的映射:线程层次↔层次对应GPU\xleftrightarrow{层次对应}\text{GPU}层次对应GPU物理架构
    image-20241030230857521
    • 注意SM\text{SM}SMBlock\text{Block}Block不必1v1\text{1v1}1v1对应也可Nv1\text{Nv1}Nv1对应
  3. 线程在存储单元的映射
    线程结构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. CPUGPU\textbf{GPU}GPU

image-20241030175627888

1️⃣CPU/GPU\text{CPU/}\text{GPU}CPU/GPU结构对比

GPU\text{GPU}GPUCPU\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执行大量并行计算任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值