MPI を使用してツリー サムを実装しようとしています。プロセスごとに新しいランク番号を作成しました。各反復で、奇数の new_rank を持つ各プロセスは、その値をより低い new_rank を持つプロセスに送信し、戻ります。
これはコードです:
void tree_sum(int rank,int size,int *value){
int new_rank = rank;
int remaining_processes = size/2 ;
MPI_Status status;
int local_value;
while(remaining_processes > 0){
if(is_odd_number(new_rank)){
// Todos os processos de new_rank impar enviam
MPI_Send(&value,1,MPI_INT,new_rank-1,0,MPI_COMM_WORLD);
return;
}else{
// Todos os processos de new_rank par recebem
MPI_Recv(&local_value,1,MPI_INT,new_rank+1,0,MPI_COMM_WORLD,&status);
*value += local_value;
new_rank = new_rank / 2;
remaining_processes--;
}
}
return;
}
最後の繰り返しで失敗しています。new_rank=1 のプロセスは、その値を new_rank=0 に送信しますが、受信されていません。プロセス 0 が MPI_Recv で停止します。
私が間違っているのは何ですか?