Я пытаюсь сделать простую сортировку, где каждый ненулевой процесс считывает файл (имя файла = proc #) в буфер. Нулевой процесс собирает все эти буферы, сортирует их и затем распечатывает. Однако в следующем коде proc 0 собирает буфер proc1, а не proc 2. Есть предложения?
Я запускаю его с помощью mpirun -np 3 a.out
мои входные файлы
Имя файла: «1»
40
10
100
Имя файла: "2"
90
20
25
и код:
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#define DEBUG 1
//#undef DEBUG
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main (int argc, char *argv[])
{
int values[3];
int recv[3];
int n, i=0, temp;
FILE *in1, *in2;
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
char filename[20];
if(rank!=0){
// read files with filename"<proc#>" into the buffer
sprintf(filename, "%d", rank);
in1=fopen(filename,"r");
while(fscanf(in1,"%d",&values[i]) != EOF){
printf("rank %d Read data %d\n", rank,values[i]);
i++;
}
}
// gather values from all procs.
MPI_Gather(values,i,MPI_INT,recv,i,MPI_INT,0,MPI_COMM_WORLD);
printf("Gather done!");
if(rank==0){
// sort
qsort (recv, 6, sizeof(int), compare);
// print results
for (n=0; n<6; n++)
printf ("%d ",recv[n]);
printf("\n");
}
if(rank!=0)
fclose(in1);
MPI_Finalize();
return 0;
}