oneapi::mkl::sparse::trsm#
三角形のスパース行列で複数の右辺 (RHS) を持つ線形方程式系を解きます。
説明#
oneapi::mkl::sparse::trsm ルーチンは疎な三角方程式を解きます
ここで、\(A\) は \(m\) 行 \(m\) 列の疎な三角行列であり、\(\text{op()}\) は行列修飾子です:
デンス行列 \(X\) と \(Y\) は row-major (行優先) または column-major (列優先) のレイアウトで格納され、sparse::trsm() 演算を計算するのに適切な行数と columns 数を持ちます。つまり、\(\text{op}(X)\) と \(Y\) は \(m\) 行 x \(columns\) 列の次元になります。行列 \(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::trsm()操作はサポートされていません。
API#
構文
SYCL* バッファーを使用:
namespace oneapi::mkl::sparse {
void trsm (
sycl::queue &queue,
oneapi::mkl::layout layout_val,
oneapi::mkl::transpose opA,
oneapi::mkl::transpose opX,
oneapi::mkl::uplo uplo_val,
oneapi::mkl::diag diag_val,
const DATA_TYPE alpha,
oneapi::mkl::sparse::matrix_handle_t A,
sycl::buffer<DATA_TYPE, 1> &X,
const std::int64_t columns,
const std::int64_t ldx,
sycl::buffer<DATA_TYPE, 1> &Y,
const std::int64_t ldy);
}USM ポインターを使用:
namespace oneapi::mkl::sparse {
sycl::event trsm(
sycl::queue &queue,
oneapi::mkl::layout layout_val,
oneapi::mkl::transpose opA,
oneapi::mkl::transpose opX,
oneapi::mkl::uplo uplo_val,
oneapi::mkl::diag diag_val,
const DATA_TYPE alpha,
oneapi::mkl::sparse::matrix_handle_t A,
const DATA_TYPE *X,
const std::int64_t columns,
const std::int64_t ldx,
DATA_TYPE *Y,
const std::int64_t ldy,
const std::vector<sycl::event> &dependencies = {});
}インクルード・ファイル#
oneapi/mkl/spblas.hpp
入力パラメーター#
- queue
SYCL* カーネルの実行に使用される SYCL* コマンドキューを指定します。
- layout_val
デンス行列のメモリー内の保存方式を指定します。このレイアウトは、デンス行列
XとYの両方に適用されることに注意してください。- opA
スパース入力行列 \(A\) に対する演算
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のみです。- opX
デンス入力行列 \(X\) に対する演算
op()を指定します。oneapi::mkl::transpose::nontrans非転置、\(\text{op}(X) = X\)。
oneapi::mkl::transpose::trans転置、\(\text{op}(X) = X^{T}\)。
oneapi::mkl::transpose::conjtrans共役転置、\(\text{op}(X) = X^{H}\)。
注
現在、サポートされている操作は
oneapi::mkl::transpose::nontransのみです。- uplo_val
行列のどの部分を処理するか指定します。
oneapi::mkl::uplo::lower下三角行列部分を処理します。
oneapi::mkl::uplo::upper上三角行列部分を処理します。
- 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
右辺のデンス行列の SYCL* バッファーまたはデバイスがアクセス可能な USM ポインター。\(\text{op}(X)\) は、指定された X の
layoutに基づいて、先頭次元ストライドがldxの列columns\(m\) 次元になります。例えば、\(\text{op}(X) = X\)、つまり
opX == oneapi::mkl::transpose::nontransの場合、layout=oneapi::mkl::layout::col-majorlayout=oneapi::mkl::layout::row-major\(\text{op}(X)\) の nrows
ldxm\(\text{op}(X)\) の ncols
columnsldx- columns
\(\text{op}(X)\) および \(Y\) 行列の列数。
- ldx
X行列の先頭次元を指定します。正の値で、実際に使用可能な行 (layout_val=oneapi::mkl::layout::row_majorの場合) または列 (layout_val=oneapi::mkl::layout::col_majorの場合) のX次元以上である必要があります。- ldy
Y行列の先頭次元を指定します。正の数値で、layout_val=oneapi::mkl::layout::row-majorの場合columns以上で、layout_val=oneapi::mkl::layout::col-majorの場合 \(\text{op}(A)\) 以上の行数である必要があります。- dependencies
oneapi::mkl::sparse::trsmルーチンが依存するイベントのリストを含む、std::vector<sycl::event>タイプのベクトル。
出力パラメーター#
- Y
三角関数のデンス行列解を求める SYCL* バッファーまたはデバイスがアクセス可能な USM ポインター。\(Y\) は、指定された Y の
layoutに基づいて、先頭次元ストライドがldyの列columns\(m\) 次元になります。layout=oneapi::mkl::layout::col-majorlayout=oneapi::mkl::layout::row-major\(Y\) の nrows
ldym(\(\text{op}(A)\) と \(A\) の行数)\(Y\) の ncols
columnsldy
戻り値 (USM のみ)#
- sycl::event
trsmルーチンの完了を待機したり、依存関係として追加される SYCL* イベント。
例#
SYCL* バッファーまたは USM ポインターで oneapi::mkl::sparse::trsm を使用する例は、oneMKL インストール・ディレクトリーの以下の場所にあります。
share/doc/mkl/examples/sycl/sparse_blas/source/csr_trsm.cppshare/doc/mkl/examples/sycl/sparse_blas/source/csr_trsm_usm.cpp