2025-11-20T19:52:15.672703

A GPU-resident Memory-Aware Algorithm for Accelerating Bidiagonalization of Banded Matrices

Ringoot, Alomairy, Edelman
The reduction of a banded matrix to a bidiagonal form is a crucial step in the Singular Value Decomposition (SVD), a cornerstone of scientific computing and AI. Despite being a highly parallel algorithm, it was previously believed to be unsuitable for GPU computation because it is memory bandwidth-bound. Recent developments in GPU hardware, including larger L1 memory per Streaming Multiprocessor/Compute Unit, have changed that. We present the first GPU algorithm for reducing a banded matrix to bidiagonal form as part of the NextLA.jl open-source software package. Our algorithm is based on previous CPU-based multicore parallel cache-efficient bulge chasing algorithms and adapted to optimize for GPU throughput. We leverage Julia Language's Array abstractions and KernelAbstractions to implement a single hardware- and data precision-agnostic function on NVIDIA, AMD, Intel, and Apple Metal GPUs for half, single, and double precision, and examine performance optimization across hardware architectures and data precision. We also develop a hardware-aware performance model and identify key hyperparameters, such as inner tilewidth and block concurrency, that govern optimal GPU execution for bandwidth-bound workloads. We demonstrate highly parallel bandwidth-bound algorithm on the GPU can outperform CPU-based implementations: the GPU algorithm outperforms multithreaded CPU High-Performance libraries PLASMA and SLATE as of matrix size 1024 x 1024 and by a factor over 100 for matrices of 32k x 32k. In addition, the performance of the algorithm increases linearly with matrix bandwidth size, making faster reduction of larger matrix bandwidths now also possible. With this work, we break memory bandwidth barriers, as well as matrix bandwidth barriers, resulting in orders-of-magnitude faster algorithms for the reduction of banded matrices to bidiagonal form on the GPU.
academic

A GPU-resident Memory-Aware Algorithm for Accelerating Bidiagonalization of Banded Matrices

基本信息

  • 论文ID: 2510.12705
  • 标题: A GPU-resident Memory-Aware Algorithm for Accelerating Bidiagonalization of Banded Matrices
  • 作者: Evelyne Ringoot, Rabab Alomairy, Alan Edelman (MIT Computer Science & AI Laboratory)
  • 分类: cs.DC (Distributed, Parallel, and Cluster Computing), cs.MS (Mathematical Software)
  • 发表时间: 2025年10月14日 (arXiv预印本)
  • 论文链接: https://arxiv.org/abs/2510.12705

摘要

本文提出了首个GPU常驻的内存感知算法,用于加速带状矩阵到双对角矩阵的约简,这是奇异值分解(SVD)中的关键步骤。尽管该算法具有高度并行性,但由于其内存带宽约束特性,此前被认为不适合GPU计算。随着GPU硬件的发展,特别是每个流多处理器/计算单元更大的L1内存,这一情况得以改变。作者基于先前的CPU多核并行缓存高效的bulge-chasing算法,并针对GPU吞吐量进行优化。该算法在NVIDIA、AMD、Intel和Apple Metal GPU上实现了硬件和数据精度无关的单一函数,支持半精度、单精度和双精度计算。实验表明,该GPU算法在1024×1024矩阵规模开始超越多线程CPU高性能库PLASMA和SLATE,在32k×32k矩阵上性能提升超过100倍。

研究背景与动机

问题定义

奇异值分解(SVD)是科学计算、机器学习和数据分析中的基础数值工具,广泛应用于主成分分析、潜在语义索引、低秩逼近和矩阵补全等领域。现代大规模硬件上的SVD通常采用三阶段过程:

  1. 稠密矩阵到带状矩阵的约简
  2. 带状矩阵到双对角矩阵的约简(bulge-chasing)
  3. 双对角矩阵到对角矩阵的约简

研究动机

虽然第一阶段和第三阶段的GPU实现已被广泛研究,但第二阶段在现代GPU上仍未得到充分探索。Dongarra等人在2014年指出"加速器在处理内存约束的细粒度计算任务(如bulge chasing)时表现不佳,限制了GPU实现第二阶段的潜在收益"。

技术机遇

近年来GPU架构的进步,特别是:

  • 每个流多处理器L1缓存大小的扩展
  • 更高的片上带宽
  • 更灵活的内存访问模式
  • 更好的缓存重用和更大的内存层次结构

这些改进显著改变了内存-计算平衡,为内存约束算法的重新设计创造了新机遇。

核心贡献

  1. 首个GPU常驻内存感知bulge-chasing算法:提出了首个用于带状矩阵到双对角矩阵约简的GPU原生算法,充分利用最新一代高性能GPU的优越内存特性,性能比优化的CPU实现提升10-100倍。
  2. 大带宽矩阵的缓存高效bulge-chasing策略:通过逐步带宽约简的新型缓存高效大带宽策略,GPU算法能够处理比以前更大的带宽,改变了大型SVD中第一阶段和第二阶段之间的最优带宽权衡。
  3. 开源硬件无关和数据精度无关实现:基于Julia语言抽象实现的开源库,单一函数定义支持NVIDIA、AMD、Intel和Apple GPU上的单精度、半精度和双精度计算。

方法详解

任务定义

给定一个带状矩阵A ∈ ℝⁿˣⁿ,带宽为BW,目标是通过正交变换将其约简为双对角矩阵B,使得A = UBVᵀ,其中U和V是正交矩阵。

算法架构

核心算法流程

Algorithm 1: 使用Householder向量的带状矩阵到双对角矩阵约简
输入: 带宽BW,内部瓦片宽度TW,矩阵大小n
1: for 带宽约简 i = (BW-1)/TW → 1 do
2:   目标带宽 TBW = 1 + i·TW  
3:   for 并行:每行 R = 1→n do
4:     行bulge k = R
5:     for 每个行bulge: j = 0, j+=1 do
6:       if 3(R-1) < j and k ≤ n then
7:         计算第k行的HH向量以消除TW个元素并应用到下方行
8:         计算最左生成列bulge的HH向量并应用到右侧列
9:         更新k值
10:      end if
11:    end for
12:  end for
13: end for

内存感知GPU内核实现

Algorithm 2: 内存感知GPU内核,每块TPB个线程
1: 线程内存: Ai (TW+1)
2: 块内存: X (TW+1)  
3: 块内所有线程协作: X ← A[k,..]
4: 同步线程
5: 块内所有线程协作: HH(X)
6: 块内所有线程协作: A[k,..]← X
7: 同步线程
8: for l: 0→(CBW + TW)/TPB - 1 do
9:   线程i: 计算行 r = k + l·CPB + i
10:  Ai ← A[r, ...]
11:  HH(X, Ai)  
12:  A[r, ...]← Ai
13: end for

技术创新点

1. 带宽分块策略

将矩阵分割为带宽瓦片,按连续带宽块执行约简,而非一次约简整个带宽。这种分块策略实现:

  • 更好的缓存重用
  • 改进的内存局部性
  • 减少同步开销

2. 受控块调度

引入Max blocks参数限制每个GPU执行单元的并发线程块数量。当算法要求的bulge-chasing块数超过限制时,采用软件级循环展开,单个块被分配多个任务并在同一内核启动中顺序执行。

3. 三周期分离策略

为确保正确性并启用并行性,算法在连续行的扫描之间强制执行三周期分离。即每三个行bulge完成后,下一行可以开始扫描而不会重叠数据访问。

实验设置

硬件环境

  • CPU: Intel Xeon Platinum 8462Y+ 32核64线程
  • GPU: 包括NVIDIA A100/H100/RTX4060、AMD MI250X/MI300X、Intel PVC 1100、Apple M1

对比基准

  • PLASMA (v25.5.27): 并行线性代数软件包
  • SLATE (v2024.10.29): 可扩展线性代数库
  • CUBLAS geam: 矩阵加法内核作为内存带宽参考

评价指标

  • 运行时间和加速比
  • 内存吞吐量(DRAM、L1、L2)
  • 数值精度(相对误差)
  • 硬件资源利用率

测试配置

  • 矩阵大小:1024×1024 到 65k×65k
  • 带宽范围:32 到 512
  • 数据精度:FP16、FP32、FP64

实验结果

主要性能结果

GPU vs CPU库性能对比

  • 小带宽(32):GPU实现比PLASMA快100-1000倍,比SLATE快10-300倍
  • 大带宽(512):GPU版本比SLATE快2-9倍,比PLASMA快0.9-6倍
  • 矩阵规模效应:GPU性能随矩阵大小增长速度超过CPU实现

跨硬件性能表现

  • NVIDIA H100: 基准性能
  • AMD MI300X: 约1.5-2倍性能下降
  • Intel PVC: 约20倍性能下降(尽管缓存更大)
  • Apple M1: 在消费级GPU中表现良好

超参数调优结果

关键发现:

  1. 内部瓦片宽度是最重要的性能因子
    • FP32最优值:32(对应128字节缓存行)
    • FP64最优值:16(对应128字节缓存行)
  2. 参数重要性随带宽变化
    • 带宽32:最大块数更关键
    • 带宽128:每块线程数更关键

数值精度分析

  • FP64: 误差接近机器精度
  • FP32: 可预测的大小依赖性误差增长
  • FP16: 在16k×16k矩阵内保持可接受精度

硬件演进影响

  • MI300X相比MI250X显著提升(L1缓存翻倍,增加统一L2.5层)
  • H100相比A100持续优于(L1缓存增33%,L2增25%)

相关工作

SVD求解器发展

  • CPU实现:PLASMA、SBR、FLAME、ELPA、LAPACK等专注于分块Householder变换和bulge-chasing算法
  • GPU实现:主要集中在第一阶段(稠密到带状)或完整的一阶段SVD,避免不规则内存访问

特征值求解器对比

与SVD求解器不同,对称带状特征值问题的二阶段求解器在混合CPU-GPU系统上有大量工作,但非对称带状到双对角约简研究滞后。

Bulge-chasing算法

最初作为并行算法提出,但CPU上的双对角情况研究极其稀少。相比之下,对称带状到三对角和上Hessenberg形式的bulge-chasing研究更为广泛。

结论与讨论

主要结论

  1. 突破内存带宽障碍:证明了内存约束的线性代数算法在现代GPU上不仅可行,而且能显著超越CPU性能
  2. 硬件特性的重要性:L1/L2缓存延迟比大小更关键,强调了低延迟快速内存访问的重要性
  3. 算法设计原则:最优性能来自原则性算法设计、缓存感知参数化和可移植编译器基础设施

局限性

  1. GPU占用率模型:算法在初始阶段的GPU块数显著低于可用执行单元,需要足够大的矩阵才能充分利用GPU资源
  2. 寄存器溢出:高内部瓦片宽度可能导致寄存器溢出,影响性能
  3. 硬件依赖性:不同GPU架构间性能差异显著,需要硬件特定调优

未来方向

  1. 架构优化:利用CUDA 13.0等新特性如共享内存寄存器溢出
  2. 算法扩展:探索更大带宽的处理策略
  3. 完整SVD流水线:构建完全GPU常驻的SVD流水线

深度评价

优点

  1. 开创性贡献:首次实现GPU常驻的带状到双对角约简算法,填补了重要技术空白
  2. 实用价值高:显著的性能提升(10-1000倍)使其具有重要应用价值
  3. 技术创新:巧妙的带宽分块和内存感知设计适合GPU架构特点
  4. 可移植性强:基于Julia的单源码实现支持多厂商GPU和多精度

不足

  1. 理论分析不足:缺乏算法复杂度的理论分析和收敛性证明
  2. 测试范围有限:主要在合成矩阵上测试,缺乏实际应用场景验证
  3. 参数调优复杂:需要针对不同硬件进行复杂的超参数调优

影响力

  1. 学术意义:重新定义了内存约束算法在GPU上的性能边界
  2. 实用价值:为大规模科学计算和AI应用提供了关键技术支撑
  3. 生态贡献:开源实现促进了跨平台GPU线性代数生态发展

适用场景

  • 大规模矩阵SVD计算
  • 科学计算和工程仿真
  • 机器学习中的降维和特征提取
  • 需要高性能线性代数的GPU应用

参考文献

论文引用了86篇相关文献,涵盖了GPU计算、线性代数算法、Julia语言生态等多个领域的重要工作,为研究提供了坚实的理论基础。