oneapi::mkl::sparse::trsv#
三角形のスパース行列の線形方程式系を解きます。
説明#
oneapi::mkl::sparse::trsv ルーチンは疎な三角方程式を解きます
ここで、\(A\) は \(m\) 行 \(m\) 列の疎な三角行列であり、\(\text{op()}\) は行列修飾子です:
デンスベクトル \(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.cppshare/doc/mkl/examples/sycl/sparse_blas/source/csr_trsv_usm.cpp