MPI 并行计算 分段求数组的最大值。

就是计算每一段的大小,然后分开求就可以了。然后那个数组的话,我用的是输入的方法获取一个数组

#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;
		
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值