Skip to main content
QUICK REVIEW

[论文解读] A GEMM interface and implementation on NVIDIA GPUs for multiple small matrices

Chetan Jhurani, Paul Mullowney|arXiv (Cornell University)|Apr 26, 2013
Parallel Computing and Optimization Techniques参考文献 5被引用 4
一句话总结

本论文提出了一种针对NVIDIA GPU上小矩阵(≤16×16)批量乘法的高性能GEMM接口及CUDA内核实现,通过采用二级主维度接口来减少内存开销并提升数据局部性。该实现相较于Tesla K20c上的cuBLAS批量GEMM,性能提升达30%至600%,单精度实数矩阵大小为16时,峰值性能达216 GFlop/s。

ABSTRACT

We present an interface and an implementation of the General Matrix Multiply (GEMM) routine for multiple small matrices processed simultaneously on NVIDIA graphics processing units (GPUs). We focus on matrix sizes under 16. The implementation can be easily extended to larger sizes. For single precision matrices, our implementation is 30% to 600% faster than the batched cuBLAS implementation distributed in the CUDA Toolkit 5.0 on NVIDIA Tesla K20c. For example, we obtain 104 GFlop/s and 216 GFlop/s when multiplying 100,000 independent matrix pairs of size 10 and 16, respectively. Similar improvement in performance is obtained for other sizes, in single and double precision for real and complex types, and when the number of matrices is smaller. Apart from our implementation, our different function interface also plays an important role in the improved performance. Applications of this software include Finite Element computation on GPUs.

研究动机与目标

  • 解决GPU上小矩阵(≤16×16)GEMM操作的性能瓶颈问题,此类矩阵在有限元方法中极为常见。
  • 克服cuBLAS批量接口的局限性,特别是当矩阵尺寸非16的倍数时性能下降,以及指针数组传参带来的开销。
  • 设计一种基于二级主维度的新接口,以提升数据局部性并减少内存传输开销。
  • 在多种数据类型(单精度/双精度,实数/复数)和矩阵尺寸下实现高性能,且对非16的倍数尺寸的性能下降最小化。
  • 为现代GPU上数千个独立的小矩阵运算提供高效、可移植且高吞吐量的GEMM支持。

提出的方法

  • 基于二级主维度而非双指针数组设计新型GEMM接口,减少内存传输并提升数据合并访问。
  • 实现一个针对小矩阵尺寸优化的CUDA内核,具备合并内存访问模式和高效的寄存器使用。
  • 利用C++模板支持多种数据类型(S/D/C/Z)和矩阵尺寸,实现单一、类型安全且高效的代码实现。
  • 采用统一的批量矩阵内存布局,支持合并的全局内存访问,并减少共享内存中的bank冲突。
  • 优化内核启动参数及网格/块尺寸,以最大化占用率并隐藏内存延迟。
  • 将内核与C++包装函数集成,支持多种操作类型(转置、共轭转置)及标量参数(α, β)。

实验结果

研究问题

  • RQ1与现有的cuBLAS批量实现相比,如何显著提升NVIDIA GPU上小矩阵批量GEMM的性能?
  • RQ2相较于指针数组接口,采用二级主维度的重新设计接口在减少内存传输开销和提升数据局部性方面有多大改善?
  • RQ3在使用所提出的接口与内核时,不同矩阵尺寸(1–16)和数据类型(单精度/双精度,实数/复数)下可实现多大的性能提升?
  • RQ4随着批大小增加,新实现的性能如何扩展?其在非16的倍数尺寸下是否仍能保持高效率?
  • RQ5所提出的接口与内核设计能否推广至其他BLAS例程及硬件平台?

主要发现

  • 所提出的实现相较于cuBLAS批量GEMM,单精度实数矩阵大小为10时性能最高提升达600%,10万对矩阵对的峰值性能达104 GFlop/s。
  • 对于大小为16的矩阵,该实现达到216 GFlop/s(单精度实数)、173 GFlop/s(双精度实数)、609 GFlop/s(单精度复数)和217 GFlop/s(双精度复数),运行于Tesla K20c上。
  • 非16的倍数导致的性能下降显著减少:对于大小15,新内核实现达150 GFlop/s(cuBLAS为105 GFlop/s);对于大小17,实现达150 GFlop/s(cuBLAS为32 GFlop/s)。
  • 仅接口更改(使用二级主维度)即带来显著性能提升,小矩阵的相对性能提升最高达600%。
  • 性能增益在所有数据类型和矩阵尺寸下均保持一致,提升幅度依尺寸与类型而异,范围为30%至600%。
  • 即使在较小批大小下,该实现仍保持高效,且对复数和双精度类型的性能表现优异,单精度复数矩阵大小为15时峰值达504 GFlop/s。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。