oneapi::mkl::sparse::trsv#

三角形のスパース行列の線形方程式系を解きます。

説明#

oneapi::mkl::sparse::trsv ルーチンは疎な三角方程式を解きます

\[\text{op}(A)\cdot y = \alpha \cdot x\]

ここで、\(A\)\(m\)\(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}\]

デンスベクトル \(x\)\(y\) は、長さ \(m\) 以上でなければなりません。ベクトル \(x\) は入力の右辺のデータであり、 \(y\) は結果の出力ベクトルです。

与えられた行列を下部、対角部、上部に分解した \(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\) は単位行列です。

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

  • RHS をインプレースで更新するため、RHS (\(x\)) と解 (\(y\)) の両方に同じ配列を渡すことは意味をなしますが、現在、インプレースの sparse::trsv() 操作はサポートされていません。

API#

構文

SYCL* バッファーを使用:

namespace oneapi::mkl::sparse { 
    void trsv ( 
        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, 
        sycl::buffer<DATA_TYPE, 1> &y); 

    [[deprecated("Use oneapi::mkl::sparse::trsv(queue, uplo_val, opA, diag_val, /* alpha */ 1.0, ...) instead.")]] 
    void trsv ( 
        sycl::queue &queue, 
        oneapi::mkl::uplo uplo_val, 
        oneapi::mkl::transpose opA, 
        oneapi::mkl::diag diag_val, 
        oneapi::mkl::sparse::matrix_handle_t A, 
        sycl::buffer<DATA_TYPE, 1> &x, 
        sycl::buffer<DATA_TYPE, 1> &y); 
}

USM ポインターを使用:

namespace oneapi::mkl::sparse { 
    sycl::event trsv( 
        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, 
        DATA_TYPE *y, 
        const std::vector<sycl::event> &dependencies = {}); 

    [[deprecated("Use oneapi::mkl::sparse::trsv(queue, uplo_val, opA, diag_val, /* alpha */ 1.0, ...) instead.")]] 
    sycl::event trsv( 
        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, 
        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}\)

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

diag_val

計算に使用する対角線が単位であるか、または提供された行列データに基づくかを指定します。

oneapi::mkl::diag::nonunit

対角要素は、スパース行列で指定されている様に使用されます。

oneapi::mkl::diag::unit

三角解アルゴリズムでは、対角要素に値 1 が代入されます。

oneapi::mkl::diag::nonunit を選択した場合、すべての対角値がスパース行列のスパース・プロファイルに存在する必要があり、ゼロ値であってはなりません。oneapi::mkl::diag::unit の場合、これは必要ではありません。これに違反した場合、onemkl::invalid_value() タイプの例外がスローされます。

alpha

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

A

スパース行列 (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 ポインターです。入力ベクトル x

dependencies

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

出力パラメーター#

y

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

戻り値 (USM のみ)#

sycl::event

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

#

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

share/doc/mkl/examples/sycl/sparse_blas/source/csr_trsv.cpp
share/doc/mkl/examples/sycl/sparse_blas/source/csr_trsv_usm.cpp