gemm_bias#

バイアス付きの一般整数行列を使用して行列-行列積を計算します。

説明#

gemm_bias ルーチンは、バイアス/オフセットを持つ一般整数行列を使用して、スカラー - 行列 - 行列積を計算し、その結果をスカラー行列積に加算します。操作はのように定義されています。

\[C \leftarrow alpha*(op(A) - A\_offset)*(op(B) - B\_offset) + beta*C + C\_offset\]

説明:

  • op(X) は、op(X) = X、op(X) = XT、または op(X) = XH のいずれかです

  • alphabeta はスカラーです

  • A_offset は、すべての要素が値 ao に等しい m x k 行列です

  • B_offset は、すべての要素が値 bo に等しい k x n 行列です

  • C_offset は、co バッファーによって定義される m x n 行列です。詳細はデータタイプを参照してください。

  • AB、および C は行列です

  • op(A) は m x k、op(B) は k x n、そして Cm x n です。

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

Ta

Tb

std::uint8_t

std::uint8_t

std::int8_t

std::uint8_t

std::uint8_t

std::int8_t

std::int8_t

std::int8_t

gemm_bias (バッファーバージョン)#

構文#

namespace oneapi::mkl::blas::column_major { 
    void gemm_bias(sycl::queue &queue, 
                   oneapi::mkl::transpose transa, 
                   oneapi::mkl::transpose transb, 
                   oneapi::mkl::offset offsetc, 
                   std::int64_t m, 
                   std::int64_t n, 
                   std::int64_t k, 
                   float alpha, 
                   sycl::buffer<Ta,1> &a, 
                   std::int64_t lda, 
                   Ta ao, 
                   sycl::buffer<Tb,1> &b, 
                   std::int64_t ldb, 
                   Tb bo, 
                   float beta, 
                   sycl::buffer<std::int32_t,1> &c, 
                   std::int64_t ldc, 
                   sycl::buffer<std::int32_t,1> &co, 
                   compute_mode mode = compute_mode::unset) 
}
namespace oneapi::mkl::blas::row_major { 
    void gemm_bias(sycl::queue &queue, 
                   oneapi::mkl::transpose transa, 
                   oneapi::mkl::transpose transb, 
                   oneapi::mkl::offset offsetc, 
                   std::int64_t m, 
                   std::int64_t n, 
                   std::int64_t k, 
                   float alpha, 
                   sycl::buffer<Ta,1> &a, 
                   std::int64_t lda, 
                   Ta ao, 
                   sycl::buffer<Tb,1> &b, 
                   std::int64_t ldb, 
                   Tb bo, 
                   float beta, 
                   sycl::buffer<std::int32_t,1> &c, 
                   std::int64_t ldc, 
                   sycl::buffer<std::int32_t,1> &co, 
                   compute_mode mode = compute_mode::unset) 
}

入力パラメーター#

queue

ルーチンを実行するキュー。

transa

行列 A に適用される転置演算 op(A) を指定します。詳細はデータタイプを参照してください。

transb

行列 B に適用される転置演算 op(B) を指定します。詳細はデータタイプを参照してください。

offsetc

行列乗算で使用される C_offset の形式を指定します。詳細はデータタイプを参照してください。

m

行列 op(A) と行列 C の行数。最小値は 0 です。

n

行列 op(B) と行列 C の列数。最小値は 0 です。

k

行列 op(A) の列数と行列 op(B) の行数。最小値は 0 です。

alpha

行列 - 行列積のスケーリング係数。

a

入力行列 A を保持するバッファー。行列ストレージを参照してください。

transa = transpose::nontrans

transa = transpose::trans または trans = transpose::conjtrans

列優先

Am x k の行列です。配列 a のサイズは lda * k 以上でなければなりません

Ak x m の行列です。配列 a のサイズは lda * m 以上でなければなりません

行優先

Am x k の行列です。配列 a のサイズは lda * m 以上でなければなりません

Ak x m の行列です。配列 a のサイズは lda * k 以上でなければなりません

lda

行列 A の先頭次元。正である必要があります。

transa = transpose::nontrans

transa = transpose::trans または trans = transpose::conjtrans

列優先

m 以上である必要があります

k 以上である必要があります

行優先

k 以上である必要があります

m 以上である必要があります

ao

行列 A のスカラーオフセット値を指定します。

b

入力行列 B を保持するバッファー。行列ストレージを参照してください。

transb = transpose::nontrans

transb = transpose::trans または trans = transpose::conjtrans

列優先

Bk x n の行列です。配列 b のサイズは ldb * n 以上でなければなりません

Bn x k の行列です。配列 b のサイズは ldb * k 以上でなければなりません

行優先

Bk x n の行列です。配列 b のサイズは ldb * k 以上でなければなりません

Bn x k の行列です。配列 b のサイズは ldb * n 以上でなければなりません

ldb

行列 B の先頭次元。正である必要があります。

transb = transpose::nontrans

transb = transpose::trans または trans = transpose::conjtrans

列優先

k 以上である必要があります

n 以上である必要があります

行優先

n 以上である必要があります

k 以上である必要があります

bo

行列 B のスカラーオフセット値を指定します。

beta

行列 C のスケーリング係数。

c

入力/出力行列 C を保持するバッファー。行列ストレージを参照してください。

列優先

Cm x n の行列です。配列 c のサイズは ldc * n 以上でなければなりません

行優先

Cm x n の行列です。配列 c のサイズは ldc * m 以上でなければなりません

ldc

行列 C の先頭次元。正である必要があります。

列優先

m 以上である必要があります

行優先

n 以上である必要があります

co

行列 C のオフセット値を保持するバッファー。

offset_type = offset::fix の場合、co 配列のサイズは 1 以上である必要があります。

offset_type = offset::col の場合、co 配列のサイズは max(1,m) 以上である必要があります。

offset_type = offset::row の場合、co 配列のサイズは max(1,n) 以上である必要があります。

詳細はデータタイプを参照してください。

mode

オプション。計算モードの設定。詳細は、計算モードを参照してください。

出力パラメーター#

c

出力バッファーは、alpha * (op(A) - A_offset) * (op(B) - B_offset) + beta * C + C_offset で上書きされます。

beta = 0 の場合、gemm_bias を呼び出す前に行列 C を初期化する必要はありません。

gemm_bias (USM バージョン)#

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event gemm_bias(sycl::queue &queue, 
                          oneapi::mkl::transpose transa, 
                          oneapi::mkl::transpose transb, oneapi::mkl::offset offsetc, 
                          std::int64_t m, 
                          std::int64_t n, 
                          std::int64_t k, 
                          oneapi::mkl::value_or_pointer<float> alpha, 
                          const Ta *a, 
                          std::int64_t lda, 
                          Ta ao, 
                          const Tb *b, 
                          std::int64_t ldb, 
                          Tb bo, 
                          oneapi::mkl::value_or_pointer<float> beta, 
                          std::int32_t *c, 
                          std::int64_t ldc, 
                          const std::int32_t *co, 
                          compute_mode mode = compute_mode::unset, 
                          const std::vector<sycl::event> &dependencies = {}) 
}
namespace oneapi::mkl::blas::row_major { 
    sycl::event gemm_bias(sycl::queue &queue, 
                          oneapi::mkl::transpose transa, 
                          oneapi::mkl::transpose transb, 
                          oneapi::mkl::offset offsetc, 
                          std::int64_t m, 
                          std::int64_t n, 
                          std::int64_t k, 
                          oneapi::mkl::value_or_pointer<float> alpha, 
                          const Ta *a, 
                          std::int64_t lda, 
                          Ta ao, 
                          const Tb *b, 
                          std::int64_t ldb, 
                          Tb bo, 
                          oneapi::mkl::value_or_pointer<float> beta, 
                          std::int32_t *c, 
                          std::int64_t ldc, 
                          const std::int32_t *co, 
                          compute_mode mode = compute_mode::unset, 
                          const std::vector<sycl::event> &dependencies = {}) 
}

入力パラメーター#

queue

ルーチンを実行するキュー。

transa

行列 A に適用される転置演算 op(A) を指定します。詳細はデータタイプを参照してください。

transb

行列 B に適用される転置演算 op(B) を指定します。詳細はデータタイプを参照してください。

offsetc

行列乗算で使用される C_offset の形式を指定します。詳細はデータタイプを参照してください。

m

行列 op(A) と行列 C の行数。最小値は 0 です。

n

行列 op(B) と行列 C の列数。最小値は 0 です。

k

行列 op(A) の列数と行列 op(B) の行数。最小値は 0 です。

alpha

行列 - 行列積のスケーリング係数。value_or_pointer データタイプの詳細については、スカラー引数を参照してください。

a

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

transa = transpose::nontrans

transa = transpose::trans または trans = transpose::conjtrans

列優先

Am x k の行列です。配列 a のサイズは lda * k 以上でなければなりません

Ak x m の行列です。配列 a のサイズは lda * m 以上でなければなりません

行優先

Am x k の行列です。配列 a のサイズは lda * m 以上でなければなりません

Ak x m の行列です。配列 a のサイズは lda * k 以上でなければなりません

lda

行列 A の先頭次元。正である必要があります。

transa = transpose::nontrans

transa = transpose::trans または trans = transpose::conjtrans

列優先

m 以上である必要があります

k 以上である必要があります

行優先

k 以上である必要があります

m 以上である必要があります

ao

行列 A のスカラーオフセット値を指定します。

b

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

transb = transpose::nontrans

transb = transpose::trans または trans = transpose::conjtrans

列優先

Bk x n の行列です。配列 b のサイズは ldb * n 以上でなければなりません

Bn x k の行列です。配列 b のサイズは ldb * k 以上でなければなりません

行優先

Bk x n の行列です。配列 b のサイズは ldb * k 以上でなければなりません

Bn x k の行列です。配列 b のサイズは ldb * n 以上でなければなりません

ldb

行列 B の先頭次元。正である必要があります。

transb = transpose::nontrans

transb = transpose::trans または trans = transpose::conjtrans

列優先

k 以上である必要があります

n 以上である必要があります

行優先

n 以上である必要があります

k 以上である必要があります

bo

行列 B のスカラーオフセット値を指定します。

beta

行列 C のスケーリング係数。value_or_pointer データタイプの詳細については、スカラー引数を参照してください。

c

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

列優先

Cm x n の行列です。配列 c のサイズは ldc * n 以上でなければなりません

行優先

Cm x n の行列です。配列 c のサイズは ldc * m 以上でなければなりません

ldc

行列 C の先頭次元。正である必要があります。

列優先

m 以上である必要があります

行優先

n 以上である必要があります

co

行列 C のオフセット値を保持する配列へのポインター。

offset_type = offset::fix の場合、co 配列のサイズは 1 以上である必要があります。

offset_type = offset::col の場合、co 配列のサイズは max(1,m) 以上である必要があります。

offset_type = offset::row の場合、co 配列のサイズは max(1,n) 以上である必要があります。

詳細はデータタイプを参照してください。

mode

オプション。計算モードの設定。詳細は、計算モードを参照してください。

dependencies

オプション。計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。

modedependencies はそれぞれ省略できます。dependencies を提供するのに mode を指定する必要はありません。

出力パラメーター#

c

alpha * (op(A) - A_offset) * (op(B) - B_offset) + beta * C + C_offset で上書きされた出力行列 C へのポインター。

beta = 0 の場合、gemm_bias を呼び出す前に行列 C を初期化する必要はありません。

戻り値#

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