oneapi::mkl::sparse::gemvdot#

ドット積を使用して、スパース行列とデンスベクトルのドット積を計算します。

説明#

サポートされている <DATA_TYPE><INT_TYPE> データタイプと整数タイプの一覧については、Sparse BLAS でサポートされているデータと整数タイプを参照してください。また、スローされる可能性のある例外の詳細については、エラー処理を参照してください。

oneapi::mkl::sparse::gemvdot ルーチンは、次のように定義されるスパース行列とデンスベクトルのドット積を計算します

\[y \leftarrow \alpha\cdot\text{op}(A)\cdot x + \beta\cdot y\]
\[d \leftarrow x \cdot y\]

ここで、\(A\) は一般スパース行列、\(\alpha\)\(\beta\)\(d\) はスカラー、\(x\)\(y\) はデンスベクトル、\(op()\) は行列修飾子です:

\[\begin{split}\text{op}(A) = \begin{cases} A,& \text{ oneapi::mkl::transpose::nontrans}\\ A^{T},& \text{ oneapi::mkl::transpose::trans}\\A^{H},& \text{ oneapi::mkl::transpose::conjtrans} \end{cases}\end{split}\]

API#

構文#

SYCL* バッファーを使用:

namespace oneapi::mkl::sparse { 
    void gemvdot ( 
        sycl::queue &queue, 
        oneapi::mkl::transpose opA, 
        const DATA_TYPE alpha, 
        oneapi::mkl::sparse::matrix_handle_t A, 
        sycl::buffer<DATA_TYPE, 1> &x, 
        const DATA_TYPE beta, 
        sycl::buffer<DATA_TYPE, 1> &y, 
        sycl::buffer<DATA_TYPE, 1> &d) 
}

USM ポインターを使用:

namespace oneapi::mkl::sparse { 
    sycl::event gemvdot ( 
        sycl::queue &queue, 
        oneapi::mkl::transpose opA, 
        const DATA_TYPE alpha, 
        oneapi::mkl::sparse::matrix_handle_t A, 
        const DATA_TYPE *x, 
        const DATA_TYPE beta, 
        DATA_TYPE *y, 
        DATA_TYPE *d, 
        const std::vector<sycl::event> &dependencies={}) 
}

インクルード・ファイル#

  • oneapi/mkl/spblas.hpp

入力パラメーター#

queue

SYCL* カーネルの実行に使用される SYCL* コマンドキューを指定します。

opA

入力行列に対する演算 op() を指定します。

oneapi::mkl::transpose::nontrans

非転置、\(\text{op}(A) = A\)

oneapi::mkl::transpose::trans

転置、\(\text{op}(A) = A^{T}\)

oneapi::mkl::transpose::conjtrans

共役転置、\(\text{op}(A) = A^{H}\)

現在、サポートされている操作は oneapi::mkl::transpose::nontrans のみです。

alpha

スカラー \(\alpha\) を指定します。

A

スパース行列およびその他の内部データを含むオブジェクトへのハンドル。oneapi::mkl::sparse::set_<sparse_matrix_type>_data ルーチンの 1 つを使用して作成されます。

<sparse_matrix_type> でサポートされるケースは、CPU と GPU デバイスでは csr、CPU デバイスでは coo のみです。

x

opA == oneapi::mkl::transpose::nontrans の場合は少なくとも入力行列の列数に等しく、それ以外の場合は少なくとも入力行列の行数に等しいサイズの SYCL* バッファーまたはデバイスがアクセス可能な USM ポインターです。

beta

スカラー \(\beta\) を指定します。

y

opA == oneapi::mkl::transpose::nontrans の場合は少なくとも入力行列の行数に等しく、それ以外の場合は少なくとも入力行列の列数に等しいサイズの SYCL* バッファーまたはデバイスがアクセス可能な USM ポインターです。

dependencies

oneapi::mkl::sparse::gemvdot ルーチンが依存するイベントのリストを含む、std::vector<sycl::event> タイプのベクトル。

出力パラメーター#

y

更新されたベクトル \(y\) によって上書きされます。

d

\(x\)\(y\) のドット積で上書きされます。

戻り値#

sycl::event

gemvdot ルーチンの完了を待機したり、依存関係として追加できる SYCL* イベント。

#

SYCL バッファーで oneapi::mkl::sparse::gemvdot を使用する例は、oneMKL インストール・ディレクトリーの以下の場所にあります。

share/doc/mkl/examples/sycl/sparse_blas/source/csr_gemvdot.cpp