omatadd_batch#
一般行列を使用して、アウトオブプレースでスケールされた行列加算のグループを計算します。
説明
omatadd_batch ルーチンは、一連のアウトオブプレースでスケールされた行列の加算を実行します。これらは omatadd ルーチンに似ていますが、omatadd_batch ルーチンは行列のグループを使用して行列演算を実行します。
omatadd_batch は次の精度をサポートします。
T |
|---|
|
|
|
|
omatadd_batch (バッファーバージョン)#
ストライド API#
omatadd_batch の場合、行列は常にストライド形式になります。操作はのように定義されています。
for i = 0 … batch_size – 1
A は a のオフセット i * stride_a にある行列
B は b のオフセット i * stride_b にある行列
C は c のオフセット i * stride_c にある行列
C = alpha * op(A) + beta * op(B)
end for説明:
op(X)はop(X) = X、op(X) = X'、またはop(X) = conjg(X')のいずれかですalphaとbetaはスカラーですA、B、およびCは行列です
入力バッファー a と b にはすべての入力行列が含まれ、単一の出力バッファー c にはすべての出力行列が含まれます。バッファーまたは配列内の個々の行列の位置はストライド長によって指定され、行列の数は batch_size パラメーターで指定されます。
一般に、a、b、c バッファーは、次のインプレース操作を除いて、メモリー内で重複してはなりません:
op(A)が非転置行列であり、a内のすべてのA行列がc内の対応するすべてのC行列と同じパラメーターを持つ場合、aとcは同じメモリーを指すことがあります;
op(B)が非転置行列であり、b内のすべてのB行列がc内の対応するすべてのC行列と同じパラメーターを持つ場合、bとcは同じメモリーを指すことがあります;
構文#
namespace oneapi::mkl::blas::column_major {
void omatadd_batch(sycl::queue &queue,
transpose transa,
transpose transb,
std::int64_t m,
std::int64_t n,
T alpha,
sycl::buffer<T, 1> &a,
std::int64_t lda,
std::int64_t stride_a,
T beta,
sycl::buffer<T, 1> &b,
std::int64_t ldb,
std::int64_t stride_b,
sycl::buffer<T, 1> &c,
std::int64_t ldc,
std::int64_t stride_c,
std::int64_t batch_size);
}namespace oneapi::mkl::blas::row_major {
void omatadd_batch(sycl::queue &queue,
transpose transa,
transpose transb,
std::int64_t m,
std::int64_t n,
T alpha,
sycl::buffer<T, 1> &a,
std::int64_t lda,
std::int64_t stride_a,
T beta,
sycl::buffer<T, 1> &b,
std::int64_t ldb,
std::int64_t stride_b,
sycl::buffer<T, 1> &c,
std::int64_t ldc,
std::int64_t stride_c,
std::int64_t batch_size);
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- transa
行列
Aに適用される転置演算op(A)を指定します。- transb
行列
Bに適用される転置演算op(B)を指定します。- m
結果行列
Cの行数。最長値はゼロです。- n
結果行列
Cの列数。最小値はゼロです。- alpha
行列
Aのスケーリング係数。- a
入力行列
Aを保持するバッファー。alphaが 0 の場合、aにはアクセスされません。stride_a*batch_size以上のサイズが必要です。- lda
A行列の先頭次元。正で、次の条件を満たす必要があります。transa=transpose::nontranstransa=transpose::transまたはtransa=transpose::conjtrans列優先
m以上である必要がありますn以上である必要があります行優先
n以上である必要がありますm以上である必要があります- stride_a
バッファー
a内の異なるA行列間を移動します。正で、次の条件を満たす必要があります。transa=transpose::nontranstransa=transpose::transまたはtransa=transpose::conjtrans列優先
lda*n以上である必要がありますlda*m以上である必要があります行優先
lda*m以上である必要がありますlda*n以上である必要があります- beta
行列
Bのスケーリング係数。- b
入力行列
Bを保持するバッファー。betaが 0 の場合、bにはアクセスされません。stride_b*batch_size以上のサイズが必要です。- ldb
B行列の先頭次元。正で、次の条件を満たす必要があります。transb=transpose::nontranstransb=transpose::transまたはtransb=transpose::conjtrans列優先
m以上である必要がありますn以上である必要があります行優先
n以上である必要がありますm以上である必要があります- stride_b
バッファー
b内の異なるB行列間を移動します。正で、次の条件を満たす必要があります。transb=transpose::nontranstransb=transpose::transまたはtransb=transpose::conjtrans列優先
ldb*n以上である必要がありますldb*m以上である必要があります行優先
ldb*m以上である必要がありますldb*n以上である必要があります- ldc
C行列の先頭次元。行列が列優先レイアウトで保存される場合、ldcはm以上である必要があります。行列が行優先レイアウトで保存される場合、ldcはn以上である必要があります。正である必要があります。- stride_c
異なる行列
C間とのストライド。行列が列優先レイアウトで保存される場合、stride_cはldc*n以上である必要があります。行列が行優先レイアウトで保存される場合、stride_cはldc*m以上である必要があります。- batch_size
追加する入力行列と出力行列の数を指定します。最小値は 0 です。
- dependencies
計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
出力パラメーター#
- c
出力バッファーであり、
alpha*op(A) + beta*op(B)形式のbatch_size行列加算演算によって上書きされます。stride_c*batch_size以上のサイズが必要です。
omatadd_batch (USM バージョン)#
ストライド API#
omatadd の場合、行列は常にストライド形式になります。操作はのように定義されています。
for i = 0 … batch_size – 1
A は a のオフセット i * stride_a にある行列
B は b のオフセット i * stride_b にある行列
C は c のオフセット i * stride_c にある行列
C = alpha * op(A) + beta * op(B)
end for説明:
op(X)はop(X) = X、op(X) = X'、またはop(X) = conjg(X')のいずれかですalphaとbetaはスカラーですA、B、およびCは行列です
入力バッファー a と b にはすべての入力行列が含まれ、単一の出力バッファー c にはすべての出力行列が含まれます。バッファーまたは配列内の個々の行列の位置はストライド長によって指定され、行列の数は batch_size パラメーターで指定されます。
一般に、a、b、c バッファーは、次のインプレース操作を除いて、メモリー内で重複してはなりません:
op(A)が非転置行列であり、a内のすべてのA行列がc内の対応するすべてのC行列と同じパラメーターを持つ場合、aとcは同じメモリーを指すことがあります;
op(B)が非転置行列であり、b内のすべてのB行列がc内の対応するすべてのC行列と同じパラメーターを持つ場合、bとcは同じメモリーを指すことがあります;
構文
namespace oneapi::mkl::blas::column_major {
sycl::event omatadd_batch(sycl::queue &queue,
transpose transa,
transpose transb,
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 stride_a,
oneapi::mkl::value_or_pointer<T> beta,
const T *b,
std::int64_t ldb,
std::int64_t stride_b,
T *c,
std::int64_t ldc,
std::int64_t stride_c,
std::int64_t batch_size,
const std::vector<sycl::event> &dependencies = {});
}namespace oneapi::mkl::blas::row_major {
sycl::event omatadd_batch(sycl::queue &queue,
transpose transa,
transpose transb,
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 stride_a,
oneapi::mkl::value_or_pointer<T> beta,
const T *b,
std::int64_t ldb,
std::int64_t stride_b, T *c,
std::int64_t ldc,
std::int64_t stride_c,
std::int64_t batch_size,
const std::vector<sycl::event> &dependencies = {});
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- transa
行列
Aに適用される転置演算op(A)を指定します。- transb
行列
Bに適用される転置演算op(B)を指定します。- m
結果行列
Cの行数。最小値はゼロです。- n
結果行列
Cの列数。最小値はゼロです。- alpha
行列
Aのスケーリング係数。value_or_pointerデータタイプの詳細については、スカラー引数を参照してください。- a
入力行列
Aを保持する配列。alphaが 0 の場合、aはアクセスされず、null ポインターになる可能性があります。stride_a*batch_size以上のサイズが必要です。- lda
A行列の先頭次元。正で、次の条件を満たす必要があります。transa=transpose::nontranstransa=transpose::transまたはtransa=transpose::conjtrans列優先
m以上である必要がありますn以上である必要があります行優先
n以上である必要がありますm以上である必要があります- stride_a
配列
a内の異なるA行列間のストライド。正で、次の条件を満たす必要があります。transa=transpose::nontranstransa=transpose::transまたはtransa=transpose::conjtrans列優先
lda*n以上である必要がありますlda*m以上である必要があります行優先
lda*m以上である必要がありますlda*n以上である必要があります- beta
行列
Bのスケーリング係数。value_or_pointerデータタイプの詳細については、スカラー引数を参照してください。- b
入力行列
Bを保持する配列。betaが 0 の場合、bはアクセスされず、null ポインターになる可能性があります。stride_b*batch_size以上のサイズが必要です。- ldb
B行列の先頭次元。正で、次の条件を満たす必要があります。transb=transpose::nontranstransb=transpose::transまたはtransb=transpose::conjtrans列優先
m以上である必要がありますn以上である必要があります行優先
n以上である必要がありますm以上である必要があります- stride_b
配列
b内の異なるB行列間のストライド。正で、次の条件を満たす必要があります。transb=transpose::nontranstransb=transpose::transまたはtransb=transpose::conjtrans列優先
ldb*n以上である必要がありますldb*m以上である必要があります行優先
ldb*m以上である必要がありますldb*n以上である必要があります- ldc
C行列の先頭次元。行列が列優先レイアウトで保存される場合、ldcはm以上である必要があります。行列が行優先レイアウトで保存される場合、ldcはn以上である必要があります。正である必要があります。- stride_c
異なる行列
C間とのストライド。行列が列優先レイアウトで保存される場合、stride_cはldc*n以上である必要があります。行列が行優先レイアウトで保存される場合、stride_cはldc*m以上である必要があります。- batch_size
追加する入力行列と出力行列の数を指定します。最小値は 0 です。
- dependencies
計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
出力パラメーター#
- c
出力配列であり、
alpha*op(A) + beta*op(B)形式のbatch_size行列加算によって上書きされます。stride_c*batch_size以上のサイズが必要です。
戻り値#
計算が完了したことを確認するために待機する出力イベント。