trsm_batch#
trsm 操作のグループを計算します。
説明
trsm_batch ルーチンは trsm のバッチバージョンであり、1 回の呼び出しで複数の trsm 操作を実行します。各 trsm は、op(A) * X = alpha * B または X * op(A) = alpha * B という形式の式を解きます。
trsm_batch は次の精度をサポートします。
T |
|---|
|
|
|
|
trsm_batch (バッファーバージョン)#
trsm_batch のバッファーバージョンは、ストライド API のみをサポートします。
ストライド API#
ストライド API 操作は次のように定義されます。
for i = 0 … batch_size – 1
A と B は、a と b のオフセット i * stridea と i * strideb にある行列です
if (left_right == side::left) then
compute X such that op(A) * X = alpha * B
else
compute X such that X * op(A) = alpha * B
B = X
end for説明:
op(
A) は、op(A) =A、op(A) =AT、または op(A) =AH のいずれかですalphaはスカラーですAはmxmまたはnxnの三角行列ですBおよびXはmxnの一般行列です
戻り時に、行列 B は解行列 X によって上書きされます。
ストライド API の場合、a および b バッファーにすべての入力行列が含まれます。行列間のストライドは、ストライド・パラメーターで指定されます。a および b バッファー内の行列の合計数は、batch_size パラメーターで指定されます。
構文#
namespace oneapi::mkl::blas::column_major {
void trsm_batch(sycl::queue &queue,
oneapi::mkl::side left_right,
oneapi::mkl::uplo upper_lower,
oneapi::mkl::transpose trans,
oneapi::mkl::diag unit_diag,
std::int64_t m,
std::int64_t n,
T alpha,
sycl::buffer<T,1> &a,
std::int64_t lda,
std::int64_t stridea,
sycl::buffer<T,1> &b,
std::int64_t ldb,
std::int64_t strideb,
std::int64_t batch_size,
compute_mode mode = compute_mode::unset)
}namespace oneapi::mkl::blas::row_major {
void trsm_batch(sycl::queue &queue,
oneapi::mkl::side left_right,
oneapi::mkl::uplo upper_lower,
oneapi::mkl::transpose trans,
oneapi::mkl::diag unit_diag,
std::int64_t m,
std::int64_t n,
T alpha,
sycl::buffer<T,1> &a,
std::int64_t lda,
std::int64_t stridea,
sycl::buffer<T,1> &b,
std::int64_t ldb,
std::int64_t strideb,
std::int64_t batch_size,
compute_mode mode = compute_mode::unset)
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- left_right
行列
Aが乗算の左辺にあるか右辺にあるかを指定します。詳細はデータタイプを参照してください。- upper_lower
行列
Aが上三角か下三角であるかを指定します。詳細はデータタイプを参照してください。- trans
行列
Aに適用される転置演算 op(A) を指定します。詳細はデータタイプを参照してください。- unit_diag
行列
Aが単位三角行列であるかどうかを指定します。詳細はデータタイプを参照してください。- m
行列
Bの行数。最小値はゼロです。- n
行列
Bの列数。最小値はゼロです。- alpha
ソリューションのスケーリング係数。
- a
入力行列
Aを保持するバッファー。バッファーのサイズはstridea*batch_size以上である必要があります。- lda
行列
Aの先頭次元。left_right=side::leftの場合はm以上、left_right=side::rightの場合はn以上である必要があります。正である必要があります。- stridea
連続する 2 つの行列
A間のストライド。- b
入力/出力行列
Bを保持するバッファー。バッファーのサイズはstrideb*batch_size以上である必要があります。- ldb
行列
Bの先頭次元。列優先レイアウトの場合はm以上、行優先レイアウトの場合はn以上である必要があります。正である必要があります。- strideb
連続する 2 つの行列
B間のストライド。- batch_size
解くべき三角線形システムの数を指定します。
- mode
オプション。計算モードの設定。詳細は、計算モードを参照してください。
出力パラメーター#
- b
出力バッファーは
batch_sizeの解行列Xによって上書きされます。
注
alpha = 0 の場合、行列 B はゼロに設定され、trsm_batch を呼び出す前に A と B を初期化する必要はありません。
trsm_batch (USM バージョン)#
trsm_batch の USM バージョンは、グループ API とストライド API をサポートします。
グループ API#
グループ API の整数ポインターの Ti タイプは、std::int64_t または std::int32_t のいずれかです。
グループ API 操作は次のように定義されます。
idx = 0
for i = 0 … group_count – 1
for j = 0 … group_size – 1
A と B は a[idx] と b[idx] の行列
if (left_right == side::left) then
op(A) * X = alpha[i] * B となるような X を計算
else
X * op(A) = alpha[i] * B となるような X を計算
end if
B = X
idx = idx + 1
end for
end for説明:
op(
A) は、op(A) =A、op(A) =AT、または op(A) =AH のいずれかですalphaはスカラーですAはmxmまたはnxnの三角行列ですBおよびXはmxnの一般行列です
戻り時に、行列 B は解行列 X によって上書きされます。
グループ API の場合、a と b 配列にはすべての入力行列へのポインターが含まれます。a と b の行列の合計数は次のように求められます。
構文#
namespace oneapi::mkl::blas::column_major {
sycl::event trsm_batch(sycl::queue &queue,
const oneapi::mkl::side *left_right,
const oneapi::mkl::uplo *upper_lower,
const oneapi::mkl::transpose *trans,
const oneapi::mkl::diag *unit_diag,
const Ti *m,
const Ti *n,
const T *alpha,
const T **a,
const Ti *lda,
T **b,
const Ti *ldb,
std::int64_t group_count,
const Ti *group_size,
compute_mode mode = compute_mode::unset,
const std::vector<sycl::event> &dependencies = {})
}namespace oneapi::mkl::blas::row_major {
sycl::event trsm_batch(sycl::queue &queue,
const oneapi::mkl::side *left_right,
const oneapi::mkl::uplo *upper_lower,
const oneapi::mkl::transpose *trans,
const oneapi::mkl::diag *unit_diag,
const Ti *m,
const Ti *n,
const T *alpha,
const T **a,
const Ti *lda,
T **b,
const Ti *ldb,
std::int64_t group_count,
const Ti *group_size,
compute_mode mode = compute_mode::unset,
const std::vector<sycl::event> &dependencies = {})
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- left_right
group_countoneapi::mkl::side値の配列。left_right[i]は、行列Aがグループiの乗算の左辺にあるか右辺にあるかを指定します。詳細はデータタイプを参照してください。- upper_lower
group_countoneapi::mkl::uplo値の配列。upper_lower[i]は、行列Aがグループi内で上三角行列か下三角行列であるかを指定します。詳細はデータタイプを参照してください。- trans
group_countoneapi::mkl::transpose値の配列。trans[i]は、各グループi内の行列Aに適用される転置演算 op(A) を指定します。詳細はデータタイプを参照してください。- unit_diag
group_countoneapi::mkl::diag値の配列。unit_diag[i]は行列Aが単位三角行列であるかどうかを指定します。詳細はデータタイプを参照してください。- m
group_count整数の配列。m[i]は、グループi内の行列Bの行数を指定します。すべてのエントリーは 0 以上である必要があります。- n
group_count整数の配列。n[i]は、グループi内の行列Bの列数を指定します。すべてのエントリーは 0 以上である必要があります。- alpha
group_countスカラー要素の配列。alpha[i]はグループi内の解のスケーリング係数を指定します。- a
入力行列
Aのtotal_batch_countポインターの配列。行列ストレージを参照してください。- lda
group_count整数の配列。lda[i]はグループi内の行列Aの先頭次元を指定します。left_right[i]=side::leftの場合はm[i]以上、left_right[i]=side::rightの場合はn[i]以上である必要があります。すべてのエントリーは正の値です。- b
入力/出力行列
Bのtotal_batch_countポインターの配列。行列ストレージを参照してください。- ldb
group_count整数の配列。ldb[i]はグループi内の行列Bの先頭次元を指定します。列優先レイアウトの場合はm[i]以上、行優先レイアウトの場合はn[i]以上である必要があります。すべてのエントリーは正の値である必要があります。- group_count
グループの数はゼロ以上である必要があります。
- group_size
group_count整数の配列。group_size[i]はグループi内のtrsm操作の数を指定します。group_size内の各要素は 0 以上である必要があります。- mode
オプション。計算モードの設定。詳細は、計算モードを参照してください。
- dependencies
オプション。計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
modeとdependenciesはそれぞれ省略できます。dependencies を提供するのにmodeを指定する必要はありません。
出力パラメーター#
- b
出力行列
Bへのポインターの配列は、total_batch_count解行列Xによって上書きされます。
注
alpha = 0 の場合、行列 B はゼロに設定され、trsm_batch を呼び出す前に A と B を初期化する必要はありません。
戻り値#
計算が完了したことを確認するために待機する出力イベント。
ストライド API#
ストライド API 操作は次のように定義されます。
for i = 0 … batch_size – 1
A と B は、a と b のオフセット i * stridea と i * strideb にある行列です
if (left_right == side::left) then
compute X such that op(A) * X = alpha * B
else
compute X such that X * op(A) = alpha * B
B = X
end for説明:
op(
A) は、op(A) =A、op(A) =AT、または op(A) =AH のいずれかですalphaはスカラーですAはmxmまたはnxnの三角行列ですBおよびXはmxnの一般行列です
戻り時に、行列 B は解行列 X によって上書きされます。
ストライド API の場合、a および b 配列にすべての入力行列が含まれます。行列間のストライドは、ストライド・パラメーターで指定されます。a および b 配列内の行列の合計数は、batch_size パラメーターで指定されます。
構文#
namespace oneapi::mkl::blas::column_major {
sycl::event trsm_batch(sycl::queue &queue,
oneapi::mkl::side left_right,
oneapi::mkl::uplo upper_lower,
oneapi::mkl::transpose trans,
oneapi::mkl::diag unit_diag,
std::int64_t m,
std::int64_t n,
oneapi::mkl::value_or_pointer<T> alpha,
const T *a,
std::int64_t lda,
std::int64_t stridea,
T *b,
std::int64_t ldb,
std::int64_t strideb,
std::int64_t batch_size,
compute_mode mode = compute_mode::unset,
const std::vector<sycl::event> &dependencies = {})
}namespace oneapi::mkl::blas::row_major {
sycl::event trsm_batch(sycl::queue &queue,
oneapi::mkl::side left_right,
oneapi::mkl::uplo upper_lower,
oneapi::mkl::transpose trans,
oneapi::mkl::diag unit_diag,
std::int64_t m,
std::int64_t n,
oneapi::mkl::value_or_pointer<T> alpha,
const T *a,
std::int64_t lda,
std::int64_t stridea,
T *b,
std::int64_t ldb,
std::int64_t strideb,
std::int64_t batch_size,
compute_mode mode = compute_mode::unset,
const std::vector<sycl::event> &dependencies = {})
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- left_right
行列
Aが乗算の左辺にあるか右辺にあるかを指定します。詳細はデータタイプを参照してください。- upper_lower
行列
Aが上三角か下三角であるかを指定します。詳細はデータタイプを参照してください。- trans
行列
Aに適用される転置演算 op(A) を指定します。詳細はデータタイプを参照してください。- unit_diag
行列
Aが単位三角行列であるかどうかを指定します。詳細はデータタイプを参照してください。- m
行列
Bの行数。最小値はゼロです。- n
行列
Bの列数。最小値はゼロです。- alpha
ソリューションのスケーリング係数。
value_or_pointerデータタイプの詳細については、スカラー引数を参照してください。- a
入力行列
Aへのポインター。配列のサイズはstridea*batch_size以上である必要があります。- lda
行列
Aの先頭次元。left_right=side::leftの場合はm以上、left_right=side::rightの場合はn以上である必要があります。正である必要があります。- stridea
連続する 2 つの行列
A間のストライド。- b
入力/出力行列
Bへのポインター。配列のサイズはstrideb*batch_size以上である必要があります。- ldb
行列
Bの先頭次元。列優先レイアウトの場合はm以上、行優先レイアウトの場合はn以上である必要があります。正である必要があります。- strideb
連続する 2 つの行列
B間のストライド。- batch_size
解くべき三角線形システムの数を指定します。
- mode
オプション。計算モードの設定。詳細は、計算モードを参照してください。
- dependencies
オプション。計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
modeとdependenciesはそれぞれ省略できます。dependencies を提供するのにmodeを指定する必要はありません。
出力パラメーター#
- b
出力行列
Bへのポインターは、batch_sizeの解行列Xによって上書きされます。
注
alpha = 0 の場合、行列 B はゼロに設定され、trsm_batch を呼び出す前に A と B を初期化する必要はありません。
戻り値#
計算が完了したことを確認するために待機する出力イベント。