Как я могу использовать MPI_Reduce с MPI_MIN?

#c #parallel-processing #mpi

Вопрос:

Это мой первый раз, когда я программирую в mpi с использованием c, и у меня есть этот код

 #include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

int main(int argc, char *argv[]){
    int procesos, my_rank;
    MPI_Init(amp;argc, amp;argv);
    MPI_Status status
    MPI_Comm_size(MPI_COMM_WORLD, amp;procesos);
    MPI_Comm_rank(MPI_COMM_WORLD, amp;my_rank);
    int pos=6;
    int ran=20;
    int v[pos];
    int minimo;
    int avtotal;
    for (int i=0; i<6; i  ){
        v[i]=rand()%(ran 1);
    }
    
    if (my_rank==0){
        printf("soy el proceso %d de %d, tengo el vector [%d,%d,%d,%d,%d]n", my_rank,procesos, v[0],v[1],v[2],v[3],v[4]);
        for(int i=0; i<6; i  ){
            MPI_Send(amp;v[i],1, MPI_INT,1,0, MPI_COMM_WORLD);
        }
        for(int i=0; i<6; i  ){
            MPI_Send(amp;v[i],1, MPI_INT,2,0, MPI_COMM_WORLD);
        }
        for(int i=0; i<6; i  ){
            MPI_Send(amp;v[i],1, MPI_INT,3,0, MPI_COMM_WORLD);
        }
    }else if(my_rank ==1){
    for(int i=0; i<5; i  ){
        MPI_Recv(amp;v[i], 1,MPI_INT,0,0, MPI_COMM_WORLD, amp;status);
    }
    //sum
    printf("soy el proceso %d, el total fue = [%d] porque sume los 5 elementosn", my_rank, v[0] v[1] v[2] v[3] v[4]);//la suma se muestra en [%d]
    }else if(my_rank==2){
    for(int i=0; i<5; i  ){
        MPI_Recv(amp;v[i], 2,MPI_INT,0,0, MPI_COMM_WORLD, amp;status);//recepcion del mensaje
    }
    //prod
    printf("soy el proceso %d, el total fue = [%d] porque multiplique los 5n", my_rank, (v[0])*(v[1])*(v[2])*(v[3])*(v[4]));
    }else if(my_rank==3){
    for(int i=0; i<5; i  ){
        MPI_Recv(amp;v[i], 3,MPI_INT,0,0, MPI_COMM_WORLD, amp;status);//recepcion del mensaje
        MPI_Reduce(amp;avtotal, amp;minimo,1,MPI_INT,MPI_MIN,0,MPI_COMM_WORLD);
        
    }
    //min
    printf("soy el proceso %d, el total fue = [%d] porque es el menor de los 5n",my_rank,minimo);
    }
    
MPI_Finalize();
return 0;
}
 

и я не знаю, почему он продолжает печатать неправильный результат, мне нужна помощь: c код из mpi с помощью c Я пытался создать массив, чтобы иметь возможность использовать все значения, но это тоже не работает для меня

Комментарии:

1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы точно указать, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.

2. вы отправляете 6 элементы одновременно из ранга 0 , но получаете 5 время от одного до 3 за раз.. тогда MPI_Reduce() , будучи коллективом, к нему должны призываться все ранги … но вы называете это только по рангу 3 .