imatcopy_batch#

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

説明#

imatcopy_batch ルーチンは、一連のインプレースでスケールされた行列のコピーまたは転置を実行します。これらは imatcopy ルーチンに似ていますが、imatcopy_batch ルーチンは行列のグループを使用して行列演算を実行します。グループには同じパラメーターを持つ行列が含まれます。

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

T

float

double

std::complex<float>

std::complex<double>

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

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

ストライド API#

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

for i = 0 … batch_size – 1 
    AB は ab のオフセット i * stride にある行列 
    AB = alpha * op(AB) 
end for

説明:

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

  • alpha はスカラーです

  • AB は、インプレースで変換される行列です

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

構文#

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

入力パラメーター#

queue

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

trans

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

m

各行列 AB の行数。最小値は 0 です。

n

各行列 AB の列数。最小値は 0 です。

alpha

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

ab

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

lda

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

ldb

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

trans = transpose::nontrans

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

列優先

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

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

行優先

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

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

stride

異なる行列 AB 間とのストライド。max(ldb,lda)*max(ka, kb) 以上である必要があります。ここで、

  • ka は、列優先レイアウトの場合は m、行優先レイアウトでは n である必要があります。

  • 列優先レイアウトでAB が転置されていない場合、kbn、それ以外の場合はm です

batch_size

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

出力パラメーター#

ab

出力バッファーであり、alpha*op(AB) 形式の batch_size 行列乗算演算によって上書きされます。

imatcopy_batch (USM バージョン)#

imatcopy_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 
        AB は AB 内の位置 idx にある行列 
        AB = alpha * op(AB) 
        idx := idx + 1 
    end for 
end for

説明:

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

  • alpha はスカラーです

  • AB は、インプレースで変換される行列です

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

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

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event imatcopy_batch(sycl::queue &queue, 
                               const transpose *trans, 
                               const Ti *m, 
                               const Ti *n, 
                               const T *alpha, T **ab, 
                               const Ti *lda, 
                               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 imatcopy_batch(sycl::queue &queue, 
                               const transpose *trans, 
                               const Ti *m, 
                               const Ti *n, 
                               const T *alpha, T **ab, 
                               const Ti *lda, 
                               const Ti *ldb, 
                               std::int64_t group_count, 
                               const Ti *groupsize, 
                               const std::vector<sycl::event> &dependencies = {}); 
}

入力パラメーター#

queue

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

trans

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

m

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

n

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

alpha

行列の転置またはコピーのスケーリング係数を含む、サイズが group_count の配列。

ab

サイズ total_batch_count の配列で、AB 行列を格納する配列へのポインターを保持します。

lda

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

ldb

group_count 整数の配列。ldb[i]AB の出力行列の先頭次元を指定します。各 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

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

出力パラメーター#

ab

AB 行列へのポインターの出力配列。これは、alpha*op(AB) 形式の total_batch_count 行列転置またはコピー操作によって上書きされます。

戻り値#

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

ストライド API#

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

for i = 0 … batch_size – 1 
    AB は ab のオフセット i * stride にある行列 
    AB = alpha * op(AB) 
end for

説明:

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

  • alpha はスカラーです

  • AB は、インプレースで変換される行列です

ストライド API の場合、単一の配列 ab に、インプレースで変換されるすべての行列 AB が含まれます。配列内の個々の行列の位置はストライド長によって指定され、行列の数は batch_size パラメーターで指定されます。

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event imatcopy_batch(sycl::queue &queue, 
                               transpose trans, 
                               std::int64_t m, 
                               std::int64_t n, 
                               oneapi::mkl::value_or_pointer<T> alpha, 
                               T *ab, 
                               std::int64_t lda, 
                               std::int64_t ldb, 
                               std::int64_t stride, 
                               std::int64_t batch_size, 
                               const std::vector<sycl::event> &dependencies = {}); 
}
namespace oneapi::mkl::blas::column_major { 
    sycl::event imatcopy_batch(sycl::queue &queue, 
                               transpose trans, 
                               std::int64_t m, 
                               std::int64_t n, 
                               oneapi::mkl::value_or_pointer<T> alpha, 
                               T *ab, 
                               std::int64_t lda, 
                               std::int64_t ldb, 
                               std::int64_t stride, 
                               std::int64_t batch_size, 
                               const std::vector<sycl::event> &dependencies = {}); 
}

入力パラメーター#

queue

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

trans

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

m

各行列 AB の行数。最小値は 0 です。

n

各行列 AB の列数。最小値は 0 です。

alpha

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

ab

行列 AB を保持する配列。stride*batch_size 以上のサイズが必要です。

lda

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

ldb

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

trans = transpose::nontrans

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

列優先

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

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

行優先

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

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

stride

異なる行列 AB 間とのストライド。max(ldb,lda)*max(ka, kb) 以上である必要があります。ここで、

  • ka は、列優先レイアウトの場合は m、行優先レイアウトでは n である必要があります。

  • 列優先レイアウトでAB が転置されていない場合、kbn、それ以外の場合はm です

batch_size

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

dependencies

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

出力パラメーター#

ab

出力配列は、alpha*op(AB) 形式の batch_size 行列乗算によって上書きされます。

戻り値#

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