0
y(1:n-1) = a*y(2:n) + x(1:n-1)
y(n) = c

上記のFortran90コードでは、同期、通信、および算術の観点からどのように実行されるかを知りたいと思います。

私が理解しているのは:

コミュニケーションとは、互いにコミュニケーションをとるためのさまざまなタスクの必要性です。たとえば、他の変数との依存関係がある変数がある場合です。しかし、上記のコードは、何らかの通信があることを示していません。依存関係がないようですが、私は正しいですか?

同期は通信にいくらか関連していますが、バリアが使用されているかどうかも関係します。しかし、上記のコードには障壁はありません。したがって、関係する同期は、データの依存関係があるかどうかだけです。

算数私にはこの点についての手がかりがないので、誰かが私にそれを説明してくれたら嬉しいです。

4

2 に答える 2

2

Fortran のルールは非常に単純です。結果が左辺に代入される前に、右辺が完全に評価されます。したがって、割り当て時に通信があると主張できます (結果を y に送信します)。これは同時に同期ポイントでもあります。右側の実際の評価は、コンパイラーによってベクトル化/並列化される可能性があり、最初の割り当ての後にのみ設定される最後のものを除いて、配列内のすべてのエントリーの評価の任意の順序になります。ただし、パイプライン処理を除いて、一般的なコンパイラによってここに導入された実際の並列処理はありません。

于 2011-08-21T01:12:14.167 に答える
0

与えられたスニペットであまり立ち止まることなく、たとえば、 OpenMPブックの使用(ここでのプレゼンテーション)に興味があるかもしれません(私が間違っている場合は教えてください)。これは、並列コンピューティング(メモリ共有)の世界への穏やかな入門書です。大規模なシステムの場合は、「MPI」とそれに関連する主題をグーグルで検索するとよいでしょう。この問題に関する資料は本当にたくさんあります(それらの多くはfortran + mpi / fortran + openmpを扱っています)ので、ここでは例を挙げません。

これはあなたが目指していたものですか?

于 2011-08-08T11:24:39.690 に答える