いくつかの数学的規則を使用して、数値積分を使用した PI の非常に単純な計算で MPI を使用しています。最終的に計算を合計に変換します。この形式は次のとおりです。
PI = ∑(f(i))、ここで i は 1 から 100000 までで、f(i) は i に基づいて double 型の値を返す関数です。
プログラミングするとき、合計を for ループに変換して 100000 回繰り返すことができるのは、非常に簡単なことです。そして、p 個のプロセッサを使用する MPI では、for ループを p 個のセグメントに分割し、各プロセッサは 100000/p 個のループを取得します (100000%p = 0 と仮定)。その後、MPI_Reduce、MPI_SUM を使用してこれらのサブ結果を収集し、それらを合計して最終結果を取得します。
ただし、異なる数のプロセスを使用すると、最終結果はわずかに異なります。最終的な PI 結果の精度は 12 ビットで、7 ビット目あたりから結果が異なり始めます。
結果が異なる理由はわかりません。私の考えでは、タスクがどのように分散されているかに関係なく、まったく同じタスクを実行するだけです。
どんな助けでも大歓迎です!