私はいくつかの悪条件の大規模なスパース線形方程式系に取り組んでいます。それらを解決するために、ダブルダブル算術またはクワッドダブル算術を使用したいと思います。中田真帆が開発したMPACKという名前のパッケージがあり、4倍算術で数値線形代数計算を実行できることを知っています。ただし、スパースマトリックスではなく、デンスマトリックス用に設計されています。quad-double算術スパースマトリックスパッケージがあるかどうかを知っていますか?
私はいくつかの悪条件の大規模なスパース線形方程式系に取り組んでいます。それらを解決するために、ダブルダブル算術またはクワッドダブル算術を使用したいと思います。中田真帆が開発したMPACKという名前のパッケージがあり、4倍算術で数値線形代数計算を実行できることを知っています。ただし、スパースマトリックスではなく、デンスマトリックス用に設計されています。quad-double算術スパースマトリックスパッケージがあるかどうかを知っていますか?
回答:
バージョン3.2以降、PETScはgcc / gfortran 4.6以降でスパース4倍精度計算をサポートしています。
4倍精度のBLASおよびLAPACKが必要です。PETScは、次の(部分的な)configureコマンドで(クワッドサポートとともに)提供できます。
./configure --with-precision=__float128 --download-f2cblaslapack
Trilinosライブラリを試してみるかもしれません。Tpetra(元のスパースマトリックスライブラリであるEpetraを置き換えることになっています)の下にスパースマトリックスライブラリがテンプレート化されています。ダブル、コンプレックス、クワッドなどのテンプレートを作成できます。PETScの次に、ソルバーの選択肢が(ダイレクトと反復の両方で)最大の選択肢があります。
編集:コメントを読んだ後、Tpetraの即時の有用性は、クワッド精度については少し疑わしいようです...
__float128
quad-doubleは言うまでもなく、Tpetraによってサポートされていることさえ知りません。Tpetraはスタンドアロンではなく、すべてのヘッダ、およびそれがあっても、のようなものされていないstd::complex
とだけ仕事float
とdouble
。
MATLABの多精度コンピューティングツールボックスは、スパース行列をサポートし、特に4倍精度の計算用に最適化されています。
以下は、4倍精度スパースソルバーのタイミングの詳細 です。スパース行列の直接ソルバー
(私はツールボックスの作者です)。