omatcopy_batch#

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

説明#

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

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

T

float

double

std::complex<float>

std::complex<double>

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

omatcopy_batch のバッファーバージョンは、ストライド API のみをサポートします。

ストライド API#

ストライド API の操作は次のように定義されます。

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

説明:

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

  • alpha はスカラーです

  • A および B は行列です

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

構文#

namespace oneapi::mkl::blas::column_major { 
    void omatcopy_batch(sycl::queue &queue, 
                        transpose trans, 
                        std::int64_t m, 
                        std::int64_t n, 
                        T alpha, 
                        sycl::buffer<T, 1> &a, 
                        std::int64_t lda, 
                        std::int64_t stride_a, 
                        sycl::buffer<T, 1> &b, 
                        std::int64_t ldb, 
                        std::int64_t stride_b, 
                        std::int64_t batch_size); 
}
namespace oneapi::mkl::blas::row_major { 
    void omatcopy_batch(sycl::queue &queue, 
                        transpose trans, 
                        std::int64_t m, 
                        std::int64_t n, 
                        T alpha, 
                        sycl::buffer<T, 1> &a, 
                        std::int64_t lda, 
                        std::int64_t stride_a, 
                        sycl::buffer<T, 1> &b, 
                        std::int64_t ldb, 
                        std::int64_t stride_b, 
                        std::int64_t batch_size); 
}

入力パラメーター#

queue

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

trans

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

m

それぞれの行列 A の行数。最小値は 0 です。

n

それぞれの行列 A の列数。最小値は 0 です。

alpha

行列の転置またはコピーのスケーリング係数。

a

入力行列 A を保持するバッファー。stride_a*batch_size 以上のサイズが必要です。

lda

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

stride_a

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

ldb

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

trans = transpose::nontrans

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

列優先

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

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

行優先

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

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

stride_b

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

trans = transpose::nontrans

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

列優先

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

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

行優先

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

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

batch_size

転置またはコピーする行列の数を指定します。最小値は 0 です。

出力パラメーター#

b

出力バッファーは、batch_size 行列転置または alpha*op(A) 形式のコピー操作によって上書きされます。stride_b*batch_size 以上のサイズが必要です。

omatcopy_batch (USM バージョン)#

omatcopy_batch の USM バージョンは、グループ API とストライド API をサポートします。

グループ API#

グループ API の整数ポインターの Ti タイプは、std::int64_t または std::int32_t のいずれかです。

グループ API の操作は次のように定義されます。

idx = 0 
for i = 0 … group_count – 1 
    それぞれの配列内の位置 i にある m、n、alpha、lda、ldb、group_size 
    for j = 0 … group_size – 1 
        A と B は、それぞれの配列内の位置 idx にある行列 
        B = alpha * op(A) 
        idx := idx + 1 
    end for 
end for

説明:

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

  • alpha はスカラーです

  • A および B は行列です

グループ API では、行列はポインターの配列によって提供されます。AB は、それぞれ ab が指すアドレスに格納されている行列を表します。ab のエントリーの合計数は次のように求められます。

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

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event omatcopy_batch(sycl::queue &queue, 
                               const transpose *trans, 
                               const Ti *m, 
                               const Ti *n, 
                               const T *alpha, 
                               const T **a, 
                               const Ti *lda, 
                               T **b, 
                               const Ti *ldb, 
                               std::int64_t group_count, 
                               const Ti *groupsize, 
                               const std::vector<sycl::event> &dependencies = {}); 
}
namespace oneapi::mkl::blas::row_major {       
    sycl::event omatcopy_batch(sycl::queue &queue, 
                               const transpose *trans, 
                               const Ti *m, 
                               const Ti *n, 
                               const T *alpha, 
                               const T **a, 
                               const Ti *lda, 
                               T **b, 
                               const Ti *ldb, 
                               std::int64_t group_count, 
                               const Ti *groupsize, 
                               const std::vector<sycl::event> &dependencies = {}); 
}

入力パラメーター#

queue

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

trans

サイズ group_count の配列。配列内の各要素 i は、行列 A に適用される転置演算 op(A) を指定します。

m

group_count 整数の配列。m[i]A[i] の行数を指定します。エントリーの最小値は 0 です。

n

group_count 整数の配列。n[i]A[i] の列数を指定します。エントリーの最小値は 0 です。

alpha

操作のスケーリング係数を含むサイズ group_count の配列。

a

A 行列へのポインターのサイズ total_batch_count の配列。行列が列優先レイアウトで格納されている場合、グループ i の各 A 行列に割り当てられる配列のサイズは lda[i] * n[i] 以上である必要があります。行列が行優先レイアウトで格納されている場合、グループ i の各 A 行列に割り当てられる配列のサイズは lda[i]*m[i] 以上である必要があります。

lda

group_count 整数の配列。lda[i]A[i] 行列の先頭次元を指定します。行列が列優先レイアウトで保存される場合、lda[i]m[i] 以上である必要があります。行列が行優先レイアウトで保存される場合、lda[i]n[i] 以上である必要があります。それぞれが正でなければなりません。

ldb

group_count 整数の配列。ldb[i]B[i] 行列の先頭次元を指定します。各 ldb[i] は、正で、次の条件を満たす必要があります。

trans[i] = transpose::nontrans

trans[i] = transpose::trans または trans[i] = transpose::conjtrans

列優先

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

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

行優先

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

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

group_count

グループ数の最小値は 0 です。

group_size

サイズ group_count` の配列。要素 ``group_size[i] はグループ i 内の行列の数です。group_size 内の各要素の最小値は 0 です。

dependencies

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

出力パラメーター#

b

B 行列へのポインターの出力配列。これは、alpha*op(A) 形式の total_batch_count 行列転置またはコピー操作によって上書きされます。行列が列優先レイアウトで格納されている場合、グループ i の各 B 行列に割り当てられる配列のサイズは、B が転置されていない場合は ldb[i] * n[i] 以上、B が転置されている場合は ldb[i]*m[i] 以上である必要があります。行列が行優先レイアウトで格納されている場合、グループ i の各 B 行列に割り当てられる配列のサイズは、B が転置されていない場合は ldb[i] * m[i] 以上、B が転置されている場合は ldb[i]*n[i] 以上である必要があります。

戻り値#

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

ストライド API#

ストライド API の操作は次のように定義されます。

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

説明:

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

  • alpha はスカラーです

  • A および B は行列です

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

構文

namespace oneapi::mkl::blas::column_major { 
    sycl::event omatcopy_batch(sycl::queue &queue, 
                               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 stride_a, 
                               T *b, 
                               std::int64_t ldb, 
                               std::int64_t stride_b, 
                               std::int64_t batch_size, 
                               const std::vector<sycl::event> &dependencies = {}); 
}
namespace oneapi::mkl::blas::row_major { 
    sycl::event omatcopy_batch(sycl::queue &queue, 
                               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 stride_a, 
                               T *b, 
                               std::int64_t ldb, 
                               std::int64_t stride_b, 
                               std::int64_t batch_size, 
                               const std::vector<sycl::event> &dependencies = {}); 
}

入力パラメーター#

trans

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

m

それぞれの行列 A の行数。最小値は 0 です。

n

それぞれの行列 A の列数。最小値は 0 です。

alpha

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

a

入力行列 A を保持する配列。stride_a*batch_size 以上のサイズが必要です。

lda

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

stride_a

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

ldb

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

trans = transpose::nontrans

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

列優先

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

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

行優先

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

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

stride_b

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

trans = transpose::nontrans

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

列優先

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

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

行優先

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

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

batch_size

転置またはコピーする行列の数を指定します。最小値は 0 です。

dependencies

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

出力パラメーター#

b

出力配列は、batch_size 行列転置または alpha*op(A) 形式のコピー操作によって上書きされます。stride_b*batch_size 以上のサイズが必要です。

戻り値#

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