Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[oneMKL][Sparse BLAS] Add a new oneapi::mkl::sparse::set_coo_data() API for COO matrices #515

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.. SPDX-FileCopyrightText: 2019-2020 Intel Corporation
.. SPDX-FileCopyrightText: 2019-2024 Intel Corporation
..
.. SPDX-License-Identifier: CC-BY-4.0

Expand All @@ -7,16 +7,87 @@
Sparse storage formats
======================

There are a variety of matrix storage formats available for
representing sparse matrices. Two popular formats are the
coordinate (COO) format, and the compressed sparse row (CSR)
format.

.. container:: section

.. _onemkl_sparse_coo:

.. rubric:: COO

The COO format is the simplest sparse matrix format,
represented by three arrays, *row_ind*, *col_ind*
and *val*, and an *index* parameter. Each non-zero
element, *i* in the sparse matrix is represented by its
row index, column index, and value, that is,
*(row_ind[i], col_ind[i], val[i])*. The entries need not
be in a sorted order.

.. container:: tablenoborder

.. list-table::

* - nrows
- Number of rows in the sparse matrix.
* - ncols
- Number of columns in the sparse matrix.
* - nnz
- Number of non-zero entries in the sparse matrix (which may include explicit zeros).
This is also the length of the *row_ind*, *col_ind* and *val* arrays.
* - index
- Parameter that is used to specify whether the matrix has zero or one-based indexing.
* - val
- An array of length ``nnz`` that contains the non-zero elements of the sparse matrix
not necessarily in any sorted order.
* - row_ind
- An integer array of length ``nnz``. Contains row indices for non-zero elements
stored in the *val* array such that *row_ind[i]* is the row number (using zero-
or one-based indexing) of the element of the sparse matrix stored in *val[i]*.
* - col_ind
- An integer array of length ``nnz``. Contains column indices for non-zero elements
stored in the *val* array such that *col_ind[i]* is the column number (using zero-
or one-based indexing) of the element of the sparse matrix stored in *val[i]*.


A sparse matrix can be represented in a COO format in a following way (assuming one-based indexing):

.. math::
A = \left(\begin{matrix}
1 & 0 & 2\\
0 & -1 & 4\\
3 & 0 & 0\\
\end{matrix}\right)


+------------+------------------------------------------------------------+
| nrows | 3 |
+------------+------------------------------------------------------------+
| ncols | 3 |
+------------+------------------------------------------------------------+
| nnz | 5 |
+------------+------------------------------------------------------------+
| index | 1 |
+------------+------------+-----------+-----------+-----------+-----------+
| row_ind | 1 | 1 | 2 | 2 | 3 |
+------------+------------+-----------+-----------+-----------+-----------+
| col_ind | 1 | 3 | 2 | 3 | 1 |
+------------+------------+-----------+-----------+-----------+-----------+
| val | 1 | 2 | -1 | 4 | 3 |
gajanan-choudhary marked this conversation as resolved.
Show resolved Hide resolved
+------------+------------+-----------+-----------+-----------+-----------+


.. container:: section

.. _onemkl_sparse_csr:

.. rubric:: CSR

There are a variety of matrix storage formats available for
representing the sparse matrix. One of the most popular is
compressed sparse row (CSR) format, that is represented by
three arrays: *row_ptr*, *col_ind* and *val*, and *index*
The CSR format is one of the most popular sparse matrix
storage formats, represented by three arrays,
*row_ptr*, *col_ind* and *val*, and an *index*
parameter.

.. container:: tablenoborder
Expand Down Expand Up @@ -66,11 +137,11 @@ A sparse matrix can be represented in a CSR format in a following way (assuming
+------------+------------------------------------------------------------+
| index | 0 |
+------------+------------+-----------+-----------+-----------+-----------+
| val | 1 | 2 | -1 | 4 | 3 |
| row_ptr | 0 | 2 | 4 | 5 | |
+------------+------------+-----------+-----------+-----------+-----------+
| col_ind | 0 | 2 | 1 | 2 | 0 |
+------------+------------+-----------+-----------+-----------+-----------+
| row_ptr | 0 | 2 | 4 | 5 | |
| val | 1 | 2 | -1 | 4 | 3 |
+------------+------------+-----------+-----------+-----------+-----------+


Expand Down
12 changes: 8 additions & 4 deletions source/elements/oneMKL/source/domains/spblas/gemm.rst
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ where :math:`\alpha` and :math:`\beta` are scalars, :math:`A` is a sparse matrix

and :math:`\text{op}(A)` is an ``m``-by-``k`` matrix , :math:`\text{op}(B)` is an ``k``-by-``columns`` matrix, and :math:`C` is an ``m``-by-``columns`` matrix.

Dense matrix storage is in either row-major or column-major format. Sparse matrix formats are compressed sparse row (CSR) formats.
Dense matrix storage is in either row-major or column-major format. Sparse matrix formats are compressed sparse row (CSR) or coordinate (COO) formats.


.. _onemkl_sparse_gemm_buffer:
Expand Down Expand Up @@ -87,7 +87,9 @@ gemm (Buffer version)


A_handle
Handle to object containing sparse matrix, :math:`A`. Created using the oneapi::mkl::sparse::set_csr_data routine.
Handle to object containing sparse matrix, :math:`A`. Created using
one of ``oneapi::mkl::sparse::set_csr_data`` or
``oneapi::mkl::sparse::set_coo_data`` routines.


B
Expand Down Expand Up @@ -227,11 +229,13 @@ gemm (USM version)


A_handle
Handle to object containing sparse matrix, :math:`A`. Created using the oneapi::mkl::sparse::set_csr_data routine.
Handle to object containing sparse matrix, :math:`A`. Created using
one of ``oneapi::mkl::sparse::set_csr_data`` or
``oneapi::mkl::sparse::set_coo_data`` routines.


B
The dense matrix in the sparse-dense matrix product. A device accessible USM object containing an array of size:
The input dense matrix :math:`B` in the sparse matrix-dense matrix product. :math:`B` is a device accessible one-dimensional USM object containing an array of size:

.. list-table::
:header-rows: 1
Expand Down
8 changes: 4 additions & 4 deletions source/elements/oneMKL/source/domains/spblas/gemmoptimize.rst
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ optimize_gemm (based on Sparse Matrix)

A_handle
Handle to object containing sparse matrix and other internal
data. Created using the
oneapi::mkl::sparse::set_csr_data routine.
data. Created using one of ``oneapi::mkl::sparse::set_csr_data`` or
``oneapi::mkl::sparse::set_coo_data`` routines.


dependencies
Expand Down Expand Up @@ -157,8 +157,8 @@ optimize_gemm (based on Both Input Matrices)

handle
Handle to object containing sparse matrix and other internal
data. Created using the
oneapi::mkl::sparse::set_csr_data routine.
data. Created using one of ``oneapi::mkl::sparse::set_csr_data`` or
``oneapi::mkl::sparse::set_coo_data`` routines.


dependencies
Expand Down
10 changes: 6 additions & 4 deletions source/elements/oneMKL/source/domains/spblas/gemv.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,9 @@ gemv (Buffer version)


A_handle
Handle to object containing sparse matrix, :math:`A`. Created using the
oneapi::mkl::sparse::set_csr_data routine.
Handle to object containing sparse matrix, :math:`A`. Created using
one of ``oneapi::mkl::sparse::set_csr_data`` or
``oneapi::mkl::sparse::set_coo_data`` routines.


x
Expand Down Expand Up @@ -151,8 +152,9 @@ gemv (USM version)


A_handle
Handle to object containing sparse matrix, :math:`A`. Created using the
oneapi::mkl::sparse::set_csr_data routine.
Handle to object containing sparse matrix, :math:`A`. Created using
one of ``oneapi::mkl::sparse::set_csr_data`` or
``oneapi::mkl::sparse::set_coo_data`` routines.


x
Expand Down
10 changes: 6 additions & 4 deletions source/elements/oneMKL/source/domains/spblas/gemvdot.rst
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,9 @@ gemvdot (Buffer version)


A_handle
Handle to object containing sparse matrix :math:`A`. Created using the
oneapi::mkl::sparse::set_csr_data routine.
Handle to object containing sparse matrix, :math:`A`. Created using
one of ``oneapi::mkl::sparse::set_csr_data`` or
``oneapi::mkl::sparse::set_coo_data`` routines.


x
Expand Down Expand Up @@ -164,8 +165,9 @@ gemvdot (USM version)


A_handle
Handle to object containing sparse matrix :math:`A`. Created using the
oneapi::mkl::sparse::set_csr_data routine.
Handle to object containing sparse matrix, :math:`A`. Created using
one of ``oneapi::mkl::sparse::set_csr_data`` or
``oneapi::mkl::sparse::set_coo_data`` routines.


x
Expand Down
4 changes: 2 additions & 2 deletions source/elements/oneMKL/source/domains/spblas/gemvoptimize.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ the handle.

handle
Handle to object containing sparse matrix and other internal
data. Created using the
oneapi::mkl::sparse::set_csr_data routine.
data. Created using one of ``oneapi::mkl::sparse::set_csr_data`` or
``oneapi::mkl::sparse::set_coo_data`` routines.


dependencies
Expand Down
Loading