sytrf (USM バージョン)#

対称行列のバンチカウフマン分解を計算します。このルーチンは、oneapi::mkl::lapack 名前空間に属します。

説明#

このルーチンは、バンチ・カウフマン対角ピボット法を使用して実数/複素対称行列 A の因数分解を計算します。因数分解の形式は次のようになります。

  • uplo=uplo::upper の場合、A = U*D*UT

  • uplo=uplo::lower の場合、A = L*D*LT

ここで、A は入力行列、UL は順列行列と単位対角の三角行列 (U の場合は上三角行列、L の場合は下三角行列) の積であり、D は 1 行 1 列と 2 行 2 列の対角ブロックを持つ対称ブロック対角行列です。UL には、D の 2 行 2 列のブロックに対応する 2 行 2 列の単位対角ブロックがあります。

API#

構文#

namespace oneapi::mkl::lapack { 
  sycl::event sytrf(queue &queue, 
  mkl::uplo uplo, 
  int64_t n, 
  T *a, 
  int64_t lda, 
  int64_t *ipiv, 
  T *scratchpad, 
  int64_t scratchpad_size, 
  const std::vector<sycl::event> &events = {}) 
}

sytrf (USM バージョン) は、次の精度とデバイスをサポートします。

T

サポートされるデバイス

float

CPU

double

CPU

std::complex<float>

CPU

std::complex<double>

CPU

入力パラメーター#

queue

計算が実行されるデバイスキュー。

uplo

A の上三角部分と下三角部分のどちらが格納されているか、また A がどのように因数分解されるかを示します。

uplo = uplo::upper の場合、配列 a には行列 A の上三角部分が格納され、AU*D*UT として因数分解されます。

uplo = uplo::lower の場合、配列 a には行列 A の下三角部分が格納され、AL*D*LT として因数分解されます。

n

行列 A の次数 (0 n)。

a

行列 A の係数へのポインター。サイズは max(1,lda*n) で、行列 A の上三角部分または下三角部分が含まれます (uplo を参照)。a の 2 番目の次元は max(1, n) 以上でなければなりません。

lda

a の先頭次元 。

scratchpad

ルーチンが中間結果を保存するスクラッチパッド・メモリーへのポインター。

scratchpad_size

T タイプの浮動小数点要素の数であるスクラッチパッド・メモリーのサイズ。サイズは、sytrf_scratchpad_size 関数が返す値以下であってはなりません。

events

計算を開始する前に待機するイベントのリスト。デフォルトでは空のリストになります。

出力パラメーター#

a

a の上三角部分または下三角部分は、ブロック対角行列 D の詳細と、係数 U (または L) を取得する乗数によって上書きされます。

ipiv

max(1,n) 以上のサイズのメモリー配列へのポインター。D のインターチェンジとブロック構造の詳細が含まれます。ipiv(i) = k > 0 の場合、dii は 1 行 1 列のブロックとなり、Ai 行目と列が k 行目と列と交換されます。

uplo = mkl::uplo::upper かつ ipiv(i) = ipiv(i-1) = -m < 0 < 0 の場合、D には i 行目と i-1 列目に 2 行 2 列のブロックがあり、A(i-1) 行目と列は m 行目と列と交換されます。

uplo = mkl::uplo::lower かつ ipiv(i) = ipiv(i+1) = -m < 0 の場合、D には i 行目と i+1 列目に 2 行 2 列のブロックがあり、A(i+1) 行目と列は m 行目と列と交換されます。

例外#

例外

説明

mkl::lapack::exception

この例外は、計算中に問題が発生した場合にスローされます。例外オブジェクトの info() メソッドを使用して、問題の情報コードを取得できます。

info = -i の場合、i 番目のパラメーターの値が不正です。

info = i の場合、dii は 0 になります。因数分解は完了しましたが、D は特異です。連立一次方程式を解くため D を使用すると、0 除算が発生します。

info がスクラッチパッドのサイズとして渡された値と等しく、detail() がゼロ以外を返す場合、渡されたスクラッチパッドのサイズが十分ではなく、必要なサイズは例外オブジェクトの detail() メソッドによって返される値以上である必要があります。

戻り値#

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