首页 > 其他分享 >用mpi实现积分运算求π值

用mpi实现积分运算求π值

时间:2024-03-23 22:12:00浏览次数:14  
标签:numprocs 运算 int double MPI 积分 myid mpi

这篇文章例子来自于 https://zhuanlan.zhihu.com/p/399150417

思想参考于我之前这篇博客 https://www.cnblogs.com/algoshimo/p/18063325
中若线程不够用的情况

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

double f(double);
double f(double x)
{
        return (4.0/(1.0+x*x));
}

int main(int argc , char *argv[])
{
        int myid , numprocs;
        int n , i;
        double mypi , pi;
        double h , sum , x;

      //任何MPI程序都应该首先调用该函数。 保证程序中第一个调用的MPI函数是这个函数
        MPI_Init(&argc , &argv);
        
      //获取当前MPI通信域(通常是MPI_COMM_WORLD,表示所有可用进程)中的进程数量
      //并将结果存储在numprocs变量中
        MPI_Comm_size(MPI_COMM_WORLD , &numprocs); 

      //获取当前进程在MPI通信域中的标识号(即rank),并将结果存储在myid变量中
        MPI_Comm_rank(MPI_COMM_WORLD , &myid);
        printf("Process %d of %d\n", myid, numprocs);

        n = 100;h = 1.0/(double)n;
        sum = 0.0;

        for(i = myid+1;i<=n;i+=numprocs)
        {
                x = h*( (double)i - 0.5);
                sum+=f(x);
        }
        mypi = h*sum;

        //MPI的规约操作
        //将每个进程中的一个double类型的值mypi,按照求和的方式汇总到进程0中的变量pi中
        MPI_Reduce(&mypi , &pi , 1 , MPI_DOUBLE , MPI_SUM , 0 , MPI_COMM_WORLD);

        if(myid == 0) printf("result is %.10f.\n" , pi);

        MPI_Finalize();
}

标签:numprocs,运算,int,double,MPI,积分,myid,mpi
From: https://www.cnblogs.com/algoshimo/p/18091773

相关文章

  • vue3 动态编译组件失败:Component provided template option but runtime compilation
    根据vue3官方文档路由,写了如下一个简单的页面来模拟路由的实现。为了减少*.vue文件的个数,在这个但页面中,使用defineComponent通过object定义组件。<scriptsetup>import{ref,computed,defineComponent}from'vue'constHome=defineComponent({template:`......
  • 没有运算结果,直接执行完所有代码
    以下代码错误的地方在于,把用户输入的值保存在了”three“这个变量里面,所以会导致代码并没有报错,但是没有两数之和的结果,直接打印出”非正确数字“。应该把两数的结果放在”operation“这个结果里面。1importjava.util.Scanner;23publicclassfirstClass{4pub......
  • 0基础学习C语言第二章:运算符与表达式
    表达式:表达式是c语言的主体,在c语言中,表达式由操作符和操作数组成。简单的表达式可以只有一个操作数。根据操作符的个数,可以将表达式分为简单表达式和复杂表达式,简单的表达式只含有一个操作符(如:5+5),而复杂的表达式则含有两个或者两个以上的操作符(如5+5+6*4);表达式是本身什么事情也......
  • 在AI中无所不在的微积分
           微积分在人工智能(AI)领域扮演着至关重要的角色,以下是其主要作用:优化算法:         •梯度下降法:微积分中的导数被用来计算损失函数相对于模型参数的梯度,这是许多机器学习和深度学习优化算法的核心。梯度指出了函数值增加最快的方向,通过沿着负梯度方......
  • 高等数学基础篇(数二)之定积分常考题型
    定积分常考题型:一、定积分的概念、性质以及几何意义二、定积分的计算三、变上限积分目录一、定积分的概念、性质以及几何意义二、定积分的计算三、变上限积分一、定积分的概念、性质以及几何意义二、定积分的计算三、变上限积分......
  • 8.Golang中的运算符-算术运算符、关系运算符、逻辑运算符、赋值运算符
    Golang中的运算符1、Golang内置的运算符算术运算符关系运算符逻辑运算符位运算符赋值运算符2、算数运算符运算符描述+相加-相减*相乘/相除%求余=被除数-(被除数/除数)*除数注意:++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。pa......
  • 四则运算
    一.相关信息这个作业属于哪个课程[软件工程2024](首页-软件工程2024-广东工业大学-班级博客-博客园(cnblogs.com))这个作业的要求在哪里[作业要求的链接](结对项目-作业-软件工程2024-班级博客-博客园(cnblogs.com))这个作业的目标实现一个自动......
  • python运算符
    运算符:算数运算符:赋值运算符:比较运算符: 逻辑运算符:  ......
  • 系统内置位运算函数总结
     __builtin_ctz()/__buitlin_ctzll()用法:返回括号内数的二进制表示数末尾0的个数__buitlin_clz()/__buitlin_clzll()用法:返回括号内数的二进制表示数前导0的个数__builtin_popcount()用法:返回括号内数的二进制表示数1的个数__builtin_parity()判断括号中数......
  • 复试C++19真题_看程序写结果_前置++运算符重载 易错
    考察前置++运算符设置为友元函数,这题的坑在于,返回值是不是对象的引用,形参也不是对象的引用,导致自增离开了作用域以后就不在有任何效果。#include<iostream>usingnamespacestd;classC{private:intxx,yy;public:C(intx,inty):xx(x),yy(y){}friendC......