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

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.mrgr.cn/news/65063.html

相关文章:

  • Qt开发技巧(二十二)设置QPA,打开记忆文件,清除表单页注意判断存在性,工程文件去重添加,按钮组的顺序设置,Qt的属性用来传值,查找问题的方法
  • 服务器数据恢复—RAID5阵列硬盘坏道掉线导致存储不可用的数据恢复案例
  • HTB:Shocker[WriteUP]
  • T31开发笔记:简单的Log日记输出
  • 克服奖励欺骗:Meta发布全新后训练方式CGPO,编程水平直升5%,打破RLHF瓶颈
  • 基于JavaWeb的智慧停车管理系统设计与实现(源码+lw+调试+技术指导)
  • 高级java每日一道面试题-2024年10月28日-JVM篇-详细介绍一下CMD垃圾回收器?
  • Vue-Router详解【学习Vue-Router看这一篇就够了!!!】
  • RK3568平台开发系列讲解(SPI篇)SPI 控制器驱动分析
  • 如何使用Get进行状态管理
  • ts:使用typeof运算符输出各对象的类型
  • Linux 信号
  • 算法——递推
  • 各地级市能源消耗量数据-基于灯光数据的反演(2000-2022年)
  • 虚拟内存与物理内存之间的映射关系
  • 无人机场景数据集大全「包含数据标注+划分脚本+训练脚本」 (持续原地更新)
  • 【C++】多态的语法与底层原理
  • Yocto - 使用Yocto开发嵌入式Linux系统_12 开发定制层
  • 基于规则碎纸片的拼接复原模型
  • Nginx 学习指南
  • 清华双臂机器人扩散大模型RDT:先预训练后微调,支持语言、图像、动作多种输入(1B参数)
  • ctfshow(91,96,97)--PHP特性
  • WPF+MVVM案例实战(二十一)- 制作一个侧边弹窗栏(AB类)
  • 基于向量检索的RAG大模型
  • [ shell 脚本实战篇 ] 编写恶意程序实现需求(恶意程序A监测特定目录B出现特定文件C执行恶意操作D-linux)
  • word mathml 创建粗体字母快捷键