2016-09-17 11 views
1

MPI_reduceを使用している場合、ルートプロセッサーは指定されたMPI操作を自身に適用しますか?ルートプロセッサはMPI_Reduceもそれ自身に適用しますか?

たとえば、ルートを含むすべてのプロセッサで次のコードが実行されているとします。local_sumglobal_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); 
+2

はい、もちろんです。 – Gilles

+0

リダクションでプロセス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

+0

重要な点は、操作を適用するルートプロセスだけであることです。 Reduceでは、答えはルートプロセスにのみ格納されます。つまり、ルート以外のすべてのプロセスのglobal_sumの値は未定義です。 –

答えて

0

はい、reduceはルート自体にも適用されます。たぶんあなたの考えでは、MPIはルート内の変数local_sumに他のランクの数字を追加するだけだと思います。

しかし、MPIが実際に行うことは、コミュニケータのすべてのランク(ルートを含む)から減らし、結果をglobal_sumにすることです。

MPIがルート自体を縮小しない場合は、MPI_Reduce呼び出しの2つのパラメータを持つことは意味がありません。

関連する問題