图形计算架构的范式演化与统一内存模型研究 —— 从固定管线到异构共享存储的理论推演与技术验证
图形计算架构的范式演化与统一内存模型研究
——从固定管线到异构共享存储的理论推演与技术验证
核心思想就一句话:
“让CPU和GPU直接共享同一块物理内存,用页表管理。”
下方还有一个有价值的架构图,散会。
摘要
图形计算架构在过去四十年间经历了三次重大范式跃迁。本文首先从理论计算模型出发,确立图灵机与冯·诺依曼架构对存储统一性的基本定义;随后沿管线架构范式与渲染计算范式两个独立维度,系统梳理图形技术的演化脉络,并扩展至几何处理、GPU通用计算、数据流管理、显示输出和GPU执行模型等五个辅助维度,构建完整的七维技术演化框架;在此基础上,本文识别出当前主流分离式内存架构(CPU内存与GPU显存物理隔离)已成为制约下一代实时图形应用(特别是元宇宙场景)的结构性瓶颈;最终提出一种基于统一HBM物理内存、以页表为核心管理机制的异构共享存储架构,论证其理论合法性、技术可行性及应用前景。
关键词:图形管线架构;渲染范式;统一内存;页表管理;异构计算;元宇宙;HBM
第一章 理论基础:计算模型对存储的基本约束
任何计算架构的设计都受限于其底层计算模型的基本假设。在讨论图形计算架构的演化方向之前,有必要回到计算理论的源头,审视存储模型的本质约束。
1.1 图灵机模型与存储统一性
Alan Turing于1936年提出的图灵机模型定义了现代计算的理论基础[1]。其核心构成要素为:
· 一条无限长的纸带(存储介质)
· 一个读写头(处理单元)
· 一套状态转换规则(程序)
在该模型中,纸带作为唯一的存储介质,承载所有输入数据、中间状态和输出结果。图灵模型并未对存储进行物理分区——不存在"纸带A供处理阶段α使用,纸带B供处理阶段β使用"的约束。
更为关键的是,图灵机的多头扩展(Multi-head Turing Machine)早已在可计算性理论中得到充分研究。多个读写头共享同一纸带的计算模型,其计算能力与单头图灵机严格等价(Church-Turing论题),而在时间复杂度上可获得多项式级加速。这意味着:多个处理单元共享同一存储空间不仅在理论上合法,而且是性能优化的自然路径。
1.2 冯·诺依曼架构与存储统一原则
John von Neumann于1945年在EDVAC报告中提出的存储程序计算机架构进一步强化了存储统一性原则[2]:
冯·诺依曼架构的核心要素:
· 统一存储器:指令与数据共享同一存储空间和地址总线
· 控制器:从存储器取指令并译码
· 运算器:执行指令操作
· 输入/输出设备
该架构的革命性在于打破了此前计算机设计中指令存储与数据存储的物理分离。尽管后来的哈佛架构在缓存层面将指令缓存与数据缓存分离以提升性能,但这是微架构层面的优化,并未改变冯·诺依曼架构在逻辑层面对存储统一性的基本要求。
本文的核心论点由此展开:当前GPU显存与CPU内存的物理分离,是总线技术局限下的历史性工程妥协,而非计算模型的理论要求。当工程条件允许时,回归统一存储是架构演化的自然方向。
1.3 从同构到异构:多处理器共享内存的理论延伸
对称多处理(SMP)架构自1960年代以来已发展为成熟的计算范式。在SMP系统中,多个同构处理器核心通过共享总线或交换网络访问同一物理内存,操作系统通过页表机制管理虚拟地址到物理地址的映射,实现进程隔离与资源保护。
将SMP的"同构多核共享内存"扩展为"异构多核(CPU+GPU)共享内存",在计算理论层面不引入任何新的约束冲突。其本质仍然是多头图灵机模型的物理实现——多个处理单元(无论同构或异构)共享同一存储空间,通过统一的地址管理机制(页表)实现访问控制。
第二章 图形技术演化的七维分析框架
为系统理解图形计算架构的演化历程,本文建立七个技术维度的分析框架。其中维度一(管线架构范式)和维度二(渲染计算范式)为两条主演化线,维度三至维度七为支撑性技术维度。
2.1 维度一:管线架构范式(API/控制层)
核心问题:谁来决定GPU做什么、怎么做?
该维度追踪图形管线控制权的转移历程,经历了三次明确的范式跃迁。
2.1.1 固定功能管线(1992–2001)
固定功能管线时代以OpenGL 1.x(1992年)和DirectX 3–7(1996–1999年)为代表。其渲染流程被硬编码为不可修改的流水线:
应用程序 → [顶点变换T&L] → [裁剪] → [光栅化] → [纹理采样] → [雾/深度测试] → 帧缓冲
↑ ↑ ↑
不可改变 固定混合模式 固定公式
在该阶段,开发者只能通过API预设函数调整有限参数(如光源位置、纹理混合模式),无法修改底层渲染算法。GPU本质上是专用电路,API是遥控器上的固定按钮。
版本演进关键节点
| API | 版本 | 年份 | 里程碑特性 |
|---|---|---|---|
| IRIS GL | — | 1980s | SGI专有,首个结构化3D图形接口 |
| OpenGL | 1.0 | 1992 | IRIS GL开放化,建立跨平台标准 |
| OpenGL | 1.1–1.3 | 1997–2001 | 顶点数组、多重纹理、压缩纹理 |
| DirectX | 3–6 | 1996–1998 | 立即模式、DrawPrimitive接口、模板缓冲 |
| DirectX | 7 | 1999 | 硬件T&L(首次将变换和光照从CPU卸载到GPU) |
DirectX 7与GeForce 256引入的硬件T&L是该阶段的最后一次重大进步——将顶点变换和光照计算从CPU移至GPU,但处理逻辑仍然固定不可编程。
2.1.2 可编程管线(2001–2014)
2001年,DirectX 8引入顶点着色器和像素着色器,标志着图形编程从"参数配置"到"程序编写"的根本性转变。GPU从专用电路演变为可编程处理器。
应用程序 → [顶点着色器🔓] → [几何着色器🔓] → [光栅化] → [片段着色器🔓] → 帧缓冲
(DX8起) (DX10起) ↕
[计算着色器🔓]
(DX11起)
🔓 = 开发者可编写GPU程序
该阶段的核心特征是着色器能力的持续扩展。Shader Model从SM 1.0(DX8,128条顶点着色器指令、8–22条像素着色器指令)演进至SM 5.0(DX11,指令数无实际限制),着色器从简单的参数化程序发展为功能完整的GPU程序。
管线阶段扩展时间线
| 着色器类型 | 首次引入 | 核心能力 |
|---|---|---|
| 顶点着色器 | DX8 (2001) | 自定义顶点变换、蒙皮动画 |
| 像素/片段着色器 | DX8 (2001) | 逐像素光照、纹理特效 |
| 统一着色器模型 | DX10 (2006) | GPU计算单元动态分配,消除顶点/像素单元利用率失衡 |
| 几何着色器 | DX10 (2006) | GPU端动态生成/销毁图元 |
| 曲面细分着色器 | DX11 (2009) | 硬件级LOD细分 |
| 计算着色器 | DX11 (2009) | 通用GPU计算,GPU不再仅限于渲染 |
着色语言方面,早期的汇编式着色器(DX ASM、ARB ASM)在2004年后被高级着色语言取代。HLSL(Microsoft)成为DirectX标准,GLSL(Khronos)成为OpenGL标准,NVIDIA的Cg作为跨API中间层短暂存在后退出历史舞台。
然而,该阶段的资源管理和命令调度仍由驱动程序隐式控制:
- 内存管理:开发者不知道资源在显存中的具体位置,驱动自动处理分配和迁移
- 状态管理:渲染状态可运行时任意切换,驱动在运行时验证和编译状态组合
- 命令提交:基本限于单线程模型;DX11的Deferred Context是一种有限的多线程方案,实际性能增益因驱动实现差异而不可靠
2.1.3 显式控制管线(2014–至今)
2013年,AMD发布Mantle API,提出了激进的设计主张:传统图形API的驱动层过厚,大量隐式的状态追踪和资源管理消耗了不必要的CPU时间。Mantle本身生命周期短暂,但其设计理念直接催生了三个现代图形API:Metal(Apple,2014年)、DirectX 12(Microsoft,2015年)和Vulkan(Khronos,2016年)。
应用程序(完全控制)
├── 内存管理:手动分配VkDeviceMemory / D3D12 Heap / MTLHeap
├── 命令录制:多线程并行 → CommandBuffer / CommandList
├── 同步控制:显式Fence / Semaphore / Barrier
├── 管线状态:预编译不可变PSO(Pipeline State Object)
└── 资源绑定:Descriptor Set / Root Signature / Argument Buffer
↓
Queue(s) → GPU
与前代的核心差异
| 维度 | 可编程管线(DX11/GL4) | 显式控制管线(Vulkan/DX12/Metal) |
|---|---|---|
| 内存 | 驱动黑箱分配 | 开发者手动分配,指定内存类型 |
| 状态 | 运行时随意切换,驱动运行时验证 | 预编译为不可变PSO,初始化时一次性验证 |
| 命令提交 | 单线程或伪多线程 | 真正多线程并行录制CommandBuffer |
| 同步 | 驱动隐式插入barrier | 开发者显式管理fence/semaphore/barrier |
| 资源绑定 | 逐次绑定 | 描述符集/根签名批量绑定 |
着色器中间表示(IR)的标准化是该阶段另一重要进展。Vulkan采用SPIR-V作为标准字节码格式,实现着色器与源语言的解耦——HLSL、GLSL等均可编译为SPIR-V。DirectX 12使用基于LLVM IR的DXIL,Metal使用同样基于LLVM IR的AIR。
2.1.4 管线架构范式总结
固定管线 可编程管线 显式控制管线
"硬件说了算" → "开发者写逻辑, → "开发者管一切,
驱动管后勤" 包括后勤"
驱动厚度:厚 ──────────────────────────────→ 薄
开发者控制粒度:粗 ────────────────────────→ 细
CPU开销:高 ───────────────────────────────→ 低
多核利用率:无 ────────────────────────────→ 充分
性能上限:低 ──────────────────────────────→ 高
性能下限:高(驱动兜底)──────────────────→ 低(写差了更慢)
2.2 维度二:渲染计算范式(算法/技术层)
核心问题:像素颜色怎么算出来的?
与管线架构范式独立演化的是渲染算法的范式变迁。需特别指出,管线架构范式描述的是API和控制层面的变化,渲染计算范式描述的是算法和技术层面的变化,二者是两条独立的演化线,不应混为一谈。
2.2.1 固定光照公式(1970s–2001)
早期渲染依赖硬编码的经验光照模型。Phong反射模型(1975年)将光照分解为环境光、漫反射和镜面反射三个分量[3]:
I = Ia·Ka + Id·Kd·(N·L) + Is·Ks·(R·V)^n
Blinn-Phong改进(1977年)用半程向量H替代反射向量R以降低计算开销。Gouraud着色(1971年)在顶点计算光照后三角形内插值颜色,Phong着色在每像素重新计算光照但计算量较大。
纹理技术方面,基础纹理贴图(Catmull,1974年)、Mipmap(Williams,1983年)、环境贴图(Greene,1986年)和光照贴图(id Software Quake引擎,1996年)逐步丰富了固定管线时代的视觉表现力。
该阶段所有公式均硬编码在硬件或驱动中,物理上不正确(Phong的镜面反射项是纯经验拟合,不满足能量守恒),但在当时的硬件约束下代表了最优的工程折中。
2.2.2 自定义着色器算法(2001–2018)
可编程着色器的出现释放了渲染算法的创新空间。开发者可以在GPU上编写任意算法,光栅化仍是核心框架,但几乎所有视觉效果都可通过着色器实现。
关键技术谱系
逐像素光照革命(2001–2004年):法线贴图(Normal Mapping)利用切线空间法线纹理在逐像素级别扰动表面法线,以极低的几何开销模拟复杂表面细节。视差贴图(Parallax Mapping,2004年)和视差遮蔽贴图(POM,2006年)进一步通过纹理坐标偏移和光线步进模拟凹凸深度感。
渲染架构变革:延迟渲染(Deferred Rendering,约2004年)将几何渲染与光照计算解耦:第一遍渲染所有几何体输出G-Buffer(法线、albedo、深度、材质属性),第二遍对每个光源读取G-Buffer计算光照。复杂度从O(objects × lights)降为O(objects) + O(lights × pixels),使大量动态光源成为可能。后续的Tile-Based Deferred(2012年)和Clustered Shading(2012年)进一步优化了光源分配效率。
后处理技术爆发:HDR渲染(2003年)利用浮点帧缓冲和色调映射扩展了动态范围。SSAO(屏幕空间环境光遮蔽,Crytek,2007年)通过屏幕空间深度采样近似环境光遮蔽效果。Bloom、运动模糊、景深等后处理特效通过渲染到纹理后全屏着色器处理的范式实现。
PBR标准化:基于物理的渲染(PBR)以Cook-Torrance微表面BRDF模型为核心,采用GGX法线分布函数、Schlick菲涅尔近似和Smith几何遮蔽项,实现了能量守恒的材质描述。Disney原则BRDF(2012年)被Unreal Engine 4和Unity 5采纳,成为实时渲染的事实标准[4]。
全局光照近似:由于完整的路径追踪计算量不可承受,该阶段的全局光照方案均为近似方法——球谐光照(2002年)、光照探针(2005年)、光传播体积(LPV,2009年)、体素圆锥追踪(VXGI,2014年)、屏幕空间全局光照(SSGI,2016年)等,各有精度与性能的取舍。
反走样技术从硬件MSAA演进为后处理方案FXAA(2009年)、SMAA(2012年),最终发展为当前主流的时序反走样TAA(2014年),利用抖动采样和历史帧混合提升有效采样率。
2.2.3 混合渲染(2018–至今)
2018年NVIDIA RTX 20系列GPU搭载专用RT Core,配合DirectX 12 DXR扩展,实时光线追踪首次成为可能。自此,渲染不再只依赖光栅化,而是三种计算范式协同工作:
┌──────────────────────────────────────────┐
│ 单帧画面 │
│ │
│ 光栅化(主体80-90%) │
│ · 大部分几何、材质、不透明物体 │
│ │
│ 光线追踪(局部5-15%) │
│ · 反射、阴影、全局光照、焦散 │
│ │
│ 神经网络推断(后处理5-10%) │
│ · 超采样(DLSS/FSR/XeSS) │
│ · 降噪(NRD/Ray Reconstruction) │
│ · 帧生成(DLSS 3/FSR 3) │
└──────────────────────────────────────────┘
硬件光追方面,NVIDIA RT Core从Turing到Ada Lovelace经历了三代演进,AMD RDNA2/3的Ray Accelerator、Intel Arc的Ray Tracing Unit和Apple M3+的硬件光追单元相继加入。API层面,DXR 1.0/1.1(DirectX 12)、VK_KHR_ray_tracing_pipeline/ray_query(Vulkan)和Metal 3 RT API提供了标准化接口。
AI渲染技术形成了多条技术路线:NVIDIA DLSS系列利用Tensor Core进行时序卷积网络推断放大,从2.0版的时序超采样发展到3.0版的光流加速帧生成,再到3.5版的AI光线重建(Ray Reconstruction)以及4.0版的多帧生成;AMD FSR系列以无专用硬件依赖的空间/时序滤波和流体运动帧生成为路线;Intel XeSS提供DP4a/XMX双路径推断方案。
神经渲染(NeRF,2020年;3D Gaussian Splatting,2023年)作为前沿方向,开始探索以神经网络直接表示和渲染3D场景的可能性。
该阶段的根本特征是:单帧画面由多种计算范式协作产出,画面质量与"真实计算量"解耦,渲染从纯物理模拟走向物理模拟与统计推断的混合体。
2.2.4 两个维度的独立性说明
管线架构范式与渲染计算范式是两个独立的演化维度。前者描述"控制权在硬件、驱动和开发者之间如何分配",后者描述"像素颜色通过何种计算方法得出"。二者之间存在依赖关系(算法范式的跃迁通常需要管线架构先完成对应跃迁作为基础设施),但演化节奏并不同步——架构先行,算法随后填充。将AI渲染归入管线架构维度而非渲染算法维度,是常见的分类层级混淆。
2.3 维度三:几何表示与处理范式
核心问题:3D几何数据如何描述、提交、处理?
2.3.1 CPU主导的逐顶点提交(1992–2000)
早期图形API以立即模式(glBegin/glEnd)逐顶点提交几何数据,每个顶点对应一次CPU到GPU的通信。显示列表(Display List)和顶点数组(Vertex Array,OpenGL 1.1)缓解了调用频率,顶点缓冲对象(VBO,OpenGL 1.5/DX7)将顶点数据驻留GPU显存,消除了逐帧上传开销。
场景管理完全由CPU执行:BSP树(Quake,1996年)、八叉树、视锥剔除和Portal剔除等算法均在CPU端运行。LOD由CPU根据距离选择预制的离散模型,切换时有明显跳变。
2.3.2 GPU辅助的批量处理(2003–2015)
实例化渲染(Instancing,DX9/GL3.1)允许一次DrawCall绘制同一网格的多个实例。曲面细分着色器(DX11/GL4.0)实现了GPU端的硬件级网格细分。间接绘制(Indirect Draw,DX11/GL4.0)首次允许GPU通过Compute Shader填写绘制参数——GPU开始参与"画什么"的决策。
然而,DrawCall瓶颈仍是该阶段的核心痛点。DX11/GL4时代的单线程CPU每帧能有效处理约2000–5000个DrawCall,这构成了场景复杂度的硬上限。开发者通过合批、实例化、纹理图集和状态排序等手段缓解该瓶颈。
2.3.3 GPU自治的几何处理(2015–至今)
GPU-Driven Rendering Pipeline(2015年,DICE/Frostbite引擎[5])将视锥剔除、Hi-Z遮挡剔除、LOD选择和DrawCall生成全部转移到GPU Compute Shader中执行,CPU仅提交初始条件后即退出逐帧循环。
Mesh Shader(DX12 Ultimate 2019年/Vulkan 2022年/Metal 3 2022年)以Task Shader + Mesh Shader替代传统的Input Assembler→VS→HS→DS→GS流水线,允许开发者以compute-like模型直接输出图元。配合Meshlet架构(网格预切分为64–128三角形的小块,逐Meshlet GPU剔除),几何剔除粒度从"逐物体"细化到"逐百三角形"。
Unreal Engine 5的Nanite虚拟几何体系统(2021年)将该方向推到极致:离线构建Meshlet DAG层次结构,运行时GPU遍历DAG根据屏幕投影误差选择LOD,大三角形走硬件光栅化、小三角形走软件光栅化(Compute Shader),输出到Visibility Buffer。其效果是三角形数量对帧率几乎无影响,LOD过渡无弹跳,美术不再需要手动制作LOD。
几何处理范式总结:
CPU逐顶点 → GPU辅助批量 → GPU自治(Mesh Shader/Nanite)
CPU参与度:高 → 中 → 极低
场景上限:数千物体 → 数万物体 → 数十亿三角形
2.4 维度四:GPU通用计算范式
核心问题:GPU除了渲染,还能干什么?怎么干?
2.4.1 渲染管线内的计算技巧(2003–2007)
在专用计算接口出现之前,研究者将计算问题"伪装"为渲染问题——将数据编码为纹理像素,通过片段着色器逐像素处理,结果渲染到纹理后回读。该方法缺乏随机写入、原子操作和共享内存等关键能力,调试困难,但概念性地验证了GPU架构的通用计算潜力。
2.4.2 专用计算API(2007–2012)
NVIDIA CUDA(2007年)将GPU暴露为通用并行处理器,引入Grid/Block/Thread层次、共享内存、原子操作等关键能力。Khronos发布的OpenCL(2009年)提供了跨厂商的标准化替代方案。
CUDA/OpenCL的根本局限在于其与图形API是独立的上下文——计算结果要用于渲染需要跨API的数据传递和同步,开销不可忽视。
2.4.3 管线内原生计算(2009–至今)
DirectX 11的Compute Shader(2009年)和OpenGL 4.3的Compute Shader(2012年)将通用计算能力嵌入图形管线。现代API(Vulkan/DX12/Metal)进一步通过异步计算(Async Compute)实现图形队列与计算队列的并行执行——GPU渲染工作的空闲周期可被计算任务填充,逼近硬件利用率上限。
DirectX 12的Work Graphs(2023年)代表了最新进展——GPU自主在有向无环图中调度工作节点,无需CPU参与每个调度决策,GPU从"被调度的计算单元"演变为"自主调度计算的处理器"。
2.5 维度五:纹理与数据流范式
核心问题:海量贴图和资源数据如何高效到达GPU?
2.5.1 静态全量加载(1992–2005)
所有纹理在启动或关卡加载时一次性从磁盘上传至显存。纹理压缩格式从S3TC/DXT(1998年,4:1压缩比)发展到BC6H/BC7(DX11,支持HDR和高质量LDR),移动端从ETC1(2005年)发展到ASTC(2012年,可变压缩比)。显存容量构成纹理资源的硬上限。
2.5.2 流式加载与虚拟纹理(2005–2018)
虚拟纹理(Virtual Texturing)借鉴虚拟内存的思想——逻辑上一张巨大纹理覆盖整个场景,物理上只有当前可见区域所需的Mip级别驻留显存。id Tech 5的Mega Texture(2007年)是该思想的首个大规模工程实现。硬件层面,Sparse Texture(GL4.4 ARB_sparse_texture/DX12 Reserved Resource)提供了部分纹理驻留的硬件支持。
2.5.3 GPU直通加载与智能数据流(2020–至今)
DirectStorage(DX12,2022–2023年)将IO路径从传统的"NVMe→CPU内存→CPU解压→拷贝到GPU显存"缩短为"NVMe→GPU显存→GPU硬件解压",CPU几乎完全退出IO路径。Sampler Feedback(DX12 Ultimate,2020年)在硬件层面精确记录每次纹理采样实际访问的Mip/Tile,使流送系统的加载决策从估算变为精确反馈驱动,显存利用率提升30–50%。
神经纹理压缩(2023年以后)探索以小型MLP替代传统纹理查找表,压缩比可达20:1以上,GPU实时推断解码。
2.6 维度六:显示输出与帧调度范式
核心问题:渲染好的帧怎么到达屏幕?节奏谁来控制?
2.6.1 固定刷新锁定(1990s–2010)
双缓冲+VSync将帧率锁定为显示器刷新率的整数分频(60/30/20 Hz)。VSync开启消除撕裂但掉帧引发严重卡顿,VSync关闭降低延迟但产生画面撕裂。
2.6.2 自适应同步(2014–2020)
NVIDIA G-Sync(2014年)和AMD FreeSync(2015年,基于VESA Adaptive-Sync标准)颠倒了控制关系——不再让GPU适应显示器的固定节奏,而是让显示器适应GPU的渲染节奏,在可变帧率下同时消除撕裂和卡顿。
2.6.3 高刷新率+低延迟+HDR+多视口+帧生成(2020–至今)
显示器刷新率从60Hz推进到360Hz乃至540Hz,渲染预算急剧缩短,倒逼AI超采样技术的采用。NVIDIA Reflex(2020年)通过控制渲染队列深度降低输入延迟。HDR输出通过10bit PQ EOTF和广色域(DCI-P3/Rec.2020)扩展了显示动态范围。
VR/XR立体渲染要求双眼各4K×4K @90Hz以上,Multi-View/Single Pass Stereo减少几何处理冗余。注视点渲染(Foveated Rendering)利用眼动追踪在注视区域保持全分辨率、周围区域降低分辨率。
帧生成技术(DLSS 3/FSR 3)在两帧之间通过光流分析和AI推断"插入"中间帧,使感知帧率翻倍甚至四倍,实现帧率与渲染负载的完全解耦。
2.7 维度七:GPU执行模型与并行架构
核心问题:GPU硬件内部如何组织和执行计算?
2.7.1 固定功能流水线硬件(1995–2001)
早期GPU(GeForce 256/Radeon 7200时代)内部为专用顶点处理单元和固定数量的像素管线,性能以"像素管线数"衡量,无可编程ALU。
2.7.2 分离式可编程处理器(2001–2006)
GeForce FX/Radeon 9700时代引入了可编程的顶点着色单元和像素着色单元,但两类单元物理分离、数量固定。顶点密集场景下像素单元闲置,像素密集场景下顶点单元闲置——硬件利用率取决于场景特征。
2.7.3 统一着色器架构(2006–至今)
自GeForce 8800/TeraScale起,所有GPU采用统一计算单元阵列。以NVIDIA Ada Lovelace为例,其层次结构为:GPC→TPC→SM,每个SM包含128个FP32 CUDA Core、4个Tensor Core、1个RT Core和128KB可配置的L1/共享内存。调度器动态将顶点、片段、几何、计算、光追任务分配给统一的计算单元,利用率接近100%。
SIMT(Single Instruction, Multiple Threads)执行模型下,32个线程组成一个Warp,同一Warp内所有线程执行相同指令操作不同数据。分支发散时两条路径串行执行,造成性能损失。GPU通过大量驻留Warp(高占用率)来隐藏内存访问延迟。
现代GPU暴露多个独立引擎(Graphics/Compute/Copy),支持异步并行执行。Warp级编程(SM6.0+/Vulkan subgroup操作)允许同一Warp内线程直接交换寄存器数据,延迟仅约2个周期,远低于共享内存路径的约40个周期。
2.8 七维框架总结
七个维度的演化方向高度一致:
维度一(管线架构): 固定 → 可编程 → 显式控制
维度二(渲染算法): 固定公式 → 自定义着色器 → 混合渲染
维度三(几何处理): CPU逐顶点 → GPU辅助 → GPU自治
维度四(GPU计算): 渲染内hack → 独立API → 管线内原生+自治调度
维度五(数据流): 静态加载 → 流式虚拟纹理 → GPU直通+智能反馈
维度六(显示输出): 固定VSync → 自适应 → 解耦(帧率/刷新率/感知帧率)
维度七(执行模型): 固定硬件 → 分离处理器 → 统一着色器+多引擎
统一规律:控制权从硬件/驱动向开发者持续下沉,GPU从专用渲染设备向通用异构计算平台演进,CPU参与度持续降低,GPU自治度持续提高。
第三章 结构性瓶颈的识别:分离式内存架构
3.1 分离式内存架构的历史成因
在上述七个维度的演化中,有一个底层约束始终未被根本性地触及——CPU内存与GPU显存的物理分离。
当前主流PC架构:
CPU ←→ 系统内存(DDR5, ~50GB/s)
↕ PCIe 4.0/5.0 (~32-64 GB/s)
GPU ←→ 显存(GDDR6X/HBM, ~1TB/s)
该分离源于1990年代GPU作为外设插在PCI/AGP扩展槽上的历史设计。GPU拥有独立的本地显存是自然选择——外设总线(PCI/AGP/PCIe)的带宽和延迟无法满足GPU的高吞吐需求。
然而,这个"工程妥协"在当时完全合理,不等于它在今天仍然是最优解。如第一章所论证,存储分离不是图灵模型或冯·诺依曼架构的理论要求,而是总线技术局限下的实现层决策。
3.2 分离架构造成的具体瓶颈
3.2.1 数据传输延迟
每帧渲染涉及CPU与GPU之间的多次数据交换——物理模拟结果、AI决策、骨骼矩阵、场景管理指令从CPU传向GPU,遮挡查询结果、拾取结果等从GPU传回CPU。每次传输需经过PCIe总线,单次延迟约1–2μs,累积至数十次往返后可占去20ms帧预算的10–25%。
3.2.2 双份数据管理
分离内存迫使引擎维护两套数据表示:CPU侧的游戏对象(GameObject)和GPU侧的渲染代理(RenderProxy)。每帧需要同步两套数据的状态——创建时双份分配并建立映射,修改时拷贝更新,销毁时双份延迟释放。这套双份管理系统是现代游戏引擎中最大的工程复杂度来源之一。
3.2.3 显存容量硬墙
GPU显存容量构成场景资源的硬上限。当前高端消费级GPU提供16–24GB显存。对于下一代实时图形应用(数字孪生城市、元宇宙场景),几何数据、纹理数据、光照数据、加速结构和AI模型权重的总需求可能达到50–100GB以上。流式加载虽能缓解该问题,但引入了加载延迟和显示质量波动,在VR等延迟敏感场景中尤为不利。
3.2.4 对下一代应用的阻碍
以元宇宙为代表的下一代实时图形应用对CPU-GPU协作的需求是前所未有的[6]:
| 需求 | CPU-GPU交互模式 | 分离架构的代价 |
|---|---|---|
| 物理模拟→渲染 | CPU端模拟结果每帧传GPU | 拷贝延迟+带宽占用 |
| AI NPC→渲染 | 模型权重共享+推断结果传输 | 双份权重存储或频繁传输 |
| 双眼4K×4K @90Hz VR | 极紧凑的帧预算(<11ms渲染) | 传输占用宝贵预算 |
| 数字孪生十亿级三角形 | 场景数据远超单GPU显存 | 流式加载引入延迟抖动 |
| 本地AI+渲染融合 | LLM权重(30-50GB)+渲染资源(30-50GB) | 显存不够,二选一 |
结论:分离式内存架构正在从"可接受的工程折中"变为"制约技术进步的结构性瓶颈"。
第四章 统一HBM共享存储架构的提出
4.1 架构定义
本文提出一种基于统一HBM物理内存的异构共享存储架构。其核心原则为:
┌──────────┐ ┌──────────┐
│ CPU芯片 │ │ GPU芯片 │
│ │ │ │
│ ┌──────┐ │ │ ┌──────┐ │
│ │ TLB │ │ │ │ TLB │ │
│ └──┬───┘ │ │ └──┬───┘ │
│ ┌──┴───┐ │ │ ┌──┴───┐ │
│ │ MMU │ │ │ │ MMU │ │
│ └──┬───┘ │ │ └──┬───┘ │
└────┼─────┘ └────┼─────┘
│ 直接物理连接 │
└──────────────┬────────────────┘
↓
┌──────────────────┐
│ 统一内存控制器 │
└────────┬─────────┘
↓
┌─────────────┐
│ HBM3/HBM3E │
│ ≥100GB │
│ ~3-5 TB/s │
└─────────────┘
三项核心原则:
- 物理唯一性:系统中只有一块物理内存(HBM),不存在独立的"系统内存"和"显存"之分
- 直接访问性:CPU和GPU各自通过独立的MMU直接访问同一物理内存,不经过任何中间协议层或互联总线的转发
- 页表统一管理:操作系统通过页表机制实现虚拟地址到物理地址的映射,提供进程隔离、权限控制和按需分配
4.2 与现有方案的定位区分
| 方案 | 物理统一性 | 带宽等级 | 访问方式 | 局限性 |
|---|---|---|---|---|
| CUDA Unified Memory | ❌ 两块内存,软件模拟 | PCIe ~32-64GB/s | 驱动页迁移,高延迟 | 性能不可预测 |
| 普通集显(Intel核显/AMD APU) | ✅ 共享DDR | ~50GB/s | 直接访问 | 带宽严重不足 |
| Apple Silicon UMA | ✅ 共享LPDDR | ~400-800GB/s | 直接访问 | 封闭生态,不可升级 |
| NVIDIA Grace Hopper | ❌ 两块内存,高速互联 | NVLink 900GB/s | 硬件一致性 | 非真正零拷贝 |
| AMD MI300A | ✅ 共享HBM | ~5TB/s | 直接访问 | 数据中心产品 |
| 本文提出的架构 | ✅ 共享HBM | ~3-5TB/s | 直接物理访问+页表管理 | 需下沉至消费级 |
本架构与AMD MI300A在物理层最为接近,但在系统软件层明确以页表作为核心管理机制,强调CPU和GPU的MMU平等地位以及操作系统对统一内存的完全控制权。
4.3 技术参数可行性
基于当前HBM技术参数:
| 参数 | HBM3E(2024年量产) | 需求 | 可行性 |
|---|---|---|---|
| 单Stack容量 | 36GB | 3 Stack = 108GB ≥ 100GB | ✅ |
| 单Stack带宽 | ~1.2TB/s | 3 Stack = ~3.6TB/s | ✅ |
| 制程成熟度 | NVIDIA H100/AMD MI300已大规模量产 | — | ✅ |
硬件层面不存在技术障碍。AMD MI300A已在2023年实现了CPU+GPU共享128GB HBM3的产品化验证。
第五章 页表作为统一管理机制的技术论证
页表机制是本架构的核心管理工具。本章论证页表能够完整地解决CPU和GPU共享同一物理内存所面临的全部关键问题。
5.1 地址空间隔离
在多进程环境下,不同进程的CPU和GPU工作负载必须互相隔离。页表天然提供了该能力:
进程A的地址空间:
CPU虚拟地址 0x0000~0xFFFF → 映射到物理HBM页框集合{P1, P2, P5, P8...}
GPU虚拟地址 0x0000~0xFFFF → 映射到物理HBM页框集合{P1, P2, P5, P8, P12...}
进程B的地址空间:
CPU虚拟地址 0x0000~0xFFFF → 映射到物理HBM页框集合{P3, P4, P6, P9...}
GPU虚拟地址 0x0000~0xFFFF → 映射到物理HBM页框集合{P3, P4, P6, P9, P15...}
· 两进程虚拟地址可相同,但映射到不同物理页
· CPU通过CPU MMU翻译,GPU通过GPU MMU翻译
· 任何一方的越界访问被MMU拦截,触发异常
现代GPU已具备完整的MMU/IOMMU实现(NVIDIA从Pascal架构开始,AMD从Vega架构开始),这一能力已在工业界得到充分验证。
5.2 细粒度权限控制
同一进程内部,CPU和GPU对不同内存区域的访问权限需要独立控制。页表的权限位可对两个处理器分别设置:
进程A的虚拟地址空间:
区域 CPU页表权限 GPU页表权限 物理页 用途
────────────────────────────────────────────────────────────────
0x0000-0x0FFF 可读+可执行 不可访问 P1-P3 CPU代码段
0x1000-0x1FFF 可读+可写 不可访问 P4-P6 CPU私有数据
0x2000-0x3FFF 可读+可写 只读 P7-P12 共享数据(物理结果→渲染)
0x4000-0x7FFF 不可访问 可读+可写 P13-P20 GPU专用(帧缓冲)
0x8000-0xBFFF 只写 只读 P21-P28 纹理上传通道
这种独立权限控制实现了多种数据流模式:
- CPU可读写 + GPU只读:CPU更新物理模拟/AI结果,GPU安全读取用于渲染
- CPU不可访问 + GPU可读写:Render Target、G-Buffer等GPU专用资源
- CPU只写 + GPU只读:纹理/常量缓冲的单向上传通道
- CPU和GPU均可读写:需配合原子操作或fence的双向共享区域
5.3 按需分配与物理内存管理
100GB HBM无需在启动时全部分配。操作系统维护空闲页框池,通过标准的伙伴系统(buddy system)或slab分配器管理物理页的分配和回收:
进程请求共享内存:
alloc_unified(size, cpu_perm, gpu_perm, cache_policy)
→ OS从空闲池分配物理页
→ 同时填入CPU页表和GPU页表
→ 设置各自权限和缓存策略
→ 返回虚拟地址
进程释放内存:
OS回收物理页 → 清除两套页表映射 → 页框归还空闲池
每个物理页携带元数据标记其使用者类型——CPU_ONLY、GPU_ONLY或SHARED,操作系统据此设置缓存策略。
5.4 缺页处理与虚拟纹理的天然支持
当GPU着色器访问一个尚未映射的虚拟地址时,GPU MMU产生缺页中断(GPU Page Fault),操作系统处理该中断:从SSD加载数据到HBM空闲页→更新页表→GPU重试访问。
这与CPU的虚拟内存缺页机制完全同构。在统一HBM架构下,该机制尤为自然——缺页后加载的目标就是同一块HBM,不需要跨PCIe传输,延迟显著低于分离架构。
虚拟纹理系统可直接复用该机制——逻辑上的巨大纹理空间映射到按需加载的物理HBM页,页表即为虚拟纹理的地址翻译层。
5.5 缓存一致性管理
CPU和GPU各自拥有独立的缓存层次(CPU: L1/L2/L3, GPU: L1/L2),共享内存引入了缓存一致性问题。页表机制提供了自然的解决方案:
缓存策略与页表属性绑定:
SHARED页 → 页表属性设为write-through或uncacheable
· 代价:性能略降(每次写入直达HBM)
· 收益:一致性自动保证,无需硬件窥探协议
CPU_ONLY页 → 正常write-back缓存(CPU最高性能)
GPU_ONLY页 → 正常GPU缓存策略(GPU最高性能)
更高性能的方案可采用硬件窥探协议或目录协议,但页表级别的缓存策略控制已足够满足绝大多数场景需求,且实现复杂度最低。Apple Metal的storageModeShared实质上采用了类似思路。
5.6 页表同步(TLB Shootdown)
当CPU修改页表映射(如新分配页面或改变映射关系)时,GPU的TLB可能仍缓存着旧的映射条目。解决方案是TLB Shootdown——CPU发送TLB invalidate信号到GPU MMU,GPU清除对应TLB条目后重新查表。
该机制在多核CPU系统中已是标准操作——核A修改页表后通知核B/C/D的TLB失效。扩展到CPU-GPU场景仅需增加一个invalidate目标。AMD MI300A已在产品中实现了CPU-GPU的TLB Shootdown。
5.7 内存控制器仲裁
CPU和GPU同时发起大量内存请求时,统一内存控制器需要进行仲裁。解决方案是控制器内置QoS(Quality of Service)机制,按优先级和带宽预留策略调度请求——例如GPU渲染请求(延迟敏感)赋予更高优先级,CPU批量数据处理赋予较低优先级,同时为各方保留最低带宽份额。
该策略与当前多核CPU内存控制器的仲裁逻辑完全一致,仅将仲裁对象从"同构CPU核心"扩展为"异构的CPU核心+GPU核心"。
第六章 应用前景:元宇宙场景的适配性分析
6.1 元宇宙的技术需求概览
基于IEEE/ACM元宇宙综述文献[6][7],本文提取以下核心技术需求:
| 需求维度 | 具体指标 |
|---|---|
| 渲染延迟 | Motion-to-Photon < 20ms(否则引发VR眩晕) |
| 渲染吞吐 | 双眼4K×4K @90Hz+ ≈ 每秒~26亿像素 |
| 场景复杂度 | 十亿~千亿级三角形(数字孪生城市级别) |
| 物理模拟 | 刚体/柔体/流体/布料实时模拟 |
| AI推断 | 数百NPC实时行为决策 |
| 多人同步 | 数千~数万用户共享同一空间 |
| 持久性 | 世界状态永不丢失 |
6.2 统一HBM架构的适配项
CPU-GPU零拷贝通信:元宇宙单帧涉及物理结果传递、AI决策传递、骨骼矩阵更新等数十次CPU→GPU数据流。统一HBM架构下,CPU将物理模拟结果写入HBM地址A后,GPU着色器在同一帧内直接读取地址A,无拷贝、无PCIe延迟、无staging buffer。估算可节省2–5ms/帧,在20ms预算中占10–25%的份额,对达标VR延迟指标有显著贡献。
大规模场景常驻:数字孪生城市的典型内存占用估算为52–111GB(含几何、纹理、光照、物理、AI、加速结构和帧缓冲)。100GB统一HBM可实现大部分场景数据常驻。由于CPU和GPU访问同一份数据,传统架构下CPU侧和GPU侧各存一份的数据冗余被消除,实际占用可降低30–40%。
编程复杂度降低:统一内存消除了引擎中双份数据管理系统(GameObject↔RenderProxy映射),对象的物理状态、AI状态和渲染数据存储在同一内存区域,生命周期管理简化为单一分配器。引擎核心代码量可能减少30–50%。
AI+渲染融合:本地部署大语言模型(权重30–50GB)与实时3D渲染(资源30–50GB)在分离架构下面临显存不够、二选一的困境。统一100GB HBM可同时承载两者,CPU运行推断、GPU运行渲染,共享同一内存池。
6.3 统一HBM架构的不适配项
绝对GPU算力:统一HBM解决的是带宽和容量问题,渲染算力取决于GPU核心数量。双眼4K VR @90Hz的混合渲染管线需要约30–50 TFLOPS FP32有效算力,需要顶级GPU规模的计算单元阵列。
网络延迟:多人同步依赖网络传输,光速限制了跨地域延迟的物理下限(如北京到纽约的光纤往返约110ms)。兴趣管理、空间分区服务器、预测回滚和边缘计算等方案属于分布式系统范畴,与本地内存架构无关。
持久化存储:HBM是易失性内存,世界状态的持久化需要NVMe SSD阵列和分布式数据库。DirectStorage可优化HBM与SSD之间的数据通路,但持久化本身是存储系统问题。
6.4 综合评估
统一HBM架构解决的是元宇宙"单节点本地端"的结构性瓶颈——CPU-GPU数据交换效率、内存容量、编程复杂度。这些是元宇宙实现的必要前提条件。如果本地节点的CPU-GPU协作效率受限于PCIe瓶颈,更上层的网络同步和持久化问题即使完美解决,终端用户的体验也无法达标。
元宇宙的完整技术栈需要本地计算、网络通信和持久化存储三个层面协同解决。统一HBM架构为本地计算层提供了最优的架构基础。
第七章 结论
7.1 七维演化的统一规律
本文建立的七维技术演化框架揭示了图形计算架构四十年演化的统一规律:控制权从硬件和驱动向开发者持续下沉,GPU从专用渲染设备向通用异构计算平台演进,CPU参与度持续降低,GPU自治度持续提高。这一趋势在管线架构、渲染算法、几何处理、通用计算、数据流管理、显示输出和执行模型等所有维度上一致呈现。
7.2 统一内存作为下一个范式跃迁
在七个维度持续演进的同时,CPU内存与GPU显存的物理分离始终作为底层约束未被触及。本文论证:
- 理论合法性:统一内存符合图灵机和冯·诺依曼架构对存储统一性的基本定义。多处理器共享统一存储是两种计算模型的标准扩展。
- 技术可行性:HBM3E技术已达到100GB+容量和3–5TB/s带宽的参数要求;AMD MI300A已在产品层面验证了CPU+GPU共享HBM的可行性。
- 管理机制完备性:页表机制天然提供地址隔离、权限控制、按需分配、缺页处理和缓存策略管理等全部必要能力,从多核CPU的同构共享内存扩展到CPU-GPU的异构共享内存不引入新的理论障碍。
7.3 历史类比
历史上每一次"回归计算模型本质"的架构变革都产生了深远影响:
- RISC回归指令集简洁性→ARM统治移动计算
- 统一着色器回归计算单元通用性→GPU通用计算爆发
- 统一内存回归存储统一性→待验证的下一个范式跃迁
如同浮点协处理器(i387)从独立芯片集成进CPU后再无人单独购买浮点芯片,当GPU与CPU共享统一内存成为技术常态时,"独立显存"的概念可能同样成为历史。
7.4 展望
本文提出的架构目前在数据中心产品(AMD MI300A)中已获初步验证。从数据中心到专业工作站、再到高端消费级市场的下沉路径,是该架构走向普及的自然技术扩散路线。当消费级统一HBM产品出现时,元宇宙、数字孪生和本地AI+渲染融合等下一代应用将获得其在本地计算层真正需要的架构基础。
参考文献
[1] Turing, A. M. (1936). On computable numbers, with an application to the Entscheidungsproblem. Proceedings of the London Mathematical Society, 2(42), 230–265.
[2] Von Neumann, J. (1945). First draft of a report on the EDVAC. University of Pennsylvania.
[3] Phong, B. T. (1975). Illumination for computer generated pictures. Communications of the ACM, 18(6), 311–317.
[4] Burley, B. (2012). Physically-based shading at Disney. ACM SIGGRAPH Course Notes.
[5] Wihlidal, S. (2016). Optimizing the graphics pipeline with compute. GDC 2016, DICE/Frostbite.
[6] Ning, H., et al. (2023). A survey on the metaverse: The state-of-the-art, technologies, applications, and challenges. IEEE Internet of Things Journal, 10(16), 14671–14688.
[7] Lee, L. H., et al. (2021). All one needs to know about metaverse: A complete survey on technological singularity, virtual ecosystem, and research agenda. arXiv preprint arXiv:2110.05352.
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)