Skip to content

[Feature request] Batched SYRK in cuBLAS #375

Open

Description

@FenglongSong

Dear cuBLAS team,

cuBLAS has batched GEMM (cublas<t>gemmBatched,cublas<t>gemmStridedBatched), and cuSOLVER has batched Cholesky (cusolverDn<t>potrfBatched), but there is no batched syrk yet.

A batched SYRK would be very useful for solving Schur complement systems, which are common in many applications. Each problem in the batch first forms a matrix like A^T A, then factorizes it with potrfBatched. Today the only batched option for the first step is GEMM, which computes the full matrix, but actually only the upper or lower triangular part is needed for the subsequent factorization. As a result, half of the computation is wasted.

It would be great to have a batched (and strided-batched) SYRK. Thanks!

Activity

  1. vamsi-sripathi commented on Oct 29, 2026

    @vamsi-sripathi

    Hi @FenglongSong,

    Thanks for sharing your input! As you mentioned, computing only upper|lower triangle is exactly the saving a batched SYRK would provide for the Schur complement use case (form A^T A, then potrfBatched). To help us scope this, could you share below details?

    1. Precision: FP32, FP64, or complex, to match the potrfBatched variant you use?
    2. Typical sizes: n (output dimension), k, and batch count.
    3. Uniform or variable sizes: are all problems in a batch the same size, or do sizes vary across the batch?
    4. Target GPUs: which architectures are you running on?
  2. FenglongSong commented on Oct 29, 2026

    @FenglongSong
    Author

    Hi @vamsi-sripathi,

    Thanks for the response! My use case is to develop batched quadratic programming (QP) solver on GPU: https://github.com/PREDICT-EPFL/cupiqp.

    When solving a batch of QPs, I need to construct and factorize the Schur complement of the KKT system: $L=\text{chol}(P+A^TA)$

    1. Precision: I only use FP32 and FP64. I personally do not need to deal with complex numbers.
    2. Typical sizes: I mainly consider small problems where the matrix sizes are usually below 100*100, batch size can reach hundreds or thousands, depending on the applications. Although under these sizes I can write custom cuda kernels and achieve good performance, I believe extending the SYRK in cuBLAS to batched is valuable itself.
    3. Uniform or variable sizes: in my case I only deal with uniform batch size.
    4. Target GPUs: I'm currently using an NVIDIA GeForce RTX 5090.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions