2

私は自分自身にMPIを教えています。削減とスキャンに関するPythonドキュメントを読んでいます:http: //documen.tician.de/boostmpi/reference.html#boostmpi.scan

削減とスキャンはどちらも何らかの機能(op)を取り、それを使用して個々のプロセスから取得した値を単一の値に削減するようです。

リデュースとスキャンはどのように異なりますか?

4

1 に答える 1

9

削減とは、スキャンが各プロセッサの部分的な操作結果を返す間、すべてのプロセッサが同じ値を取得することを意味します。たとえば、10個のプロセッサがあり、それらのランクの合計を取得しているMPI_Reduce場合、ルートプロセスでのみスカラー45(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)が得られます。一方MPI_scan、各プロセッサのプロセッサのランクまでの削減のスカラーが得られます。したがって、プロセッサ0は0を取得し、プロセッサ1は1を取得し、プロセッサ2は3を取得します。プロセッサ9は45を取得します。

つまり、そこから見つかったすべてのプロセッサ値のリストを作成すると、次のMPI_Scanようになります。

[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

スキャン結果は[0, 0+1, 0+1+2, 0+1+2+3, ..., 0+1+2+3+4+5+6+7+8+9]

Pythonでは、結果のリストは次のMPI_Reduceようになります(プロセッサ0がルートであると想定)。

[45, None, None, None, None, None, None, None, None, None]

一方、他の言語でrecvbufは、ルート以外のすべてのプロセッサに未定義のデータが含まれています。

于 2012-10-19T02:37:41.787 に答える