我的并行计算之路(三)MPI集合通信之Scatter和Gather

集合通信对比点对点通信来说,确实要方便许多,基本上不需要考虑各个进程该怎么发送,该怎么接收的问题,只要是使用一个通信子,函数接口自己就完成了。从进程的角度考虑,集合通信在分配任务量的时候更加平均,使各个进程的工作量更加相同,减少让一个进程死干活,其他进程在旁边看的情况。下面还是先上完整代码:

#include<bits/stdc++.h>
#include<mpi.h>
using namespace std;

const int maxn=10;

//计算x,y两个数组对应位的和,存入第三个数组z
bool Parallel_vector_sum(
				double local_x[],	//加数组
				double local_y[],	//被加数组
				double local_z[],	//存储和的数组
				int local_n			//加的个数
				)
{
   
  for(int local_i=0;local_i<local_n;local_i++){
   
  	local_z[local_i] = local_x[local_i]+local_y[local_i];
  }
  return true;
}

//从键盘读取数组
bool Read_vector(
			double local_a[],	//存储数据的数组,OUT
			int local_n,		//每个进程需要分配的数量
			int n,				//读取的总个数
			string vec_name,	//数组的名字
			int my_rank,		//进程号
			MPI_Comm comm		//通信子
			)
{
   
  double* a = NULL;

  if(my_rank==0){
   
	//输入数组
    a = new double[n];
    cout<<"Enter the vector "<<vec_name<<
  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值