問題タブ [umfpack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matrix - scipy でスパース Ax=b を解く
PDE の有限差分法を表す行列がAx=b
どこにあるかを解決する必要があります。A
2D 問題の典型的なサイズはA
(256^2)x(256^2) 前後で、いくつかの対角線で構成されています。次のサンプル コードは、A の作成方法です。
とを足すmatX
とmatY
4 つの対角線になります。上記は二次離散化の場合です。4 次離散化の場合、8 つの対角線があります。二次導関数がある場合、主対角もゼロではありません。
次のコードを使用して、実際の解決を行います。
いくつか質問があります。
Ax=b
scipyで解決する最良の方法は何ですか? LU分解を使用するライブラリで使用しますspsolve
。sp.sparse.linalg
密行列の標準sp.linalg.solve
を使用してみましたが、かなり遅くなります。ライブラリ内の他のすべての反復ソルバーも使用してみましたsp.sparse.linalg
が、それらも遅くなりました (1000x1000 の場合はすべて数秒かかりますがspsolve
、A
. 計算を行う別の方法はありますか?
編集:私が解決しようとしている問題は、実際には時間依存のシュレディンガー方程式です。潜在的な項が時間に依存しない場合、提案されているように、最初に行列を事前因数分解A
してコードを高速化できますが、両方の対角項を変更する必要があるため、潜在的な変数が時変である場合、これは機能しません。行列A
とB
各時間ステップで。この特定の問題について、事前因数分解または他の方法と同様の方法を使用してコードを高速化する方法はありますか?
- をインストールし
umfpack
ました。True と False を設定use_umfpack
してテストしてみましたが、驚くべきことに のuse_umfpack=True
2 倍近く時間がかかりますuse_umfpack=False
。このパッケージを使用すると、速度が向上するはずだと思いました。それが何であるか、何か考えはありますか?(PS: Anaconda Spyder を使用してコードを実行していますが、違いがある場合)
私は自分のコードをプロファイリングするために使用cProfile
しており、ほぼすべての時間をspsolve
. したがって、コードの残りの部分 (行列/問題の初期化) はかなり最適化されていると思います。改善が必要なのは行列解決の部分です。
ありがとう。
openmp - -fopenmp でコンパイルし、同時に UMFPACK にリンクしますか?
みんなが元気でいることを願っています。
計算を並列化するためにクラスターで OpenMP を使用しています。まばらな方程式系を解くために、UMFPACK にもリンクしたいと考えています。UMFPACK は OMP ブロックでは使用されません。
しかし、コードを実行すると、並列化がうまくいかないことがわかりました。htop を使用して CPU を監視します。20 個の CPU が実行されていると書かれていますが、バーはそうではないことを示しています。
また、私のコードは、-lumfpack でリンクしない場合よりもはるかに遅く実行されます。実際、-lumfpack を使用してライブラリにリンクしていない場合、htop は次のように表示されます。
次のコードを使用して、コードをコンパイルして実行します。
UMFPACK は OMP ブロックで使用されていないため、-lumfpack
競合するのはなぜ-fopenmp
ですか? それらをどのように連携させていくかを考えていました。アドバイスをいただければ幸いです。ありがとうございました!