omatadd_batch#

一般行列を使用して、アウトオブプレースでスケールされた行列加算のグループを計算します。

説明

omatadd_batch ルーチンは、一連のアウトオブプレースでスケールされた行列の加算を実行します。これらは omatadd ルーチンに似ていますが、omatadd_batch ルーチンは行列のグループを使用して行列演算を実行します。

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

T

float

double

std::complex<float>

std::complex<double>

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

ストライド API#

omatadd_batch の場合、行列は常にストライド形式になります。操作はのように定義されています。

for i = 0 … batch_size – 1 
    A は a のオフセット i * stride_a にある行列
    B は b のオフセット i * stride_b にある行列
    C は c のオフセット i * stride_c にある行列
    C = alpha * op(A) + beta * op(B) 
end for

説明:

  • op(X)op(X) = Xop(X) = X'、または op(X) = conjg(X') のいずれかです

  • alphabeta はスカラーです

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

入力バッファー ab にはすべての入力行列が含まれ、単一の出力バッファー c にはすべての出力行列が含まれます。バッファーまたは配列内の個々の行列の位置はストライド長によって指定され、行列の数は batch_size パラメーターで指定されます。

一般に、abc バッファーは、次のインプレース操作を除いて、メモリー内で重複してはなりません:

  • op(A) が非転置行列であり、a 内のすべての A 行列が c 内の対応するすべての C 行列と同じパラメーターを持つ場合、ac は同じメモリーを指すことがあります;

  • op(B) が非転置行列であり、b 内のすべての B 行列が c 内の対応するすべての C 行列と同じパラメーターを持つ場合、bc は同じメモリーを指すことがあります;

構文#

namespace oneapi::mkl::blas::column_major { 
    void omatadd_batch(sycl::queue &queue, 
                       transpose transa, 
                       transpose transb, 
                       std::int64_t m, 
                       std::int64_t n, 
                       T alpha, 
                       sycl::buffer<T, 1> &a, 
                       std::int64_t lda, 
                       std::int64_t stride_a, 
                       T beta, 
                       sycl::buffer<T, 1> &b, 
                       std::int64_t ldb, 
                       std::int64_t stride_b, 
                       sycl::buffer<T, 1> &c, 
                       std::int64_t ldc, 
                       std::int64_t stride_c, 
                       std::int64_t batch_size); 
}
namespace oneapi::mkl::blas::row_major { 
    void omatadd_batch(sycl::queue &queue, 
                       transpose transa, 
                       transpose transb, 
                       std::int64_t m, 
                       std::int64_t n, 
                       T alpha, 
                       sycl::buffer<T, 1> &a, 
                       std::int64_t lda, 
                       std::int64_t stride_a, 
                       T beta, 
                       sycl::buffer<T, 1> &b, 
                       std::int64_t ldb, 
                       std::int64_t stride_b, 
                       sycl::buffer<T, 1> &c, 
                       std::int64_t ldc, 
                       std::int64_t stride_c, 
                       std::int64_t batch_size); 
}

入力パラメーター#

queue

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

transa

行列 A に適用される転置演算 op(A) を指定します。

transb

行列 B に適用される転置演算 op(B) を指定します。

m

結果行列 C の行数。最長値はゼロです。

n

結果行列 C の列数。最小値はゼロです。

alpha

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

a

入力行列 A を保持するバッファー。alpha が 0 の場合、a にはアクセスされません。stride_a*batch_size 以上のサイズが必要です。

lda

A 行列の先頭次元。正で、次の条件を満たす必要があります。

transa = transpose::nontrans

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

列優先

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

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

行優先

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

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

stride_a

バッファー a 内の異なる A 行列間を移動します。正で、次の条件を満たす必要があります。

transa = transpose::nontrans

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

列優先

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

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

行優先

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

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

beta

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

b

入力行列 B を保持するバッファー。beta が 0 の場合、b にはアクセスされません。stride_b*batch_size 以上のサイズが必要です。

ldb

B 行列の先頭次元。正で、次の条件を満たす必要があります。

transb = transpose::nontrans

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

列優先

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

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

行優先

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

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

stride_b

バッファー b 内の異なる B 行列間を移動します。正で、次の条件を満たす必要があります。

transb = transpose::nontrans

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

列優先

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

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

行優先

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

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

ldc

C 行列の先頭次元。行列が列優先レイアウトで保存される場合、ldcm 以上である必要があります。行列が行優先レイアウトで保存される場合、ldcn 以上である必要があります。正である必要があります。

stride_c

異なる行列 C 間とのストライド。行列が列優先レイアウトで保存される場合、stride_cldc*n 以上である必要があります。行列が行優先レイアウトで保存される場合、stride_cldc*m 以上である必要があります。

batch_size

追加する入力行列と出力行列の数を指定します。最小値は 0 です。

dependencies

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

出力パラメーター#

c

出力バッファーであり、alpha*op(A) + beta*op(B) 形式の batch_size 行列加算演算によって上書きされます。stride_c*batch_size 以上のサイズが必要です。

omatadd_batch (USM バージョン)#

ストライド API#

omatadd の場合、行列は常にストライド形式になります。操作はのように定義されています。

for i = 0 … batch_size – 1 
    A は a のオフセット i * stride_a にある行列
    B は b のオフセット i * stride_b にある行列
    C は c のオフセット i * stride_c にある行列
    C = alpha * op(A) + beta * op(B) 
end for

説明:

  • op(X)op(X) = Xop(X) = X'、または op(X) = conjg(X') のいずれかです

  • alphabeta はスカラーです

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

入力バッファー ab にはすべての入力行列が含まれ、単一の出力バッファー c にはすべての出力行列が含まれます。バッファーまたは配列内の個々の行列の位置はストライド長によって指定され、行列の数は batch_size パラメーターで指定されます。

一般に、abc バッファーは、次のインプレース操作を除いて、メモリー内で重複してはなりません:

  • op(A) が非転置行列であり、a 内のすべての A 行列が c 内の対応するすべての C 行列と同じパラメーターを持つ場合、ac は同じメモリーを指すことがあります;

  • op(B) が非転置行列であり、b 内のすべての B 行列が c 内の対応するすべての C 行列と同じパラメーターを持つ場合、bc は同じメモリーを指すことがあります;

構文

namespace oneapi::mkl::blas::column_major { 
    sycl::event omatadd_batch(sycl::queue &queue, 
                              transpose transa, 
                              transpose transb, 
                              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 stride_a, 
                              oneapi::mkl::value_or_pointer<T> beta, 
                              const T *b, 
                              std::int64_t ldb, 
                              std::int64_t stride_b, 
                              T *c, 
                              std::int64_t ldc, 
                              std::int64_t stride_c, 
                              std::int64_t batch_size, 
                              const std::vector<sycl::event> &dependencies = {}); 
}
namespace oneapi::mkl::blas::row_major { 
   sycl::event omatadd_batch(sycl::queue &queue, 
                              transpose transa, 
                              transpose transb, 
                              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 stride_a, 
                              oneapi::mkl::value_or_pointer<T> beta, 
                              const T *b, 
                              std::int64_t ldb, 
                              std::int64_t stride_b, T *c, 
                              std::int64_t ldc, 
                              std::int64_t stride_c, 
                              std::int64_t batch_size, 
                              const std::vector<sycl::event> &dependencies = {}); 
}

入力パラメーター#

queue

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

transa

行列 A に適用される転置演算 op(A) を指定します。

transb

行列 B に適用される転置演算 op(B) を指定します。

m

結果行列 C の行数。最小値はゼロです。

n

結果行列 C の列数。最小値はゼロです。

alpha

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

a

入力行列 A を保持する配列。alpha が 0 の場合、 a はアクセスされず、null ポインターになる可能性があります。stride_a*batch_size 以上のサイズが必要です。

lda

A 行列の先頭次元。正で、次の条件を満たす必要があります。

transa = transpose::nontrans

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

列優先

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

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

行優先

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

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

stride_a

配列 a 内の異なる A 行列間のストライド。正で、次の条件を満たす必要があります。

transa = transpose::nontrans

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

列優先

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

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

行優先

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

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

beta

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

b

入力行列 B を保持する配列。beta が 0 の場合、 b はアクセスされず、null ポインターになる可能性があります。stride_b*batch_size 以上のサイズが必要です。

ldb

B 行列の先頭次元。正で、次の条件を満たす必要があります。

transb = transpose::nontrans

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

列優先

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

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

行優先

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

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

stride_b

配列 b 内の異なる B 行列間のストライド。正で、次の条件を満たす必要があります。

transb = transpose::nontrans

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

列優先

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

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

行優先

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

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

ldc

C 行列の先頭次元。行列が列優先レイアウトで保存される場合、ldcm 以上である必要があります。行列が行優先レイアウトで保存される場合、ldcn 以上である必要があります。正である必要があります。

stride_c

異なる行列 C 間とのストライド。行列が列優先レイアウトで保存される場合、stride_cldc*n 以上である必要があります。行列が行優先レイアウトで保存される場合、stride_cldc*m 以上である必要があります。

batch_size

追加する入力行列と出力行列の数を指定します。最小値は 0 です。

dependencies

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

出力パラメーター#

c

出力配列であり、alpha*op(A) + beta*op(B) 形式の batch_size 行列加算によって上書きされます。stride_c*batch_size 以上のサイズが必要です。

戻り値#

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