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