我試圖實現使用MPI的樹總和。 我爲每個進程創建了一個新的等級號。在每次迭代中,每個具有奇數new_rank的進程都將其值發送到new_rank較低的進程並返回。使用MPI實現樹總和
這是代碼:
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中。
我做錯了什麼?
is_odd_number(0)評估爲真或假? –
@CristianoSousa是的。如果new_rank爲奇數則返回1,否則返回0。 is_odd_number(0)返回0. is_odd_number(13)返回1. –