先ほど完了した課題では、ランダムな Ubuntu マシンを MPI コンピューティング クラスター内のノードとして構成できる一連のスクリプトを作成する必要があります。これはすべて完了しており、ノードは互いに適切に通信できます。ただし、並列プログラムを実行して、MPI クラスターの効率を実証したいと思います。利用可能なプロセス (=ノード) の数の間で作業を分割できる単純な総当たり計算を探しているだけです: 1 つのノードがプログラムを実行するのに 10 秒かかる場合、4 つのノードは約 2.5 しかかからないはずです。
それを念頭に置いて、私は C で書かれた主要な計算プログラムを探しました。純粋主義者にとって、私が取っているコースは純粋にシステム管理であるため、プログラムは実際には私の課題の一部ではありません。クラスターが機能していることを示すものだけが必要です。プログラミングの経験はありますが、C の経験はほとんどなく、MPI の経験はありません。かなりの数のサンプル プログラムを見つけましたが、どれも実際に並列に実行されているようには見えません。それらはすべてのステップをノード間で分散するため、1 つのノードがより高速なプロセッサを備えている場合、全体の時間は短縮されますが、ノードを追加しても計算は高速化されません。
私は何か間違ったことをしていますか?私が見つけたプログラムは単純に並列ではありませんか? 独自のプログラムを作成するには、MPI の C プログラミングを学ぶ必要がありますか? クラスターが動作していることを示すために使用できる並列 MPI プログラムは他にありますか?
編集
以下の回答のおかげで、いくつかの MPI スクリプトを動作させることができました。その中で、最初の N 個の自然数の合計 (データ型の制限に達するため、あまり役に立ちません)、素数のカウントと生成、およびPi のモンテカルロ計算。興味深いことに、素数プログラムのみが、複数のノード/プロセスで (場合によっては劇的な) パフォーマンスの向上を実現します。
スクリプトを動作させる際の最初の問題のほとんどを引き起こした問題は、かなりわかりにくく、明らかにノード上のホスト ファイルの問題によるものでした。パラメーターを指定して mpiexec を実行すると、-disable-hostname-propagation
この問題が解決されました。MPI(R) バリア エラー、TCP 接続エラー、その他の一般的な接続エラーなど、さまざまな形で現れる可能性があります。クラスター内のすべてのノードがホスト名でお互いを認識している必要があると思いますが、これは、サーバー ノードで DHCP/DNS が実行されている従来の Beowulf クラスターでは実際には問題になりません。