spsv#
Solves a system of linear equations where the coefficients are described by a triangular sparse matrix.
Description and Assumptions
The oneapi::mkl::sparse::spsv
routine solves a system of linear equations
for a square matrix:
m
,m
-by-m
,spsv_descr#
Definition
namespace oneapi::mkl::sparse {
struct spsv_descr;
using spsv_descr_t = spsv_descr*;
}
Description
Defines spsv_descr_t
as an opaque pointer to the incomplete type
spsv_descr
. Each backend may provide a different implementation of the
type spsv_descr
. The spsv_descr_t object persists through the various
stages of the spsv operation to house relevant state, optimizations and
workspaces.
init_spsv_descr#
Syntax
namespace oneapi::mkl::sparse {
void init_spsv_descr (sycl::queue &queue,
oneapi::mkl::sparse::spsv_descr_t *p_spsv_descr);
}
Input parameters
- queue
The SYCL command queue which will be used for SYCL kernels execution.
- p_spsv_descr
The address of the
p_spsv_descr
object to be initialized. Must only be called on an uninitializedspsv_descr_t
object.
Output parameters
- p_spsv_descr
On return, the address is updated to point to a newly allocated and initialized
spsv_descr_t
object that can be used to perform spsv.
Throws
This function shall throw the following exceptions if the associated condition is detected. An implementation may throw additional implementation-specific exception(s) in case of error conditions not covered here.
release_spsv_descr#
Syntax
namespace oneapi::mkl::sparse {
sycl::event release_spsv_descr (sycl::queue &queue,
oneapi::mkl::sparse::spsv_descr_t spsv_descr,
const std::vector<sycl::event> &dependencies = {});
}
Input parameters
- queue
The SYCL command queue which will be used for SYCL kernels execution.
- spsv_descr
Descriptor initialized with
init_spsv_descr
.- dependencies
List of events to depend on before starting asynchronous tasks that access data on the device. Defaults to no dependencies.
Return Values
Output event that can be waited upon or added as a dependency for the completion of the function.
Throws
This function shall throw the following exceptions if the associated condition is detected. An implementation may throw additional implementation-specific exception(s) in case of error conditions not covered here.
spsv_alg#
Syntax
namespace oneapi::mkl::sparse {
enum class spsv_alg {
default_alg,
no_optimize_alg,
};
}
Description
These algorithm enums are provided in case backends would like to implement various different algorithms for the operation. Behavior of the algorithms (e.g., bitwise reproducibility, atomics usage) and the preconditions to using specific algorithms (e.g. sortedness of matrix arrays) is implementation-defined and must be documented in the library implementing the oneAPI specification.
spsv#
Syntax
namespace oneapi::mkl::sparse {
void spsv_buffer_size(
sycl::queue &queue,
oneapi::mkl::transpose opA,
const void* alpha,
oneapi::mkl::sparse::matrix_view A_view,
oneapi::mkl::sparse::matrix_handle_t A_handle,
oneapi::mkl::sparse::dense_vector_handle_t x_handle,
oneapi::mkl::sparse::dense_vector_handle_t y_handle,
oneapi::mkl::sparse::spsv_alg alg,
oneapi::mkl::sparse::spsv_descr_t spsv_descr,
std::size_t &temp_buffer_size);
void spsv_optimize(
sycl::queue &queue,
oneapi::mkl::transpose opA,
const void* alpha,
oneapi::mkl::sparse::matrix_view A_view,
oneapi::mkl::sparse::matrix_handle_t A_handle,
oneapi::mkl::sparse::dense_vector_handle_t x_handle,
oneapi::mkl::sparse::dense_vector_handle_t y_handle,
oneapi::mkl::sparse::spsv_alg alg,
oneapi::mkl::sparse::spsv_descr_t spsv_descr,
sycl::buffer<std::uint8_t, 1> workspace);
sycl::event spsv_optimize(
sycl::queue &queue,
oneapi::mkl::transpose opA,
const void* alpha,
oneapi::mkl::sparse::matrix_view A_view,
oneapi::mkl::sparse::matrix_handle_t A_handle,
oneapi::mkl::sparse::dense_vector_handle_t x_handle,
oneapi::mkl::sparse::dense_vector_handle_t y_handle,
oneapi::mkl::sparse::spsv_alg alg,
oneapi::mkl::sparse::spsv_descr_t spsv_descr,
void* workspace,
const std::vector<sycl::event> &dependencies = {});
sycl::event spsv(
sycl::queue &queue,
oneapi::mkl::transpose opA,
const void* alpha,
oneapi::mkl::sparse::matrix_view A_view,
oneapi::mkl::sparse::matrix_handle_t A_handle,
oneapi::mkl::sparse::dense_vector_handle_t x_handle,
oneapi::mkl::sparse::dense_vector_handle_t y_handle,
oneapi::mkl::sparse::spsv_alg alg,
oneapi::mkl::sparse::spsv_descr_t spsv_descr,
const std::vector<sycl::event> &dependencies = {});
}
Notes
spsv_buffer_size
andspsv_optimize
must be called at least once beforespsv
with the same arguments.spsv
can then be called multiple times. Callingspsv_optimize
on the same descriptor can reset some of the descriptor’s data such as theworkspace
.In the general case, not calling the functions in the order specified above is undefined behavior. Not calling
spsv_buffer_size
orspsv_optimize
at least once with a given descriptor will throw a oneapi::mkl::uninitialized exception. Callingspsv
with arguments not matchingspsv_optimize
will throw a oneapi::mkl::invalid_argument exception, unless stated otherwise.The data of the dense handle
x_handle
and scalaralpha
can be reset before each call tospsv
. Changing the data of the sparse handleA_handle
is undefined behavior.The data must be available on the device when calling
spsv_optimize
by using event dependencies if needed.spsv_optimize
andspsv
are asynchronous.The algorithm defaults to
spsv_alg::default_alg
if a backend does not support the provided algorithm.The container type of all the handles and
workspace
must be consistent and use either USM pointers or SYCL buffers.
Input Parameters
- queue
The SYCL command queue which will be used for SYCL kernels execution.
- opA
Specifies operation
op()
on the input matrix. The possible options are described in transpose enum class.- alpha
Host or USM pointer representing \(\alpha\). The USM allocation can be on the host or device. Must be a host pointer if SYCL buffers are used. Must be of the same type as the handles’ data type.
- A_view
Specifies which part of the handle should be read as described by matrix_view. The
type_view
field must bematrix_descr::triangular
. Thediag_view
field can bediag::nonunit
ordiag::unit
.- A_handle
Sparse matrix handle object representing \(A\).
- x_handle
Dense vector handle object representing \(x\).
- y_handle
Dense vector handle object representing \(y\).
- alg
Specifies the spsv algorithm to use.
- spsv_descr
Initialized spsv descriptor.
- temp_buffer_size
Output buffer size in bytes.
- workspace
- Workspace buffer or USM pointer, must be at least of size
temp_buffer_size
bytes and the address aligned on the size of the handles’ data type.If it is a buffer, its lifetime is extended until the spsv descriptor is released or the workspace is reset byspsv_optimize
. The workspace cannot be a sub-buffer.If it is a USM pointer, it must not be free’d until the correspondingspsv
has completed. The data must be accessible on the device. - dependencies
List of events to depend on before starting asynchronous tasks that access data on the device. Ignored if buffers are used. Defaults to no dependencies.
Output Parameters
- temp_buffer_size
Output buffer size in bytes. A temporary workspace of at least this size must be allocated to perform the specified spsv.
- y_handle
Dense vector handle object representing \(y\), result of the
spsv
operation.
Return Values
Output event that can be waited upon or added as a dependency for the completion of the function. May be an empty event if buffers are used.
Throws
These functions shall throw the following exceptions if the associated condition is detected. An implementation may throw additional implementation-specific exception(s) in case of error conditions not covered here.
Parent topic: Sparse BLAS