GPU架构概述

ops/2024/11/14 5:24:51/

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.ppmy.cn/ops/132509.html

相关文章

ArcGIS Pro SDK (二十二)订阅和搜索

ArcGIS Pro SDK (二十二)订阅和搜索 文章目录 ArcGIS Pro SDK (二十二)订阅和搜索1 搜索和订阅流数据2 搜索和订阅取消3 显式取消等待行异步环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0 1 搜索和订阅流数据 await QueuedTask.Run(async () => {// 查询过滤…

新手用docker真**难受

用Ubuntu镜像创建能够运行的容器&#xff1a; 我就想用直接pull下来的Ubuntu镜像生成个容器跑起来都十分艰难网上什么也查不到全是**AI生成的博文现在的博客咋都这*样了 docker run -i -t --name [NAME] -p 8080:3000 [IMAGENAME]:[IMAGETAG] bash[NAME]代表容器名字[IMAGENA…

MySQL 性能优化策略:提升响应速度与系统稳定性

文章目录 MySQL 性能优化策略&#xff1a;提升响应速度与系统稳定性查询优化&#xff1a;让每一次查询更高效合理使用索引&#xff1a;加速数据检索优化查询语句&#xff1a;避免不必要的操作分页查询优化&#xff1a;避免全表扫描临时表和缓存的合理使用死锁和锁等待的优化 索…

qt creator开发一个Linux 下运行的无界面的程序

安装 Qt 和 Qt Creator 确保你已经安装了 Qt 和 Qt Creator。如果没有&#xff0c;按以下步骤安装&#xff1a; 在 Ubuntu 上安装 Qt 和 Qt Creator&#xff1a; sudo apt update sudo apt install qtcreator qtbase5-dev在其他 Linux 系统上&#xff1a; 请参考 Qt 官网 或系…

Centos 7离线安装ntpd服务

本文涉及一次Centos 7系统中离线安装ntpd对时服务的过程&#xff0c;其目的是为了在服务器运行过程中能够实时同步时间。 问题提出 某服务器需部署业务程序&#xff0c;这些程序的部署脚本是我初创的&#xff0c;后因其它事转交给其他人&#xff0c;后再因其它事又兜兜转转到了…

ai辅助开发一个简单的在线购物网站

我们可以从一个具体的例子出发&#xff0c;假设我们要开发一个简单的在线购物网站&#xff0c;我们将从以下几个方面进行讨论&#xff1a; 1. 项目概述 项目名称&#xff1a;E-Commerce Web Application 主要功能&#xff1a; 用户注册和登录商品浏览和搜索购物车管理订单管…

六、鸿蒙开发-导航组件、定时器组件、动画

提示&#xff1a;本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、定时器1.1 参数1.2 事件 二、导航组件2.1 概述2.2 导航栏样式2.2.1 导航栏位置2.2.2…

51单片机 定时器详解

51单片机定时器详解 在 51 单片机中&#xff0c;定时器/计数器&#xff08;Timer/Counter&#xff09;是一个非常重要的功能模块&#xff0c;用于处理定时、计数和事件触发等任务。定时器可以在应用程序中产生周期性中断&#xff0c;常用于精确的时间延迟、事件计数等场合。本…