MPI求数组的最大值

计算数组最大值在这里插入图片描述
基本思路,初始化一个数组,未考虑进程数与处理的总数的整数倍关系,分p进行,比如:5个p,每个p获取到20个数据中的4个数字,然后把此时的大小比较,获取其最大值,这是暂时的最大值,之后再发送send到进程0,进行比较,获取全局最大值后send到每个子进程,进而成功输出如下。
在这里插入图片描述
求得每部分的最大值在这里插入图片描述
为了避免send和 recv的调用顺序出错, 0进程都是以revc开始的
在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <string.h>
#include <math.h>
#include "mpi.h"
#define PI 3.141592654
int main(int argc, char**argv)
{

    int rank, size;

    int a[20]={5,25,9,29,38,6,44,0,1,33,45,1,23,4,5,6,7,8,99,66};

    MPI_Comm comm = MPI_COMM_WORLD;
    MPI_Status status;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(comm, &size);
    MPI_Comm_rank(comm, &rank);

    int n;
    n = 20 / size;


    if (rank == 0) //最后一块进程计算总和
    {
        int j;
        j = 0;
        int maxx = 0;
        for (j = rank*n; j < rank*n+n; j++)
        {
            if(a[j]>=max)
                maxx = a[j];
        }
        printf("   temmax from process %d is %d.\n", rank, maxx);
        int i;
        int tem;
        for(i = 1;i < size;i++)
        {
            MPI_Recv(&tem, 1, MPI_DOUBLE, i, 99, comm, &status);
            if(tem > maxx)
                maxx = tem;
        }
        for(i = 1;i < size;i++){
        MPI_Send(&maxx, 1, MPI_INT, i, 99, comm);
        }
        printf("max from process %d is %d.\n", rank, maxx);
    }



    else
    {

猜你喜欢

转载自blog.csdn.net/weixin_38023259/article/details/88636831