在MPI中使用MPI_BCAST和MPI_Reduce求和

时间:2020-10-08 04:39:35

标签: mpi

我正在从名为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;
}




0 个答案:

没有答案
相关问题