我正在从名为number.txt的txt文件中将数字读取到数组num [64]中。进程0应该读取txt文件并向所有进程广播num []。然后,我必须使用reduce操作来计算所有部分和的总和,进程0应该最终打印出总和。我无法使用进程0打印最终值(在变量“总计”中)。我在末尾使用了if循环,但没有任何输出。局部和正确打印且正确。如何使用流程0打印总计?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mpi.h>
int main(int argc, char** argv){
int size, rank,i,j,count=0;
int sum=0,total=0;
int num[64];
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
if(rank==0)
{
//Read File:
FILE *fp;
fp = fopen("number.txt" , "r");
if(fp == NULL)
{
perror("Error opening file");
return(-1);
}
while (!feof (fp))
{
fscanf (fp, "%d", &i);
num[count]=i;
count+=1;
}
fclose (fp);
}
MPI_Bcast(num, 64, MPI_INT, 0, MPI_COMM_WORLD);
for(i=(rank*16);i<((rank*16)+16);i++)
{
sum+=num[i];
}
printf("sum_%d: %d\n",rank,sum);
MPI_Reduce(&sum,&total,4,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);
if(rank==0)
{
printf("final total: %d\n",total);
}
MPI_Finalize();
return 0;
}