したがって、メモリ要件が高いため、DSYEVD が実用的でなくなるところまで来ました。行列を対角化するには、少なくとも 240GB の RAM が必要になるため、必要なメモリが少ない DSYEV ルーチンに移行することを検討しています。
DSYEVDには (1 + 6N + 3N^2) ワードが必要ですが、DSYEVには 3N + N^2 しか必要ありません。
私が持っている小さいマトリックスの次元は〜100,000で、大きいマトリックスの次元は〜230,000です。明らかに、2 番目は DSYEV を使用して実行する必要がありますが、最初はどちらを使用してもかまいません。
私はグーグルでざっと見ましたが、関連するベンチマークを見つけることができませんでした - 利用可能な唯一のものはN = 10-1000であり、密な行列です. 私の行列は 100K 次元で 90% 疎で、230K 次元で 95% 疎です。
これにどれくらいの時間がかかるか知っている人はいますか?
DSYEVD を使用して、それぞれから最初の 3000 個の固有ベクトルと固有値を取得しましたが、今度はそれらすべてを取得する必要があります。反復スキームを使用して 3K ベクターのみを取得する場合、100K マトリックスで約 1.6 日、230K マトリックスで約 3 日かかりました。ジョブは Intel(R) Xeon(R) CPU E5-4640 0 @ 2.40GHz と 256GB RAM で実行されました。