使用MPI,计算cos x 函数的积分值,积分区间为(0,2PI)
这里写图片描述
基本思路:

把积分区间,分为相等若干块(此处起多少个线程,分多少块),每个线程分得一块积分区域,每块在分若干小块(此处定义分10块)。每个线程计算每个小块的面积之和,返回给0号线程。
所得,即为cos(x )在积分域上的值。

代码实现:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
#include"mpi.h"
#define PI 3.1415
int main(int argc,char** argv)
{
int rank,p,i; //
double* sbuf; //
double rbuf[];
double add; // double h; //
int a; //
double sum ; //
double* ssum;
double asum ;
int n=;
//初始化
MPI_Init(&argc,&argv);
//从命令行获取开启的线程数
MPI_Comm_size(MPI_COMM_WORLD,&p);
//获取本线程的线程号
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
add= (*PI)/p;
if(rank==)
{
ssum=(double*)malloc(sizeof(double)*p);
sbuf=(double*)malloc(sizeof(double)*p); printf("Process's begin x is ");
for(i=;i<p;i++)
{
//计算各块起始x
sbuf[i]=add*(i);
printf(" %lf ",sbuf[i]);
}
printf("\n");
}
//向各个线程分发起始x值
MPI_Scatter(sbuf,,MPI_DOUBLE,rbuf,,MPI_DOUBLE,,MPI_COMM_WORLD); h=(add)/n;
for(i=;i<n;i++)
{
double x=rbuf[]+h*i+h/;
sum=sum+cos(x)*h;
}
printf("Process %d 's sum is %.2lf\n",rank,sum);
//收集各线程计算结果
MPI_Gather(&sum,,MPI_DOUBLE,ssum,,MPI_DOUBLE,,MPI_COMM_WORLD);
if(rank==)
{
for(i=;i<p;i++)
{ asum=asum+ssum[i];
}
printf("cos x 0~2PI de ji fen shi %.2lf\n",asum);
}
MPI_Finalize();
return ;
}

程序主要是通过计算出各个积分域块的起始x值,向各个线程分发,这样各个线程就可以负责一个单独的积分域。
代码很简单,很容易看懂。

结果:

---------------------
作者:热血小码哥
来源:CSDN
原文:https://blog.csdn.net/mmayanshuo/article/details/72853324
版权声明:本文为博主原创文章,转载请附上博文链接!

mpi的更多相关文章

  1. 查找素数Eratosthenes筛法的mpi程序

    思路: 只保留奇数 (1)由输入的整数n确定存储奇数(不包括1)的数组大小: n=(n%2==0)?(n/2-1):((n-1)/2);//n为存储奇数的数组大小,不包括基数1 (2)由数组大小n.进 ...

  2. kmeans算法并行化的mpi程序

    用c语言写了kmeans算法的串行程序,再用mpi来写并行版的,貌似参照着串行版来写并行版,效果不是很赏心悦目~ 并行化思路: 使用主从模式.由一个节点充当主节点负责数据的划分与分配,其他节点完成本地 ...

  3. MPI Maelstrom - POJ1502最短路

    Time Limit: 1000MS Memory Limit: 10000K Description BIT has recently taken delivery of their new sup ...

  4. MPI之求和

    // MPI1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "mpi.h" #include &l ...

  5. VS2012下配置MPI

    并行处理结课实验,要用到MPI编程,我的电脑和VS2012都是64位的,以为MPICH也得是64位才行,结果饶了很大的弯——配置正确,添加引用之后,仍然无法识别MPI函数. 后来换了个32位的MPIC ...

  6. MPI+WIN10并行试运行

    系统:2015 win10专业版 x64 MPI安装包:mpich2-1.4.1p1-win-x86-64.man 将后缀改为.msi 以管理员身份安装 安装过程一路默认,注意<behappy为 ...

  7. Parallel Computing–Cannon算法 (MPI 实现)

    原理不解释,直接上代码 代码中被注释的源程序可用于打印中间结果,检查运算是否正确. #include "mpi.h" #include <math.h> #includ ...

  8. 基于MPI的并行计算—矩阵向量乘

    以前没接触过MPI编程,对并行计算也没什么了解.朋友的期末课程作业让我帮忙写一写,哎,实现结果很一般啊.最终也没完整完成任务,惭愧惭愧. 问题大概是利用MPI完成矩阵和向量相乘.输入:Am×n,Bn× ...

  9. 大数据并行计算利器之MPI/OpenMP

    大数据集群计算利器之MPI/OpenMP ---以连通域标记算法并行化为例 1 背景 图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出 ...

  10. C++程序中调用MPI并行的批处理命令

    问题来源:在使用MPI时,将程序并行实现了,运行时需要在dos窗口下输入批处理命令,以完成程序的执行. 如:mpiexec -localroot -n 6 d:/mpi/pro.exe 但每次这样挺麻 ...

随机推荐

  1. JavaScript中面相对象OOP

    方法 方法的原型链 <html> <head> <title></title> </head> <script type=" ...

  2. 提升lua代码效率

    local test = {} , do test[ i ] = {} end local t1 = os.clock( ) , do test[ ].mValue = end local t2 = ...

  3. Django系列之web应用与http协议

    第一节:最简单的web应用程序 web应用程序指供浏览器访问的程序,通常也简称为web应用.应用程序有两种模式C/S,B/S.C/S是客户端/服务器程序.也就是说这类程序一般独立运行.而B/S就是浏览 ...

  4. 转载(TCPClient 建立连接和断开连接函数)

    public bool networkbuild()//建立端口连接 { if (client == null) { try { client = new TcpClient(networkip, n ...

  5. Java & C# BCD编码与十进制转换

    using System;using System.Collections.Generic;using System.Text; namespace Base{ public class BCDHel ...

  6. Django SCRF跨站点请求伪造

    使用Django发POSTt请求的时候经常会遇到Forbidden的错误,然后直接了当的方法就是去setting里面吧csrf中间件注释掉,其实csrf是django给我们提供的防护措施. CSRF就 ...

  7. [Solution] 885. Spiral Matrix Ⅲ

    Difficulty: Medium Problem On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) f ...

  8. ESP8266 软件实现 Delta-sigma(ΔΣ)调制器 并通过I2S接口输出编码流

    一.关于Delta-sigma(ΔΣ)调制器 Delta-sigma(ΔΣ)调制器是Delta-sigma转换器的核心部件.如下所示为一个简单的一阶Delta-sigma调制器,该调制器产生一个1bi ...

  9. selenium调用webdriver异常

    使用selenium调用webdriver的时候报错. from selenium import webdriver browser = webdriver.Chrome() browser.get( ...

  10. Python 解决命令行删除、退格乱码问题

    安装了python 在命令行界面无法进行删除.退格 1 安装readline模块 两种方式:yum install -y readline-devel  readline 或者 下载文件https:/ ...