news 2026/1/9 3:51:22

GPU架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GPU架构

📘 GPU 架构与计算原理:全景深度学习笔记

适用对象:希望从底层原理理解 GPU 运作机制的开发者/硬件爱好者。
核心隐喻:将 GPU 视为一个高度并行化的“超级工厂”。


第一章:宏观架构 (The Macro Structure)

从上帝视角俯瞰显卡芯片。

1. GPC (Graphics Processing Cluster) - 图形处理集群

  • 定义:显卡内部最高级别的硬件物理分组,相当于工厂的**“独立分厂”**。
  • 关键组件
    • 光栅化引擎 (Raster Engine)【核心特征】只有 GPC 这一层级拥有。它负责将 3D 的三角形网格“拍扁”并离散化为屏幕上的 2D 像素点。
  • 重要性
    • GPC 的数量直接决定了显卡的几何处理能力(每秒能生成多少个三角形)和像素填充率
    • 关于“阉割”:RTX 4090 芯片(AD102)物理上有 12 个 GPC,但为了良品率屏蔽了部分,实际开启 11 个。每少一个 GPC,不仅少了核心,还少了一组光栅引擎,这在高分辨率、高多边形场景下影响巨大。

2. TPC (Texture Processing Cluster) - 纹理处理集群

  • 定义:介于 GPC 和 SM 之间的中间层,相当于**“流水线专区”**。
  • 功能:主要包含PolyMorph Engine (多形体引擎),负责顶点获取、曲面细分(Tessellation)等几何形变工作。它为下面的 SM 准备数据。

3. SM (Streaming Multiprocessor) - 流式多处理器

  • 定义:GPU 的最小独立战术单元,相当于**“全能生产小组”**。显卡的算力强弱主要看有多少个 SM。
  • 设计哲学
    • 去中心化:GPU 没有一个超强的中央大脑,而是把管理权下放给 SM。
    • 资源池化:SM 内部有独立的调度器、寄存器、缓存,保证小组内自给自足,减少对外通讯。

第二章:SM 内部解剖 (Inside the SM)

深入“生产小组”内部,看看有哪些关键设备。

1. 核心控制组件

  • Warp Scheduler (线程束调度器)“包工头”
    • 补充知识:现代 SM(如 Ada 架构)通常会被切分为 4 个区块(SMSP),每个区块都有自己的调度器。这意味着一个 SM 在一个时钟周期内,可以同时发射 4 条指令给不同的核心群。
  • Register File (寄存器文件)“工人的随身腰包”
    • 补充知识:这是 GPU 里速度最快的存储空间,也是最大的成本之一。每个 SM 拥有海量的寄存器(如 64K 个 32-bit 寄存器)。
    • 作用:每个线程的私有变量都存在这里。寄存器够大,才能容纳成千上万个线程同时“驻扎”在 SM 里,这是实现零开销切换的物理基础。

2. 共享资源

  • L1 Cache / Shared Memory“小组公共桌”
    • 这是一块超高速内存。在现代架构中,L1 缓存和共享内存通常是统一编址的(比如总共 128KB,程序员可以配置 64KB 做缓存,64KB 做共享内存)。
    • 用途:同一个 Block 内的线程通过这里交换数据,不需要经过显存。

1. CUDA Core:全能型通用工人

“什么脏活累活都能干,显卡的中流砥柱”

  • 它的作用:
    • 它是最基础、数量最多的核心。
    • 负责处理通用计算任务,做简单的加减乘除和逻辑判断。
    • 在游戏中,它负责算出哪里是墙、哪里是人、颜色是什么(光栅化渲染)。
  • 什么场景会用:
    • 几乎所有场景:只要显卡在工作,CUDA Core 就在干活。
    • 传统游戏:CS:GO、LOL 等不带光追的游戏,主要靠它。
    • 视频剪辑:Premiere、DaVinci 里的加速渲染。
    • 数学计算:挖矿、普通的科学计算。
      虽然“加减乘除”确实是 CUDA Core 最主要的工作(占了大约 90% 的时间),但如果它只会算术,显卡是没法运行复杂的游戏和程序的。严格来说,一个CUDA Core(或者更准确地说是显卡 SM 里的执行单元)还必须具备以下几项关键能力,才能构成一个完整的计算单元:
1. 逻辑与位运算能力 (Logic & Bitwise)

这是除了算术之外最重要的一类操作。CUDA Core 必须能处理:

  • 逻辑判断:AND(与)、OR(或)、NOT(非)、XOR(异或)。
  • 位移操作:把二进制数左移或右移。
  • 为什么这很重要?
    • 游戏里:判断“子弹是否打中人”本质上是一连串的逻辑对比(If A > B)。
    • 加密/挖矿:哈希算法(Hash)大量依赖“异或”和“位移”操作,而不是简单的加减乘除。
2. 特殊函数运算 (Special Functions)

虽然简单的 CUDA Core 主要算线性数学,但在它们旁边通常配有SFU (Special Function Units,特殊函数单元)

  • 负责内容:计算sin(正弦)、cos(余弦)、log(对数)、exp(指数)、sqrt(开方) 等。
  • 场景:游戏里的水波纹模拟、光照衰减计算,全靠这些复杂的超越函数。虽然 SFU 有时被视为独立单元,但在概念上它们是 CUDA 计算流程的一部分。
3. 乘加融合 (FMA - Fused Multiply-Add)

这是 CUDA Core 的看家本领,也是显卡比 CPU 算得快的重要原因之一。
它不单单是做加法或乘法,而是一个指令完成A×B+CA \times B + CA×B+C

  • 为什么厉害:传统做法是“先乘,存起来,再加”,要两步。FMA 只需要一步,而且精度更高(中间结果不四舍五入)。这对 3D 图形渲染(矩阵运算)至关重要。
4. 整数与浮点数的分离 (INT32 & FP32)

在现代显卡(比如 RTX 30/40 系列)中,CUDA Core 的内部构造其实被“劈开”了:

  • FP32 单元:专门算小数(浮点数)。比如算出这个像素的红色亮度是 0.753。
  • INT32 单元:专门算整数。
  • 作用:主要用于地址寻址。比如“去显存第 1024 号房间取数据”,这个“1024”是整数。
  • 并发执行:以前的显卡(如 Pascal 架构),算整数时就不能算小数。现在的显卡可以一边算像素颜色(FP32),一边算下一个数据的地址(INT32),效率大增。

2. Tensor Core:AI 数学专家

“算盘打得飞快,专门处理人工智能的大数据”

  • 它的作用:
    • 专门针对**“矩阵运算”**设计。AI 和深度学习(Deep Learning)的本质就是无数个巨大的矩阵在相乘。
    • CUDA Core 也能算矩阵,但它是“一步算一个数”;Tensor Core 是“一步算一块数(4x4矩阵)”,效率是 CUDA Core 的几十倍甚至上百倍。
    • 它支持“混合精度计算”(比如用低精度换取极高速度),这对 AI 来说非常划算。
  • 什么场景会用:
    • DLSS(深度学习超级采样):玩游戏时,显卡先渲染低分辨率画面(减轻负担),然后用 Tensor Core 靠 AI 把它“脑补”成高清晰度画面,帧数直接翻倍。
    • AI 绘图/聊天:在本地跑 Stable Diffusion(画图)或 Llama(大语言模型)时,主要靠它加速。
    • 专业 AI 训练:像训练 ChatGPT 这种大模型,完全依赖它。

3. RT Core (Ray Tracing Core):光线追踪专家

“专门负责计算光线怎么反弹的物理学家”

  • 它的作用:
    • 专门计算**“光线和物体相交”**。
    • 在模拟真实世界光照时,需要计算数亿条光线射出去后打到了什么物体、反射到哪里。
    • 如果没有 RT Core,这个工作得扔给 CUDA Core 做,但 CUDA Core 做这个效率极低(就像让搬砖工人去解微积分),游戏会卡成 PPT。RT Core 专门内置了计算光线碰撞的硬件电路。
  • 什么场景会用:
    • 光追游戏:开启“光线追踪(Ray Tracing)”选项的游戏,比如《赛博朋克 2077》、《黑神话:悟空》。
    • 看到真实反射:比如地上的水坑倒映出霓虹灯、镜子里看到主角、阴影极其真实软润。
    • 3D 渲染:Blender、C4D 渲染器(如 Octane, Redshift)在预览时,能瞬间看到真实光影。

第四章:执行模型与 SIMT (The Soul of GPU)

软件层面的“指令”如何转化为硬件层面的“动作”。

1. Thread Block(线程块):软件上的“班级”

概念:这是程序员(你)在写代码时定义的逻辑分组
当你给 GPU 布置任务时,你不能说“给我运行 10,000 个线程”,这样太乱了。你必须把这 10,000 个线程打包成一个个小方块,这就是 Thread Block。

  • 它的特点
    • 资源共享:同一个 Block 里的线程,可以互相“说话”(通过共享内存 Shared Memory 通信),也可以互相“等一等”(同步)。
    • 驻扎地:一个 Block 一旦分配给了一个SM(流式多处理器,刚才说的车间),它就会一直在这个 SM 上待到运行结束,不会跑去别的 SM。
    • 大小限制:一个 Block 里最多包含 1024 个线程(不同架构略有不同,但通常是这个数)。

类比
Thread Block 就像是一个**“旅游团”**。
导游(程序员)把游客分成了好几个团。同一个团的人住在同一个酒店(SM),大家可以在大堂(共享内存)里交换信息。

2. Warp(线程束):硬件上的“步伐”

概念:这是显卡硬件(SM)在真正干活时的执行单位
虽然你在软件里定义了一个 Block 有 1024 个线程,但 SM 并不是真的有 1024 只手同时干活。SM 内部的调度器(Warp Scheduler)会把这 1024 个线程切分成很多个小份,每一份就叫一个 Warp。

  • 它的特点
    • 标准大小:在 NVIDIA 显卡中,1 个 Warp = 32 个线程(雷打不动)。
    • SIMT(单指令多线程):这是 Warp 最核心的特征。这 32 个线程必须**“同进同退”**。SM 发出一个指令“做加法”,这 32 个线程必须同时做加法。
    • 不可分割:硬件调度是按 Warp 来的,不是按单个线程来的。

类比
Warp 就像是**“32 人的一条腿跳绳队”**。
虽然旅游团(Block)有一千人,但过安检口(执行指令)时,必须32 个人挽着手排成一排一起跳过去。

3. 它们的关系与互动

“Block 是肉,Warp 是刀法。”

当你定义了一个包含 128 个线程的 Block 扔给显卡:

  1. 显卡接收到这个 Block。
  2. SM 把它切成128÷32=4128 \div 32 = 4128÷32=4个 Warp。
  3. SM 的调度器开始轮流指挥这 4 个 Warp 干活。
关键问题:如果 Warp 里有人“掉队”了怎么办?(Branch Divergence)

这是 GPU 编程里著名的**“分支发散”问题。
因为 Warp 里的 32 个线程必须执行
同一条指令**。

  • 如果不一致:比如代码里写了if (性别 == 男) { ... } else { ... }
  • 尴尬的局面:如果这 32 个线程里,前 16 个是男,后 16 个是女。大家不能分头行动。
    1. 第一步:所有人先陪着前 16 个男线程跑if里的代码(此时后 16 个女线程虽然什么都不做,但也得陪跑,浪费时间)。
    2. 第二步:所有人再陪着后 16 个女线程跑else里的代码(此时前 16 个男线程陪跑)。
  • 结果:性能减半。

1. 软件定义的层级 (Grid & Block)

  • Grid (网格):由于任务太大(如 4K 屏幕的 800 万个像素),程序员将其定义为一个 Grid。
  • Block (线程块)“旅游团”
    • Grid 被切分成无数个 Block(如每个 Block 128 个线程)。
    • 特性:一个 Block 必须作为一个整体被分配给一个 SM,且终身不迁移

2. 硬件执行的层级 (Warp)

  • Warp (线程束)“32 人同手同脚跳绳队”
    • SM 收到一个 Block 后,会将其切分为多个 Warp(每个 Warp 固定 32 线程)。
    • SIMT (单指令多线程):Warp 是硬件执行指令的最小单位。SM 发一条指令,Warp 里的 32 个线程同时执行。

3. 关键机制深度解析

A. 延迟隐藏 (Latency Hiding) —— GPU 快的真正秘密
  • 问题:去显存取数据非常慢(几百个时钟周期),如果核心干等着,性能就废了。
  • 解法:SM 里面通常驻扎着远超核心数量的 Warp(例如核心只有 128 个,但 SM 里可能驻扎了 48 个 Warp 共 1500+ 线程)。
    • Warp A去取数据(卡住)时,调度器会**瞬间(0 时钟周期消耗)**切到Warp B继续计算。
    • 只要 Warp 足够多,核心就永远在干活,感觉不到显存的延迟。
    • 这就是为什么显卡需要高并发
B. 分支发散 (Branch Divergence)
  • 场景:代码里写了if (x > 0) do A; else do B;
  • 困境:Warp 里的 32 个线程,有的 x>0,有的 x<0。但大家必须同进同退。
  • 处理Active Mask (活跃掩码)
    1. 第一步:先让所有线程跑do A,但用掩码把 x<0 的线程**“屏蔽”**(Mask off,虽然通电但不写入结果)。
    2. 第二步:再让所有线程跑do B,把 x>0 的线程屏蔽。
  • 代价:原本并行的任务变成了串行,性能下降。

第五章:存储体系 (Memory Hierarchy)

数据流动的血管。

1. L2 Cache 的战略地位提升

  • 现象:RTX 4090 的 L2 缓存 (72MB) 比 RTX 3090 (6MB) 大了 12 倍。
  • 原因 - “显存墙”:显存带宽(GDDR6X)已经很难再提升了,而且功耗极高。
  • 新策略“以存代路”。尽量把数据留在芯片内部巨大的 L2 缓存里,减少去外部显存搬运的次数。这不仅提升了有效带宽,还大幅降低了功耗。

2. 显存位宽与带宽

  • 公式带宽(GB/s)=位宽(bit)×频率(GHz)8带宽 (GB/s) = \frac{位宽(bit) \times 频率(GHz)}{8}带宽(GB/s)=8位宽(bit)×频率(GHz)
  • 位宽 (Bus Width):如 128-bit, 384-bit。它是物理通道的宽度(高速公路车道数)。
  • 带宽 (Bandwidth):实际的数据吞吐量。
  • 误区:不要只看位宽。RTX 4060 只有 128-bit 位宽,看似很惨,但因为有大 L2 缓存,其实际游戏性能(有效带宽)远超以前 128-bit 的卡。

📝 终极速记类比表 (The Mental Model)

概念形象类比核心职责
GPU超级工厂并行计算总基地。
GPC独立分厂拥有独立光栅引擎,决定图形生成速度。
SM生产小组最小管理单元,拥有独立调度器和资源。
CUDA Core工人数量巨大,负责通用计算和像素上色。
Tensor Core会计/算盘专精矩阵运算,负责 AI 加速。
RT Core质检员/物理学家专精光线投射测试。
Warp32人跳绳队硬件执行的最小单位,同手同脚。
L2 Cache车间冰箱近且快,大幅扩容后减少了跑仓库的次数。
显存 (VRAM)远端总仓库容量大但距离远,通过卡车 (位宽) 运输。
SIMT广播体操一声口令,多人做动作(但每人做的对象不同)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/9 3:50:38

Java JWT实战指南:快速构建安全认证系统

Java JWT实战指南&#xff1a;快速构建安全认证系统 【免费下载链接】java-jwt Java implementation of JSON Web Token (JWT) 项目地址: https://gitcode.com/gh_mirrors/ja/java-jwt 在当今分布式系统和微服务架构中&#xff0c;安全认证机制变得至关重要。Java JWT作…

作者头像 李华
网站建设 2026/1/9 3:50:20

3步解决90%标注难题:LabelImg实战效率手册

3步解决90%标注难题&#xff1a;LabelImg实战效率手册 【免费下载链接】labelImg &#x1f389; 超级实用&#xff01;LabelImg&#xff0c;图像标注神器&#xff0c;现在加入Label Studio社区&#xff0c;享受多模态数据标注新体验&#xff01;&#x1f680; 简单易用&#xf…

作者头像 李华
网站建设 2026/1/9 3:49:55

Pock革命:解锁MacBook触控栏的无限潜能 [特殊字符]

Pock革命&#xff1a;解锁MacBook触控栏的无限潜能 &#x1f680; 【免费下载链接】pock Widgets manager for MacBook Touch Bar 项目地址: https://gitcode.com/gh_mirrors/po/pock 还在为MacBook Touch Bar功能单一而苦恼吗&#xff1f;Pock作为一款完全开源的小部件…

作者头像 李华
网站建设 2026/1/9 3:49:44

DocuSeal文档签名API深度实践:从技术选型到生产级部署

DocuSeal文档签名API深度实践&#xff1a;从技术选型到生产级部署 【免费下载链接】docuseal docusealco/docuseal: DocuSeal 可能是一个文档安全或数字签名解决方案的软件项目&#xff0c;但根据GitHub上信息不足无法确定具体细节。它可能用于保护文档的安全性、提供电子签名功…

作者头像 李华
网站建设 2026/1/9 3:49:43

5步掌握ComfyUI肖像大师:告别复杂提示词的人像生成秘诀

5步掌握ComfyUI肖像大师&#xff1a;告别复杂提示词的人像生成秘诀 【免费下载链接】comfyui-portrait-master-zh-cn 肖像大师 中文版 comfyui-portrait-master 项目地址: https://gitcode.com/gh_mirrors/co/comfyui-portrait-master-zh-cn 你是否曾为编写复杂的AI绘画…

作者头像 李华