5

私は C/C++ アプリケーションを計算しています。これは基本的に、さまざまなデータ セットのメイン ループです。openmp と mpi が利用可能な 100 ノードのクラスターにアクセスできました。アプリケーションをスピードアップしたいのですが、私は mpi と openmp の両方のまったくの初心者です。パフォーマンスが最高でなくても、学習とデバッグが最も簡単なものは何だろうと思います。

また、私のメイン ループ アプリケーションには何が最も適切なのだろうかと考えています。

ありがとう

4

2 に答える 2

3

プログラムが 1 つの大きなループにすぎない場合、OpenMP を使用すると次のように簡単に記述できます。

#pragma omp parallel for

OpenMP は共有メモリ プログラミングにのみ役立ちます。これは、クラスターがkerrighedのようなものを実行していない限り、 OpenMP を使用する並列バージョンが一度に最大 1 つのノードでしか実行されないことを意味します。

MPI はメッセージ パッシングに基づいており、開始するのは少し複雑です。利点は、プログラムを一度に複数のノードで実行し、必要に応じてノード間でメッセージをやり取りできることです。

「異なるデータセットに対して」と言ったことを考えると、問題は実際には「恥ずかしいほど並列」のカテゴリに分類される可能性があるように思えます.100を超えるデータセットがある場合は、ノードごとに1つのデータセットを実行するようにスケジューラを設定するだけです.それらがすべて完了するまで、コードを変更する必要はなく、単一のノードを使用するだけでほぼ 100 倍の速度になります。

たとえば、クラスタがコンドルをスケジューラとして使用している場合、ジョブの説明の「Arguments =」行のみを変更して、データ項目ごとに 1 つのジョブを「vanilla」ユニバースに送信できます。(より賢明なコンドルでこれを行う方法は他にもあり、トルク、sge などにも同様の方法があります。)

于 2010-10-30T09:11:00.960 に答える
1

OpenMP は本質的に SMP マシン用であるため、何百ものノードにスケーリングする場合は、とにかく MPI が必要になります。ただし、両方を使用できます。MPI はノード間で作業を分散し、OpenMP はコア間またはノードごとの複数の CPU 間で並列処理を処理します。OpenMP は、pthread をいじるよりもはるかに簡単だと思います。ただし、粒度が粗いため、OpenMP から得られる速度向上は、通常、手動で最適化された pthreads 実装よりも低くなります。

于 2010-10-30T09:13:33.803 に答える