gemv_batch#
gemv 操作のグループを計算します。
説明
gemv_batch ルーチンは gemv のバッチバージョンであり、1 回の呼び出しで複数の gemv 操作を実行します。各 gemv ルーチンは、スカラー - 行列 - ベクトル積を計算し、その結果をスカラー - ベクトル積に加算します。
gemv_batch は次の精度をサポートします。
T |
|---|
|
|
|
|
gemv_batch (バッファーバージョン)#
gemv_batch のバッファーバージョンは、ストライド API のみをサポートします。
ストライド API#
ストライド API 操作は次のように定義されます。
for i = 0 … batch_size – 1
A は、a のオフセット i * stridea にある行列です。X と Y は、x と y のオフセット i * stridex、i * stridey にあるベクトルです Y = alpha * op(A) * X + beta * Y
end for説明:
op(
A) は、op(A) =A、op(A) =AT、または op(A) =AH のいずれかですalphaとbetaはスカラーですAは行列、XとYはベクトルです
ストライド API の場合、x および y バッファーにすべての入力ベクトルが含まれます。ベクトル間のストライドは、ストライド・パラメーターで指定されます。x および y バッファー内のベクトルの合計数は、batch_size パラメーターで指定されます。
構文#
namespace oneapi::mkl::blas::column_major {
void gemv_batch(sycl::queue &queue,
oneapi::mkl::transpose trans,
std::int64_t m,
std::int64_t n,
T alpha,
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,
T beta,
sycl::buffer<T,1> &y,
std::int64_t incy,
std::int64_t stridey,
std::int64_t batch_size)
}namespace oneapi::mkl::blas::row_major {
void gemv_batch(sycl::queue &queue,
oneapi::mkl::transpose trans,
std::int64_t m,
std::int64_t n,
T alpha,
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,
T beta,
sycl::buffer<T,1> &y,
std::int64_t incy,
std::int64_t stridey,
std::int64_t batch_size)
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- trans
行列
Aに適用される転置演算 op(A) を指定します。詳細はデータタイプを参照してください。- m
行列 op(
A) の行数。ゼロ以上である必要があります。- n
行列 op(
A) の列数。ゼロである必要があります。- alpha
行列 - ベクトル積のスケーリング係数。
- a
入力行列
Aを保持するバッファー。バッファーのサイズはstridea*batch_size以上である必要があります。- lda
行列
Aの先頭次元。列優先レイアウトの場合は正の値でm以上、行優先レイアウトの場合はn以上である必要があります。- stridea
連続する 2 つの行列
A間のストライド。ゼロ以上である必要があります。- x
入力ベクトル
Xを保持するバッファー。バッファーのサイズはstridex*batch_size以上である必要があります。- incx
ベクトル
Xの 2 つの連続する要素間のストライド。ゼロであってはなりません。- stridex
連続する 2 つのベクトル
X間のストライド。最小値はゼロです。- beta
ベクトル
Yのスケーリング係数。- y
入力/出力ベクトル
Yを保持するバッファー。バッファーのサイズはstridey*batch_size以上である必要があります。- incy
ベクトル
Yの 2 つの連続する要素間のストライド。ゼロであってはなりません。- stridey
連続する 2 つのベクトル
Y間のストライド。列優先レイアウトの場合は (1 + (m- 1)*abs(incy)) 以上、行優先レイアウトでは (1 + (n- 1)*abs(incy)) 以上である必要があります。- batch_size
実行する
gemv計算の数。ゼロ以上である必要があります。
出力パラメーター#
- y
出力バッファーは、
alpha* op(A) *X+beta*Y形式のbatch_sizegemv操作によって上書きされます。
gemv_batch (USM バージョン)#
gemv_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 は a[idx] の m x n 行列であり、X と Y は x[idx] と y[idx] のベクトル
Y = alpha[i] * op(A) * X + beta[i] * Y
idx = idx + 1
end for
end for説明:
op(
A) は、op(A) =A、op(A) =AT、または op(A) =AH のいずれかですalphaとbetaはスカラーですAは行列、XとYはベクトルです
グループ API の場合、x と y 配列にはすべての入力ベクトルへのポインターが含まれます。a 配列には、すべての入力行列へのポインターが含まれます。x、y および a のベクトルの合計数は次のように与えられます。
構文#
namespace oneapi::mkl::blas::column_major {
sycl::event gemv_batch(sycl::queue &queue,
const oneapi::mkl::transpose *trans,
const Ti *m,
const Ti *n,
const T *alpha,
const T **a,
const Ti *lda,
const T **x,
const Ti *incx,
const T *beta,
T **y,
const Ti *incy,
std::int64_t group_count,
const Ti *group_size,
const std::vector<sycl::event> &dependencies = {})
}namespace oneapi::mkl::blas::row_major {
sycl::event gemv_batch(sycl::queue &queue,
const oneapi::mkl::transpose *trans,
const Ti *m,
const Ti *n,
const T *alpha,
const T **a,
const Ti *lda,
const T **x,
const Ti *incx,
const T *beta,
T **y,
const Ti *incy,
std::int64_t group_count,
const Ti *group_size,
const std::vector<sycl::event> &dependencies = {})
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- trans
group_countoneapi::mkl::transpose値の配列。transa[i]は、グループi内の行列Aに適用されるこの転置演算 op(A) を指定します。詳細はデータタイプを参照してください。- m
group_count整数の配列。m[i]は、グループi内の行列 op(A) の行数を指定します。すべてのエントリーは 0 以上である必要があります。- n
group_count整数の配列。n[i]は、グループi内の行列 op(A) の列数を指定します。すべてのエントリーは 0 以上である必要があります。- alpha
group_countスカラー要素の配列。alpha[i]はグループi内の行列-ベクトル積のスケーリング係数を指定します。- a
入力行列
Aのtotal_batch_countポインターの配列。行列ストレージを参照してください。- lda
group_count整数の配列。lda[i]はグループi内の行列Aの先頭次元を指定します。列優先レイアウトの場合は正の値でm[i]以上、行優先レイアウトの場合はn[i]以上である必要があります。- x
入力ベクトル
Xのtotal_batch_countポインターの配列。行列ストレージを参照してください。- incx
group_count整数の配列。incx[i]はグループi内のベクトルXのストライドを指定します。ゼロであってはなりません。- beta
group_countスカラー要素の配列。beta[i]はグループi内のベクトルYのスケーリング係数を指定します。- y
入力/出力ベクトル
Yのtotal_batch_countポインターの配列。行列ストレージを参照してください。- incy
group_count整数の配列。incy[i]はグループi内のベクトルYのストライドを指定します。ゼロであってはなりません。- group_count
グループの数ゼロ以上である必要があります。
- group_size
group_count整数の配列。group_size[i]はグループi内のgemv操作の数を指定します。group_size内の各要素は 0 以上である必要があります。- dependencies
計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
出力パラメーター#
- y
alpha* op(A) *X+beta*Y形式のtotal_batch_countgemv操作によって上書きされた出力ベクトルYへのポインター配列。
戻り値#
計算が完了したことを確認するために待機する出力イベント。
例#
USM バージョンの gemv_batch の使用方法の例は、oneMKL インストール・ディレクトリーの次の場所にあります。
share/doc/mkl/examples/sycl/blas/source/gemv_batch_usm.cppストライド API#
ストライド API 操作は次のように定義されます。
for i = 0 … batch_size – 1
A は、a のオフセット i * stridea にある行列です。X と Y は、x と y のオフセット i * stridex、i * stridey にあるベクトルですY = alpha * op(A) * X + beta * Y
end for説明:
op(
A) は、op(A) =A、op(A) =AT、または op(A) =AH のいずれかですalphaとbetaはスカラーですAは行列、XとYはベクトルです
ストライド API の場合、x および y 配列にすべての入力ベクトルが含まれます。ベクトル間のストライドは、ストライド・パラメーターで指定されます。x および y 配列内のベクトルの合計数は、batch_size パラメーターで指定されます。
構文#
namespace oneapi::mkl::blas::column_major {
sycl::event gemv_batch(sycl::queue &queue,
oneapi::mkl::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 stridea,
const T *x,
std::int64_t incx,
std::int64_t stridex,
oneapi::mkl::value_or_pointer<T> beta,
T *y,
std::int64_t incy,
std::int64_t stridey,
std::int64_t batch_size)
}namespace oneapi::mkl::blas::row_major {
sycl::event gemv_batch(sycl::queue &queue,
oneapi::mkl::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 stridea,
const T *x,
std::int64_t incx,
std::int64_t stridex,
oneapi::mkl::value_or_pointer<T> beta,
T *y,
std::int64_t incy,
std::int64_t stridey,
std::int64_t batch_size)
}入力パラメーター#
- queue
ルーチンを実行するキュー。
- trans
行列
Aに適用される転置演算 op(A) を指定します。詳細はデータタイプを参照してください。- m
行列 op(
A) の行数。ゼロ以上である必要があります。- n
行列 op(
A) の列数。ゼロ以上である必要があります。- alpha
行列 - ベクトル積のスケーリング係数。
value_or_pointerデータタイプの詳細については、スカラー引数を参照してください。- a
入力行列
Aへのポインター。配列のサイズはstridea*batch_size以上である必要があります。- lda
行列
Aの先頭次元。列優先レイアウトの場合は正の値でm以上、行優先レイアウトの場合はn以上である必要があります。- stridea
連続する 2 つの行列
A間のストライド。ゼロ以上である必要があります。- x
入力ベクトル
Xへのポインター。配列のサイズはstridex*batch_size以上である必要があります。- incx
ベクトル
Xの 2 つの連続する要素間のストライド。ゼロであってはなりません。- stridex
連続する 2 つのベクトル
X間のストライド。最小値はゼロです。- beta
ベクトル
Yのスケーリング係数。value_or_pointerデータタイプの詳細については、スカラー引数を参照してください。- y
入力/出力ベクトル
Yへのポインター。配列のサイズはstridey*batch_size以上である必要があります。- incy
ベクトル
Yの 2 つの連続する要素間のストライド。ゼロであってはなりません。- stridey
連続する 2 つのベクトル
Y間のストライド。列優先レイアウトの場合は (1 + (m- 1)*abs(incy)) 以上、行優先レイアウトでは (1 + (n- 1)*abs(incy)) 以上である必要があります。- batch_size
実行する
gemv計算の数。ゼロ以上である必要があります。- dependencies
計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
出力パラメーター#
- y
alpha* op(A) *X+beta*Y形式のbatch_sizegemv演算によって上書きされる出力ベクトルYへのポインター。
戻り値#
計算が完了したことを確認するために待機する出力イベント。