dgmm_batch#

対角行列 - 行列積 (dgmm) 演算のグループを計算します。

説明#

dgmm_batch ルーチンは、1 回の呼び出しで複数の対角行列 - 行列積 (dgmm) 演算を実行します。対角行列は密なベクトルとして保存され、演算は行列とベクトルのグループを使用して実行されます。

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

T

float

double

std::complex<float>

std::complex<double>

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 の場合、すべての行列 AC、およびベクトル X は同じパラメーター (サイズ、増分) を持ち、strideastridecstridex によって互いに指定された一定のストライドで格納されます。

ax 配列にはすべての入力行列が含まれます。ax の行列の合計数は、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_size dgmm 操作によって上書きされます。

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 配列には、すべての入力行列へのポインターが含まれています。ax の行列の合計数は次のように与えられます。

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

構文#

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_count dgmm 操作で上書きされた出力行列 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 の場合、すべての行列 AC、およびベクトル X は同じパラメーター (サイズ、増分) を持ち、strideastridecstridex によって互いに指定された一定のストライドで格納されます。

ax 配列にはすべての入力行列が含まれます。ax の行列の合計数は、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_size dgmm 操作で上書きされた出力行列 C へのポインター。

戻り値#

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