计算数组最大值
基本思路,初始化一个数组,未考虑进程数与处理的总数的整数倍关系,分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
{