問題タブ [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.

0 投票する
0 に答える
1034 参照

matrix - scipy でスパース Ax=b を解く

PDE の有限差分法を表す行列がAx=bどこにあるかを解決する必要があります。A2D 問題の典型的なサイズはA(256^2)x(256^2) 前後で、いくつかの対角線で構成されています。次のサンプル コードは、A の作成方法です。

とを足すmatXmatY4 つの対角線になります。上記は二次離散化の場合です。4 次離散化の場合、8 つの対角線があります。二次導関数がある場合、主対角もゼロではありません。

次のコードを使用して、実際の解決を行います。

いくつか質問があります。

  1. Ax=bscipyで解決する最良の方法は何ですか? LU分解を使用するライブラリで使用しますspsolvesp.sparse.linalg密行列の標準sp.linalg.solveを使用してみましたが、かなり遅くなります。ライブラリ内の他のすべての反復ソルバーも使用してみましたsp.sparse.linalgが、それらも遅くなりました (1000x1000 の場合はすべて数秒かかりますがspsolveA. 計算を行う別の方法はありますか?

編集:私が解決しようとしている問題は、実際には時間依存のシュレディンガー方程式です。潜在的な項が時間に依存しない場合、提案されているように、最初に行列を事前因数分解Aしてコードを高速化できますが、両方の対角項を変更する必要があるため、潜在的な変数が時変である場合、これは機能しません。行列AB各時間ステップで。この特定の問題について、事前因数分解または他の方法と同様の方法を使用してコードを高速化する方法はありますか?

  1. をインストールしumfpackました。True と False を設定use_umfpackしてテストしてみましたが、驚くべきことに のuse_umfpack=True2 倍近く時間がかかりますuse_umfpack=False。このパッケージを使用すると、速度が向上するはずだと思いました。それが何であるか、何か考えはありますか?(PS: Anaconda Spyder を使用してコードを実行していますが、違いがある場合)

私は自分のコードをプロファイリングするために使用cProfileしており、ほぼすべての時間をspsolve. したがって、コードの残りの部分 (行列/問題の初期化) はかなり最適化されていると思います。改善が必要なのは行列解決の部分です。

ありがとう。

0 投票する
0 に答える
93 参照

openmp - -fopenmp でコンパイルし、同時に UMFPACK にリンクしますか?

みんなが元気でいることを願っています。

計算を並列化するためにクラスターで OpenMP を使用しています。まばらな方程式系を解くために、UMFPACK にもリンクしたいと考えています。UMFPACK は OMP ブロックでは使用されません。

しかし、コードを実行すると、並列化がうまくいかないことがわかりました。htop を使用して CPU を監視します。20 個の CPU が実行されていると書かれていますが、バーはそうではないことを示しています。

ここに画像の説明を入力

また、私のコードは、-lumfpack でリンクしない場合よりもはるかに遅く実行されます。実際、-lumfpack を使用してライブラリにリンクしていない場合、htop は次のように表示されます。

ここに画像の説明を入力

次のコードを使用して、コードをコンパイルして実行します。

UMFPACK は OMP ブロックで使用されていないため、-lumfpack競合するのはなぜ-fopenmpですか? それらをどのように連携させていくかを考えていました。アドバイスをいただければ幸いです。ありがとうございました!