PETScとTrilinosの主な違いは何ですか?


24

私の知る限り、米国エネルギー省の計算科学ソフトウェアフレームワークの2つの大きなジェネリックは、 PETScTrilinosです。言語の違い(CとC ++)を超えて、一見似ているように見えます。2つのフレームワークの主な違いは何ですか?また、どちらを選択するのに影響する要因は何ですか?(制度的バイアスと既存のインフラストラクチャを無視します。)


1
少し前のCFDボードに関する議論は、少し時代遅れ(2009年以降)でした。おそらく、より良い質問は次のとおりです。それ以来、どちらかのパッケージの設計に大きな変更がありましたか?
aeismail

アーメド、その議論は主に前提条件に焦点を当てています。反復ソルバーの議論よりも広い視点を望んでいました。また、scicomp.SEでPETScについて多くの話があるので、Trilinosはそれに専念する投稿もいくつか得られるはずだと考えました。私はトリリノスやPETScについてあまり知らないので、答えが私も何かを学ぶのに役立つと思いました。
ジェフオックスベリー

回答:


19

文化、コーディングスタイル、機能には大きな違いがあります。おそらく根本的な違いは、TrilinosはFEM問題を解決するための環境を提供しようとし、PETScはスパース線形代数問題を解決するための環境を提供することです。

なぜそれが重要なのですか?

  • Trilinosは、FEMソルバーの個別のパーツに関連する多数のパッケージを提供します。これらのパッケージは連携して動作する場合と動作しない場合があります。基本コンポーネントも独自のパッケージと高度なC ++ツールに含まれています
  • PETSCは、構築可能なコアルーチンを少量提供しますが、FEMソルバーはサードパーティのパッケージに任せます。このため、単なるFEMよりも大きなコミュニティに関連付けられています。たとえば、固有ソルバーでさえも、ほぼ間違いなく線形代数の主要部分であるサードパーティです。
  • 要するに、Trilinosは独自のパッケージ内でうまく機能することに焦点を当てており、PETScには多くのミドルウェアパッケージを呼び出すインターフェイスがあります(これにより「軽量」と呼ばれることがよくありますが、私はその主張をしません)

あなたが本当に使うべきIMHOは、問題次第です。その質問に答えるために、詳細を共有してください。


特定の問題を念頭に置いていません。私は、偏微分方程式を解くためにそれらの大きいパッケージのいずれかの経験を得ることに興味を持って、そして私は1つの中で私の時間を投資するかについてより多くの情報に基づいた意思決定を行うことができるように、長所と短所のアイデアを得るために望んでいたんだ。
ジェフOxberry

11

さまざまなパッケージのテクニカルリードから聞きたい場合、通常のHPCユーザーの観点から質問する場合は、Brock PalenとJeff SquyresのRCEポッドキャストが優れたリソースです。彼らは非常に明確なPETScTrilinosに関するエピソードを持っています。

aterrelは彼の説明で正しいです-PETScは、ソルバーフレームワークで使用できる汎用線形およびいくつかの非線形ソルバーの(比較的)統合された、よく考えられたパッケージです。Trilinosは、そのソルバーフレームワークであることを主な目的とする、進化している統合を備えたパッケージのコレクションであり、ODEソルバー、メッシュパッケージなどのようなものが含まれています。


7

Aterrelの良いコメントに加えて、Trilinosは本当に(Sandia)のものの大きな袋であり、Petscはより焦点を絞ったライブラリーであるということを付け加えておきます。比較したい場合は、PETScのスパースソルバーサポートとTrilinosのePetra / ML / etcスパースソルバーエコシステムを比較する必要があります。また、PETScは構造化グリッドをサポートし、Sandiaは歴史的に明示的に非構造化(FEM)ハウスであったため、Trilinosは構造化グリッドをほとんどまたはまったくサポートしていません。また、Trilinosには、PETScが確率的PDEサポートのように触れない機能があります。


3
Trillinosには、PETScにはないものに加えて、自動微分、負荷分散、アーク継続方法、最適化パッケージがあります。ただし、これらはすべてサードパーティパッケージ(一部はTrilinos製)によってPETScに組み込まれており、PETSc --download-foo configureで追加できます。
aterrel

6

両方で数年を費やした人として、私の見解では、両方のパッケージは実際にはそれほど違いはありません。確かに、異なる言語を使用しますが、非常によく似た方法で使用します(両方ともオブジェクト指向であり、Trilinosはクラスを使用する以外にC ++をほとんど使用しません)。どちらも、線形代数を使用して実行することを実質的にすべてサポートします(サブパッケージまたはその場でダウンロードするものを使用しますが、ユーザーの観点からは違いはありません)。最後に、どちらもかなり多くのあいまいで、おそらくあまり広く使用されていないサブパッケージ(たとえば、PETScのメッシュインターフェイス「ふるい」、Trilinosでの自動差別化など)を持っています。

私にとって、Trilinosの魅力は2つあります。-Trilinosのあいまいなサブパッケージの数は非常に多いです。X方向に何かが必要になった場合は、Trilinosでそれを見つけ、残りのコードで動作します。-Trilinosは、開発戦略においてはるかに保守的です。PETScは常に物の名前を変更し、すべてのリリースでは、ユーザーが名前の変更された関数、異なるライブラリなどに追いつくことを必要とします


新しいインターフェイスの多くはテンプレートを広範囲に使用しているため、古いインターフェイスのみを使用していると思います。
aterrel

それはほとんど真実です。「クラスを超えたC ++のほとんど他の使用」ステートメントについてコメントしたと思います。私が意図したのは、ほとんどの場所でRTTI、例外、多重継承などを使用しないということです。Cと少しのオブジェクト指向を知っているかどうかを理解するのは比較的簡単です。
ウォルフガングバンガース

2

PETScはFortranで非常に簡単に使用でき、ドキュメント/例はかなり優れています。

私にとってTrilinosは混乱しそうで(そのすべてのサブパッケージと命名体系も)、Fortranのサポートはむらがありました(少なくとも数年前に見たときは)。

FortranからTrilinosと対話するには、2つの方法があります。(1)Trilinosパッケージのすべての呼び出しを行うC ++ラッパーに生データを渡す[このようなラッパーは複数のパッケージに存在する]、または(2)新しいForTrilinosインターフェイスFortran 2003のオブジェクト指向機能を実行します。ForTrilinosに必要な機能のほとんどは、ほとんどのコンパイラで使用できます。これらの機能のコンパイラー実装はバグがありますが、急速に改善されています。ForTrilinosは現在、IBMおよびNAGコンパイラでビルドされています。Cray、Intel、およびPortland Groupコンパイラの現在または近い将来のリリースはすべて、バグ修正を法とする必要な機能をすべてサポートしています。今後のGCC 4.7.0リリースでは、必要な機能はすべて1つになりますが、今後、幅広いコンパイラサポートはそれほど遠くありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.