hetrf (USM バージョン)#

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

説明#

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

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

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

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

API#

構文#

namespace oneapi::mkl::lapack { 
  sycl::event hetrf(sycl::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 = {}) 
}

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

T

デバイスサポート

std::complex<float>

CPU

std::complex<double>

CPU

入力パラメーター#

queue

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

uplo

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

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

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

n

行列 A(0 n) の次数。

a

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

lda

a の先頭次元。

scratchpad

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

scratchpad_size

T タイプの浮動小数点要素の数であるスクラッチパッド・メモリーのサイズ。サイズは、hetrf_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 の場合、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 の場合、d:sub:`ii` は 0 になります。因数分解は完了しましたが、D は特異です。連立一次方程式を解くため D を使用すると、0 除算が発生します。

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

戻り値#

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