当前位置: 首页 > article >正文

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

image-20241030175627888

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执行大量并行计算任务

http://www.kler.cn/a/383094.html

相关文章:

  • 如何解决 ‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的问题
  • 苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
  • SSD目标检测算法
  • C++---------随机库,standfor库
  • 自动驾驶控制算法-横向误差微分方程LQR前馈控制
  • 模型 课题分离
  • python数据分析笔记
  • 如何选择适合TikTok创作者的高性价比专线网络:全方位指南
  • 【算法篇】--重温算法题
  • Pulsargeist:恐怖类型的 XR 大空间项目创新玩法
  • SQL练习专场--01
  • 【glm4-voice-9b 本地运行并测试 gradio+notebook】
  • 探索空间计算与 VR 设备的未来:4K4DGen 高分辨率全景 4D 内容生成系统
  • ssm061基于SSM框架的个人博客网站的设计与实现+vue(论文+源码)_kaic
  • AI 搜索来势汹汹,互联网将被颠覆还是进化?
  • Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
  • 使用 Let’s Encrypt 获取免费SSL证书
  • 城镇住房保障系统:SpringBoot开发要点
  • TLU - Net:一种用于钢材表面缺陷自动检测的深度学习方法
  • c语言架构的一点构想
  • 挂钩图像分割安全状态与危险状态识别系统:更新创新流程
  • 推荐一款可视化和检查原始数据的工具:RawDigger
  • Midjourney从入门到精通教程,10分钟让你从小白变大神!【珍藏版】
  • Bert完形填空
  • Java基础使用①Java特点+环境安装+IDEA使用
  • 求猫用宠物空气净化器推荐,有没有吸毛强、噪音小的产品