2016-07-02 8 views
0

私はKu = fの線形解が必要なFEMプロジェクトに取り組んでいます。 私はLAPACKソルバーでこれをやっています。 Kマトリックスが非常に巨大(30GB)になることがあることをよく知っているかもしれません。 そのような行列を従来の方法でmallocするには良いラムが必要です。マトリックスにファイルを書き込むことができれば助けが必要です ファイル自体からlapackソルバーにそのような行列を入力し、ファイルに出力することをお勧めしますか?入力ファイルからLAPACKへの行列と出力ファイルの逆行列

ありがとうございます。 Maharshi。

答えて

0

30Gは、コンピューティングサーバーにとって大きなサイズではありません。サーバーをアップグレードすることができます。

ハードウェアが限られているため、行列をファイルに入れて、同じLAPACKルーチンを使用して方程式を解くことができます。このテクニックはメモリマップファイルと呼ばれます。物理メモリを割り当てずに、ファイルの内容を同じサイズのメモリアドレス範囲にマップします。このアドレス範囲からデータを読み書きするときは、実際にファイルを読み書きします。 Linux上で

https://en.wikipedia.org/wiki/Memory-mapped_file

あなたはこれを達成するためにmmap()を使用することができます。メモリアドレス範囲をアクセスする速度は、ディスクファイルへのアクセスと同じくらい遅いしかし

http://man7.org/linux/man-pages/man2/mmap.2.html

+0

ご返信ありがとうございます。私は初心者です、あなたはこのmmapを行う上で簡単なガイド/チュートリアルをお勧めしますか? –

+0

google mmapチュートリアル – kangshiyin

0

FEMコードで使用される形状関数のサポートによっては、Kの行列は多くの場合、sparseです。行列の要素のほとんどはnullです。したがって、CSRなどの疎行列に専用の形式を使用する方が、行列を格納する方がはるかに効率的です。残念なことに、LAPACKは行列行列を扱うことはできますが、このような行列はほとんどサポートしていません。

Eigen libraryまたはPETSc libraryをご覧ください。これらのライブラリは、疎な行列専用の効率的なソルバーへのインタフェースを提供します。 PETScについてはthereを参照してください。たとえば、MumpsまたはSuiteSparseを参照してください。

関連する問題