oneapi::mkl::sparse::optimize_gemv

Performs internal optimizations for oneapi::mkl::sparse::gemv by analyzing the matrix structure.

Description

Note

Refer to Error Handling for a detailed description of the possible exceptions thrown.

The oneapi::mkl::sparse::optimize_gemv routine analyzes matrix structure and performs optimizations. Optimized data is then stored in the matrix handle.

API

Syntax

Note

Currently, complex types are not supported.

Using USM and SYCL buffers:

namespace oneapi::mkl::sparse {
    sycl::event optimize_gemv (
        sycl::queue &queue,
        oneapi::mkl::transpose transpose_flag,
        oneapi::mkl::sparse::matrix_handle_t handle,
        const std::vector<sycl::event> &dependencies = {});
}

Include Files

  • oneapi/mkl/spblas.hpp

Input Parameters

queue

Specifies the SYCL command queue which will be used for SYCL kernels execution.

transpose_flag

Specifies operation op() on input matrix.

oneapi::mkl::transpose::nontrans

Non-transpose, op(A) = A.

oneapi::mkl::transpose::trans

Transpose, op(A) = AT.

oneapi::mkl::transpose::conjtrans

Conjugate transpose, op(A) = AH.

Note

Currently, the only supported case for operation is oneapi::mkl::transpose::nontrans.

handle

Handle to object containing sparse matrix and other internal data. Created using one of the oneapi::mkl::sparse::set_<sparse_matrix_type>_data routines.

Note

Currently, the only supported matrix format for <sparse_matrix_type> is the csr format.

dependencies

A vector of type std::vector<sycl::event> & containing the list of events that the oneapi::mkl::sparse::optimize_gemv routine depends on.

Return Values

sycl::event

SYCL event which can be waited upon or added as a dependency for the completion of the optimize_gemv routine.

sycl::event ev_opt = sparse::optimize_gemv(queue, trans_val, handle);               // Allowed use in case of USM
sycl::event ev_opt = sparse::optimize_gemv(queue, trans_val, handle, {});           // Allowed use in case of USM
sycl::event ev_opt = sparse::optimize_gemv(queue, trans_val, handle, dependencies); // Allowed use in case of USM
sparse::optimize_gemv(queue, trans_val, handle);                                    // OK -- Recommended use in case of sycl::buffer
static_cast<void>(sparse::optimize_gemv(queue, trans_val, handle));                 // OK -- Recommended use in case of sycl::buffer - explicitly say we aren't using the event
sparse::optimize_gemv(queue, trans_val, handle, {});                                // Not recommended in case of sycl::buffer, but supported;
sparse::optimize_gemv(queue, trans_val, handle, dependencies);                      // Not recommended in case of sycl::buffer, but supported;
sycl::event ev_opt = sparse::optimize_gemv(queue, trans_val, handle);               // Allowed use in case of sycl::buffer, but most sycl::buffer oneMKL APIs do not have ability to pass in dependencies