LAPACKE_dsyevd
LAPACKE_dsyevd()
がメモリが足りないと怒る。ググっても情報がない。なぜだろうか。LAPACKE_dsyevd_work()
を叩いてみるか。
LAPACKE_dsyevd()
のコードを見てみると、lwork
がlapack_int
型になってるけど、これは実質int
型(lapacke.h
のなかで、#define lapack_int int
となっている)。つまり、現行のx86-64システムだと32bitのsigned integerだから、lworkがあまりに大きいとoverflowする。
これを踏まえて、lwork
をlong型にしLAPACKE_dsyevd()
を真似てLAPACKE_dsyevd_work()
を直接呼んでみたら、期待通り動いた。安全かどうかわからないけれど。
以上はOpenBLASでの話。MKL2015ではコケた。
Intel MKL ERROR: Parameter 8 was incorrect on entry to DSTEDC. Intel MKL ERROR: Parameter 12 was incorrect on entry to DORMTR.
バグかな。最新版を試す必要がありそう。