#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
.