trmm#

1 つの入力行列が三角行列で、もう 1 つの入力行列が一般行列である行列 - 行列積を計算します。

説明#

trmm ルーチンは、乗算の行列の 1 つが三角行列であるスカラー - 行列積を計算します。引数 left_right は、三角行列 A が乗算の左辺にあるか (left_right = side::left)、右辺にあるか (left_right = side::right) を決定します。

使用できる操作には、インプレース操作とアウトオブプレース操作の 2 つがあります。インプレース操作は次のように定義されています。

(left_right = side::left) である場合は、

Balphaop(A)B

(left_right = side::right) である場合は、

BalphaBop(A)

アウトオブプレース操作は次のように定義されています。

(left_right = side::left) である場合は、

Calphaop(A)B+betaC

(left_right = side::right) である場合は、

CalphaBop(A)+betaC

説明:

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

  • alphabeta はスカラーです

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

  • B は、m x n の一般行列です

  • C は、m x n の一般行列です

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

T

float

double

std::complex<float>

std::complex<double>

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

インプレース API#

構文#

namespace oneapi::mkl::blas::column_major { 
    void trmm(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, 
              sycl::buffer<T,1> &b, 
              std::int64_t ldb, 
              compute_mode mode = compute_mode::unset) 
}
namespace oneapi::mkl::blas::row_major { 
    void trmm(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, 
              sycl::buffer<T,1> &b, 
              std::int64_t ldb, 
              compute_mode mode = compute_mode::unset) 
}

入力パラメーター#

queue

ルーチンが実行されるキュー。

left_right

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

upper_lower

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

trans

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

unit_diag

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

m

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

n

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

alpha

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

a

入力行列 A を保持するバッファー。バッファーのサイズは、left_right = side::left の場合は lda * m 以上、left_right = side::right の場合は lda * n である必要があります。行列ストレージを参照してください。

lda

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

b

入力行列 B を保持するバッファー。バッファーのサイズは、列優先レイアウトの場合はldb * n 以上、行優先レイアウトの場合は ldb * m 以上である必要があります。行列ストレージを参照してください。

ldb

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

mode

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

出力パラメーター#

b

出力バッファーは、left_right = side::left の場合は alpha * op(A) * B で上書きされ、left_right = side::right の場合は alpha * B * op(A) で上書きされます。

alpha = 0 の場合、行列 B はゼロに設定され、AB はエントリー時に初期化する必要はありません。

アウトオブプレース API#

構文#

namespace oneapi::mkl::blas::column_major { 
    void trmm(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, 
              sycl::buffer<T,1> &b, 
              std::int64_t ldb, 
              T beta, 
              sycl::buffer<T,1> &c, 
              std::int64_t ldc, 
              compute_mode mode = compute_mode::unset) 
}
namespace oneapi::mkl::blas::row_major { 
    void trmm(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, 
              sycl::buffer<T,1> &b, 
              std::int64_t ldb, 
              T beta, 
              sycl::buffer<T,1> &c, 
              std::int64_t ldc, 
              compute_mode mode = compute_mode::unset) 
}

入力パラメーター#

queue

ルーチンが実行されるキュー。

left_right

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

upper_lower

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

trans

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

unit_diag

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

m

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

n

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

alpha

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

a

入力行列 A を保持するバッファー。バッファーのサイズは、left_right = side::left の場合は lda * m 以上、left_right = side::right の場合は lda * n である必要があります。行列ストレージを参照してください。

lda

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

b

入力行列 B を保持するバッファー。バッファーのサイズは、列優先レイアウトの場合はldb * n 以上、行優先レイアウトの場合は ldb * m 以上である必要があります。行列ストレージを参照してください。

ldb

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

beta

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

c

入力/出力行列 C を保持するバッファー。バッファーのサイズは、列優先レイアウトの場合はldc * n 以上、行優先レイアウトの場合は ldc * m 以上である必要があります。行列ストレージを参照してください。

ldc

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

mode

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

出力パラメーター#

c

出力バッファーは、left_right = side::left の場合は alpha * op(A) * B + beta * C で上書きされ、left_right = side::right の場合は alpha * B * op(A) + beta * C で上書きされます。

trmm (USM バージョン)#

インプレース API#

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event trmm(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, 
                     T *b, 
                     std::int64_t ldb, 
                     compute_mode mode = compute_mode::unset, 
                     const std::vector<sycl::event> &dependencies = {}) 
}
namespace oneapi::mkl::blas::row_major { 
    sycl::event trmm(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, 
                     T *b, 
                     std::int64_t ldb, 
                     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 の行数。最小値は 0 です。

n

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

alpha

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

a

入力行列 A へのポインター。配列のサイズは、left_right = side::left の場合は lda * m 以上、left_right = side::right の場合は lda * n である必要があります。行列ストレージを参照してください。

lda

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

b

入力行列 B へのポインター。配列のサイズは、列優先レイアウトの場合はldb * n 以上、行優先レイアウトの場合は ldb * m 以上である必要があります。行列ストレージを参照してください。

ldb

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

mode

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

dependencies

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

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

出力パラメーター#

b

left_right = side::left の場合は、alpha * op(A) * B で上書きされ、left_right = side::right の場合は alpha * B * op(A) で上書きされる出力行列へのポインター。

alpha = 0 の場合、行列 B はゼロに設定され、AB はエントリー時に初期化する必要はありません。

戻り値#

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

アウトオブプレース API#

構文#

namespace oneapi::mkl::blas::column_major { 
    sycl::event trmm(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, 
                     const T *b, 
                     std::int64_t ldb, 
                     oneapi::mkl::value_or_pointer<T> beta, 
                     T *c, 
                     std::int64_t ldc, 
                     compute_mode mode = compute_mode::unset, 
                     const std::vector<sycl::event> &dependencies = {}) 
}
namespace oneapi::mkl::blas::row_major { 
    sycl::event trmm(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, 
                     const T *b, 
                     std::int64_t ldb, 
                     oneapi::mkl::value_or_pointer<T> beta, 
                     T *c, 
                     std::int64_t ldc, 
                     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 の行数。最小値は 0 です。

n

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

alpha

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

a

入力行列 A へのポインター。配列のサイズは、left_right = side::left の場合は lda * m 以上、left_right = side::right の場合は lda * n である必要があります。行列ストレージを参照してください。

lda

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

b

入力行列 B へのポインター。配列のサイズは、列優先レイアウトの場合はldb * n 以上、行優先レイアウトの場合は ldb * m 以上である必要があります。行列ストレージを参照してください。

ldb

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

beta

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

c

入力/出力行列 C へのポインター。配列のサイズは、列優先レイアウトの場合はldc * n 以上、行優先レイアウトの場合は ldc * m 以上である必要があります。行列ストレージを参照してください。

ldc

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

mode

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

dependencies

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

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

出力パラメーター#

c

left_right = side::left の場合は、alpha * op(A) * B + beta * C で上書きされ、left_right = side::right の場合は alpha * B * op(A) + beta * C で上書きされる出力行列へのポインター。

戻り値#

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