张芷铭的个人博客

cuBLAS 和 cuDNN 是 NVIDIA GPU 计算生态的两大核心库,分别专注于通用线性代数和深度学习加速。

核心对比

特性cuBLAScuDNN
定位通用密集线性代数库专用深度神经网络加速库
核心功能向量、矩阵运算(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 协同处理

使用流程

  1. 创建句柄 (cublasCreate)
  2. 分配 GPU 内存 (cudaMalloc)
  3. 传输数据 (cublasSetVector/Matrix)
  4. 执行计算 (cublasSgemm)
  5. 取回结果 (cublasGetVector/Matrix)
  6. 释放资源

cuDNN

深度学习专用加速库。

核心优化

  • 内核融合:卷积 + 偏置 + ReLU 融合为单内核
  • 自动算法选择:启发式或基准测试选择最优算法
  • Graph API:计算图形式定义网络,全局优化

使用流程

  1. 创建句柄 (cudnnCreate)
  2. 定义描述符(张量、滤波器、操作)
  3. 选择算法 (cudnnGetConvolutionForwardAlgorithm)
  4. 执行计算 (cudnnConvolutionForward)
  5. 释放资源

选择指南

场景推荐
基础矩阵运算cuBLAS
深度学习模型cuDNN
实际开发PyTorch/TensorFlow(已封装)

cuDNN 底层调用 cuBLAS 执行矩阵乘法,两者协同工作。大多数情况下,直接使用高层框架即可享受 GPU 加速。

Comments