1
MPI_reduce
を使用している場合、ルートプロセッサーは指定されたMPI操作を自身に適用しますか?ルートプロセッサはMPI_Reduceもそれ自身に適用しますか?
たとえば、ルートを含むすべてのプロセッサで次のコードが実行されているとします。local_sum
をglobal_sum
と同じように減らします。
int local_sum;
int global_sum;
int i;
for (i = 0; i < 5; i++) {
local_sum += rand_nums[i];
}
MPI_Reduce(&local_sum, &global_sum, 1, MPI_INT, MPI_SUM, ROOT, MPI_COMM_WORLD);
はい、もちろんです。 – Gilles
リダクションでプロセス0の値を使用したくない場合は、インターコミュニケータを構築してプロセス0をリモートリーダとして構築できます。 MPI標準のページ293(http://mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf)、['MPI_Intercomm_create()'](http:// www。 mpich.org/static/docs/v3.2/www3/MPI_Intercomm_create.html)と['' MPI_Reduce''(https://www.open-mpi.org/doc/v1.8/man3/MPI_Reduce。 3.php)、特に「Communicatorがインターコミュニケータの場合」のセクション。 – francis
重要な点は、操作を適用するルートプロセスだけであることです。 Reduceでは、答えはルートプロセスにのみ格納されます。つまり、ルート以外のすべてのプロセスのglobal_sumの値は未定義です。 –