mpi点对点通信求函数积分

mpi简介

MPI是Message Passing Interface的缩写,MPI是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。

MPI 点对点通信实验

求函数的积分

函数原型

我们知道求一个函数的积分可以转换为求函数与坐标轴之间的面积。如下图:
在这里插入图片描述
我们计算积分的思想就是将整个a到b这一段分成p个区域,将这p个区域交给p个计算机计算每个区域的面积,而对于每一个计算机所要计算的区域,又可以分成n个大小为h的区域,每一台计算机只需要计算这n个区域面积的累加和,最后汇总到一个节点即可。
在这里插入图片描述
代码如下

#include<stdio.h>
#include"mpi.h"
#include<math.h>

int main (int argc, char **argv){
    MPI_Comm comm= MPI_COMM_WORLD;
    MPI_Status status;
    int size,rank;
    double a,b,h,sum,tmp;
    const double pi=acos(-1.0);
    int n,j;

    MPI_Init(&argc,&argv);

    MPI_Comm_size(comm,&size);
    MPI_Comm_rank(comm,&rank);

    if(rank == 0){
        printf("Input n\n");
        scanf("%d",&n);

        printf("Input a&b\n");
        scanf("%lf%lf",&a,&b);
        for(j = 1;j<size;j++)
        {
            MPI_Send(&n,1,MPI_INT,j,99,comm);
            MPI_Send(&a,1,MPI_DOUBLE,j,99,comm);
            MPI_Send(&b,1,MPI_DOUBLE,j,99,comm);
        }

    }
    else{
        MPI_Recv(&n,1,MPI_INT,0,99,comm,&status);
        MPI_Recv(&a,1,MPI_DOUBLE,0,99,comm,&status);
        MPI_Recv(&b,1,MPI_DOUBLE,0,99,comm,&status);
    }
    a = a * pi;
    b = b * pi;
    h = (b-a)/size/n;
    sum = 0;
    for(j = 0;j < n;j++){
        tmp = (a + (rank*n + j)*h) + h/2;
        sum += cos(tmp)*h;
    }
    printf("%lf\n",sum);

    if(rank == 0){
        for(j = 1;j < size;j++){
            MPI_Recv(&tmp,1,MPI_DOUBLE,j,99,comm,&status);
            sum += tmp;
        }
    }
    else{
        MPI_Send(&sum,1,MPI_DOUBLE,0,99,comm);
    }

    if(rank == 0)
    {
        printf("Result of MPI: %lf\n",sum);
        printf("Answer: %lf\n",sin(b)-sin(a));
    }
    MPI_Finalize();
    return 0;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值