cuBLAS 和 cuDNN 是 NVIDIA GPU 计算生态的两大核心库,分别专注于通用线性代数和深度学习加速。
核心对比
| 特性 | cuBLAS | cuDNN |
|---|---|---|
| 定位 | 通用密集线性代数库 | 专用深度神经网络加速库 |
| 核心功能 | 向量、矩阵运算(GEMM) | 卷积、池化、归一化、激活函数 |
| 数据结构 | 稠密向量/矩阵 | 多格式张量(NCHW, NHWC) |
| 优化方向 | 大规模线性代数吞吐量 | 计算融合与内存访问优化 |
| 应用场景 | 科学计算、基础机器学习 | 深度学习训练/推理 |
cuBLAS
NVIDIA 对标准 BLAS 规范的 GPU 实现。
API 层级
| Level | 操作类型 | 示例 |
|---|---|---|
| 1 | 向量-向量 | 点积、向量加 |
| 2 | 矩阵-向量 | 矩阵向量乘 |
| 3 | 矩阵-矩阵 | GEMM(核心) |
关键特性
- 列优先存储:兼容 FORTRAN 传统
- 精度支持:FP32/FP64/FP16/BF16/FP8
- cuBLASLt:轻量级 API,支持操作融合(矩阵乘 + 偏置 + 激活)
- cuBLASXt:跨 GPU 或 CPU/GPU 协同处理
使用流程
- 创建句柄 (
cublasCreate) - 分配 GPU 内存 (
cudaMalloc) - 传输数据 (
cublasSetVector/Matrix) - 执行计算 (
cublasSgemm) - 取回结果 (
cublasGetVector/Matrix) - 释放资源
cuDNN
深度学习专用加速库。
核心优化
- 内核融合:卷积 + 偏置 + ReLU 融合为单内核
- 自动算法选择:启发式或基准测试选择最优算法
- Graph API:计算图形式定义网络,全局优化
使用流程
- 创建句柄 (
cudnnCreate) - 定义描述符(张量、滤波器、操作)
- 选择算法 (
cudnnGetConvolutionForwardAlgorithm) - 执行计算 (
cudnnConvolutionForward) - 释放资源
选择指南
| 场景 | 推荐 |
|---|---|
| 基础矩阵运算 | cuBLAS |
| 深度学习模型 | cuDNN |
| 实际开发 | PyTorch/TensorFlow(已封装) |
cuDNN 底层调用 cuBLAS 执行矩阵乘法,两者协同工作。大多数情况下,直接使用高层框架即可享受 GPU 加速。
张芷铭的个人博客
Comments