就是计算每一段的大小,然后分开求就可以了。然后那个数组的话,我用的是输入的方法获取一个数组
#include "mpi.h"
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(int argc,char **argv){
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Status status;
int size,rank;
MPI_Init(&argc,&argv);
MPI_Comm_size(comm,&size);
MPI_Comm_rank(comm,&rank);
int count[100];
if(rank == 0){
int n;
printf("input a array\n");
scanf("%d",&n);
for(int i = 0;i < n;i++){
scanf("%d",&count[i]);
}
for(int i = 1;i < size;i++){
MPI_Send(&n,1,MPI_INT,i,99,comm);
MPI_Send(count,n+5,MPI_INT,i,98,comm);
}
int max_num = 0;
for(int i = 0;i < (n/size);i++) {
if(count[i] > max_num)
max_num = count[i];
}
for(int i = 1;i < size;i++) {
int tmp_num = 0;
MPI_Recv(&tmp_num,1,MPI_INT,i,97,comm,&status);
if(tmp_num > max_num){
max_num = tmp_num;
}
}
printf("thi max_num is %d\n",max_num);
}
else{
int tmp[100];
int n;
MPI_Recv(&n,1,MPI_INT,0,99,comm,&status);
MPI_Recv(tmp,n+5,MPI_INT,0,98,comm,&status);
int start = (n / size + 1)*rank;
int end = (n / size + 1)*(rank+1) ;
if(rank == n - 1) end = n;
int max_num = 0;
for(int i = start;i < end;i++) {
if(tmp[i] > max_num) {
max_num = tmp[i];
}
}
MPI_Send(&max_num,1,MPI_INT,0,97,comm);
}
MPI_Finalize();
return 0;
}