trmm#
1 つの入力行列が三角行列で、もう 1 つの入力行列が一般行列である行列 - 行列積を計算します。
説明#
trmm
ルーチンは、乗算の行列の 1 つが三角行列であるスカラー - 行列積を計算します。引数 left_right
は、三角行列 A
が乗算の左辺にあるか (left_right
= side::left
)、右辺にあるか (left_right
= side::right
) を決定します。
使用できる操作には、インプレース操作とアウトオブプレース操作の 2 つがあります。インプレース操作は次のように定義されています。
(left_right
= side::left
) である場合は、
(left_right
= side::right
) である場合は、
アウトオブプレース操作は次のように定義されています。
(left_right
= side::left
) である場合は、
(left_right
= side::right
) である場合は、
説明:
op(
A
) は、op(A
) =A
、op(A
) =A
T、または op(A
) =A
H のいずれかですalpha
とbeta
はスカラーですA
はm
xm
またはn
xn
の三角行列ですB
は、m
xn
の一般行列ですC
は、m
xn
の一般行列です
trmm
は次の精度をサポートします。
T |
---|
|
|
|
|
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
はゼロに設定され、A
とB
はエントリー時に初期化する必要はありません。
アウトオブプレース 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
オプション。計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
mode
とdependencies
はそれぞれ省略できます。dependencies を提供するのにmode
を指定する必要はありません。
出力パラメーター#
- b
left_right
=side::left
の場合は、alpha
* op(A
) *B
で上書きされ、left_right
=side::right
の場合はalpha
*B
* op(A
) で上書きされる出力行列へのポインター。注
alpha
= 0 の場合、行列B
はゼロに設定され、A
とB
はエントリー時に初期化する必要はありません。
戻り値#
計算が完了したことを確認するために待機する出力イベント。
アウトオブプレース 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
オプション。計算を開始する前に待機するイベントのリスト (存在する場合)。省略した場合、依存関係はデフォルトでなくなります。
mode
とdependencies
はそれぞれ省略できます。dependencies を提供するのにmode
を指定する必要はありません。
出力パラメーター#
- c
left_right
=side::left
の場合は、alpha
* op(A
) *B
+beta
*C
で上書きされ、left_right
=side::right
の場合はalpha
*B
* op(A
) +beta
*C
で上書きされる出力行列へのポインター。
戻り値#
計算が完了したことを確認するために待機する出力イベント。