oneAPI-spec icon indicating copy to clipboard operation
oneAPI-spec copied to clipboard

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

Open gajanan-choudhary opened this issue 5 months ago • 0 comments

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 #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 = {});
    
    }
    

gajanan-choudhary avatar Sep 24 '24 02:09 gajanan-choudhary