Skip to content

LAPACK upgrades #1199

Description

@jalvesz

Motivation

stdlib's current BLAS/LAPACK derives from the version 3.10.1

I asked ChatGPT to give an overview of novelties that have been introduced. It might be worth considering to enhance the library

cc @fortran-lang/stdlib @jvdp1 @perazz @loiseaujc @sebastian-mutz @ivan-pi


the releases from 3.11.x through 3.12.x have been evolutionary rather than revolutionary. There have not been changes comparable to the introduction of divide-and-conquer eigensolvers or the MRRR algorithms. The improvements mainly fall into four categories:

  1. New computational routines (especially QR with column pivoting and mixed precision)
  2. Performance improvements
  3. Numerical robustness and bug fixes
  4. Modernization (CMake, testing, CI)

For a Fortran Standard Library, the first category is the most relevant.

1. Strong Rank-Revealing QR (RRQR)

Probably the most significant algorithmic addition.

LAPACK added routines implementing Strong Rank-Revealing QR factorization, based on Gu and Eisenstat.

Examples include

  • xGEQP3RK
  • supporting routines

Advantages:

  • better low-rank approximation
  • more reliable numerical rank determination
  • useful for least squares and model reduction
  • increasingly important in machine learning and randomized linear algebra

If stdlib currently only exposes

  • xGEQRF
  • xGEQP3

then RRQR is arguably the biggest missing dense linear algebra feature.

Recommendation: High priority.


2. Mixed-Precision Iterative Refinement

Several improvements were made to iterative refinement solvers.

These include better support for

  • FP32 factorization
  • FP64 refinement
  • improved stopping criteria
  • robustness for difficult matrices

Motivation:

Modern CPUs and GPUs have much faster single precision.

Factorize in FP32:
$$PA=LU$$

then refine in FP64 until nearly double-precision accuracy.

For many problems this provides

  • 2–5× speedups
  • almost identical accuracy

This is becoming standard in HPC.

Recommendation: High priority if stdlib wants modern numerical capabilities.


3. Improved QR with Column Pivoting

The traditional

xGEQP3

received numerous fixes:

  • improved pivot selection
  • overflow handling
  • better edge-case behavior
  • better workspace handling

No API changes, but newer implementations are generally preferable.


4. More Robust Eigenvalue Solvers

Many bug fixes were made to

  • xSYEVR
  • xHEEVR
  • xSTEGR
  • xGEEV
  • xGEES

Typical improvements include

  • convergence
  • orthogonality
  • clustered eigenvalues
  • overflow avoidance

These are mostly maintenance improvements rather than new algorithms.


5. SVD Improvements

Numerous fixes to

  • xGESDD
  • xGESVD
  • xGESVDX

including

  • accuracy
  • workspace estimation
  • pathological matrices

Worth incorporating because SVD is heavily used.


6. Better Error Bounds

Several routines now compute tighter

  • forward error estimates
  • backward error estimates
  • reciprocal condition estimates

These improve confidence in computed solutions.


7. New Testing Infrastructure

LAPACK's testing has expanded considerably:

  • larger test matrices
  • randomized testing
  • corner cases
  • NaN/Inf testing

While not something to port directly, adopting similar tests would strengthen stdlib's validation.


8. CMake Improvements

Modern LAPACK now has much better

  • CMake support
  • package exports
  • CI
  • compiler support

These are only relevant if you synchronize the build system.


9. BLAS Changes

Reference BLAS has changed very little.

Mostly:

  • bug fixes
  • compiler portability
  • testing improvements

No major new BLAS Level 1–3 algorithms.


Features not added

Notably, LAPACK still does not include:

  • randomized SVD
  • randomized QR
  • communication-avoiding QR
  • communication-avoiding LU
  • blocked Jacobi SVD
  • batched BLAS/LAPACK
  • GPU kernels
  • task-based algorithms
  • distributed-memory algorithms (these remain in ScaLAPACK, SLATE, ELPA, etc.)

So there are no hidden major features waiting after 3.10.


Suggested priorities for stdlib

If I were maintaining the stdlib LAPACK port, I would prioritize:

Priority Feature Benefit
★★★★★ Strong Rank-Revealing QR (xGEQP3RK family) Modern low-rank approximation and reliable numerical rank detection
★★★★★ Mixed-precision iterative refinement updates Significant performance gains on modern hardware while retaining high accuracy
★★★★☆ Refresh xGESDD/xGESVD implementations Improved robustness and accuracy for SVD
★★★★☆ Refresh eigenvalue routines Better convergence and stability in challenging cases
★★★☆☆ Updated QR/LU implementations Incremental numerical robustness improvements
★★☆☆☆ Testing improvements Better long-term reliability
★☆☆☆☆ Build system synchronization Easier maintenance, but little impact on library users

From a user-facing perspective, Strong Rank-Revealing QR is the standout new capability since LAPACK 3.10. The rest of the changes are predominantly refinements that improve robustness, accuracy, and performance rather than introducing fundamentally new dense linear algebra algorithms.

Prior Art

No response

Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    ideaProposition of an idea and opening an issue to discuss ittopic: linalgLinear algebra

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions