Visible to Intel only — GUID: GUID-A8580A9B-F681-4E3F-B926-7FC3EEA99354
Visible to Intel only — GUID: GUID-A8580A9B-F681-4E3F-B926-7FC3EEA99354
Sparse BLAS SYCL Functionality
The following tables summarize the current support of SYCL Sparse BLAS APIs in Intel oneAPI Math Kernel Library (oneMKL).
In the tables, we use these symbols for the sparse and dense objects in the operation descriptions:
scalar values = , , ,
dense vectors = , ,
sparse vectors = , ,
dense matrices = , and
sparse matrices = , , ,
identity matrix = .
Some operations involve the upper/lower decomposition of a sparse matrix into with strictly lower (), diagonal (), and strictly upper () parts of the sparse matrix, . The choice of which part of the data to use in the operation is controlled by the input parameters:
for selecting or for the operation
for selecting or for the operation
Some of the triangular operations permit you to ignore the main diagonal data in the sparse matrix and replace it, in the operation, with ones on the diagonal:
uses as provided in the data and
ignores and instead uses the identity, .
Finally, the operation represents one of three “transpose” operations:
when using
when using
when using .
Typically all are intended to be supported, but the actual support list and limitations are provided in each API’s individual description page.
Level 1
Sparse BLAS operations involving a sparse vector and other vectors.
There are currently no SYCL Sparse BLAS APIs in oneMKL supporting sparse vectors or Sparse Level 1 operations.
Level 2
Sparse BLAS operations involving a sparse matrix and vectors.
Common Name |
SYCL API name with oneapi::mkl:: namespace |
Operation |
CSR support |
COO support |
---|---|---|---|---|
SpMV |
sparse::gemv() |
CPU/GPU |
CPU/GPU |
|
sparse::symv() + uplo::lower |
CPU/GPU |
None |
||
sparse::symv() + uplo::upper |
CPU/GPU |
None |
||
sparse::trmv() + uplo::lower + diag::nonunit |
CPU/GPU |
CPU |
||
sparse::trmv() + uplo::lower + diag::unit |
CPU/GPU |
CPU |
||
sparse::trmv() + uplo::upper + diag::nonunit |
CPU/GPU |
CPU |
||
sparse::trmv() + uplo::upper + diag::unit |
CPU/GPU |
CPU |
||
SpMV + dot fusion |
sparse::gemvdot() |
CPU/GPU |
CPU |
|
SpSV or SpTRSV |
sparse::trsv() + uplo::lower + diag::nonunit |
|
CPU/GPU |
CPU |
sparse::trsv() + uplo::lower + diag::unit |
|
CPU/GPU |
CPU |
|
sparse::trsv() + uplo::upper + diag::nonunit |
|
CPU/GPU |
CPU |
|
sparse::trsv() + uplo::upper + diag::unit |
|
CPU/GPU |
CPU |
|
Level 3
Sparse BLAS operations involving one or more sparse/dense matrices.
Common Name |
SYCL API name with oneapi::mkl:: namespace |
Operation |
CSR support |
COO support |
---|---|---|---|---|
SpMM (Dn <- Sp * Dn) |
sparse::gemm() |
CPU/GPU |
CPU |
|
SpSM or SpTRSM |
sparse::trsm() + uplo::lower + diag::nonunit |
|
CPU/GPU |
CPU |
sparse::trsm() + uplo::lower + diag::unit |
|
CPU/GPU |
CPU |
|
sparse::trsm() + uplo::upper + diag::nonunit |
|
CPU/GPU |
CPU |
|
sparse::trsm() + uplo::upper + diag::unit |
|
CPU/GPU |
CPU |
|
SpGEAM (Sp <- Sp + Sp) |
sparse::omatadd() |
CPU/GPU |
None |
|
SpGEMM (Sp <- Sp * Sp) |
sparse::matmat() |
CPU/GPU |
None |
|
SpGEMMD (Dn <- Sp * Sp) |
sparse::matmatd() |
GPU |
None |
|
Auxiliary Functions
Operations that can manipulate the sparse matrix handle.
Common Name |
SYCL API name with oneapi::mkl:: namespace |
Operation |
CSR support |
COO support |
---|---|---|---|---|
Sparse Copy or Sparse Matrix Transpose |
sparse::omatcopy() |
CPU/GPU |
CPU/GPU |
|
Sparse Matrix Conversion |
sparse::omatconvert() |
, where and are represented using different sparse matrix formats |
CPU/GPU |
CPU/GPU |
Sparse Matrix Sort |
sparse::sort_matrix() |
by natural ordering for the sparse matrix format |
CPU/GPU |
None (see note below) |
Update Matrix Main Diagonal |
sparse::update_diagonal_data() |
update in-place with new provided diagonal values, |
GPU |
None |