omatcopy_batch#
一般行列を使用して、アウトオブプレースでスケールされた行列転置またはコピー操作のグループを計算します。
説明#
omatcopy_batch ルーチンは、一連のアウトオブプレースでスケールされた行列のコピーまたは転置を実行します。これらは omatcopy ルーチンに似ていますが、omatcopy_batch ルーチンは行列のグループを使用して行列演算を実行します。
omatcopy_batch は次の精度をサポートします。
T |
|---|
|
|
|
|
omatcopy_batch (バッファーバージョン)#
omatcopy_batch のバッファーバージョンは、ストライド API のみをサポートします。
ストライド API#
ストライド API の操作は次のように定義されます。
for i = 0 … batch_size – 1
A と B は、a では i * stride_a のオフセット、b では i * stride_b のオフセットにある行列
B = alpha * op(A)
end for説明:
op(X)はop(X) = X、op(X) = X'、またはop(X) = conjg(X')のいずれかですalphaはスカラーですAおよびBは行列です
ストライド API の場合、単一の入力バッファーにすべての入力行列が含まれ、単一の出力バッファーにすべての出力行列が含まれます。バッファー内の個々の行列の位置はストライド長によって指定され、行列の数は batch_size パラメーターで指定されます。
構文#
namespace oneapi::mkl::blas::column_major {
void omatcopy_batch(sycl::queue &queue,
transpose trans,
std::int64_t m,
std::int64_t n,
T alpha,
sycl::buffer<T, 1> &a,
std::int64_t lda,
std::int64_t stride_a,
sycl::buffer<T, 1> &b,
std::int64_t ldb,
std::int64_t stride_b,
std::int64_t batch_size);
}namespace oneapi::mkl::blas::row_major {
void omatcopy_batch(sycl::queue &queue,
transpose trans,
std::int64_t m,
std::int64_t n,
T alpha,
sycl::buffer<T, 1> &a,
std::int64_t lda,
std::int64_t stride_a,
sycl::buffer<T, 1> &b,
std::int64_t ldb,
std::int64_t stride_b,
std::int64_t batch_size);
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- trans
行列
Aに適用される転置演算op(A)を指定します。- m
それぞれの行列
Aの行数。最小値は 0 です。- n
それぞれの行列
Aの列数。最小値は 0 です。- alpha
行列の転置またはコピーのスケーリング係数。
- a
入力行列
Aを保持するバッファー。stride_a*batch_size以上のサイズが必要です。- lda
A 行列の先頭次元。行列が列優先レイアウトで保存される場合、
ldaはm以上である必要があります。行列が行優先レイアウトで保存される場合、ldaはn以上である必要があります。正である必要があります。- stride_a
異なる行列
A間とのストライド。行列が列優先レイアウトで保存される場合、stride_aはlda*n以上である必要があります。行列が行優先レイアウトで保存される場合、stride_aはlda*m以上である必要があります。- ldb
行列
Bの先頭次元。正で、次の条件を満たす必要があります。trans=transpose::nontranstrans=transpose::transまたはtrans=transpose::conjtrans列優先
m以上である必要がありますn以上である必要があります行優先
n以上である必要がありますm以上である必要があります- stride_b
バッファー
b内の異なるB行列間を移動します。正で、次の条件を満たす必要があります。trans=transpose::nontranstrans=transpose::transまたはtrans=transpose::conjtrans列優先
ldb*n以上である必要がありますldb*m以上である必要があります行優先
ldb*m以上である必要がありますldb*n以上である必要があります- batch_size
転置またはコピーする行列の数を指定します。最小値は 0 です。
出力パラメーター#
- b
出力バッファーは、
batch_size行列転置またはalpha*op(A)形式のコピー操作によって上書きされます。stride_b*batch_size以上のサイズが必要です。
omatcopy_batch (USM バージョン)#
omatcopy_batch の USM バージョンは、グループ API とストライド API をサポートします。
グループ API#
グループ API の整数ポインターの Ti タイプは、std::int64_t または std::int32_t のいずれかです。
グループ API の操作は次のように定義されます。
idx = 0
for i = 0 … group_count – 1
それぞれの配列内の位置 i にある m、n、alpha、lda、ldb、group_size
for j = 0 … group_size – 1
A と B は、それぞれの配列内の位置 idx にある行列
B = alpha * op(A)
idx := idx + 1
end for
end for説明:
op(X)はop(X) = X、op(X) = X'、またはop(X) = conjg(X')のいずれかですalphaはスカラーですAおよびBは行列です
グループ API では、行列はポインターの配列によって提供されます。A と B は、それぞれ a と b が指すアドレスに格納されている行列を表します。a と b のエントリーの合計数は次のように求められます。
構文#
namespace oneapi::mkl::blas::column_major {
sycl::event omatcopy_batch(sycl::queue &queue,
const transpose *trans,
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 *groupsize,
const std::vector<sycl::event> &dependencies = {});
}namespace oneapi::mkl::blas::row_major {
sycl::event omatcopy_batch(sycl::queue &queue,
const transpose *trans,
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 *groupsize,
const std::vector<sycl::event> &dependencies = {});
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- trans
サイズ
group_countの配列。配列内の各要素iは、行列Aに適用される転置演算op(A)を指定します。- m
group_count整数の配列。m[i]はA[i]の行数を指定します。エントリーの最小値は 0 です。- n
group_count整数の配列。n[i]はA[i]の列数を指定します。エントリーの最小値は 0 です。- alpha
操作のスケーリング係数を含むサイズ
group_countの配列。- a
A行列へのポインターのサイズtotal_batch_countの配列。行列が列優先レイアウトで格納されている場合、グループiの各A行列に割り当てられる配列のサイズはlda[i] * n[i]以上である必要があります。行列が行優先レイアウトで格納されている場合、グループiの各A行列に割り当てられる配列のサイズはlda[i]*m[i]以上である必要があります。- lda
group_count整数の配列。lda[i]はA[i]行列の先頭次元を指定します。行列が列優先レイアウトで保存される場合、lda[i]はm[i]以上である必要があります。行列が行優先レイアウトで保存される場合、lda[i]はn[i]以上である必要があります。それぞれが正でなければなりません。- ldb
group_count整数の配列。ldb[i]はB[i]行列の先頭次元を指定します。各ldb[i]は、正で、次の条件を満たす必要があります。trans[i]=transpose::nontranstrans[i]=transpose::transまたはtrans[i]=transpose::conjtrans列優先
m[i]以上である必要がありますn[i]以上である必要があります行優先
n[i]以上である必要がありますm[i]以上である必要があります- group_count
グループ数の最小値は 0 です。
- group_size
サイズ group_count` の配列。要素 ``group_size[i] はグループ
i内の行列の数です。group_size内の各要素の最小値は 0 です。- dependencies
計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
出力パラメーター#
- b
B行列へのポインターの出力配列。これは、alpha*op(A)形式のtotal_batch_count行列転置またはコピー操作によって上書きされます。行列が列優先レイアウトで格納されている場合、グループiの各B行列に割り当てられる配列のサイズは、Bが転置されていない場合はldb[i] * n[i]以上、Bが転置されている場合はldb[i]*m[i]以上である必要があります。行列が行優先レイアウトで格納されている場合、グループiの各B行列に割り当てられる配列のサイズは、Bが転置されていない場合はldb[i] * m[i]以上、Bが転置されている場合はldb[i]*n[i]以上である必要があります。
戻り値#
計算が完了したことを確認するために待機する出力イベント。
ストライド API#
ストライド API の操作は次のように定義されます。
for i = 0 … batch_size – 1
A と B は、a では i * stride_a のオフセット、b では i * stride_b のオフセットにある行列
B = alpha * op(A)
end for説明:
op(X)はop(X) = X、op(X) = X'、またはop(X) = conjg(X')のいずれかですalphaはスカラーですAおよびBは行列です
ストライド API の場合、単一の入力配列にすべての入力行列が含まれ、単一の出力配列にすべての出力行列が含まれます。配列内の個々の行列の位置はストライド長によって指定され、行列の数は batch_size パラメーターで指定されます。
構文
namespace oneapi::mkl::blas::column_major {
sycl::event omatcopy_batch(sycl::queue &queue,
transpose trans,
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,
T *b,
std::int64_t ldb,
std::int64_t stride_b,
std::int64_t batch_size,
const std::vector<sycl::event> &dependencies = {});
}namespace oneapi::mkl::blas::row_major {
sycl::event omatcopy_batch(sycl::queue &queue,
transpose trans,
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,
T *b,
std::int64_t ldb,
std::int64_t stride_b,
std::int64_t batch_size,
const std::vector<sycl::event> &dependencies = {});
}入力パラメーター#
- trans
行列
Aに適用される転置演算op(A)を指定します。- m
それぞれの行列
Aの行数。最小値は 0 です。- n
それぞれの行列
Aの列数。最小値は 0 です。- alpha
行列の転置またはコピーのスケーリング係数。
value_or_pointerデータタイプの詳細については、スカラー引数を参照してください。- a
入力行列
Aを保持する配列。stride_a*batch_size以上のサイズが必要です。- lda
A行列の先頭次元。行列が列優先レイアウトで保存される場合、ldaはm以上である必要があります。行列が行優先レイアウトで保存される場合、ldaはn以上である必要があります。正である必要があります。- stride_a
異なる行列
A間とのストライド。行列が列優先レイアウトで保存される場合、stride_aはlda*n以上である必要があります。行列が行優先レイアウトで保存される場合、stride_aはlda*m以上である必要があります。- ldb
行列
Bの先頭次元。正で、次の条件を満たす必要があります。trans=transpose::nontranstrans=transpose::transまたはtrans=transpose::conjtrans列優先
m以上である必要がありますn以上である必要があります行優先
n以上である必要がありますm以上である必要があります- stride_b
配列
b内の異なるB行列間のストライド。正で、次の条件を満たす必要があります。trans=transpose::nontranstrans=transpose::transまたはtrans=transpose::conjtrans列優先
ldb*n以上である必要がありますldb*m以上である必要があります行優先
ldb*m以上である必要がありますldb*n以上である必要があります- batch_size
転置またはコピーする行列の数を指定します。最小値は 0 です。
- dependencies
計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
出力パラメーター#
- b
出力配列は、
batch_size行列転置またはalpha*op(A)形式のコピー操作によって上書きされます。stride_b*batch_size以上のサイズが必要です。
戻り値#
計算が完了したことを確認するために待機する出力イベント。