ToDo:
LAPACKE_dgelsdが返り値-7でエラーになるケースに悩まされた
原因は、LAPACKEラッパー側にあった模様
入力値にNaNが含まれるかどうか調べてるコードがラッパー側にあり、b配列をトラップしていた
GELSDのb配列次元は LDB x NRHSで、入力はM-by-NRHSなのでM行目まで埋めればよく、出力はN-by-NRHSなのでN行目まで埋められる。 ここで、LDB >= max(1, M, N)、一般にN > Mの場合、b配列の後半は呼び出し時点で初期化する必要はない。
一方、GELSDラッパーの入力値検査で、LAPACKE_dge_nancheck( matrix_layout, MAX(m,n), nrhs, b, ldb )によりb配列をmax(M, N)-by-NRHSの領域を検査している。
したがって、N > Mかつb配列をヒープから割り当て or 再利用時には、b配列の未初期化領域にNaNが挟まっているとLAPACKE_*gelsdインターフェース経由だとエラーになる
入力値の定義的には、検査コードはLAPACKE_dge_nancheck( matrix_layout, m, nrhs, b, ldb )であるべきと思われる
対処療法
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記