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