dgmm_batch#
対角行列 - 行列積 (dgmm) 演算のグループを計算します。
説明#
dgmm_batch ルーチンは、1 回の呼び出しで複数の対角行列 - 行列積 (dgmm) 演算を実行します。対角行列は密なベクトルとして保存され、演算は行列とベクトルのグループを使用して実行されます。
dgmm_batch は次の精度をサポートします。
T |
|---|
|
|
|
|
dgmm_batch (バッファーバージョン)#
dgmm_batch のバッファーバージョンは、ストライド API のみをサポートします。
ストライド API#
ストライド API 操作は次のように定義されます。
for i = 0 … batch_size – 1
A と C は a のオフセット i * stridea、c のオフセット i * stridec にある行列
X は x のオフセット i * stridex にあるベクトル
if (left_right == side::left)
C = diag(X) * A
else
C = A * diag(X)
end for説明:
Aは行列Xはベクトルとして格納された対角行列
ストライド API の場合、すべての行列 A と C、およびベクトル X は同じパラメーター (サイズ、増分) を持ち、stridea、stridec、stridex によって互いに指定された一定のストライドで格納されます。
a と x 配列にはすべての入力行列が含まれます。a と x の行列の合計数は、batch_size パラメーターで指定されます。
構文#
namespace oneapi::mkl::blas::column_major {
void dgmm_batch(sycl::queue &queue,
oneapi::mkl::side left_right,
std::inte64_t m,
std::int64_t n,
sycl::buffer<T,1> &a,
std::int64_t lda,
std::int64_t stridea,
sycl::buffer<T,1> &x,
std::int64_t incx,
std::int64_t stridex,
sycl::buffer<T,1> &c,
std::int64_t ldc,
std::int64_t stridec,
std::int64_t batch_size);
}namespace oneapi::mkl::blas::row_major {
void dgmm_batch(sycl::queue &queue,
oneapi::mkl::side left_right,
std::inte64_t m,
std::int64_t n,
sycl::buffer<T,1> &a,
std::int64_t lda,
std::int64_t stridea,
sycl::buffer<T,1> &x,
std::int64_t incx,
std::int64_t stridex,
sycl::buffer<T,1> &c,
std::int64_t ldc,
std::int64_t stridec,
std::int64_t batch_size);
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- left_right
積内の対角行列の位置を指定します。詳細はデータタイプを参照してください。
- m
行列
Aと行列Cの行数。最小値は 0 です。- n
行列
A) と行列Cの列数。最小値は 0 です。- a
入力行列
Aを保持するバッファー。バッファのサイズはlda*k+stridea* (batch_size- 1) 以上である必要があります。ここで、kは列優先レイアウトではn、行優先レイアウトではmです。- lda
行列
Aの先頭次元。列優先レイアウトの場合はm以上、行優先レイアウトはn以上である必要があります。正である必要があります。- stridea
連続する 2 つの行列
A間のストライド。最小値は 0 です。行列ストレージを参照してください。- x
入力行列
Xを保持するバッファー。バッファーのサイズは (1 + (len- 1)*abs(incx)) +stridex* (batch_size- 1) 以上である必要があります。ここで、lenは、対角行列が積の右辺にある場合はn、それ以外の場合はmです。- incx
ベクトル
Xの 2 つの連続する要素間のストライド。- stridex
連続する 2 つのベクトル
X間のストライド。最小値は 0 です。行列ストレージを参照してください。- c
入力/出力行列
Cを保持するバッファー。バッファーのサイズはbatch_size*stridec以上である必要があります。- ldc
行列
Cの先頭次元。列優先レイアウトの場合はm以上、行優先レイアウトはn以上である必要があります。正である必要があります。- stridec
連続する 2 つの行列
C間のストライド。列優先レイアウトの場合はldc*n以上、行優先レイアウトはldc*m以上である必要があります。行列ストレージを参照してください。- batch_size
実行する
dgmm計算の数。最小値は 0 です。
出力パラメーター#
- c
出力行列
Cを保持するバッファーは、batch_sizedgmm操作によって上書きされます。
dgmm_batch (USM バージョン)#
dgmm_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] の行列
X は x[idx] のベクトル
if (left_right[idx] == side::left)
C = diag(X) * A
else
C = A * diag(X) idx = idx + 1
end for
end for説明:
Aは行列Xはベクトルとして格納された対角行列
グループ API の場合、各グループには同じパラメーター (サイズと増分) を持つ行列とベクトルが含まれます。a 配列と x 配列には、すべての入力行列へのポインターが含まれています。a と x の行列の合計数は次のように与えられます。
構文#
namespace oneapi::mkl::blas::column_major {
sycl::event dgmm_batch(sycl::queue &queue,
const oneapi::mkl::side *left_right,
const Ti *m,
const Ti *n,
const T **a,
const Ti *lda,
const T **x,
const Ti *incx,
T **c,
const Ti *ldc,
std::int64_t group_count,
const Ti *group_size,
const std::vector<sycl::event> &dependencies = {})
}namespace oneapi::mkl::blas::row_major {
sycl::event dgmm_batch(sycl::queue &queue,
const oneapi::mkl::side *left_right,
const Ti *m,
const Ti *n,
const T **a,
const Ti *lda,
const T **x,
const Ti *incx, T **c,
const Ti *ldc,
std::int64_t group_count,
const Ti *group_size,
const std::vector<sycl::event> &dependencies = {})
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- left_right
group_countパラメーターの配列。left_right[i]はグループi内の対角行列の位置を指定します。詳細はデータタイプを参照してください。- m
group_count整数の配列。m[i]は、グループi内の行列Aの行数を指定します。すべてのエントリーの最小値は 0 です。- n
group_count整数の配列。n[i]は、グループi内の行列Aの列数を指定します。すべてのエントリーの最小値は 0 です。- a
サイズが
total_batch_countの入力行列Aへのポインターの配列。配列のサイズは、列優先レイアウトの場合はlda[i]*n[i]以上、行優先レイアウトの場合はlda[i]*m[i]以上である必要があります。行列ストレージを参照してください。- lda
group_count整数の配列。lda[i]は、グループi内の行列Aの先頭次元を指定します。すべてのエントリーは正で、列優先レイアウトの場合はm[i]以上、行優先レイアウトの場合はn[i]以上である必要があります。- x
サイズが
total_batch_countの入力ベクトルXへのポインターの配列。配列のサイズは (1 +len[i]– 1)*abs(incx[i])) 以上である必要があります。ここで、len[i]は、対角行列が積の右辺にある場合はn[i]、それ以外の場合はm[i]になります。行列ストレージを参照してください。- incx
group_count整数の配列。incx[i]は、グループi内のベクトルXのストライドを指定します。すべてのエントリーは正の値である必要があります。- c
サイズが
total_batch_countの入力/出力行列Cへのポインターの配列。配列のサイズは、列優先レイアウトの場合はldc[i]*n[i]以上、行優先レイアウトの場合はldc[i]*m[i]以上である必要があります。行列ストレージを参照してください。- ldc
group_count整数の配列。ldc[i]は、グループi内の行列Cの先頭次元を指定します。すべてのエントリーは正で、列優先レイアウトの場合はm[i]以上、行優先レイアウトの場合はn[i]以上である必要があります。- group_count
グループの数を指定します。最小値は 0 です。
- group_size
group_count整数の配列。group_size[i]はグループi内の対角行列 - 行列積演算の数を指定します。すべてのエントリーの最小値は 0 です。- dependencies
計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
出力パラメーター#
- c
total_batch_countdgmm操作で上書きされた出力行列Cへのポインターの配列。
戻り値#
計算が完了したことを確認するために待機する出力イベント。
ストライド API#
ストライド API 操作は次のように定義されます。
for i = 0 … batch_size – 1
A と C は a のオフセット i * stridea、c のオフセット i * stridec にある行列
X は x のオフセット i * stridex にあるベクトル
if (left_right == side::left)
C = diag(X) * A
else
C = A * diag(X)
end for説明:
Aは行列Xはベクトルとして格納された対角行列
ストライド API の場合、すべての行列 A と C、およびベクトル X は同じパラメーター (サイズ、増分) を持ち、stridea、stridec、stridex によって互いに指定された一定のストライドで格納されます。
a と x 配列にはすべての入力行列が含まれます。a と x の行列の合計数は、batch_size パラメーターで指定されます。
構文#
namespace oneapi::mkl::blas::column_major {
sycl::event dgmm_batch(sycl::queue &queue,
oneapi::mkl::side left_right,
std::inte64_t m,
std::int64_t n,
const T *a,
std::int64_t lda,
std::int64_t stridea,
const T *x,
std::int64_t incx,
std::int64_t stridex,
T *c,
std::int64_t ldc,
std::int64_t stridec,
std::int64_t batch_size,
const std::vector<sycl::event> &dependencies = {})
}namespace oneapi::mkl::blas::row_major {
sycl::event dgmm_batch(sycl::queue &queue,
oneapi::mkl::side left_right,
std::inte64_t m,
std::int64_t n,
const T *a,
std::int64_t lda,
std::int64_t stridea,
const T *x,
std::int64_t incx,
std::int64_t stridex,
T *c,
std::int64_t ldc,
std::int64_t stridec,
std::int64_t batch_size,
const std::vector<sycl::event> &dependencies = {})
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- left_right
積内の対角行列の位置を指定します。詳細はデータタイプを参照してください。
- m
行列
Aと行列Cの行数。最小値は 0 です。- n
行列
A) と行列Cの列数。最小値は 0 です。- a
入力行列
Aへのポインター。配列のサイズはlda*k+stridea* (batch_size- 1) 以上である必要があります。ここで、kは列優先レイアウトの場合はn、行優先レイアウトの場合はmです。- lda
行列
Aの先頭次元。列優先レイアウトの場合はm以上、行優先レイアウトはn以上の正である必要があります。- stridea
連続する 2 つの行列
A間のストライド。最小値は 0 です。行列ストレージを参照してください。- x
入力行列
Xへのポインター。配列のサイズは(1 + (len- 1)*abs(incx)) +stridex* (batch_size- 1) 以上である必要があります。ここで、lenは、対角行列が積の右辺にある場合はn、それ以外の場合はmです。- incx
ベクトル
Xの 2 つの連続する要素間のストライド。- stridex
連続する 2 つのベクトル
X間のストライド。最小値は 0 です。行列ストレージを参照してください。- c
入力/出力行列
Cへのポインター。配列のサイズはbatch_size*stridec以上である必要があります。- ldc
行列
Cの先頭次元。列優先レイアウトの場合はm以上、行優先レイアウトはn以上の正である必要があります。- stridec
連続する 2 つの行列
C間のストライド。列優先レイアウトの場合はldc*n以上、行優先レイアウトはldc*m以上である必要があります。行列ストレージを参照してください。- batch_size
実行する
dgmm計算の数。最小値は 0 です。- dependencies
計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
出力パラメーター#
- c
batch_sizedgmm操作で上書きされた出力行列Cへのポインター。
戻り値#
計算が完了したことを確認するために待機する出力イベント。