gpu硬件架构

1.简介

在这里插入图片描述

NVIDIA在视觉计算和人工智能(AI)领域处于领先地位;其旗舰GPU已成为解决包括高性能计算和人工智能在内的各个领域复杂计算挑战所不可或缺的。虽然它们的规格经常被讨论,但很难掌握各种组件的清晰完整的图景。

这些GPU的高性能源于其许多组件的无缝集成,每个组件在提供顶级结果方面都发挥着至关重要的作用。
本篇文章将对NVIDIA GPU的每个组件进行详细的介绍,从架构和图形处理集群(GPC)到单个核心。另外还有确保高效数据访问的复杂内存层次结构。

2.nvidia GPU架构

NVIDIA GPU采用分层结构设计,可高效处理复杂的图形和计算工作。这种结构可以被视为一个金字塔,每个层次代表一个不同的组织层次。
网格位于层次结构的顶部,代表整个GPU及其资源。以下是它的外观:
A100 GPU

2.1 GPC (Graphics Processing Cluster)

GPCs代表了GPU的高层组织结构
它们对在整个芯片上进行分发工作负载和管理资源起着至关重要的作用。每个GPC可以独立工作并有独立的TPCs(Texture Processing Clusters), SMs(Streaming Multiprocessors), 和共享资源,从而可以高效地进行工作分配和资源管理。

GPU中的GPC数量因特定型号及其预期用途而异。专为游戏、专业渲染和复杂计算工作负载等高要求任务设计的高端GPU通常具有更多的GPC来处理更大的并行处理需求。相反,为低强度任务构建的低端GPU具有较少的GPC。
在这里插入图片描述
这种架构设计允许GPU根据不同应用程序和工作负载的要求高效地扩展性能。
现在,让我们讨论一下TPC。

2.2 TPC (Texture Processing Clusters)

TPC负责执行核心绘图功能相关的构成我们在屏幕上看到的视觉体验的工作负载。他们处理以下任务:

  • 顶点着色:变换三维顶点
  • 将坐标转换为2D屏幕坐标。
  • 纹理映射:将纹理(图像)应用于3D模型。
  • 光栅化:将多边形转换为像素进行显示。

每个TPC都包含多个SM,它们是GPU的主力,并行执行这些任务。它们还包含以下内容:
在这里插入图片描述

纹理单元(TMU)

这些单元处理与纹理映射相关的任务,例如从内存中获取纹理数据、过滤以及将纹理应用于像素或顶点。它们确保纹理正确映射到3D模型上,以创建详细逼真的图像。

L1缓存

一种存储频繁访问的纹理数据和指令的小型快速内存缓存。这有助于减少延迟并提高纹理处理操作的效率。

共享内存

TPC使用共享内存来实现集群内纹理单元和SM之间的高效数据共享。这种共享内存对于高性能纹理映射和过滤操作非常重要。

特殊功能单元(SFU)

TPC中的SFU专门针对纹理映射和渲染操作进行了优化。它们处理复杂的数学函数,但更侧重于纹理处理所需的任务。

光栅引擎

光栅引擎将矢量图形(如3D模型)转换为光栅图像(像素)。它在渲染的最后阶段起着至关重要的作用,决定了如何将纹理应用于屏幕上的单个像素。

在这里插入图片描述

纹理缓存

这些缓存将纹理数据存储在纹理单元附近,以尽量减少从主存储器获取这些数据所需的时间。它们通过减少内存访问延迟来帮助加快纹理映射过程

2.3 流式多处理器(SM)

SM是GPU中的基本处理单元
GPU中SM的数量是决定其整体性能的关键因素。例如,RTX A5000是一款通用GPU,有64个SM,而针对深度学习进行优化的NVIDIA H100有168个SM。以下是其组件的详细分解:

  • 指令缓存(I-Cache):存储SM要执行的指令,通过将频繁使用的指令保持在执行单元附近,实现快速访问并减少延迟。
  • 多线程问题(MT问题):处理向SM内的各个执行单元分派指令。它同时管理多个线程,优化可用计算资源的使用。
  • 常量缓存(C-Cache):此缓存存储在执行过程中不会改变的常量数据。它允许线程快速访问这些常数值。
    在这里插入图片描述
  • 流处理器/CUDA核心(SP):SP,也称为CUDA核心,是SM中负责执行大部分算术运算(例如浮点和整数运算)的核心。多个SP单元支持指令的并行处理。
  • 特殊功能单元(SFU):SM还具有SFU,可以处理更复杂的数学函数,如三角计算、指数和其他比标准算术运算计算量更大的特殊函数。
  • 双精度单位(DP):这些单位处理双精度浮点运算,这对于需要高数值精度的应用程序(如科学计算和模拟)至关重要。
  • 共享内存:与TPC一样,SM也使用共享内存,这是一种可由SM内所有线程访问的快速片上内存。它允许线程之间高效的数据共享和协调,显著加快了需要频繁数据交换的计算速度。

现代GPU中的SM通常包含额外的内核和专用单元,其中可能包括:

  • L1缓存:一种小型、快速的内存缓存,在SM内核附近存储频繁访问的数据和指令,以减少访问时间。
  • 寄存器:每个SM内的高速存储位置专用于存储活动线程的临时数据,允许在计算过程中快速访问。
  • Tensor核心:专门用于深度学习和人工智能任务,执行神经网络训练和推理所必需的矩阵运算​​.
  • 光线跟踪核心(RT核心):专门用于处理光线跟踪计算,提供真实照明、阴影和反射的实时渲染。

GPU中的每个SM都集成了这些组件,以高效地执行各种并行处理任务,平衡通用计算与图形、人工智能和其他要求苛刻的工作负载的专门处理。
在接下来的部分中,我们将深入探讨SM的各个组件,探索CUDA内核、RT内核、Tensor内核和共享内存如何协同工作,以提供NVIDIA GPU所闻名的令人印象深刻的性能。

3. cuda core

NVIDIA GPU从多个CUDA内核中获得卓越的计算能力。这些内核是GPU上并行处理的构建块,使它们能够擅长需要大量计算吞吐量的任务。
以下是典型CUDA Core中关键组件的细分:

算术逻辑单元(ALU):

  • 整数单位:对整数数据类型执行整数算术运算(加法、减法、乘法、除法)。
  • 浮点单元(FPU):对浮点数据类型(例如单精度FP32和半精度FP16)执行浮点算术运算(加法、减法、乘法、除法)

寄存器文件:

  • 寄存器:CUDA核心中的一小部分高速存储位置,用于保存操作数(输入数据)和计算结果。这些寄存器对于在计算过程中快速访问数据至关重要。

指令解码器:

  • 解码指令:接收传入的机器代码指令,并将其解码为ALU可以执行的微操作。

控制逻辑:

  • 控制执行:通过CUDA核心管理指令和数据流,确保操作按正确的顺序执行,并正确存储结果。

装载/储存单位:

  • 内存访问:处理将数据从内存加载到寄存器并将结果存储回内存。该单元负责与GPU的内存层次结构(共享内存、L1缓存、全局内存)进行交互。

在这里插入图片描述

附加组件(可选):

  • 特殊功能单元(SFU):一些CUDA内核可能有一个专用的SFU,用于加速特定的数学函数,如正弦、余弦、指数、倒数等。
  • 分支单元:处理条件分支指令,允许CUDA Core根据比较结果采取不同的执行路径。

3.1 cuda core工作原理

GPU上的基本执行单元是线程。流式多处理器(SM)中的每个CUDA核心一次可以执行一个线程。线程被组织成32个一组的组,称为warp,它们在SM上同时调度和执行。
线程也可以被分组为称为块的较大单元,这使得线程之间能够进行协作和数据共享。一个块被分配给一个SM,该块内的线程共享SM上的资源,包括寄存器和共享内存。如果一个块的线程数多于SM的CUDA核心,则线程将被划分为warp,并在CUDA核心可用时计划执行warp。

CUDA内核在单指令多线程(SIMT)架构下运行,这意味着warp中的所有32个线程都执行相同的指令,并行但在不同的数据元素上。这最大限度地提高了单指令多数据(SIMD)并行性,即单个指令同时对多个数据点进行操作,从而可以高效处理大型工作负载。

GPC中的GPU调度器负责将warp分配给可用的SM以供执行。当warp遇到长延迟操作(如内存访问)时,调度器可以切换到另一个准备执行的warp,防止延迟并最大限度地提高吞吐量
这种动态调度确保了GPU的资源得到有效利用,即使在处理具有不同执行时间的任务时也是如此。

GPU中CUDA核心的数量可以从数百个到数千个不等,具体取决于GPU型号及其预期应用场景。除了标准CUDA内核外,现代NVIDIA GPU还具有专为特定任务设计的专用核心。让我们深入探讨这些专用核心及其在增强GPU功能方面的作用。

4.用于光线追踪和人工智能的专用内核

虽然CUDA核心构成了GPU处理的支柱,但现代NVIDIA GPU已经发展到包括旨在加速特定工作负载的专用核心。这些专门的核心,即RT核心和Tensor核心,彻底改变了实时光线追踪和人工智能应用,突破了图形和计算的极限。
首先,我们将讨论RT核心。

4.1 RT cores

4.2 Tensor cores

NVIDIA的Tensor Core是专门用于加速深度学习操作的处理单元。它们被优化用于执行矩阵乘法和卷积,这是深度神经网络的基本构建块。Tensor Core可以使用单精度和半精度浮点数的组合以混合精度执行这些操作,从而在不牺牲精度的情况下显著提高吞吐量。

在这里插入图片描述
下面介绍tensor core的组件:

  • 矩阵乘法累加(MMA)单位:这些是张量核心中的核心计算单位。每个MMA单元可以在单个时钟周期内执行4x4矩阵乘法累加操作。多个MMA单元并行工作,以加速大型矩阵操作。
  • warp调度器:这些单元调度和管理Tensor核心上warp(线程组)的执行。它们确保MMA单元保持忙碌,并优化数据流以实现高效计算
  • 寄存器和共享内存:Tensor核心可以访问高速寄存器和共享存储器,用于存储warp内线程之间共享的中间结果和数据。
  • 混合精度支持:Tensor Core支持混合精度计算,这意味着它们可以使用不同的数值格式(例如FP16、FP32、INT8、INT4)进行计算。这种灵活性平衡了计算速度和准确性,因为深度学习模型通常不需要对所有操作都有极高的精度要求。

在这里插入图片描述

专用单元(可选):新一代Tensor核心可能包括其他专用单元,例如:
  • 稀疏引擎:这些单元加速了对具有许多零元素的稀疏矩阵的操作。
  • Transformer引擎:这些单元经过优化,可以加速基于Transformer的模型中的注意力机制,这些模型通常用于自然语言处理。

让我们一步一步地分解Tensor Core的工作方式,突出它们在加速深度学习和人工智能基础的矩阵运算方面的作用:

1.输入数据准备:
  • 数据加载:输入数据通常以矩阵形式(例如,表示图像、文本或其他数字特征)加载到GPU的内存中。
  • 数据转换(可选):如果输入数据采用更高精度的格式,如FP32(32位浮点),则可能会转换为较低精度的格式(如FP16(16位浮点)),以使用Tensor Core的混合精度功能。这一步是可选的,取决于特定的深度学习框架和模型。
2.矩阵运算调度:
  • 操作识别:深度学习框架识别需要执行的矩阵乘法和累加(MMA)操作。
  • 任务调度:该框架在可用的Tensor核心上调度这些MMA操作。
3. Tensor核心操作:
  • 数据提取:Tensor核心从GPU的内存中提取相关的数据元素(矩阵值)。
  • 矩阵乘法:每个Tensor Core对提取的数据执行4x4矩阵乘法运算。这意味着它将两个4x4矩阵相乘,得到一个4x4结果矩阵。
  • 累加:张量核累加多个4x4矩阵乘法的结果,以计算更大矩阵乘法运算的最终结果。
  • 输出:MMA操作的结果被存储回GPU的内存中。

在这里插入图片描述

4.混合精密处理(可选):

这一步不会发生在所有GPU和AI模型上,但如果发生了,它的工作原理如下:

  • FP16累加:如果输入数据被转换为FP16,则结果的累加通常在FP16中完成,以实现更快的计算。
  • FP32转换:在FP16中累积后,如果深度学习模型需要,最终结果可以转换回FP32以获得更高的精度。
5.迭代和完成:
  • 重复执行:对所有预定的MMA操作重复步骤3和4,直到整个深度学习计算完成。

Tensor Core已成为加速深度学习研究和开发的重要工具。它们实现了更大、更复杂的训练模型,在各个领域取得了突破。
例如,在自然语言处理中,Tensor Core为GPT-3等大型语言模型的开发提供了动力,GPT-3可以生成类人文本、翻译语言,甚至编写代码。
NVIDIA GPU中RT核心和Tensor核心的结合开创了加速计算的新时代,实现了实时光线追踪和更快的AI训练和推理。

5. 内存架构与管理

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/938728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】显示类控件:QLabel、QLCDNumber、QProgressBar、QCalendarWidget

目录 QLabel QFrame 例子: textFormat pixmap、scaledContents alignment wordWrap、indent、margin buddy QLCDNumber 例子: QTimer QProgressBar 例子: QCalendarWidget 例子: QLabel 标签控件,用来显示…

0001.基于springmvc简易酒店管理系统后台

一.系统架构 springmvcjsplayuimysql 二.功能特性 简单易学习,虽然版本比较老但是部署方便,tomcat环境即可启用;代码简洁,前后端代码提供可统一学习;祝愿您能成尽快为一位合格的程序员,愿世界没有BUG; …

Wallpaper壁纸制作学习记录12

角色表 创建人偶变形动画的更高级方法可以使用角色表来完成。角色表要求您使用角色的切割版本,将您的角色分成不同肢体/部分。这允许创建更复杂、更准确的动画,因为部分可以自由移动和重叠,而不会使图像失真。使用操控变形不一定能获得良好的…

【Python项目】基于Django的语音和背景音乐分离系统

【Python项目】基于Django的语音和背景音乐分离系统 技术简介:采用Python技术、Django框架、B/S结构,MYSQL数据库等实现。 系统简介:系统完成在线的音频上传,并且通过计算机的神经网络算法来对系统中的背景音乐和人声进行分离操作…

负载均衡oj项目:介绍

目录 项目介绍 项目演示 项目介绍 负载均衡oj是一个基于bs模式的项目。 用户使用浏览器向oj模块提交代码,oj模块会在所有在线的后端主机中选择一个负载情况最低的主机,将用户的代码提交给该主机,该主机进行编译运行,将结果返回…

【鸿睿创智开发板试用】移植OpenCV 4到OpenHarmony 4.1

目录 目录 引言 编译系统镜像 (1) 下载代码后解压SDK (2) 下载docker镜像   (3) 编译OH 编译OpenCV 下载OpenCV源代码 构建编译配置文件 执行编译命令 安装库和头文件 测试 结语 引言 最近有个需求是在基于RK3568的OpenHarmony 4.1系统中使用OpenCV&#xff0c…

【HarmonyOS之旅】HarmonyOS开发基础知识(一)

目录 1 -> 应用基础知识 1.1 -> 用户应用程序 1.2 -> 用户应用程序包结构 1.3 -> Ability 1.4 -> 库文件 1.5 -> 资源文件 1.6 -> 配置文件 1.7 -> pack.info 1.8 -> HAR 2 -> 配置文件简介 2.1 -> 配置文件的组成 3 -> 配置文…

【机器人】Graspness 端到端抓取点估计 | 环境搭建 | 模型推理测试

在复杂场景中实现抓取检测,Graspness是一种端到端的方法; 输入点云数据,输出抓取角度、抓取深度、夹具宽度等信息。 开源地址:https://github.com/rhett-chen/graspness_implementation?tabreadme-ov-file 论文地址&#xff1…

B站bilibili视频转文字字幕下载方法

本文将讲述介绍一种使用本地工具如何快速的下载B站的字幕为本地文本文件的方法。 通常获取B站字幕需要在浏览器中安装第三方插件,通过插件获取字幕。随着大模型,生成式AI,ChatGPT的应用,B站也提供了AI小助手对视频的内容进行总结…

CSS3 实现火焰-小火苗效果

创建 CSS3 火焰效果可以通过组合 CSS 动画、伪元素 和 渐变 来实现。以下是一个简单的实现步骤&#xff0c;展示如何制作动态火焰效果 1. HTML 结构 我们只需要一个简单的 div 容器&#xff1a; <div class"fire"></div>2. CSS 实现 基础样式 使用 …

新能源汽车充电需求攀升,智慧移动充电服务有哪些实际应用场景?

在新能源汽车行业迅猛发展的今天&#xff0c;智慧充电桩作为支持这一变革的关键基础设施&#xff0c;正在多个实际应用场景中发挥着重要作用。从公共停车场到高速公路服务区&#xff0c;从企业园区到住宅小区&#xff0c;智慧充电桩不仅提供了便捷的充电服务&#xff0c;还通过…

git remote -v(--verbose)显示你的 Git 仓库配置的远程仓库的详细信息

git remote -v 是一个 Git 命令&#xff0c;用于显示你的 Git 仓库配置的远程仓库的详细信息。 当你执行 git remote -v 命令时&#xff0c;你会看到类似以下的输出&#xff1a; origin https://github.com/your-username/your-repo.git (fetch) origin https://github.com…

Java Web项目部署教程简单实用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

【爬虫一】python爬虫基础合集一

【爬虫一】python爬虫基础合集一 1. 网络请求了解1.1. 请求的类型1.2. 网络请求协议1.3. 网络请求过程简单图解1.4. 网络请求Headers(其中的关键字释义)&#xff1a;请求头、响应头 2. 网络爬虫的基本工作节点2.1. 了解简单网络请求获取响应数据的过程所涉及要点 1. 网络请求了…

清理C盘小记

突然C盘就爆满了&#xff0c;想当初还是给他预留了120G的空间&#xff0c;感觉到现在也不够用了&#xff0c;担心出现死机的情况就赶紧进行了清理。有一说一&#xff0c;清理回收站是真的有用。 参考&#xff1a;C盘清理指南&#xff0c;清理出30G起&#xff0c;超详细总结&am…

Ansible playbook 详解与实战操作

一、概述 playbook 与 ad-hoc 相比,是一种完全不同的运用 ansible 的方式&#xff0c;类似与 saltstack 的 state 状态文件。ad-hoc 无法持久使用&#xff0c;playbook 可以持久使用。 playbook 是由一个或多个 play 组成的列表&#xff0c;play 的主要功能在于将事先归并为一…

seata-2阶段提交-笔记3

本文属于B站图灵课堂springcloud笔记系列。 前面整理过2篇:seata 2阶段提交实现代码-笔记1-CSDN博客 扫描GlobalTransactional注解 seata 2阶段提交实现代码-笔记2-CSDN博客 TC生成XID&#xff0c;并保存到global_table表。 本篇继续整理 执行业务逻辑&#xff0c;提交本地…

Docker如何运行一个Java的jar包程序

Docker如何运行一个Java的jar包程序 1、jar包程序 2、start.sh运行jar包脚本 #!/bin/bash #进入目录 cd /app #1.下载SDK并安装 java -jar SDKDown1.4.jar #2.加载环境变量 export LD_LIBRARY_PATH/opt/casb/CipherSuiteSdk_linux/lib echo $LD_LIBRARY_PATH #3.执行SDK java …

Pycharm访问MongoDB数据库

MongoDB的基础操作 1. 创建连接 #导入pymongo中的用于操作数据库的客户端 from pymongo import MongoClient #创建客户端对象&#xff0c;连接MongoDB服务器 client MongoClient(mongodb://admin:admin123456localhost:27017) 2. 数据的增删改查 2.1 数据的写入 from mon…

【Python】编写一个函数,将指定的罗马字符转换为数字的形式。

#编写一个函数&#xff0c;将指定的罗马字符转换为数字的形式。R2N {I:1, V:5, X:10, L:50, C:100, D:500, M:1000}def roman2num(s):r 0n len(s)for i, ch in enumerate(s):v R2N[ch]if i < n-1 and v < R2N[s[i1]]:r - velse:r vreturn r;s input("请输入一…