Skip to content

[oneMKL][Sparse BLAS] Add oneapi::mkl::sparse::spsm() API #584

Open
@gajanan-choudhary

Description

This is a request tracker to add an API for sparse triangular solve with a dense matrix right-hand-side to the sparse BLAS domain in the oneMKL Specification.

  • The operation performed is, $\text{op}(A)\cdot Y = \alpha\cdot\text{op}(X)$, where:
    • $A$ is a sparse matrix,
    • $X$ and $Y$ are dense matrices,
    • $\alpha$ is a scalar, and
    • $\text{op}(\cdot)$ is one non-transpose/transpose/conjugate-transpose.
  • Going by the recent overhaul in [oneMKL][spblas] Update sparse blas API #522, in all likelihood, the APIs will look like:
    namespace oneapi::mkl::sparse {
    
        struct spsm_descr;
        using spsm_descr_t = spsm_descr*;
    
        void init_spsm_descr (sycl::queue                       &queue,
                              oneapi::mkl::sparse::spsm_descr_t *p_spsm_descr);
    
        sycl::event release_spsm_descr (sycl::queue                       &queue,
                                        oneapi::mkl::sparse::spsm_descr_t spsm_descr,
                                        const std::vector<sycl::event>    &dependencies = {});
    
        enum class spsm_alg {
            default_alg,
            no_optimize_alg,
        };
    
        void spsm_buffer_size(
            sycl::queue                                &queue,
            oneapi::mkl::transpose                     opA,
            oneapi::mkl::transpose                     opX,
            const void*                                alpha,
            oneapi::mkl::sparse::matrix_view           A_view,
            oneapi::mkl::sparse::matrix_handle_t       A_handle,
            oneapi::mkl::sparse::dense_matrix_handle_t X_handle,
            oneapi::mkl::sparse::dense_matrix_handle_t Y_handle,
            oneapi::mkl::sparse::spsm_alg              alg,
            oneapi::mkl::sparse::spsm_descr_t          spsm_descr,
            std::size_t                                &temp_buffer_size);
    
        void spsm_optimize(
            sycl::queue                                &queue,
            oneapi::mkl::transpose                     opA,
            oneapi::mkl::transpose                     opX,
            const void*                                alpha,
            oneapi::mkl::sparse::matrix_view           A_view,
            oneapi::mkl::sparse::matrix_handle_t       A_handle,
            oneapi::mkl::sparse::dense_matrix_handle_t X_handle,
            oneapi::mkl::sparse::dense_matrix_handle_t Y_handle,
            oneapi::mkl::sparse::spsm_alg              alg,
            oneapi::mkl::sparse::spsm_descr_t          spsm_descr,
            sycl::buffer<std::uint8_t, 1>              workspace);
    
        sycl::event spsm_optimize(
            sycl::queue                                &queue,
            oneapi::mkl::transpose                     opA,
            oneapi::mkl::transpose                     opX,
            const void*                                alpha,
            oneapi::mkl::sparse::matrix_view           A_view,
            oneapi::mkl::sparse::matrix_handle_t       A_handle,
            oneapi::mkl::sparse::dense_matrix_handle_t X_handle,
            oneapi::mkl::sparse::dense_matrix_handle_t Y_handle,
            oneapi::mkl::sparse::spsm_alg              alg,
            oneapi::mkl::sparse::spsm_descr_t          spsm_descr,
            void*                                      workspace,
            const std::vector<sycl::event>             &dependencies = {});
    
        sycl::event spsm(
            sycl::queue                                &queue,
            oneapi::mkl::transpose                     opA,
            oneapi::mkl::transpose                     opX,
            const void*                                alpha,
            oneapi::mkl::sparse::matrix_view           A_view,
            oneapi::mkl::sparse::matrix_handle_t       A_handle,
            oneapi::mkl::sparse::dense_matrix_handle_t X_handle,
            oneapi::mkl::sparse::dense_matrix_handle_t Y_handle,
            oneapi::mkl::sparse::spsm_alg              alg,
            oneapi::mkl::sparse::spsm_descr_t          spsm_descr,
            const std::vector<sycl::event>             &dependencies = {});
    
    }

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions