2.1. 什么是 CUDA 设备架构?
CUDA 全称是 Compute Unified Device Architecture(统一计算设备架构)。
根据上下文, CUDA 可以指代多个不同的事物:
一种 总体设备架构,或是适用于该设计架构的 CUDA 编程模型,或是扩展高级语言(如 C 语言)以添加该编程模型的 CUDA 软件平台。
CUDA 的设计愿景在 Lindholm 等人于 2008 年 发布的白皮书中进行了阐述。我们强烈推荐这篇论文,它是 NVIDIA 文档中许多观点、图表乃至特定表述的原始出处。
本文重点关注 CUDA 的 设备架构 部分。 “统一计算设备架构” 的核心特点是相较于前代 GPU 架构更加简洁。
在 GeForce 8800 及其衍生的 Tesla 数据中心 GPU 之前,NVIDIA GPU 采用复杂的流水线着色器架构设计,该架构将软件着色器阶段映射到异构的、专门的硬件单元上。这种架构对软件和硬件工程师都构成了挑战:它要求软件工程师将程序映射到固定流水线中,同时迫使硬件工程师猜测流水线各步骤间的负载比例。
固定流水线设备架构 (G71) 示意图。请注意存在用于处理片段和顶点着色的独立处理器组。改编自 Fabien Sanglard 的博客。
采用统一架构的 GPU 设备则要简单得多:其硬件单元完全统一,每个单元都能够执行多种计算任务。这些单元被称为 流式多处理器 (SM) ,它们的主要子组件包括 CUDA 核心 以及(较新型号的 GPU )张量核心。
统一计算设备架构 (G80) 示意图。请注意图中没有区分不同的处理器类型——所有有意义的计算均由图中央相同的 流式多处理器 完成,这些处理器接收来自顶点、几何和像素线程的指令。修改自 Peter Glazkowsky 2009 年关于 Fermi 架构的白皮书。
关于 CUDA 硬件架构的历史和设计的通俗介绍,请参阅 Fabien Sanglard 的这篇博客文章。该博客文章引用了高质量的资料来源,例如 NVIDIA 的 Fermi 计算架构白皮书。此外 Lindholm 等人在 2008 年 介绍 Tesla 架构的白皮书内容详实且文笔出色。而 NVIDIA 关于 Tesla P100 的白皮书 虽学术性稍弱,但记录了对于当今大规模神经网络工作负载至关重要的一系列特性的引入过程,例如 NVLink 和 封装内高带宽内存。