Boost :: mpiまたは高性能科学アプリケーション向けのC MPI?


16

私がMPIで最も嫌いなのは、データ型(データマップ/マスク)を扱うことです。なぜなら、それらはオブジェクト指向のC ++にうまく適合しないからです。boost::mpiただし、WebサイトからはMPI 1.1のみをサポートしています。

boost :: mpiは、標準のメッセージパッシングインターフェイスに対するC ++フレンドリーなインターフェイスです。Boost.MPIは、Boost.Serializationライブラリを使用して、ユーザー定義型のMPIデータ型を構築できます。

boost::mpi本格的な科学コンピューティングの経験はありますか?お勧めしますか?問題(スケーリングの問題、コンパイラの問題、エラー、実装されていない機能、いくつかのmpi 2.2機能の必要性)がありましたか?

boost::mpiC ++のMPI C実装を使用する代わりに使用についてコメントできますか?両方を組み合わせることができます(可能な場合はboost :: mpiを使用し、他の場所ではC-MPIを使用します)。

を使用して大きな科学的コードを知っていboost::mpiますか?


必要なすべての機能がサポートされていることを確認するために、このページboost.org/doc/libs/1_50_0/doc/html/mpi/…もご覧ください。自分で実装する可能性も考慮する必要があります。
アレクサンダー

1
Boost :: MPIを使用すると考えられる最も良い理由は、C ++型のシリアル化を自動的にサポートすることです。MPI Cインターフェースはこれを単独で行うことはできません。他の手段で独自のシリアライゼーションを行う場合を除き、Send / Recvなどを介して渡すには、すべてのC ++オブジェクトのMPIデータ型を作成する必要があります。
ジェフ

Elemental(libelemental.org)MPIインターフェース(github.com/elemental/Elemental/blob/master/src/core/imports/…)は、エレガントな方法で自動タイプ検出を行います。ただし、Boost :: MPIが行うことの多くは実行しようとしません。
ジェフ

回答:


13

純粋なMPIよりもレベルが高く、あちこちで数行のコードを保存できるため、私たちは自分のプロジェクトであるdeal.IIでそれを使用すべきだと常に考えてきました。とはいえ、私が長年にわたって学んだことは、ほとんどの高レベルのコードには実際にはそれほど多くのMPIコードが含まれていないことです-取り扱われている600,000行のコード。それはPETScなどのパッケージよりもはるかに少ないことは確かですが、ほとんどのコードは最初に予想されるよりもMPI呼び出しが少ないため、より高いレベルのものを使用することの利点は1つほど大きくないことは事実だと思います一見考えるかもしれません。

このことを要約すると、トレードオフが何であるかを検討することになります。どのくらいのMPIを使用する必要があり、外部ライブラリを構築してリンクするのに必要な追加の労力と比較して、どの程度必要ですか。


6

私の知る限り、APIのboost::mpi単なるc++ラッパーCです。そのboost::mpiため、C一部の機能が実装されていない場合はいつでも、API を使用してAPIに切り替えることができるはずです。実際、彼らのウェブページから:

Boost.MPIの薄い抽象化により、基になるC MPIライブラリの呼び出しと簡単に組み合わせることができます。

私はそれを自分で使用したことはなく、使用する主要なライブラリーも知りませんが、単なる軽量のラッパーであることが期待されCます。したがって、API と比較してパフォーマンスを心配する必要はありません。


2
Boost :: MPIはMPIのサブセットのラッパーです。私が思い出すように、それはMPI 1.2のみをサポートしますが、これは私の点ではMPI-2.2またはMPI-3標準とはかけ離れています。
ジェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.