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

Un Algoritmo Consciente de Memoria Residente en GPU para Acelerar la Bidiagonalización de Matrices de Banda

Información Básica

  • ID del Artículo: 2510.12705
  • Título: A GPU-resident Memory-Aware Algorithm for Accelerating Bidiagonalization of Banded Matrices
  • Autores: Evelyne Ringoot, Rabab Alomairy, Alan Edelman (MIT Computer Science & AI Laboratory)
  • Clasificación: cs.DC (Computación Distribuida, Paralela y en Clúster), cs.MS (Software Matemático)
  • Fecha de Publicación: 14 de octubre de 2025 (preimpresión en arXiv)
  • Enlace del Artículo: https://arxiv.org/abs/2510.12705

Resumen

Este artículo propone el primer algoritmo residente en GPU consciente de memoria para acelerar la reducción de matrices de banda a matrices bidiagonales, un paso crítico en la descomposición de valores singulares (SVD). Aunque el algoritmo posee un alto grado de paralelismo, anteriormente se consideraba inadecuado para computación en GPU debido a sus características de restricción de ancho de banda de memoria. Esta situación ha cambiado con la evolución del hardware de GPU, particularmente con memorias L1 más grandes en cada multiprocesador de flujo/unidad de cómputo. Los autores se basan en algoritmos previos de bulge-chasing eficientes en caché para múltiples núcleos de CPU y los optimizan para el rendimiento de GPU. El algoritmo implementa una única función independiente del hardware y precisión de datos en GPU de NVIDIA, AMD, Intel y Apple Metal, soportando cálculos de media precisión, precisión simple y doble precisión. Los experimentos demuestran que el algoritmo de GPU supera a la biblioteca de alto rendimiento multihilo PLASMA y SLATE en matrices de escala 1024×1024, con mejoras de rendimiento superiores a 100 veces en matrices de 32k×32k.

Antecedentes de Investigación y Motivación

Definición del Problema

La descomposición de valores singulares (SVD) es una herramienta numérica fundamental en computación científica, aprendizaje automático y análisis de datos, con aplicaciones generalizadas en análisis de componentes principales, indexación semántica latente, aproximación de bajo rango y completación de matrices. El SVD en hardware moderno a gran escala típicamente adopta un proceso de tres etapas:

  1. Reducción de matriz densa a matriz de banda
  2. Reducción de matriz de banda a matriz bidiagonal (bulge-chasing)
  3. Reducción de matriz bidiagonal a matriz diagonal

Motivación de la Investigación

Aunque las implementaciones en GPU de la primera y tercera etapas han sido ampliamente estudiadas, la segunda etapa permanece insuficientemente explorada en GPU modernas. Dongarra et al. señalaron en 2014 que "los aceleradores funcionan mal al procesar tareas de cómputo de grano fino restringidas por memoria (como bulge chasing), limitando las ganancias potenciales de implementaciones en GPU de la segunda etapa".

Oportunidad Técnica

Los avances recientes en arquitectura de GPU, particularmente:

  • Expansión del tamaño de caché L1 por multiprocesador de flujo
  • Mayor ancho de banda en chip
  • Patrones de acceso a memoria más flexibles
  • Mejor reutilización de caché y jerarquía de memoria más grande

Estos mejoras han cambiado significativamente el equilibrio memoria-cómputo, creando nuevas oportunidades para rediseño de algoritmos restringidos por memoria.

Contribuciones Principales

  1. Primer algoritmo bulge-chasing residente en GPU consciente de memoria: Propone el primer algoritmo nativo de GPU para reducción de matrices de banda a bidiagonales, aprovechando plenamente las características de memoria superiores de la generación actual de GPU de alto rendimiento, con mejoras de rendimiento de 10-100 veces respecto a implementaciones de CPU optimizadas.
  2. Estrategia bulge-chasing eficiente en caché para matrices de banda grande: A través de una nueva estrategia eficiente en caché de reducción de banda progresiva, el algoritmo de GPU puede procesar anchos de banda más grandes que antes, alterando el equilibrio de ancho de banda óptimo entre la primera y segunda etapas en SVD a gran escala.
  3. Implementación de código abierto independiente del hardware y precisión de datos: Biblioteca de código abierto implementada con abstracciones del lenguaje Julia, con una única definición de función que soporta cálculos de precisión simple, media y doble en GPU de NVIDIA, AMD, Intel y Apple.

Detalles del Método

Definición de Tarea

Dada una matriz de banda A ∈ ℝⁿˣⁿ con ancho de banda BW, el objetivo es reducirla a una matriz bidiagonal B mediante transformaciones ortogonales, tal que A = UBVᵀ, donde U y V son matrices ortogonales.

Arquitectura del Algoritmo

Flujo del Algoritmo Principal

Algoritmo 1: Reducción de Matriz de Banda a Bidiagonal usando Vectores de Householder
Entrada: Ancho de banda BW, ancho de mosaico interno TW, tamaño de matriz n
1: para reducción de ancho de banda i = (BW-1)/TW → 1 hacer
2:   Ancho de banda objetivo TBW = 1 + i·TW  
3:   para paralelo: cada fila R = 1→n hacer
4:     bulge de fila k = R
5:     para cada bulge de fila: j = 0, j+=1 hacer
6:       si 3(R-1) < j y k ≤ n entonces
7:         Calcular vector HH para fila k para eliminar TW elementos y aplicar a filas inferiores
8:         Calcular vector HH para bulge de columna más a la izquierda y aplicar a columnas derechas
9:         Actualizar valor de k
10:      fin si
11:    fin para
12:  fin para
13: fin para

Implementación de Núcleo GPU Consciente de Memoria

Algoritmo 2: Núcleo GPU Consciente de Memoria, TPB hilos por bloque
1: Memoria de hilo: Ai (TW+1)
2: Memoria de bloque: X (TW+1)  
3: Todos los hilos en bloque colaboran: X ← A[k,..]
4: Sincronizar hilos
5: Todos los hilos en bloque colaboran: HH(X)
6: Todos los hilos en bloque colaboran: A[k,..]← X
7: Sincronizar hilos
8: para l: 0→(CBW + TW)/TPB - 1 hacer
9:   Hilo i: Calcular fila r = k + l·CPB + i
10:  Ai ← A[r, ...]
11:  HH(X, Ai)  
12:  A[r, ...]← Ai
13: fin para

Puntos de Innovación Técnica

1. Estrategia de Particionamiento de Ancho de Banda

Divide la matriz en mosaicos de ancho de banda, ejecutando la reducción por bloques de ancho de banda consecutivos, en lugar de reducir todo el ancho de banda de una vez. Esta estrategia de particionamiento logra:

  • Mejor reutilización de caché
  • Localidad de memoria mejorada
  • Reducción de sobrecarga de sincronización

2. Programación de Bloques Controlada

Introduce un parámetro Max blocks que limita la cantidad de bloques de hilos concurrentes por unidad de ejecución de GPU. Cuando el número de bloques de bulge-chasing requeridos excede el límite, emplea desenrollamiento de bucle a nivel de software, donde un único bloque se asigna múltiples tareas y se ejecutan secuencialmente en el mismo lanzamiento de núcleo.

3. Estrategia de Separación de Tres Ciclos

Para garantizar corrección y habilitar paralelismo, el algoritmo fuerza separación de tres ciclos entre escaneos de filas consecutivas. Es decir, después de completar tres bulges de fila, la siguiente fila puede comenzar a escanear sin superponer accesos a datos.

Configuración Experimental

Entorno de Hardware

  • CPU: Intel Xeon Platinum 8462Y+ 32 núcleos 64 hilos
  • GPU: Incluyendo NVIDIA A100/H100/RTX4060, AMD MI250X/MI300X, Intel PVC 1100, Apple M1

Puntos de Referencia de Comparación

  • PLASMA (v25.5.27): Paquete de Álgebra Lineal Paralela
  • SLATE (v2024.10.29): Biblioteca de Álgebra Lineal Escalable
  • CUBLAS geam: Núcleo de suma de matrices como referencia de ancho de banda de memoria

Métricas de Evaluación

  • Tiempo de ejecución y factor de aceleración
  • Rendimiento de memoria (DRAM, L1, L2)
  • Precisión numérica (error relativo)
  • Utilización de recursos de hardware

Configuración de Pruebas

  • Tamaño de matriz: 1024×1024 a 65k×65k
  • Rango de ancho de banda: 32 a 512
  • Precisión de datos: FP16, FP32, FP64

Resultados Experimentales

Resultados Principales de Rendimiento

Comparación de Rendimiento GPU vs Bibliotecas de CPU

  • Ancho de banda pequeño (32): Implementación en GPU 100-1000 veces más rápida que PLASMA, 10-300 veces más rápida que SLATE
  • Ancho de banda grande (512): Versión GPU 2-9 veces más rápida que SLATE, 0.9-6 veces más rápida que PLASMA
  • Efecto de escala de matriz: El rendimiento de GPU crece más rápido que las implementaciones de CPU con el tamaño de matriz

Rendimiento entre Hardware

  • NVIDIA H100: Rendimiento de referencia
  • AMD MI300X: Aproximadamente 1.5-2 veces reducción de rendimiento
  • Intel PVC: Aproximadamente 20 veces reducción de rendimiento (a pesar de caché más grande)
  • Apple M1: Buen rendimiento entre GPU de consumidor

Resultados de Ajuste de Hiperparámetros

Hallazgos clave:

  1. Ancho de mosaico interno es el factor de rendimiento más importante
    • Valor óptimo FP32: 32 (correspondiente a línea de caché de 128 bytes)
    • Valor óptimo FP64: 16 (correspondiente a línea de caché de 128 bytes)
  2. Importancia de parámetros varía con ancho de banda:
    • Ancho de banda 32: Número máximo de bloques más crítico
    • Ancho de banda 128: Hilos por bloque más crítico

Análisis de Precisión Numérica

  • FP64: Error cercano a precisión de máquina
  • FP32: Crecimiento de error predecible dependiente del tamaño
  • FP16: Mantiene precisión aceptable dentro de matrices de 16k×16k

Impacto de Evolución de Hardware

  • MI300X muestra mejora significativa respecto a MI250X (caché L1 duplicado, añade capa L2.5 unificada)
  • H100 continúa superando a A100 (caché L1 aumentado 33%, L2 aumentado 25%)

Trabajo Relacionado

Desarrollo de Solucionadores SVD

  • Implementaciones de CPU: PLASMA, SBR, FLAME, ELPA, LAPACK, etc., enfocados en transformaciones de Householder en bloques y algoritmos bulge-chasing
  • Implementaciones de GPU: Principalmente concentradas en la primera etapa (densa a banda) o SVD de una sola etapa, evitando accesos a memoria irregular

Comparación con Solucionadores de Valores Propios

A diferencia de solucionadores SVD, hay trabajo extenso en sistemas híbridos CPU-GPU para problemas de valores propios de banda simétrica de dos etapas, pero la investigación en reducción de banda a bidiagonal no simétrica está rezagada.

Algoritmo Bulge-chasing

Originalmente propuesto como algoritmo paralelo, pero la investigación del caso bidiagonal en CPU es extremadamente escasa. En comparación, la investigación en bulge-chasing de banda simétrica a tridiagonal y forma superior de Hessenberg es más extensa.

Conclusiones y Discusión

Conclusiones Principales

  1. Superación de la barrera de ancho de banda de memoria: Demuestra que algoritmos de álgebra lineal restringidos por memoria no solo son viables en GPU modernas, sino que pueden superar significativamente el rendimiento de CPU
  2. Importancia de características de hardware: La latencia de caché L1/L2 es más crítica que el tamaño, enfatizando la importancia del acceso a memoria rápida de baja latencia
  3. Principios de diseño de algoritmos: El rendimiento óptimo proviene de diseño de algoritmos principista, parametrización consciente de caché e infraestructura de compilador portátil

Limitaciones

  1. Modelo de ocupación de GPU: El algoritmo tiene significativamente menos bloques de GPU en etapas iniciales que unidades de ejecución disponibles, requiriendo matrices suficientemente grandes para utilizar plenamente recursos de GPU
  2. Desbordamiento de registros: Ancho de mosaico interno alto puede causar desbordamiento de registros, afectando rendimiento
  3. Dependencia de hardware: Variaciones significativas de rendimiento entre arquitecturas de GPU, requiriendo ajuste específico de hardware

Direcciones Futuras

  1. Optimización de arquitectura: Aprovechamiento de nuevas características como CUDA 13.0 con desbordamiento de registros de memoria compartida
  2. Extensión de algoritmo: Exploración de estrategias de procesamiento para anchos de banda más grandes
  3. Tubería SVD completa: Construcción de tubería SVD completamente residente en GPU

Evaluación Profunda

Fortalezas

  1. Contribución pionera: Primera implementación de algoritmo bulge-chasing residente en GPU de banda a bidiagonal, llenando un vacío técnico importante
  2. Alto valor práctico: Mejoras de rendimiento significativas (10-1000 veces) proporcionan valor de aplicación importante
  3. Innovación técnica: Diseño ingenioso de particionamiento de ancho de banda y consciente de memoria se adapta bien a características de arquitectura de GPU
  4. Portabilidad fuerte: Implementación de código fuente único basada en Julia soporta GPU de múltiples proveedores y múltiples precisiones

Deficiencias

  1. Análisis teórico insuficiente: Carencia de análisis de complejidad de algoritmo y pruebas de convergencia
  2. Rango de pruebas limitado: Principalmente pruebas en matrices sintéticas, carencia de validación en escenarios de aplicación real
  3. Complejidad de ajuste de parámetros: Requiere ajuste de hiperparámetros complejo para diferentes hardware

Impacto

  1. Significado académico: Redefine los límites de rendimiento de algoritmos restringidos por memoria en GPU
  2. Valor práctico: Proporciona soporte técnico crítico para cómputo de matriz a gran escala y aplicaciones de IA
  3. Contribución al ecosistema: Implementación de código abierto promueve desarrollo de ecosistema de álgebra lineal de GPU multiplataforma

Escenarios Aplicables

  • Cálculo SVD de matriz a gran escala
  • Computación científica e simulación de ingeniería
  • Reducción de dimensionalidad y extracción de características en aprendizaje automático
  • Aplicaciones de GPU que requieren álgebra lineal de alto rendimiento

Referencias

El artículo cita 86 referencias relacionadas, abarcando múltiples campos incluyendo computación en GPU, algoritmos de álgebra lineal y ecosistema del lenguaje Julia, proporcionando una base teórica sólida para la investigación.