copy_batch#

copy 操作のグループを計算します。

説明#

copy_batch ルーチンは copy のバッチバージョンであり、1 回の呼び出しで複数の copy 操作を実行します。copy 操作では、1 つのベクトルが別のベクトルにコピーされます。

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

T

float

double

std::complex<float>

std::complex<double>

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

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

ストライド API#

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

for i = 0 … batch_size – 1 
    X と Y は、x と y のオフセット i * stridex と i * stridey にあるベクトルです 
    Y = X 
end for

説明:

  • XY はベクトルです

ストライド API では、すべてのベクトル x (y) は同じパラメーター (サイズ、増分) を持ち、互いに stridex (stridey) によって指定された一定のストライドで格納されます。xy 配列にはすべての入力ベクトルが含まれます。xy のベクトルの合計数は、batch_size パラメーターで指定されます。

構文#

namespace oneapi::mkl::blas::column_major { 
    void copy_batch(sycl::queue &queue, 
                    std::int64_t n, 
                    sycl::buffer<T, 1> &x, 
                    std::int64_t incx, 
                    std::int64_t stridex, 
                    sycl::buffer<T, 1> &y, 
                    std::int64_t incy, 
                    std::int64_t stridey, 
                    std::int64_t batch_size) 
}
namespace oneapi::mkl::blas::row_major { 
    void copy_batch(sycl::queue &queue, 
                    std::int64_t n, 
                    sycl::buffer<T, 1> &x, 
                    std::int64_t incx, 
                    std::int64_t stridex, 
                    sycl::buffer<T, 1> &y, 
                    std::int64_t incy, 
                    std::int64_t stridey, 
                    std::int64_t batch_size) 
}

入力パラメーター#

queue

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

n

ベクトル XY の要素数。

x

入力ベクトル X を保持するバッファー。バッファーのサイズは batch_size * stridex 以上である必要があります。

incx

ベクトル X の 2 つの連続する要素間のストライド。ゼロであってはなりません。

stridex

連続する 2 つのベクトル X 間のストライド。最小値は 0 です。

y

入力/出力ベクトル Y を保持するバッファー。バッファーのサイズは batch_size * stridey 以上である必要があります。

incy

ベクトル Y の 2 つの連続する要素間のストライド。ゼロであってはなりません。

stridey

連続する 2 つのベクトル Y 間のストライド。(1 + (n-1)*abs(incy)) 以上である必要があります。行列ストレージを参照してください。

batch_size

実行する copy 計算の数。最小値は 0 です。

出力パラメーター#

y

出力バッファーは batch_size copy 操作で上書きされます。

copy_batch (USM バージョン)#

copy_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 
        X と Y は x[idx] と y[idx] のベクトルです
        Y = X 
        idx = idx + 1 
    end for 
end for

説明:

  • XY はベクトルです

グループ API の場合、各グループには同じパラメーター (サイズと増分) を持つベクトルが含まれます。x 配列と y 配列には、すべての入力ベクトルへのポインターが含まれています。xy のベクトルの合計数は次のように与えられます。

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

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event copy_batch(sycl::queue &queue, 
                           const Ti *n, 
                           const T **x, 
                           const Ti *incx, 
                           T **y, 
                           const Ti *incy, 
                           std::int64_t group_count, 
                           const Ti *group_size, 
                           const std::vector<sycl::event> &dependencies = {}) 
}
namespace oneapi::mkl::blas::row_major { 
    sycl::event copy_batch(sycl::queue &queue, 
                           const Ti *n, const T **x, 
                           const Ti *incx, 
                           T **y, 
                           const Ti *incy, 
                           std::int64_t group_count, 
                           const Ti *group_size, 
                           const std::vector<sycl::event> &dependencies = {}) 
}

入力パラメーター#

queue

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

n

group_count 整数の配列。n[i] は、グループ i 内のすべてのベクトルに対してベクトル XY の要素数を指定します。

x

サイズが total_batch_count の入力ベクトル X へのポインターの配列。グループ iX ベクトルに割り当てられる配列のサイズは、(1 + (n[i] – 1)*abs(incx[i])) 以上である必要があります。行列ストレージを参照してください。

incx

group_count 整数の配列。incx[i] はグループ i 内のベクトル X のストライドを指定します。ゼロであってはなりません。

y

サイズが total_batch_count の入力/出力ベクトル Y へのポインターの配列。グループ iY ベクトルに割り当てられる配列のサイズは、(1 + (n[i] – 1)*abs(incy[i])) 以上である必要があります。行列ストレージを参照してください。

incy

group_count 整数の配列。incy[i] はグループ i 内のベクトル Y のストライドを指定します。ゼロであってはなりません。

group_count

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

group_size

group_count 整数の配列。group_size[i] はグループ i 内の copy 操作の数を指定します。group_size 内の各要素の最小値は 0 です。

dependencies

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

出力パラメーター#

y

Y ベクトルを保持するポインターの配列。total_batch_count copy 操作で上書きされます。

戻り値#

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

#

USM バージョンの copy_batch の使用方法の例は、oneMKL インストール・ディレクトリーの次の場所にあります。

share/doc/mkl/examples/sycl/blas/source/copy_batch_usm.cpp

ストライド API#

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

for i = 0 … batch_size – 1 
    X と Y は、x と y のオフセット i * stridex と i * stridey にあるベクトルです 
    Y = X 
end for

説明:

  • XY はベクトルです

ストライド API では、すべてのベクトル x (y) は同じパラメーター (サイズ、増分) を持ち、互いに stridex (stridey) によって指定された一定のストライドで格納されます。xy 配列にはすべての入力ベクトルが含まれます。xy のベクトルの合計数は、batch_size パラメーターで指定されます。

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event copy_batch(sycl::queue &queue, 
                           std::int64_t n, 
                           const T *x, 
                           std::int64_t incx, 
                           std::int64_t stridex, 
                           T *y, 
                           std::int64_t incy, 
                           std::int64_t stridey, 
                           std::int64_t batch_size, 
                           const std::vector<sycl::event> &dependencies = {}) 
}
namespace oneapi::mkl::blas::row_major { 
    sycl::event copy_batch(sycl::queue &queue, 
                           std::int64_t n, 
                           const T *x, 
                           std::int64_t incx, 
                           std::int64_t stridex, 
                           T *y, 
                           std::int64_t incy, 
                           std::int64_t stridey, 
                           std::int64_t batch_size, 
                           const std::vector<sycl::event> &dependencies = {}) 
}

入力パラメーター#

queue

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

n

ベクトル XY の要素数。

x

入力ベクトル X へのポインター。配列のサイズは batch_size * stridex 以上である必要があります。

incx

ベクトル X の 2 つの連続する要素間のストライド。ゼロであってはなりません。

stridex

連続する 2 つのベクトル X 間のストライド。最小値は 0 です。

y

入力/出力ベクトル Y へのポインター。配列のサイズは batch_size * stridey 以上である必要があります。

incy

ベクトル Y の 2 つの連続する要素間のストライド。ゼロであってはなりません。

stridey

連続する 2 つのベクトル Y 間のストライド。 (1 + (n-1)*abs(incy)) 以上である必要があります。行列ストレージを参照してください。

batch_size

実行する copy 計算の数。最小値は 0 です。

dependencies

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

出力パラメーター#

y

出力ベクトルは、batch_size copy 操作で上書きされます。

戻り値#

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