私は自分自身にMPIを教えています。削減とスキャンに関するPythonドキュメントを読んでいます:http: //documen.tician.de/boostmpi/reference.html#boostmpi.scan
削減とスキャンはどちらも何らかの機能(op)を取り、それを使用して個々のプロセスから取得した値を単一の値に削減するようです。
リデュースとスキャンはどのように異なりますか?
私は自分自身にMPIを教えています。削減とスキャンに関するPythonドキュメントを読んでいます:http: //documen.tician.de/boostmpi/reference.html#boostmpi.scan
削減とスキャンはどちらも何らかの機能(op)を取り、それを使用して個々のプロセスから取得した値を単一の値に削減するようです。
リデュースとスキャンはどのように異なりますか?
削減とは、スキャンが各プロセッサの部分的な操作結果を返す間、すべてのプロセッサが同じ値を取得することを意味します。たとえば、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
は、ルート以外のすべてのプロセッサに未定義のデータが含まれています。