MAE GPU 术语词典

设备硬件

16 词
GPU 核心GPU Core 核心是构成 流式多处理器 (SMs) 的主要计算单元。 H100 GPU 流式多处理器的内部架构示意图。图中绿色部分为 GPU 核心,褐红色部分为其他计算单元,橙色部分为调度单元,… CUDA 核心CUDA Core CUDA 核心是执行标量算术指令的 GPU 核心。 H100 流式多处理器(SM)的内部架构图。CUDA 核心和张量核心以绿色显示。请注意张量核心尺寸更大且数量更少。改编自 NVI… CUDA 设备架构CUDA Device Architecture CUDA 全称是 _Compute Unified Device Architecture_(统一计算设备架构)。 根据上下文, CUDA 可以指代多个不同的事物: 一种 总体设备… GPU RAMGPU RAM 在像 H100 这样的高性能数据中心 GPU 中,RAM 位于与处理器芯片相邻的芯片上。改编自维基百科关于 高带宽内存 的页面。 GPU 的底层内存是一种大容量(从数 MB 到数 … 图形/GPU 处理集群Graphics/GPU Processing Cluster · GPC GPC 是一组 纹理处理集群 (TPC)(本身由 流式多处理器 (Streaming Multiprocessor)或 SM 组成)加上一个光栅引擎的集合。显然,有些人使用 NVI… L1 数据缓存L1 Data Cache L1 数据缓存是 流式多处理器 (SM) 的私有内存。 H100 流式多处理器(SM)的内部架构图。浅蓝色部分描绘的是 L1 数据缓存。修改自 NVIDIA 的 H100 白皮书。… 加载/存储单元Load/Store Unit · LSU 加载/存储单元 (Load/Store Unit, LSU) 负责向 GPU 的内存子系统分派加载或存储数据的请求。 H100 流式多处理器(SM)的内部架构图。 加载/存储单元 … 寄存器文件Register File 流式多处理器 (Streaming Multiprocessor) 的寄存器文件是在计算核心 (core) 进行数据操作期间的主要数据存储单元。 H100 流式多处理器(SM)的内… 特殊功能单元Special Function Unit · SFU 流式多处理器 (Streaming Multiprocessors, SMs) 中的特殊功能单元 (Special Function Units, SFUs) 可加速特定算术运算。… 流式多处理器架构Streaming Multiprocessor Architecture 流式多处理器 (SM) 采用特定"架构"进行版本管理,该架构定义了它们与 流式汇编器 (SASS) 代码的兼容性。 采用"Hopper" SM90 架构的流式多处理器。修改自 NV… 流式多处理器Streaming Multiprocessor · SM 当我们 对 GPU 进行编程 时,会生成供其流式多处理器 (Streaming Multiprocessor) 执行的指令序列。 H100 流式多处理器(SM)的内部架构图。图中绿… Tensor CoreTensor Core Tensor Core 也是一种 GPU 核心 (core),能够通过单条指令对整个矩阵进行操作。 H100 流式多处理器(SM)的内部架构图。注意 Tensor Core 数量更… 张量内存加速器Tensor Memory Accelerator · TMA 张量内存加速器 (Tensor Memory Accelerator, TMA) 是 Hopper 和 Blackwell 架构 GPU 中的专用硬件,旨在加速对 GPU 内存 中… Tensor MemoryTensor Memory Tensor Memory(张量内存)是某些 GPU(如 B200)的 流式多处理器 (SM) 中的一种专用内存,用于存储 Tensor Core 的输入和输出。 张量内存的访问受… 纹理处理集群Texture Processing Cluster · TPC 纹理处理集群 (Texture Processing Cluster, TPC) 是一对相邻的 流式多处理器 (Streaming Multiprocessors, SMs)。 在… 线程束调度器Warp Scheduler 流式多处理器 (SM) 的 Warp Scheduler 会在每个时钟周期决定要执行哪一组 线程。 H100 流式多处理器(SM)的内部架构图。其中,Warp 调度器和分发单元以橙…

设备软件

17 词
计算能力Compute Capability 并行线程执行 (Parallel Thread Execution) 指令集中的指令仅与特定的物理 GPU 兼容。用于将物理 GPU 的细节从指令集和 编译器 (compiler)… 协作线程数组Cooperative Thread Array 协作线程数组对应于 CUDA 编程模型 中线程块层次结构的 线程块 级别。改编自 NVIDIA 的 CUDA Refresher: The CUDA Programming Mod… CUDA 编程模型CUDA Programming Model CUDA 编程模型是一种用于对大规模并行处理器进行编程的编程模型。 CUDA 全称是 _Compute Unified Device Architecture_(统一计算设备架构)… CUDA Tile 编程模型CUDA Tile programming model CUDA Tile 编程模型是一种面向 NVIDIA GPU 的、基于分块(Tile-based)的编程模型。 传统的 CUDA 编程模型 向用户程序展现了线程层次结构和[内存层次… 全局内存Global Memory 全局内存是 CUDA 编程模型 中 内存层次结构 的最高层级。它存储在 GPU 显存 中。修改自 NVIDIA 的 CUDA Refresher: The CUDA Program… CUDA 内核CUDA Kernel 单个内核启动对应于 CUDA 编程模型 中的 线程块网格。改编自 NVIDIA 的 CUDA Refresher: The CUDA Programming Model 和 NVI… CUDA 内存层次结构CUDA Memory Hierarchy 共享内存 (Shared Memory) 和 全局内存 (Global Memory) 是 CUDA 编程模型 (CUDA Programming Model) 中的两个内存层次(… 并行线程执行Parallel Thread Execution · PTX 并行线程执行 (Parallel Thread eXecution, PTX) 是一种用于在并行处理器(几乎都是 NVIDIA GPU)的中间表示 (intermediate re… 寄存器Registers 寄存器是 内存层次结构 中与单个 线程 相关联的内存(左图)。改编自 NVIDIA 的 CUDA Refresher: The CUDA Programming Model 和 N… 共享内存Shared Memory 共享内存是与 CUDA 线程组层次结构(左图)中的线程块级别(左图、中图)相关联的抽象内存。改编自 NVIDIA 的 CUDA 复习:CUDA 编程模型 和 NVIDIA CUDA… 流式汇编器Streaming Assembler · SASS 流式汇编器 (Streaming ASSembler, SASS) 是在 NVIDIA GPU 上运行的程序的汇编格式。它是编写人类可读代码的最低级别格式,是 nvcc(NVIDI… 线程块网格Thread Block Grid 线程块网格是 CUDA 编程模型 线程组层次结构的最高层级(左图)。它们映射到多个 流式多处理器 (Streaming Multiprocessor) 上(右图,底部)。改编自 N… CUDA 线程块CUDA Thread Block 线程块是 CUDA 编程模型 线程层次结构中的中间层级(左图)。一个线程块在单个 流式多处理器 (Streaming Multiprocessor) 上执行(右图,中间)。改编自 … CUDA 线程层次结构是什么CUDA Thread Hierarchy CUDA 编程模型 的线程层次结构从单个 线程 到 线程块 再到 线程块网格(左侧),映射到硬件上则从 CUDA 核心 到 流式多处理器 再到整个 GPU(右侧)。改编自 NVID… CUDA 线程CUDA Thread 线程是线程组层次结构中的最低层级(顶部、左侧),并被映射到 流式多处理器 的 核心 上。改编自 NVIDIA 的 CUDA 复习:CUDA 编程模型 和 NVIDIA CUDA C… 线程束Warp 线程束 (Warp) 是一组被共同调度并并行执行的线程 线程。一个线程束中的所有 线程 都被调度到单个 流式多处理器 (SM) 上执行。而单个 SM 通常会执行多个线程束,至少会运… 线程束组Warpgroup Warpgroup(线程束组)是指四个连续 线程束 (warps) 的集合,且该组中第一个线程束的秩(warp-rank)必须是 4 的倍数。 在分发 Warpgroup 级别的指…

主机软件

23 词
cuBLAScuBLAS cuBLAS (CUDA Basic Linear Algebra Subroutines,CUDA 基础线性代数子程序) 是 NVIDIA 对 基础线性代数子程序 (BLAS) … CUDA 二进制工具是什么CUDA Binary Utilities CUDA二进制工具集(CUDA Binary Utilities)是一套用于检查二进制文件内容的工具集合,例如由 NVIDIA CUDA 编译器驱动程序 (nvcc) 输出的文件。… CUDA C++ 编程语言CUDA C++ programming language CUDA C++ 是 CUDA 编程模型 的一种实现,作为 C++ 编程语言的扩展。 为实现 CUDA 编程模型,CUDA C++ 为 C++ 语言添加了若干特性,具体如下: 使用… CUDA Driver APICUDA Driver API CUDA Driver API 是 NVIDIA CUDA 驱动的用户空间组件。 提供了类似 C 标准库的工具函数:例如,用于在 GPU 设备上分配 内存 的函数 cuMalloc… CUDA GraphCUDA Graph CUDA 图 (CUDA Graph) 是一个由核函数 (kernel) 启动操作以及其他工作组成的图结构,主机端(Host)可以将其一次性整体提交给设备端(Device)执行。 … CUDA Runtime APICUDA Runtime API CUDA 运行时 API (CUDA Runtime API) 是对 CUDA 驱动 API CUDA Driver API 的封装,为相同的功能提供了更高级别的编程接口。 CUD… CUDA 软件平台是什么CUDA Software Platform CUDA 软件平台是用于开发 CUDA 程序的软件集合。 CUDA 全称是 _Compute Unified Device Architecture_(统一计算设备架构)。 根据上… cuDNNcuDNN NVIDIA的cuDNN(CUDA Deep Neural Network,CUDA深度神经网络)是一个用于构建GPU加速深度神经网络的基元库。 cuDNN 提供了针对神经网络中频… NVIDIA CUDA 性能分析工具接口NVIDIA CUDA Profiling Tools Interface · CUPTI NVIDIA CUDA性能分析工具接口(CUDA Profiling Tools Interface,简称 CUPTI)提供了一套API,用于分析在 GPU 上执行的 CUDA C… CuTe DSLCuTe DSL CuTe DSL 是一种基于 Python 的领域特定语言(Domain-Specific Language, DSL),用于在保持高开发效率的同时,高性能地编写和动态编译核函数 … CuTeCuTe CUDA 模板库 (CUDA Templates, CuTe) 是 CUTLASS 内部的一个仅包含头文件(Header-only)的 CUDA C++ 库,用于描述和操作由 数据… cuTile BASICcuTile BASIC cuTile BASIC 是 CUDA Tile 编程模型 在 BASIC 编程语言 中的一种实现。 BASIC 是 “Beginner's All-purpose Symboli… CUTLASSCUTLASS CUDA 线性代数子程序与求解器模板库 (CUDA Templates for Linear Algebra Subroutines and Solvers, CUTLASS) 是… libcuda.solibcuda.so 在 Linux 系统上,实现 CUDA Driver API 的二进制共享对象文件的典型名称是 libcuda.so。CUDA程序会动态链接该文件,若缺失通常意味着驱动安装不完整或… libcudart.solibcudart.so 在 Linux 系统中,实现 CUDA Runtime API 的二进制共享对象文件通常名为 libcudart.so。已部署的 CUDA 二进制文件通常会静态链接此文件,但基于 … libnvml.solibnvml.so 在 Linux 系统上,实现 NVML 功能的二进制共享对象文件的典型名称是 libnvml.so。 NVIDIA Nsight SystemsNVIDIA Nsight Systems NVIDIA Nsight Systems 是一款用于 CUDA C++ 程序的性能调试工具。它在图形界面(GUI)中整合了性能分析、追踪和专家系统分析功能。 没有人会一觉醒来就说… NVIDIA CUDA 编译器驱动程序NVIDIA CUDA Compiler Driver · nvcc NVIDIA CUDA 编译器驱动(NVIDIA CUDA Compiler Driver,即 nvcc)是用于编译 CUDA C/C++ 程序的工具链。它输出符合主机 ABI 的… NVIDIA GPU 驱动程序NVIDIA GPU Drivers NVIDIA GPU 驱动程序负责协调主机程序或主机操作系统与 GPU 设备之间的交互。 对于应用程序而言,与 GPU 驱动程序交互的主要接口依次为 CUDA Runtime AP… nvidia.konvidia.ko nvidia.ko 是 Linux 系统下 NVIDIA GPU 驱动程序 的核心二进制 内核模块 文件。 与其他内核模块类似,它以特权模式运行,并代表用户直接与硬件通信 —— 在… nvidia-sminvidia-smi 这个命令行实用程序用于查询和管理由 NVML 管理库暴露的 GPU 状态。其输出(如下所示样本)对于 NVIDIA GPU 用户来说非常熟悉,甚至被戏称为 GPU 界的 Hello… NVIDIA 管理库NVIDIA Management Library · NVML NVIDIA 管理库(NVML)用于监控和管理 NVIDIA GPU 的状态。例如,它可以获取 GPU 的功耗、温度和已分配内存,以及设备的功率限制和功率限制状态等信息。关于这些指… NVIDIA 运行时编译器NVIDIA Runtime Compiler · nvrtc NVIDIA 运行时编译器(NVIDIA Runtime Compiler,简称 nvrtc) 是一个用于 CUDA C 的运行时编译库。它能够将 CUDA C++ 编译为 PTX…

性能

23 词
活动周期active cycle 活动周期指的是 流式多处理器 (Streaming Multiprocessor) 中至少驻留有一个 活动线程束 (active warp) 时钟周期。该 线程束 (warp) 可… 算术带宽arithmetic bandwidth 算术带宽是系统能够执行算术运算的 峰值速率。 它代表了理论上每秒可实现的算术运算吞吐量上限,决定了硬件 屋顶模型 中"计算屋顶"的高度。 在一个完整系统中有多种算术带宽——每组提供… 算术强度arithmetic intensity 算术强度是 内核 (kernel) 中算术操作与内存操作的比率。 在 屋顶线模型 (roofline model) 中,操作/算术强度绘制在横轴上。图表改编自 Williams, … 存储体冲突bank conflict 存储体冲突(bank conflict)指的是当一个 线程束 中的多个 线程 同时请求 共享内存 中同一存储体(bank)但不同地址的数据时出现的现象。 > 当 线程 访问不… 分支效率branch efficiency 分支效率用于衡量的是当遇到条件语句时,线程束 (warp) 中的所有 线程 (thread) 选择相同执行路径的频率。 分支效率的计算方式为:统一控制流决策数量与执行的分支指总令数… 计算受限的含义是什么What does it mean to be compute-bound 计算受限的 内核 (Kernel) 受限于 CUDA 核心 (CUDA Core) 或 张量核心 (Tensor Core) 的 算术带宽 (arithmetic bandwidt… 发射效率issue efficiency 发射效率 (Issue efficiency) 用于衡量 线程束调度器 通过从 就绪线程束 发射指令,使执行流水线保持忙碌状态的效率。 在该示意图的四个时钟周期中,有三个周期发射了… 延迟隐藏latency hiding 延迟隐藏是一种通过 并发运行多个长延迟操作 来掩盖长延迟操作的策略。 高性能 GPU 程序通过交错执行多个 线程 (thread) 来隐藏延迟。这使得程序即使面对较长的指令延迟也能… 利特尔法则Little's Law 利特尔法则(Little's Law)确定了通过吞吐量完全 隐藏延迟 (hide latency) 所需的并发量。 并发量 (操作数) = 延迟 (秒) * 吞吐量 (操作数/秒)… 内存带宽memory bandwidth 当代GPU的内存带宽以TB/秒为单位衡量。例如,B200 GPU与其HBM3e内存之间的(双向)内存带宽为8 TB/秒。这远低于这些GPU中张量核心的算术带宽,从而导致脊点算术强度… 内存受限What does it mean to be memory-bound 内存受限的 内核 受限于 GPU 的 内存带宽。 屋顶线图(如上图所示)可帮助识别程序性能是受计算能力、内存带宽还是其他因素的瓶颈影响。图表改编自 Williams, Waterm… 内存合并Memory Coalescing 内存合并(Memory Coalescing)是一种硬件技术,通过在单次 物理 内存访问中处理多个 逻辑 内存读取请求,来提高 内存带宽 的利用率。 内存合并发生在 全局内存 访问… 占用率occupancy 占用率(Occupancy)是指设备上 活跃线程束 数量与最大 活跃线程束 数量的比值。 每个周期有4个线程束槽位,共4个时钟周期,因此总共有16(4×4)个线程束槽位,其中15个… 开销overhead 开销延迟是指未执行有用工作所花费的时间。 与在 计算受限 或 内存受限 下的 性能瓶颈 时 GPU 以最大速度工作的情况不同,由开销引起的延迟代表 GPU 处于等待接收任务的状态。… 峰值速率peak rate 峰值速率是指硬件系统能够完成工作的理论最大速率。 峰值速率代表了当所有执行单元都以最高效率满负荷运行时,GPU 性能的绝对上限。它假设在理想运行状态下,即没有任何资源限制(如 寄存… 性能瓶颈performance bottleneck 瓶子的实际瓶颈会限制液体倒出的速度;系统中类似的性能瓶颈则会限制任务完成的效率。 像这样的 屋顶线图 用于快速识别吞吐量导向型系统中的性能瓶颈。改编自 Williams, Wate… 流水线利用率pipe utilization 流水线利用率用于衡量 内核 (kernel) 对每个 流式多处理器 (Streaming Multiprocessor, SM) 内执行资源的利用效率。 每个 流式多处理器 (SM… 寄存器压力register pressure 寄存器压力是一个形象的术语,用于描述 寄存器文件 成为 性能瓶颈 时的情况。 在 并行线程执行 (PTX) 语言中,寄存器 是虚拟的且数量不受限制,但 流式多处理器 (SM) 的 … 屋顶线模型roofline model 屋顶线模型是一种简化的、可视化的性能模型,用于快速判断程序是受 内存带宽 限制还是算术带宽 限制。 在该模型中,位于脊点左侧的 内核 受 内存子系统带宽限制,位于脊点右侧的 内核 … 记分板scoreboard stall 当某条指令由于依赖先前指令的结果而无法发射(Issue)时,就会发生记分板停顿 (Scoreboard Stall)。 记分板 (Scoreboard) 是一种硬件结构,用于追踪哪… SM 利用率SM utilization SM 利用率衡量 流式多处理器 (SM) 执行指令的时间百分比。 SM 利用率类似于 `nvidia-smi` 报告中更为人熟知的 内核利用率,但粒度更细。它并非报告 内核 在 G… 线程束分化warp divergence 线程束分化 (warp divergence) 发生在 线程束 (warp) 内的线程因控制流语句而执行不同路径时出现的现象。 例如,考虑以下 内核 (kernel): __glo… 线程束执行状态warp execution state 运行 内核 的 线程束 状态可通过多个非互斥的形容词来描述:活跃的(active)、停滞的(stalled)、就绪的(eligible)和已选择的(selected)。 线程束的执…