GPU架构概述

server/2024/11/14 10:08:17/

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/server/140768.html

相关文章

【UE5】Cesium GlobePawn 如何Fly To

效果 步骤 1. 首先&#xff0c;需要一个Fly To 的目的地&#xff0c;我们新建一个actor蓝图类&#xff0c;这里命名为“BP_CameraView_OriginPlace” 2. 打开“BP_CameraView_OriginPlace”&#xff0c;添加两个组件&#xff0c;分别是Camera和CesiumGlobeAnchor组件。其中&a…

快速开发工具 Vite

快速开发工具 vite 摘要&#xff1a; **概念&#xff1a;**Vite 是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验 **构造&#xff1a;**Vite 主要由一个开发服务器和一套构建指令组成。 Vite底层的服务器转换和转发&#xff1a;以处理ts文件为例 1-读取 forma…

实验三 JDBC数据库操作编程(设计性)

实验三 JDBC数据库操作编程&#xff08;设计性&#xff09; 实验目的 掌握JDBC的数据库编程方法。掌握采用JDBC完成数据库链接、增删改查&#xff0c;以及操作封装的综合应用。实验要求 本实验要求每个同学单独完成&#xff1b;调试程序要记录调试过程中出现的问题及解决办法…

CMake每次编译某一个文件

要确保CMake每次都编译指定的源文件&#xff0c;可以通过自定义目标&#xff08;Custom Target&#xff09;来实现。以下是一个示例&#xff1a; 创建一个CMakeLists.txt文件&#xff0c;并在其中定义一个自定义目标&#xff1a; cmake_minimum_required(VERSION 3.10)projec…

21. 评估架构

文章目录 第21章 评估架构22.1 评估作为一种降低风险的活动21.2 有哪些关键的评估活动&#xff1f;21.3 谁可以进行评估&#xff1f;由架构师进行评估通过同行评审进行评估由外部人员进行评估 21.4 背景因素21.5 架构权衡分析方法ATAM 的参与者ATAM 的产出ATAM 的阶段评估阶段的…

量子物理学以及量子计算

以下笔记学习来自B站泷羽Sec&#xff1a; B站泷羽Sec 1. 量子计算 1.1 量子物理学基础 了解量子力学的基本原理&#xff0c;如量子态、叠加态、纠缠等概念&#xff0c;这是理解量子计算 的基础。 学习量子力学的数学表达&#xff0c;包括波函数、算符等&#xff0c;以便更好…

禁止uni小程序ios端上下拉伸(橡皮筋效果)

可以看到这里是被拉伸的 需要到pages.json文件中把这行加上就可以了 "pages": [{"path": "pages/commodity/commodity","style": {"disableScroll": true, //把这行加上就可以了"navigationBarTitleText": &q…

实战攻略 | ClickHouse优化之FINAL查询加速

【本文作者&#xff1a;擎创科技资深研发 禹鼎侯】 查询时为什么要加FINAL 我们在使用ClickHouse存储数据时&#xff0c;通常会有一些去重的需求&#xff0c;这时候我们可以使用ReplacingMergeTree引擎。这个引擎允许你存储重复数据&#xff0c;但是在merge的时候会根据order …