5

数分前、私はいくつかのテキストに出くわしました。それは、しばらく頭を悩ませていた何かを思い出させましたが、尋ねる場所がありませんでした.

したがって、これが人々が両方を実際に体験できる場所になることを願って、誰かが OpenMP と MPI の違いを説明できるかどうか疑問に思っていました。

私はウィキペディアの記事全体を読み、部分的に理解しましたが、まだ考え中です。いつの日か並列処理の世界に入りたい (OpenMP の基礎を学んでいる) Fortran プログラマーにとって、より将来性のある方法は何ですか?

私はあなたのすべてのコメントに感謝します

4

3 に答える 3

10

OpenMP は主に密結合マルチプロセッシング (つまり、同じマシン上の複数のプロセッサ) 用です。これは主に、複数のスレッドをスピンアップしてループを並列実行する場合などに使用されます。

MPI は主に、疎結合のマルチプロセッシング (つまり、ネットワークを介して互いに通信するコンピューターのクラスター) 用です。ネットワークの一種の縮退形式として単一のマシンで使用できますが、単一のマシンであることを利用することはほとんどありません (たとえば、「ノード」間で非常に高い帯域幅の通信を行う)。

編集(コメントへの返信):24台のマシンのクラスターの場合、MPIが当然の選択になります。上記のように (@Mark のコメントと同様)、OpenMP は主にメモリを共有する複数のプロセッサ用です。共有メモリがない場合は、MPI が明確な選択肢になります。

同時に、マルチプロセッサ マシンを使用すると仮定すると (他に何かありますか?)、OpenMP を使用して、各マシンの負荷をすべてのプロセッサに分散することができます。

ただし、OpenMP は一般に MPI よりもはるかに迅速かつ簡単に使用できることに注意してください。必要なスピードアップの程度にもよりますが、スケールアウトするのではなくスケールアップする (つまり、より多くのプロセッサを搭載した少数のマシンを使用する) ことで、コアあたりの価格が最も低くなることはめったにありませんが、ソフトウェア開発を十分に迅速かつ安価に行うことができます。

于 2010-07-02T15:46:50.177 に答える
8

@Jerry が既に書いたことと矛盾しない別の見解は、OpenMP は共有メモリの並列化用であり、MPI は分散メモリの並列化用であるというものです。分散システムで共有メモリをエミュレートすることは、説得力があったり成功したりすることはめったにありませんが、共有メモリ システムで MPI を使用するのは完全に合理的なアプローチです。

もちろん、最近のすべての (?) マルチコア PC とサーバーは共有メモリ システムであるため、OpenMP の実行モデルは広く適用できます。MPI は、プロセッサーがネットワーク (相互接続と呼ばれることもあり、オフィスのイーサネットよりも高いスペックであることが多い) を介して相互に通信するクラスターで真価を発揮する傾向があります。

アプリケーションに関して言えば、大部分の並列プログラムは OpenMP または MPI のいずれかを使用して正常に実装でき、ハードウェアの可用性によってどちらを選択するのが最適かを判断します。私たち (並列主義者) のほとんどは、OpenMP は MPI よりも理解しやすいと考えており、MPI よりも OpenMP を使用して既存のプログラムを段階的に並列化する方が確かに (私は断言します) 簡単です。

ただし、1 つのボックスで入手できるよりも多くのプロセッサを使用する必要がある場合 (および着実に増加しているプロセッサの数)、MPI を選択することをお勧めします。また、ハイブリッド プログラミングのアイデアに出くわすこともあります。たとえば、マルチコア PC のクラスターがある場合、PC 間で MPI を使用し、PC 内で OpenMP を使用することがあります。プログラミングの複雑さが増したことでパフォーマンスが向上したという証拠は見たことがありません。

そして、コメントの 1 つが既に述べているように、Fortran は並列で高性能な科学および工学アプリケーションの分野で十分に将来性があると思います。標準の最新 (2008 年) 版では、共同配列 (つまり、非ローカル アクセスとローカル アクセスを備えたメモリ システム全体に分散されている配列) が言語に組み込まれています。この機能の初期実装は 1 つまたは 2 つです。私はまだそれらの経験がなく、数年間歯が生える問題があると予想しています.

OPのコメントのいくつかのポイントを拾うために編集します...

いいえ、OpenMP を介して並列コンピューティングにアプローチすることは悪い考えではないと思います。私は、OpenMP と MPI (より正確には、それらが実装する並列コンピューティングのモデル) は補完的であると考えています。私は確かに両方を使用しており、ほとんどのプロの並列プログラマーも使用していると思います。約 6 年前に大学を卒業してから、約 2 年前にマルチコアが本格的に普及し始めるまで、私は OpenMP をあまり使っていませんでした。今、私はおそらく両方のほぼ同量を行っています。

あなたのさらなる (自己) 教育に関しては、 Chapmanらの本Using OpenMPの方が、Chandra の本よりも優れていると思います。Chandra の本は OpenMP 2 よりも前のものであり、Chapman の本は OpenMP 3 よりも前のものであり、学ぶ価値があると思います。

MPI 側では、Groppの本、Using MPIおよびUsing MPI-2が不可欠です。これはおそらく、(私が見つけた限りでは) それらが MPI の唯一のチュートリアル紹介であるためであり、それらが優れているからではありません。彼らが悪いとは思いませんが、彼らには多くの競争がありません。Karniadakisと Kirby によるParallel Scientific Computing in C++ と MPIも気に入っています。科学計算の知識のレベルにもよりますが、資料の多くが基本的すぎると感じるかもしれません。

しかし、この分野に完全に欠けていると思うもの (誰かがここで私が間違っていることを証明してくれることを願っています) は、並列実行のためのプログラムの設計に関する優れた教科書 (またはいくつかの教科書) であり、経験豊富な Fortran (私たちの場合) プログラマーが作成するのに役立つものです。直列プログラム設計から並列プログラム設計へのジャンプ。ループまたはループのネストを並列化する方法に関する多くの情報。構造化された正の半正定行列 (または何でも) で計算を並列化するためのオプションについてはあまりありません。そのレベルの情報については、研究論文をかなり掘り下げる必要があります (ACM と IEEE のデジタル ライブラリは、ささやかな年間費用に見合うだけの価値があります。学術機関に所属している場合、ライブラリはおそらくこれらやその他の多くのサブスクリプションを持っています。 「私の雇用主が私の職業学会の会員費と追加費用を支払ってくれたのは幸運だったが、彼らがそうしなかったとしたら」

たとえば、24 個のプロセッサ (CPU ? またはコア ? は関係ありません。質問するだけです) を備えた新しいラボの計画については、予算の深さに応じて選択する必要があります。余裕があれば、次のことをお勧めします。

-- 確かに 1 年前には、Sun、SGI、および IBM はすべて、そのような数のコアを備えた共有メモリ システムを提供できました。現在の市場の状況についてはわかりませんが、調べる価値があると判断するのは 2 月までです。共有メモリ システムは共有メモリ並列処理オプションを提供しますが、クラスターにはありません。共有メモリ プラットフォームでのメッセージ パッシングは非常に高速に実行する必要があります。(ちなみに、このルートをたどる場合は、システムのこの側面のベンチマークを行ってください。共有メモリ コンピューターでの不適切な MPI 実装がいくつかあります。) 共有メモリ コンピューターでの適切な MPI 実装 (これに関する私の最後の経験は、 512 プロセッサ SGI Altix) はメッセージを送信せず、いくつかのポインターを移動するだけなので、非常に高速です。Altix の問題は、プロセッサが 128 個を超えると、メモリ バスがすべてのトラフィックに圧倒される傾向があることでした。それは、クラスターまたは MPP ボックスで MPI に切り替える時でした。

-- 繰り返しますが、余裕があれば、システム インテグレーターに動作するシステムを提供してもらい、クラスター (またはその他のもの) を自分で構築することは避けてください。私のように、あなたが最初はプログラマーであり、2 番目に消極的なシステム インテグレーターである場合、これはより簡単なアプローチであり、はるかに早くプログラミングを開始できる実用的なシステムを提供します。

高価なオプションを購入する余裕がない場合は、ボックスあたり 4 コアまたは 8 コアのラックマウント サーバーをできるだけ多く使用することをお勧めします (選択は価格に依存し、ボックスあたり 16 コアでも検討する価値があるかもしれません)。 、コアあたり少なくとも 4GB の RAM を計画しています。次に、余裕のある最速の相互接続が必要です。GB イーサネットも問題ありませんが、Infiniband (または私が名前を忘れた他のもの) の方が優れていますが、価格の急上昇は目立ちます。また、新しいクラスターのヘッド ノードとして機能し、ジョブ管理システムなどを実行する PC が必要です。インターネット上には、クラスターの構築と実行に関する優れた資料が数多くあります。多くの場合、Beowulf という見出しの下にあり、これは最初の「自家製」クラスターと見なされたものの名前でした。

さて、2 月までに研究室を立ち上げて稼働させなければならないので、2 人の同僚を解雇して、彼らの PC をミニ Beowulf に変えてください。見栄えの良い MPI インストールをダウンロードしてインストールします (OpenMPI は優れていますが、他にも考慮すべき点があり、O/S によって別の選択が指示される場合があります)。これで、ラボの準備が整ったときに準備を開始できます。

PS 他の方法で 2 台の PC を回収できる場合は、2 人をクビにする必要はありません。また、PC は古く、デスクトップでの使用には不十分である可能性があり、あなたや同僚 (残っている場合) のトレーニング プラットフォームになるだけです。ほぼ同一であるほど優れています。

于 2010-07-02T16:22:04.030 に答える
2

上で述べたように、OpenMP は、MPI と比較して、漸進的並列化によりプログラミングが容易な方法であることは間違いありません。OpenMP は主に細粒度の並列処理 (ループ レベル) に使用され、MPI は粗粒度の並列処理 (ドメイン分割) に使用されます。どちらも、並列パフォーマンスを実現するための優れた方法です。

当社のソフトウェア (Fortran) には OpenMP バージョンと MPI バージョンがあり、お客様はニーズに応じて両方を使用します。

マルチコア アーキテクチャの現在の傾向では、ハイブリッド OpenMP-MPI がもう 1 つの実行可能なアプローチです。

于 2010-09-14T22:04:12.053 に答える