16

fortran90/95でスパース行列を処理するためのライブラリを探しています。必要なのは、行列とベクトルの乗算などの非常に基本的な操作だけです。私が使用することを提案しますか?

ブラストテクニカルフォーラム仕様の第3章に記載されている、「スパースブラス」と呼ばれるBLASの拡張機能(?)を検索しました。

http://www.netlib.org/blas/blast-forum/

理想的なようです。そのドキュメントによると、ライブラリへのFortran95インターフェイスが必要です。しかし、ダウンロードできた場所では、この仕様の実際の実装を見つけることができませんでした。fortran 95のスパースブラス仕様は実際にはどこにも実装されていないという印象を受けていますか?とにかくオープンソースほどではありません。

sparsekitというライブラリも見つかりました。

http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html

これら2つのうちのいずれか、またはFortran 90/95用の他のスパース行列ライブラリのいずれかを使用した経験はありますか?どちらを使用するか、どこで入手できるかについてアドバイスをお願いします(sparsekitの場合、ソースコードは上記のリンクから入手できます)。BLASが密行列用であるように、疎行列の「標準」のようなものはありますか?

乾杯、

アルネ

4

1 に答える 1

15

OK、私は自分の質問に部分的に答えます:

スパースBLASの完全なf95実装を見つける場所は、上記の@alexurbaによって提供されました。

http://www.netlib.org/toms/818

それでした!このスクリプトは、実行するフォルダーにすべてのソースコードを作成します(この方法で提供されるソフトウェアはこれまで見たことがありません)。

INSTALLスクリプトを機能させるには、いくつかの変更を加える必要がありました。インストール手順では、INSTALLスクリプトを編集して、適切な「アーチ」を選択するように指示されています。選択肢は、AIX、ALPHA、CRAY、HP、NAG、SGI、およびSUNです。私はLinuxを使用しており、このコンピューターにある唯一のFortranコンパイラーはgfortranであるため、これらはどちらも適切ではないように思われました。このオプションの目的はよくわかりませんでしたが、うまくいったのは次のとおりです。

1)INSTALLで、変数SB_ARCH ='GNU'を設定して、GNUと呼ばれる新しい「アーチ」を作成します。2)ソフトウェア/MakefileでFC=f90をFC= gfortranに変更します。3)TESTER /でファイルMakefile.NAGをMakefile.GNUにコピーし、FC=f90をFC=gfortranに変更し、単語'NAGのすべてのインスタンスを変更します。 'から'GNU'。(MakefilesのFFLAGSオプションも変更することをお勧めします。)

この後、INSTALLを実行してから、TESTER / test_allを実行すると、テストで「0.000 ...」がエラーとして出力されました。これは、すべてが機能していることを意味します。

私はこのソースコードを見つけるのが非常に難しいと思ったと言わなければなりません。幸いなことに、このスレッドは、「fortran 90スパース行列ライブラリ」を検索すると、グーグルでかなり高く表示されます。

私の最終的な解決策:皮肉なことに、スパースBLASの完全な実装を最終的に見つけた後、おそらく必要なのは行列とベクトルの乗算だけなので、より直接的なアプローチを使用する方がよいと判断しました。使用する表現(圧縮されたスパース行(CSR)は私の問題に適しているようです)、スパースBLASソースコードから対応する行列-ベクトル乗算ルーチンを掘り起こし、それがどのように入力されるかを確認し、それをコードで直接使用します。

于 2012-09-11T22:43:18.347 に答える