GPU架构概述

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️⃣存储层次架构:

  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上运行的函数,如下简单内核定义示例

    c++ 复制代码
    //通过__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} Block GPU \text{GPU} GPU执行线程基本单位 使块内线程内存共享/指令同步
    Grid \text{Grid} Grid 并行执行的最大单元 执行整个内核(启动内核时必启动整个 Grid \text{Grid} Grid)
  2. 线程在计算单元的映射:线程层次 ↔ 层次对应 GPU \xleftrightarrow{层次对应}\text{GPU} 层次对应 GPU物理架构

    • 注意 SM \text{SM} SM和 Block \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. 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 ↔ 数据 / 指令传输 PCIe GPU \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 执行大量并行计算任务
相关推荐
想用offer打牌7 小时前
RocketMQ如何防止消息丢失?
java·后端·架构·开源·rocketmq
嗝o゚8 小时前
鱼与熊掌可兼得?用Flutter+鸿蒙的混合架构破解性能与UI的世纪难题
flutter·架构·harmonyos
小小测试开发9 小时前
提升App UI自动化性能与效率:从脚本到架构的全链路优化指南
ui·架构·自动化
黄俊懿9 小时前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——@GlobalTransactional注解与@globalLock生效的原理
java·spring cloud·微服务·云原生·架构·系统架构·架构师
黄俊懿11 小时前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——开启全局事务
java·数据库·spring·spring cloud·微服务·架构·架构师
宇擎智脑科技11 小时前
Flutter 对接高德地图 SDK 适配鸿蒙踩坑记录与通信架构解析
flutter·架构·harmonyos
Xの哲學12 小时前
Linux DRM 架构深度解析
linux·服务器·算法·架构·边缘计算
Tezign_space12 小时前
抖音AI运营工具技术实践:特赞内容矩阵架构与300%效率提升方案
人工智能·架构·aigc·内容运营·抖音·ai营销工具·特赞
亿坊电商12 小时前
无人共享茶室智慧化破局:24H智能接单系统的架构实践与运营全景!
大数据·人工智能·架构
martinzh13 小时前
AI工具选择困难症?Spring AI帮你省掉64%的令牌费用
架构