以上途径均构建于 CUDA 平台之上。本文后续聚焦于直接编写 CUDA 代码的核心概念。
4. CUDA 编程模型
4.1 异构系统:Host 与 Device
CUDA 编程模型假设一个异构计算系统,即同时包含 CPU 和 GPU 的系统。
术语含义HostCPU 及其直接连接的内存(主机内存)DeviceGPU 及其直接连接的显存(设备内存)Host Code运行在 CPU 上的代码Device Code / Kernel运行在 GPU 上的代码CUDA 应用始终从 CPU 开始执行。Host Code 通过 CUDA API 完成三件事:
在 Host 内存和 Device 内存之间拷贝数据
启动(Launch)核函数(Kernel)在 GPU 上并行执行
等待数据拷贝或 GPU 执行完成
CPU 和 GPU 可以同时运行,最优性能通常来自最大化两者的利用率。
4.2 GPU 硬件:SM 与 GPC
对于 CUDA 编程而言,GPU 可以被理解为以下硬件层次:
GPU
└── GPC(图形处理集群,Graphics Processing Cluster)×N
└── SM(流多处理器,Streaming Multiprocessor)×M
├── 本地寄存器文件(Register File)
├── 统一数据缓存(Unified Data Cache)
│ ├── L1 Cache(自动缓存)
│ └── Shared Memory(可编程共享内存)
└── 多个功能计算单元(ALU 等)
复制代码
每个 SM 内部的 Unified Data Cache 在物理上是同一块资源,但可以在运行时配置 L1 Cache 和 Shared Memory 的比例分配。
下图展示了 GPU 的完整硬件架构: