petsc4pyとc / c ++ / fortranの使用効率


11

petsc4pyとc / c ++ / fortranはどれくらい遅いですか?

実行されているコードに大きく依存することはわかっていますが、マトリックスベクトル製品のような単純なものはどうでしょうか。

回答:


11

これは科学プログラミングコミュニティで広く受け入れられている懸念事項であり、パフォーマンスの不確実性は計算科学の主要な「神話」の1つであると考えています。

@fcruzで説明しているように、これpetsc4pyはPETScライブラリのラッパーであり、PythonでのPETScの再実装ではありません。そのため、PETScとの間で配列をコピーしたり、ドライバーコード/関数呼び出しのオーバーヘッドからパフォーマンスのペナルティが生じることが予想されます。petsc4py非常に慎重に実装され、理解している限りnumpy多次元配列インターフェースにより、コピーのオーバーヘッドを回避できます。私が働いているユースケースの大部分では、Pythonでの作業におけるパフォーマンスのペナルティは10〜40%程度であり、このパフォーマンスヒットを補う以外の方法でも大幅に向上することがよくあります。実際、私が話した経験豊富なHPC Python開発者数人は、このパフォーマンスの差を通常はさらに減らすことができるという意見を持っています。Pythonが計算コストの高いコードを駆動している場合、これは確かに当てはまります。

petsc4pyリポジトリ自体は、性能/柔軟性のトレードオフを説明するのに有用な例の数を特徴とします。見るpetsc4pyと呼ばれるデモのソースリポジトリperftestPythonのドライバと(に設けられたFortranのカーネルオーバーCドライバの両方使用して方程式の非線形システム解き、App.f90そのディレクトリ内に)。ここでのパフォーマンスオーバーヘッドは10%程度です。

具体例として、私はPyClawに取り組んでいる科学者チームの一員です。PyClawは、並列グリッド管理用のPETScとセルインターフェースのリーマン問題を解決するためのレガシーFortranカーネルにインターフェースするソフトウェアパッケージです。Fortranドライバーからの切り替えによるパフォーマンスの低下については、かなり慎重に調査しました。結果は、会議資料の表1の5ページの下部にあります。このケースでは、コードをPETScおよびFortranに簡単に接続し、数万のコアで効率的に並列実行できる機能と、コア上のパフォーマンスを少し引き換えました。


また、小さな非構造化コードについても同様の懸念があります。PETScはデータ構造とソルバーのみを提供しますが、PETScを組み立てて解決する前に、メッシュ(最大4GBの入力ファイル)を読み取り、パーティションを作成し、マッピングを作成し、要素をループし、ローカル(要素)剛性マトリックスを計算する必要があります。このPETScに関連しないもの、特にI / O、マッピング、および要素レベルの計算では、Pythonは遅くなりません。とにかく、残りのコードは単純だからです。
12

通常、要素レベルの計算はカーネルとして渡されます(のApp.f90ソースを参照perftest)。I / Oにパフォーマンスの違いはありません。FEniCSでより高いレベルのパッケージを探しましたか?
アロン

あなたが正しいです。アイデアは得られますが、私の特定のケースでは、コードの約90%に相当する多くのカーネル(要素の種類ごとの形状関数、要素レベルの計算、マッピングなど)があります。私はしばらく前にフェニックスを見ましたが、外部メッシュの扱いやBCの強制などの多くの詳細は、一見したところでははっきりしていませんでした(少なくとも私には)複雑に見えました。それに加えて、Fortranを使用しています。Fortranは、私のようなCS以外の人にも(PETScの優れたドキュメントを使用して)かなり簡単に使用できます。私は実際にpythonよりも簡単だと思っています:)
12

7

Petsc4pyは、PETScにアクセスするための別の方法ですが、pythonから、またはpetsc4pyがバインディングを提供するため、pythonから、並列PDEソルバーの開発の労力を削減するためのPETScデータ構造とルーチンにアクセスできます(その規模)。

PETScはソルバーにいくつかのレベルの抽象化を提供し、PETScを使用して独自のソルバーを実装することもできます。ソフトウェアの抽象化の最低レベルでは、PETScはBLAS、LAPACK、およびMPIを使用し、せいぜいこれらの実装と同じくらい高速です。

現在、pets4pyはcythonを使用して、PETScへのバインディングを実装しています。cythonを使用するオーバーヘッドは、PETScから実行される計算の量に関連しています。PETScの高レベルPDEソルバーを使用する場合、オーバーヘッドは心配する必要がないほど十分に小さくなければなりません。

PETScとGEMVのパフォーマンス比較よりも重要な問題は、PETScがあなたの仕事に適したツールであるかどうかです。非自明な並列PDEソルバーを実装する必要がある場合は、おそらく、PETScが本当に役立ちます。ただし、大量のGEMVを実行する必要がある場合は、BLASライブラリが必要です。幸運を!

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