oneapi::mkl::sparse::trmv#

行列の上三角部分または下三角部分に対してスパース行列とデンスベクトルの積を計算します。

説明#

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

oneapi::mkl::sparse::trmv ルーチンは、次のように定義される三角形部分上のスパース行列とデンスベクトルの積を計算します

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

ここで、\(\alpha\)\(\beta\) はスカラー、\(A\)mm 列の疎な三角行列、\(x\)\(y\) はサイズ m のデンスベクトルです。演算 \(\text{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}\]

与えられた行列を下部、対角部、上部に分解 \(A = L + D + U\) する場合、oneapi::mkl::uplo::lower または oneapi::mkl::uplo::upper のいずれかを選択して三角行列ベクトル積を実行すると、oneapi::mkl::diag::nonunit の場合はそれぞれ \(\text{op}(L+D)\) または \(\text{op}(D+U)\) を使用して適切な行列積が実行されます。また、oneapi::mkl::diag::unit を使用する場合は、\(\text{op}(L+I)\) または \(\text{op}(I+U)\) を使用して適切な行列積が実行されます。ここで、\(I\) は単位行列です。

API#

構文#

SYCL* バッファーを使用:

namespace oneapi::mkl::sparse { 
    void trmv ( 
        sycl::queue &queue, 
        oneapi::mkl::uplo uplo_val, 
        oneapi::mkl::transpose opA, 
        oneapi::mkl::diag diag_val, 
        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) 
}

USM ポインターを使用:

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

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

  • oneapi/mkl/spblas.hpp

入力パラメーター#

queue

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

uplo_val

行列のどの部分を処理するか指定します。

oneapi::mkl::uplo::lower

下三角行列部分を処理します。

oneapi::mkl::uplo::upper

上三角行列部分を処理します。

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}\)

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

diag_val

計算に使用する対角線の単位を指定します。

oneapi::mkl::diag::nonunit

対角要素は 1 と等しくない可能性があります。

oneapi::mkl::diag::unit

対角要素は 1 になります。

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::trmv ルーチンが依存するイベントのリストを含む、std::vector<sycl::event> タイプのベクトル。

出力パラメーター#

y

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

戻り値 (USM のみ)#

sycl::event

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

#

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

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