【MPI编程实现梯形积分法】

MPI编程实现梯形积分法

    • 1.1问题描述
    • 1.2算法实现
    • 1.3结果实现与分析
    • 1.4源码实现

1.1问题描述

实现课件中的梯形积分法的MPI编程熟悉并掌握MPI编程方法,规模自行设定,可探讨不同规模对不同实现方式的影响。实验环境:联想笔记本,集成开发环境:Visual Studio

1.2算法实现

每个进程都分配执行Trap函数后,0号进程接收其他进程发送来的数据做求和运算。
在这里插入图片描述
执行函数Trap()
在这里插入图片描述

1.3结果实现与分析

使用MPI派发任务,进程执行速度快,结果准确,数据越大也不大影响程序的运行速度,相比pthread多线程和openmp执行效率更高。pthread编程需要定义全局变量,MPI则不需要共享变量,不用考虑数据共享大问题,使用send和recv处理数据,更具高效性。

在这里插入图片描述
在这里插入图片描述

1.4源码实现

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

using namespace std;

double f(double x) { 
    double temp = 0.0;  
    temp = sqrt(x);  
    return temp; 
} 


double  Trap(double left_endpt, double right_endpt, int trap_count, double base_len)
{
    double estimate, x;
    int i;

    estimate = (f(left_endpt) + f(right_endpt)) / 2.0;
    for (i = 1; i <= trap_count - 1; i++) {
        x = left_endpt + i * base_len;
        estimate += f(x);
    }
    estimate = estimate * base_len;

    return estimate;
}


int main(int argc, char* argv[]) {
    
    MPI_Init(&argc, &argv);
    int my_rank, comm_sz, n=20, local_n;
    double a = 1.0, b = 1000.0, h, local_a, local_b;
    double local_int, total_int;
    int source;
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
    MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);

    h = (b - a) / n;
    local_n = n / comm_sz;

    local_a = a + double(my_rank * local_n * h);
    local_b = local_a + local_n * h;
    local_int = Trap(local_a, local_b, local_n, h);

        if (my_rank != 0) {
            MPI_Send(&local_int, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
        }
        else {
            total_int = local_int;
            for (source = 1; source < comm_sz; source++) {
                MPI_Recv(&local_int, 1, MPI_DOUBLE, source, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
                total_int += local_int;
            }
        }

    if (my_rank == 0) {
        printf("n = %d \n", n);
        printf("from %f to %f = %.15e\n", a, b, total_int);
    }

    MPI_Finalize();
    return 0;
   
}

我是一只努力飞的菜鸟,大家一起加油吧。
如有错误,请指出,大家一起进步哦!
2020/06/30

热门文章

暂无图片
编程学习 ·

通过连接Mysql实现的简单的登录注册功能

注册,登录 以下为具体代码: public class JDBCUtils {private static String url;private static String user;private static String password;private static String driver;//读取文件,只需读取一次即可拿到这些值,使用静态代码块static {try {//创建Properties集合类Pr…
暂无图片
编程学习 ·

达梦数据守护集群(dmwatch)启停方式

注: 在$DM_HOME/bin目录下执行相关脚本。 停止集群:关闭确认监视器:./DmMonitorServiceDMMONITOR stop 关闭备库守护进程:./DmWatcherServiceDM2 stop 关闭主库守护进程:./DmWatcherServiceDM1 stop 关闭备库数据库服务:./DmServiceDM2 stop 关闭主库数据库服务:./D…
暂无图片
编程学习 ·

springboot+idea+bootstrap的带有图片的表格编辑操作

前面已经写了 批量导入,图片显示,现在写的是批量修改,后面会写用echarts+springboot 做折线图,有时间贴上 1、jsp代码如下,编辑按钮formatter: function (value, row, index) {var edit = <input class="btn btn-primary" type="button" value=&qu…
暂无图片
编程学习 ·

获取电脑ip地址的代码工具类

获取ip地址的工具类 import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springfram…
暂无图片
中恒嘉业 ·

关于主从复制的超详细解析(全)

目录前言1. 主从复制1.1 方式2. Mysql的主从复制2.1 一主一从2.1.1 window和linux通讯2.1.2 linux和linux的通讯2.2 双主双从3. Redis的主从复制3.1 哨兵模式3.2 java代码结合前言 主要介绍mysql的主从复制以及redis的主从复制 能由浅入深的明白原理以及如何操作 再者&#xf…
暂无图片
郑州普通话 ·

Windows下安装及配置VS Code (C/C++)

Windows下安装及配置VS Code By YC 安装VS Code 登录VS Code官方网站&#xff1a;https://code.visualstudio.com/download下载所需要的VS Code 注意Windows版本分为user和system两类。User版会将VSC安装在Windows的用户个人目录下&#xff08;也可以手动更改&#xff09;。S…
暂无图片
郑州普通话 ·

C++——深拷贝与浅拷贝

好久之前学的了&#xff0c;在CLion上试一下&#xff0c;发现为什么用的浅拷贝还是可以正常运行&#xff0c;于是转到了CB&#xff0c;发现还是可以正常运行&#xff0c;最后用了VS2022&#xff0c;就不行。 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #incl…
暂无图片
代理记账 ·

在web应用中发送和接收Jakarta消息

Running the websimplemessage Example To Package and Deploy websimplemessage Using Maven _1、Make sure that GlassFish Server has been started (see Starting and Stopping GlassFish Server). _2、In a terminal window, go to: tut-install/examples/jms/websimp…
暂无图片
cgfy ·

C++学习日记2——函数、封装、对象特性

一、函数 1.1 函数默认参数 1.1.1 简介 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的 1.1.2 语法 返回值类型 函数名 (参数 默认值) {} 1.1.3 代码 #include <iostream> using namespace std;// 函数的默认参数 int func(int a, int b 20, int c 30…
暂无图片
coreui ·

视频水印怎么去除?超简单 千万不要错过

小编在知乎看到很多大佬分享的视频去水印的方法&#xff0c;但是感觉都有点太复杂了&#xff0c;今天就来分享一下小编自己私藏的几个针对于视频去水印的软件和网站~建议大家收藏哦~ 1、爱给网-视频去水印小工具&#xff08;免费 在线&#xff09; 推荐点 1、在线操作&#…
暂无图片
coreui ·

Mac 安装 tomcat10

Mac 安装 tomcat10 1、下载tomcat tomcat官网&#xff1a;https://tomcat.apache.org/ 点击我下载的tomcat10&#xff1a; 2、下载解压,给bin下的*.sh文件添加可执行权限 3、修改webapps下的ROOT中的index文件查看效果
暂无图片
未来博客 ·

视频水印怎么去除?超简单 千万不要错过

小编在知乎看到很多大佬分享的视频去水印的方法&#xff0c;但是感觉都有点太复杂了&#xff0c;今天就来分享一下小编自己私藏的几个针对于视频去水印的软件和网站~建议大家收藏哦~ 1、爱给网-视频去水印小工具&#xff08;免费 在线&#xff09; 推荐点 1、在线操作&#…
暂无图片
未来博客 ·

Mac 安装 tomcat10

Mac 安装 tomcat10 1、下载tomcat tomcat官网&#xff1a;https://tomcat.apache.org/ 点击我下载的tomcat10&#xff1a; 2、下载解压,给bin下的*.sh文件添加可执行权限 3、修改webapps下的ROOT中的index文件查看效果
暂无图片
建站日记 ·

惠州实验室建设选址、勘察事项

惠州实验室建设选址、勘察事项&#xff0c;SICOLAB技术员带您从实验室建设启动前思考问题考虑如下&#xff1a;一、不同实验室建设选址要求 1.化学实验室 &#xff08;1&#xff09;清洁安静环境 &#xff08;2&#xff09;远离住宅、生活区 &#xff08;3&#xff09;锅炉房与…
暂无图片
建站日记 ·

NLP聊天机器人原理(seq2seq模型)

一、seq2seq模型 1.概念 seq2seq是一个Encoder-Decoder结构的网络&#xff0c;它的输入是一个序列&#xff0c;输出也是一个序列。Encoder中将一个可变长度的信号序列变为固定长度的向量表达&#xff0c;Decoder将这个固定长度的向量变成可变长度的目标的信号序列。这个结构最…
暂无图片
mfbz ·

惠州实验室建设选址、勘察事项

惠州实验室建设选址、勘察事项&#xff0c;SICOLAB技术员带您从实验室建设启动前思考问题考虑如下&#xff1a;一、不同实验室建设选址要求 1.化学实验室 &#xff08;1&#xff09;清洁安静环境 &#xff08;2&#xff09;远离住宅、生活区 &#xff08;3&#xff09;锅炉房与…
暂无图片
mfbz ·

全渠道会员通-天猫会员通3: 会员运营内容准备

在天猫会员通技术对接开发过程中&#xff0c;为了通知存量会员的通知工作&#xff0c;发挥会员通的优势&#xff0c;品牌需要做好以下事宜&#xff1a; 会员体系暂停公告&#xff1a;因会员通技术升级期间&#xff0c;会员服务将被暂停&#xff0c;店铺tab中会员入口将被下线&…
暂无图片
珊珊日记 ·

C# 执行Javascript脚本

c#教程https://www.xin3721.com/eschool/CSharpxin3721/ 前一阵子使用C#编写SCXML状态机&#xff0c;需要解析EMCScript表达式&#xff0c;使用了Jint库&#xff08;https://github.com/sebastienros/jint/)&#xff0c;当时感觉与C#之间的数据转换不是很方便。这两天有时间又关…
暂无图片
珊珊日记 ·

第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛

A.大学期末现状 题目描述 作为一名大学生的你&#xff0c;现在又到了期末查成绩的时候&#xff0c;当你的成绩大于等于60时请输出“jige,haoye!”,否则输出"laoshi,caicai,laolao"。 输入描述: 一行&#xff0c;一个整数x代表你的成绩&#xff08;0<x<100&a…