syrk_batch#
syrk 操作のグループを計算します。
説明#
syrk_batch ルーチンは syrk のバッチバージョンであり、1 回の呼び出しで複数の syrk 操作を実行します。各 syrk 操作は、一般的な行列を使用してランク k 更新を実行します。
syrk_batch は次の精度をサポートします。
T |
|---|
|
|
|
|
syrk_batch (バッファーバージョン)#
syrk_batch のバッファーバージョンは、ストライド API のみをサポートします。
ストライド API#
ストライド API 操作は次のように定義されます。
for i = 0 … batch_size – 1
A と C は、a と c のオフセット i * stridea と i * stridec にある行列
C = alpha * op(A) * op(A)^T + beta * C
end for説明:
op(
X) は、op(X) =X、op(X) =XT、または op(X) =XH のいずれかですalphaとbetaはスカラーですAは一般行列、Cは対称行列ですop(
A) はnxkで、Cはnxnです
ストライド API の場合、a および c バッファーにすべての入力行列が含まれます。行列間のストライドは、ストライド・パラメーターで指定されます。a および c バッファー内の行列の合計数は、batch_size パラメーターで指定されます。
構文#
namespace oneapi::mkl::blas::column_major {
void syrk_batch(sycl::queue &queue,
oneapi::mkl::uplo upper_lower,
oneapi::mkl::transpose trans,
std::int64_t n,
std::int64_t k,
T alpha,
sycl::buffer<T,1> &a,
std::int64_t lda,
std::int64_t stridea,
T beta,
sycl::buffer<T,1> &c,
std::int64_t ldc,
std::int64_t stridec,
std::int64_t batch_size,
compute_mode mode = compute_mode::unset)
}namespace oneapi::mkl::blas::row_major {
void syrk_batch(sycl::queue &queue,
oneapi::mkl::uplo upper_lower,
oneapi::mkl::transpose trans,
std::int64_t n,
std::int64_t k,
T alpha,
sycl::buffer<T,1> &a,
std::int64_t lda,
std::int64_t stridea,
T beta, sycl::buffer<T,1> &c,
std::int64_t ldc,
std::int64_t stridec,
std::int64_t batch_size,
compute_mode mode = compute_mode::unset)
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- upper_lower
行列
Cが上三角か下三角であるかを指定します。詳細はデータタイプを参照してください。- trans
行列
Aに適用される転置演算 op(A) を指定します。trans=transpose::conjtransの場合でも、結合は実行されません。詳細はデータタイプを参照してください。- n
行列
Cの行数と列数。ゼロ以上である必要があります。- k
行列 op(
A) の列数。ゼロ以上である必要があります。- alpha
ランク k 更新のスケーリング係数。
- a
入力行列
Aを保持するバッファー。バッファーのサイズはstridea*batch_size以上である必要があります。- lda
行列
Aの先頭次元。正である必要があります。transa=transpose::nontranstransa=transpose::transまたはtrans=transpose::conjtrans列優先
n以上である必要がありますk以上である必要があります行優先
k以上である必要がありますn以上である必要があります- stridea
連続する 2 つの行列
A間のストライド。transa=transpose::nontranstransa=transpose::transまたはtrans=transpose::conjtrans列優先
lda*k以上である必要がありますlda*n以上である必要があります行優先
lda*n以上である必要がありますlda*k以上である必要があります- beta
行列
Cのスケーリング係数。- c
入力/出力行列
Cを保持するバッファー。バッファーのサイズはstridec*batch_size以上である必要があります。- ldc
行列
Cの先頭次元。正の数であり、n以上である必要があります。- stridec
連続する 2 つの行列
C間のストライド。ldc*n以上である必要があります。- batch_size
実行する行列乗算演算の数を指定します。
- mode
オプション。計算モードの設定。詳細は、計算モードを参照してください。
出力パラメーター#
- c
出力バッファーは、
alpha* op(A) * op(A)T +beta*C形式のbatch_sizesyrk操作によって上書きされます。
syrk_batch (USM バージョン)#
syrk_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、と C は a[idx]、c[idx] の行列です。
C = alpha[i] * op(A) * op(A)^T + beta[i] * C
idx := idx + 1
end for
end for説明:
op(
X) は、op(X) =X、op(X) =XT、または op(X) =XH のいずれかですalphaとbetaはスカラーですAは一般行列、Cは対称行列ですop(
A) はnxkで、Cはnxnです
グループ API の場合、a と c 配列にはすべての入力行列へのポインターが含まれます。a と c の行列の合計数は次のように求められます。
構文#
namespace oneapi::mkl::blas::column_major {
sycl::event syrk_batch(sycl::queue &queue,
const oneapi::mkl::uplo *upper_lower,
const oneapi::mkl::transpose *trans,
const Ti *n,
const Ti *k,
const T *alpha,
const T **a,
const Ti *lda,
const T *beta,
T **c,
const Ti *ldc,
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 syrk_batch(sycl::queue &queue,
const oneapi::mkl::uplo *upper_lower,
const oneapi::mkl::transpose *trans,
const Ti *n,
const Ti *k,
const T *alpha,
const T **a,
const Ti *lda,
const T *beta,
T **c,
const Ti *ldc,
std::int64_t group_count,
const Ti *group_size,
compute_mode mode = compute_mode::unset,
const std::vector<sycl::event> &dependencies = {})
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- upper_lower
group_countoneapi::mkl::uplo値の配列。upper_lower[i]は、行列Cがグループi内で上三角行列か下三角行列であるかを指定します。詳細はデータタイプを参照してください。- trans
group_countoneapi::mkl::transpose値の配列。trans[i]は、グループi内の行列Aに適用される転置演算 op(A) を指定します。詳細はデータタイプを参照してください。- n
group_count整数の配列。n[i]はグループi内の行列Cの行数と列数を指定します。すべてのエントリーは 0 以上である必要があります。- k
group_count整数の配列。k[i]は、グループi内の行列 op(A) の列数を指定します。すべてのエントリーは 0 以上である必要があります。- alpha
group_countスカラー要素の配列。alpha[i]はグループi内のすべてのランク k 更新のスケーリング係数を指定します。- a
入力行列
Aのtotal_batch_countポインターの配列。行列ストレージを参照してください。trans=transpose::nontranstrans=transpose::transまたはtrans=transpose::conjtrans列優先
配列
A[i]のサイズはlda[i]*k[i]以上でなければなりません配列
A[i]のサイズはlda[i]*n[i]以上でなければなりません行優先
配列
A[i]のサイズはlda[i]*n[i]以上でなければなりません配列
A[i]のサイズはlda[i]*k[i]以上でなければなりません- lda
group_count整数の配列。lda[i]はグループi内の行列Aの先頭次元を指定します。正である必要があります。trans=transpose::nontranstrans=transpose::transまたはtrans=transpose::conjtrans列優先
n[i]以上である必要があります。k[i]以上である必要があります。行優先
k[i]以上である必要があります。n[i]以上である必要があります。- beta
group_countスカラー要素の配列。beta[i]はグループi内の行列Cのスケーリング係数を指定します。- c
入力/出力行列
Cのtotal_batch_countポインターの配列。配列C[i]のサイズはldc[i]*n[i]以上でなければなりません。行列ストレージを参照してください。- ldc
group_count整数の配列。ldc[i]はグループi内の行列Cの先頭がの次元を指定します。正である必要があります。- group_count
グループの数最小値はゼロです。
- group_size
group_count整数の配列。group_size[i]はグループi内のsyrk操作の数を指定します。group_size内の各要素は 0 以上である必要があります。- mode
オプション。計算モードの設定。詳細は、計算モードを参照してください。
- dependencies
オプション。計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
modeとdependenciesはそれぞれ省略できます。dependencies を提供するのにmodeを指定する必要はありません。
出力パラメーター#
- c
alpha* op(A) * op(A)T +beta*C形式のtotal_batch_countsyrk操作によって上書きされた出力行列Cへのポインター配列。
戻り値#
計算が完了したことを確認するために待機する出力イベント。
ストライド API#
ストライド API 操作は次のように定義されます。
for i = 0 … batch_size – 1
A と C は、a、c 内のオフセット i * stridea、i * stridec にある行列
C = alpha * op(A) * op(A)^T + beta * C
end for説明:
op(
X) は、op(X) =X、op(X) =XT、または op(X) =XH のいずれかですalphaとbetaはスカラーですAは一般行列、Cは対称行列ですop(
A) はnxkで、Cはnxnです
ストライド API の場合、a および c 配列にすべての入力行列が含まれます。行列間のストライドは、ストライド・パラメーターで指定されます。a および c 配列内の行列の合計数は、batch_size パラメーターで指定されます。
構文#
namespace oneapi::mkl::blas::column_major {
sycl::event syrk_batch(sycl::queue &queue,
oneapi::mkl::uplo upper_lower,
oneapi::mkl::transpose trans,
std::int64_t n, std::int64_t k,
oneapi::mkl::value_or_pointer<T> alpha,
const T *a,
std::int64_t lda,
std::int64_t stridea,
oneapi::mkl::value_or_pointer<T> beta,
T *c,
std::int64_t ldc,
std::int64_t stridec,
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 syrk_batch(sycl::queue &queue,
oneapi::mkl::uplo upper_lower,
oneapi::mkl::transpose trans,
std::int64_t n,
std::int64_t k,
oneapi::mkl::value_or_pointer<T> alpha,
const T *a,
std::int64_t lda,
std::int64_t stridea,
oneapi::mkl::value_or_pointer<T> beta,
T *c,
std::int64_t ldc,
std::int64_t stridec,
std::int64_t batch_size,
compute_mode mode = compute_mode::unset,
const std::vector<sycl::event> &dependencies = {})
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- upper_lower
行列
Cが上三角か下三角であるかを指定します。詳細はデータタイプを参照してください。- trans
行列
Aに適用される転置演算 op(A) を指定します。trans=transpose::conjtransの場合でも、結合は実行されません。詳細はデータタイプを参照してください。- n
行列
Cの行数と列数。最小値はゼロです。- k
行列 op(
A) の列数。最小値はゼロです。- alpha
ランク k 更新のスケーリング係数。
value_or_pointerデータタイプの詳細については、スカラー引数を参照してください。- a
入力行列
Aへのポインター。配列のサイズはstridea*batch_size以上である必要があります。- lda
行列
Aの先頭次元。正である必要があります。transa=transpose::nontranstransa=transpose::transまたはtrans=transpose::conjtrans列優先
n以上である必要がありますk以上である必要があります行優先
k以上である必要がありますn以上である必要があります- stridea
連続する 2 つの行列
A間のストライド。transa=transpose::nontranstransa=transpose::transまたはtrans=transpose::conjtrans列優先
lda*k以上である必要がありますlda*n以上である必要があります行優先
lda*n以上である必要がありますlda*k以上である必要があります- beta
行列
Cのスケーリング係数。value_or_pointerデータタイプの詳細については、スカラー引数を参照してください。- c
入力/出力行列
Cへのポインター。配列のサイズはstridec*batch_size以上である必要があります。- ldc
行列
Cの先頭次元。正の数であり、n以上である必要があります。- stridec
連続する 2 つの行列
C間のストライド。ldc*n以上である必要があります。- batch_size
実行する行列乗算演算の数を指定します。
- mode
オプション。計算モードの設定。詳細は、計算モードを参照してください。
- dependencies
オプション。計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
modeとdependenciesはそれぞれ省略できます。dependencies を提供するのにmodeを指定する必要はありません。
出力パラメーター#
- c
alpha* op(A) * op(A)T +beta*C形式のbatch_sizesyrk操作によって上書きされる出力行列Cへのポインター。
戻り値#
計算が完了したことを確認するために待機する出力イベント。