gemv_batch#

gemv 操作のグループを計算します。

説明

gemv_batch ルーチンは gemv のバッチバージョンであり、1 回の呼び出しで複数の gemv 操作を実行します。各 gemv ルーチンは、スカラー - 行列 - ベクトル積を計算し、その結果をスカラー - ベクトル積に加算します。

gemv_batch は次の精度をサポートします。

T

float

double

std::complex<float>

std::complex<double>

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 のいずれかです

  • alphabeta はスカラーです

  • A は行列、XY はベクトルです

ストライド 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_size gemv 操作によって上書きされます。

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 のいずれかです

  • alphabeta はスカラーです

  • A は行列、XY はベクトルです

グループ API の場合、xy 配列にはすべての入力ベクトルへのポインターが含まれます。a 配列には、すべての入力行列へのポインターが含まれます。xy および a のベクトルの合計数は次のように与えられます。

\[total\_batch\_count = \sum_{i=0}^{group\_count-1}group\_size[i]\]

構文#

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_count oneapi::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

入力行列 Atotal_batch_count ポインターの配列。行列ストレージを参照してください。

lda

group_count 整数の配列。lda[i] はグループ i 内の行列 A の先頭次元を指定します。列優先レイアウトの場合は正の値で m[i] 以上、行優先レイアウトの場合は n[i] 以上である必要があります。

x

入力ベクトル Xtotal_batch_count ポインターの配列。行列ストレージを参照してください。

incx

group_count 整数の配列。incx[i] はグループ i 内のベクトル X のストライドを指定します。ゼロであってはなりません。

beta

group_count スカラー要素の配列。beta[i] はグループ i 内のベクトル Y のスケーリング係数を指定します。

y

入力/出力ベクトル Ytotal_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_count gemv 操作によって上書きされた出力ベクトル 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 のいずれかです

  • alphabeta はスカラーです

  • A は行列、XY はベクトルです

ストライド 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_size gemv 演算によって上書きされる出力ベクトル Y へのポインター。

戻り値#

計算が完了したことを確認するために待機する出力イベント。