trsm_batch#

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

説明

trsm_batch ルーチンは trsm のバッチバージョンであり、1 回の呼び出しで複数の trsm 操作を実行します。各 trsm は、op(A) * X = alpha * B または X * op(A) = alpha * B という形式の式を解きます。

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

T

float

double

std::complex<float>

std::complex<double>

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

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

ストライド API#

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

for i = 0 … batch_size – 1 
    A と B は、a と b のオフセット i * stridea と i * strideb にある行列です
    if (left_right == side::left) then 
        compute X such that op(A) * X = alpha * B 
    else 
        compute X such that X * op(A) = alpha * B 
    B = X 
end for

説明:

  • op(A) は、op(A) = A、op(A) = AT、または op(A) = AH のいずれかです

  • alpha はスカラーです

  • Am x m または n x n の三角行列です

  • Bおよび Xm x n の一般行列です

戻り時に、行列 B は解行列 X によって上書きされます。

ストライド API の場合、a および b バッファーにすべての入力行列が含まれます。行列間のストライドは、ストライド・パラメーターで指定されます。a および b バッファー内の行列の合計数は、batch_size パラメーターで指定されます。

構文#

namespace oneapi::mkl::blas::column_major { 
    void trsm_batch(sycl::queue &queue, 
                    oneapi::mkl::side left_right, 
                    oneapi::mkl::uplo upper_lower, 
                    oneapi::mkl::transpose trans, 
                    oneapi::mkl::diag unit_diag, 
                    std::int64_t m, 
                    std::int64_t n, 
                    T alpha, 
                    sycl::buffer<T,1> &a, 
                    std::int64_t lda, 
                    std::int64_t stridea, 
                    sycl::buffer<T,1> &b, 
                    std::int64_t ldb, 
                    std::int64_t strideb, 
                    std::int64_t batch_size, 
                    compute_mode mode = compute_mode::unset) 
}
namespace oneapi::mkl::blas::row_major { 
    void trsm_batch(sycl::queue &queue, 
                    oneapi::mkl::side left_right, 
                    oneapi::mkl::uplo upper_lower, 
                    oneapi::mkl::transpose trans, 
                    oneapi::mkl::diag unit_diag, 
                    std::int64_t m, 
                    std::int64_t n, 
                    T alpha, 
                    sycl::buffer<T,1> &a, 
                    std::int64_t lda, 
                    std::int64_t stridea, 
                    sycl::buffer<T,1> &b, 
                    std::int64_t ldb, 
                    std::int64_t strideb, 
                    std::int64_t batch_size, 
                    compute_mode mode = compute_mode::unset) 
}

入力パラメーター#

queue

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

left_right

行列 A が乗算の左辺にあるか右辺にあるかを指定します。詳細はデータタイプを参照してください。

upper_lower

行列 A が上三角か下三角であるかを指定します。詳細はデータタイプを参照してください。

trans

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

unit_diag

行列 A が単位三角行列であるかどうかを指定します。詳細はデータタイプを参照してください。

m

行列 B の行数。最小値はゼロです。

n

行列 B の列数。最小値はゼロです。

alpha

ソリューションのスケーリング係数。

a

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

lda

行列 A の先頭次元。left_right = side::left の場合は m 以上、left_right = side::right の場合は n 以上である必要があります。正である必要があります。

stridea

連続する 2 つの行列 A 間のストライド。

b

入力/出力行列 B を保持するバッファー。バッファーのサイズは strideb * batch_size 以上である必要があります。

ldb

行列 B の先頭次元。列優先レイアウトの場合は m 以上、行優先レイアウトの場合は n 以上である必要があります。正である必要があります。

strideb

連続する 2 つの行列 B 間のストライド。

batch_size

解くべき三角線形システムの数を指定します。

mode

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

出力パラメーター#

b

出力バッファーは batch_size の解行列 X によって上書きされます。

alpha = 0 の場合、行列 B はゼロに設定され、trsm_batch を呼び出す前に AB を初期化する必要はありません。

trsm_batch (USM バージョン)#

trsm_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 
        A と B は a[idx] と b[idx] の行列
        if (left_right == side::left) then 
            op(A) * X = alpha[i] * B となるような X を計算 
        else 
            X * op(A) = alpha[i] * B となるような X を計算 
        end if 
        B = X 
        idx = idx + 1 
    end for 
end for

説明:

  • op(A) は、op(A) = A、op(A) = AT、または op(A) = AH のいずれかです

  • alpha はスカラーです

  • Am x m または n x n の三角行列です

  • Bおよび Xm x n の一般行列です

戻り時に、行列 B は解行列 X によって上書きされます。

グループ API の場合、ab 配列にはすべての入力行列へのポインターが含まれます。ab の行列の合計数は次のように求められます。

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

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event trsm_batch(sycl::queue &queue, 
                           const oneapi::mkl::side *left_right, 
                           const oneapi::mkl::uplo *upper_lower, 
                           const oneapi::mkl::transpose *trans, 
                           const oneapi::mkl::diag *unit_diag, 
                           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 *group_size, 
                           compute_mode mode = compute_mode::unset, 
                           const std::vector<sycl::event> &dependencies = {}) 
}
namespace oneapi::mkl::blas::row_major { 
    sycl::event trsm_batch(sycl::queue &queue, 
                           const oneapi::mkl::side *left_right, 
                           const oneapi::mkl::uplo *upper_lower, 
                           const oneapi::mkl::transpose *trans, 
                           const oneapi::mkl::diag *unit_diag, 
                           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 *group_size, 
                           compute_mode mode = compute_mode::unset, 
                           const std::vector<sycl::event> &dependencies = {}) 
}

入力パラメーター#

queue

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

left_right

group_count oneapi::mkl::side 値の配列。left_right[i] は、行列 A がグループ i の乗算の左辺にあるか右辺にあるかを指定します。詳細はデータタイプを参照してください。

upper_lower

group_count oneapi::mkl::uplo 値の配列。upper_lower[i] は、行列 A がグループ i 内で上三角行列か下三角行列であるかを指定します。詳細はデータタイプを参照してください。

trans

group_count oneapi::mkl::transpose 値の配列。trans[i] は、各グループ i 内の行列 A に適用される転置演算 op(A) を指定します。詳細はデータタイプを参照してください。

unit_diag

group_count oneapi::mkl::diag 値の配列。unit_diag[i] は行列 A が単位三角行列であるかどうかを指定します。詳細はデータタイプを参照してください。

m

group_count 整数の配列。m[i] は、グループ i 内の行列 B の行数を指定します。すべてのエントリーは 0 以上である必要があります。

n

group_count 整数の配列。n[i] は、グループ i 内の行列 B の列数を指定します。すべてのエントリーは 0 以上である必要があります。

alpha

group_count スカラー要素の配列。alpha[i] はグループ i 内の解のスケーリング係数を指定します。

a

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

lda

group_count 整数の配列。lda[i] はグループ i 内の行列 A の先頭次元を指定します。left_right[i] = side::left の場合は m[i] 以上、left_right[i] = side::right の場合は n[i] 以上である必要があります。すべてのエントリーは正の値です。

b

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

ldb

group_count 整数の配列。ldb[i] はグループ i 内の行列 B の先頭次元を指定します。列優先レイアウトの場合は m[i] 以上、行優先レイアウトの場合は n[i] 以上である必要があります。すべてのエントリーは正の値である必要があります。

group_count

グループの数はゼロ以上である必要があります。

group_size

group_count 整数の配列。group_size[i] はグループ i 内の trsm 操作の数を指定します。group_size 内の各要素は 0 以上である必要があります。

mode

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

dependencies

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

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

出力パラメーター#

b

出力行列 B へのポインターの配列は、total_batch_count 解行列 X によって上書きされます。

alpha = 0 の場合、行列 B はゼロに設定され、trsm_batch を呼び出す前に AB を初期化する必要はありません。

戻り値#

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

ストライド API#

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

for i = 0 … batch_size – 1 
    A と B は、a と b のオフセット i * stridea と i * strideb にある行列です
    if (left_right == side::left) then 
        compute X such that op(A) * X = alpha * B 
    else 
        compute X such that X * op(A) = alpha * B 
    B = X 
end for

説明:

  • op(A) は、op(A) = A、op(A) = AT、または op(A) = AH のいずれかです

  • alpha はスカラーです

  • Am x m または n x n の三角行列です

  • Bおよび Xm x n の一般行列です

戻り時に、行列 B は解行列 X によって上書きされます。

ストライド API の場合、a および b 配列にすべての入力行列が含まれます。行列間のストライドは、ストライド・パラメーターで指定されます。a および b 配列内の行列の合計数は、batch_size パラメーターで指定されます。

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event trsm_batch(sycl::queue &queue, 
                           oneapi::mkl::side left_right, 
                           oneapi::mkl::uplo upper_lower, 
                           oneapi::mkl::transpose trans, 
                           oneapi::mkl::diag unit_diag, 
                           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 stridea, 
                           T *b, 
                           std::int64_t ldb, 
                           std::int64_t strideb, 
                           std::int64_t batch_size, 
                           compute_mode mode = compute_mode::unset, 
                           const std::vector<sycl::event> &dependencies = {}) 
}
namespace oneapi::mkl::blas::row_major { 
    sycl::event trsm_batch(sycl::queue &queue, 
                           oneapi::mkl::side left_right, 
                           oneapi::mkl::uplo upper_lower, 
                           oneapi::mkl::transpose trans, 
                           oneapi::mkl::diag unit_diag, 
                           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 stridea, 
                           T *b, 
                           std::int64_t ldb, 
                           std::int64_t strideb, 
                           std::int64_t batch_size, 
                           compute_mode mode = compute_mode::unset, 
                           const std::vector<sycl::event> &dependencies = {}) 
}

入力パラメーター#

queue

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

left_right

行列 A が乗算の左辺にあるか右辺にあるかを指定します。詳細はデータタイプを参照してください。

upper_lower

行列 A が上三角か下三角であるかを指定します。詳細はデータタイプを参照してください。

trans

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

unit_diag

行列 A が単位三角行列であるかどうかを指定します。詳細はデータタイプを参照してください。

m

行列 B の行数。最小値はゼロです。

n

行列 B の列数。最小値はゼロです。

alpha

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

a

入力行列 A へのポインター。配列のサイズは stridea * batch_size 以上である必要があります。

lda

行列 A の先頭次元。left_right = side::left の場合は m 以上、left_right = side::right の場合は n 以上である必要があります。正である必要があります。

stridea

連続する 2 つの行列 A 間のストライド。

b

入力/出力行列 B へのポインター。配列のサイズは strideb * batch_size 以上である必要があります。

ldb

行列 B の先頭次元。列優先レイアウトの場合は m 以上、行優先レイアウトの場合は n 以上である必要があります。正である必要があります。

strideb

連続する 2 つの行列 B 間のストライド。

batch_size

解くべき三角線形システムの数を指定します。

mode

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

dependencies

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

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

出力パラメーター#

b

出力行列 B へのポインターは、batch_size の解行列 X によって上書きされます。

alpha = 0 の場合、行列 B はゼロに設定され、trsm_batch を呼び出す前に AB を初期化する必要はありません。

戻り値#

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