forked from ccf-ai-infra/Intro-ops
3.9 KiB
3.9 KiB
术语表 (Glossary)
GPU 编程
| 英文 | 中文 | 说明 |
|---|---|---|
| operator / op | 算子 | GPU 上执行的计算单元,如 copy、softmax |
| kernel | 核函数 | 在 GPU 上并行执行的函数,由 host 端调用 |
| grid | 网格 | CUDA 中最高层级的线程组织单元,由多个 block 组成 |
| block | 线程块 | grid 的子单元,block 内线程可以通过 shared memory 通信 |
| thread | 线程 | GPU 上最小的执行单元 |
| warp | 线程束 | GPU 调度的最小执行单元(NVIDIA 上为 32 个线程) |
| grid-stride loop | 网格跨步循环 | 让 kernel 处理任意大小输入的技术:每个线程负责多个元素,跨度为 grid 总线程数 |
| shared memory | 共享内存 | block 内线程共享的片上内存(SMEM),速度远超全局内存 |
| global memory | 全局内存 | GPU 的片外显存(HBM/DRAM),容量大但延迟高 |
| register | 寄存器 | 每个线程私有的最快存储 |
| SM (Streaming Multiprocessor) | 流式多处理器 | GPU 上的计算核心单元,一个 GPU 包含多个 SM,每个 SM 可并行执行多个 warp |
| coalesced access | 合并访问 | 相邻线程访问相邻地址,GPU 可将多次访问合并为一次内存事务 |
| stride | 步长 | tensor 在某个维度上相邻元素之间的内存地址间隔(以元素数计) |
| contiguous | 连续 | 描述 tensor 在内存中是否紧密排列、无间隙,合并访问的前提条件 |
| bank conflict | 存储体冲突 | shared memory 中多个线程同时访问同一 bank 的不同地址导致串行化 |
| __syncthreads() | 线程同步 | block 内所有线程到达此处后才能继续,用于 shared memory 写入后同步 |
| reduction | 归约 | 将多个值合并为一个值的操作(求和、求最大等) |
| online softmax | 在线 softmax | 一遍扫描完成 softmax 的算法,无需单独求 max 和 sum |
| occupancy | 占用率 | 每个 SM 上活跃 warp 数与理论最大值的比值,影响隐藏延迟的能力 |
| nvcc | NVIDIA CUDA 编译器 | 将 .cu 文件编译为 GPU 可执行的二进制 |
| CUDA | — | NVIDIA 的 GPU 通用并行计算平台与编程模型 |
数值精度
| 英文 | 中文 | 说明 |
|---|---|---|
| FP32 / float32 | 单精度浮点 | 32 位浮点数,约 7 位有效数字 |
| FP16 / float16 / half | 半精度浮点 | 16 位浮点数,约 3 位有效数字,显存占用为 FP32 的一半 |
| inf / NaN | 无穷/非数 | 浮点溢出或无效运算的结果 |
| tolerance / rtol / atol | 容差 | 测试中允许的数值误差上限 |
框架术语
| 英文 | 中文 | 说明 |
|---|---|---|
| descriptor | 描述符 | 封装算子运行所需全部信息(输入输出 shape、dtype、参数)的对象 |
| tensor_view | 张量视图 | 对 tensor 的轻量级引用,包含数据指针、shape、stride、dtype |
| backend | 后端 | 算子的具体硬件实现(NVIDIA CUDA、MetaX MACA、TileLang) |
| workspace | 工作空间 | kernel 执行时需要的临时内存 |
| launch / dispatch | 启动/分发 | 将 kernel 函数提交到 GPU 执行队列 |
| FFI | 外部函数接口 | Python 调用 C 动态库的机制(本项目用 ctypes) |
TileLang 术语
| 英文 | 中文 | 说明 |
|---|---|---|
| TileLang | — | Python DSL,用 tile 级别的语义描述计算,JIT 编译为 GPU kernel |
| fragment | 片段 | tile 在单个线程上的局部数据块,对应寄存器或 shared memory |
| T.alloc_fragment | 分配片段 | 创建 tile 级别的局部 buffer |
| T.copy | 拷贝 | 在 tile 和全局内存之间搬移数据 |
| T.Parallel | 并行循环 | 循环的每次迭代可并行执行(不依赖前一次迭代的结果) |
| T.Serial | 顺序循环 | 循环必须按序执行(后一次依赖前一次的结果) |
| T.reduce_sum | 归约求和 | 对 fragment 内的元素做求和规约 |
| JIT | 即时编译 | 运行时将 TileLang Python 函数编译为 GPU 机器码 |