MPI初学者陷入死循环,求指导
#include <mpi.h>
#include <stdio.h>
#define N 5000000
int main(int argc, char *argv[])
{
FILE* file;
file = fopen("Homo_sapiens.GRCh38.dna.chromosome.7.fa","r");
char ch;
char arr1[N],arr2[N];
int num=0,countC=0;
int numtasks,rank,buf;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Status stat;
if(rank==0)
{
while(ch!='\n')
{
ch =getc(file);
}
while(!feof(file))
{
int i,a;
for(i=1;i<numtasks;i++)
{
for(a=0;a<N;a++)
{
arr1[a]=fgetc(file);
}
MPI_Send(&arr1,N,MPI_CHAR,i,100,MPI_COMM_WORLD);
MPI_Recv(&buf,1,MPI_INT,i,99,MPI_COMM_WORLD,&stat);
num+=buf;
}
}
printf("num = d%\n",num);
}
else
{
MPI_Recv(&arr2,N,MPI_CHAR,0,100,MPI_COMM_WORLD,&stat);
int b;
for(b=0;b<N;b++)
{
if(arr2[b]=='C'){countC=countC+1;}
}
MPI_Send(&countC,1,MPI_INT,0,99,MPI_COMM_WORLD);
}
printf("I am %d of %d\n",rank,numtasks);
MPI_Finalize();
fclose(file);
}