mpi
使用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的更多相关文章
- 查找素数Eratosthenes筛法的mpi程序
思路: 只保留奇数 (1)由输入的整数n确定存储奇数(不包括1)的数组大小: n=(n%2==0)?(n/2-1):((n-1)/2);//n为存储奇数的数组大小,不包括基数1 (2)由数组大小n.进 ...
- kmeans算法并行化的mpi程序
用c语言写了kmeans算法的串行程序,再用mpi来写并行版的,貌似参照着串行版来写并行版,效果不是很赏心悦目~ 并行化思路: 使用主从模式.由一个节点充当主节点负责数据的划分与分配,其他节点完成本地 ...
- MPI Maelstrom - POJ1502最短路
Time Limit: 1000MS Memory Limit: 10000K Description BIT has recently taken delivery of their new sup ...
- MPI之求和
// MPI1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "mpi.h" #include &l ...
- VS2012下配置MPI
并行处理结课实验,要用到MPI编程,我的电脑和VS2012都是64位的,以为MPICH也得是64位才行,结果饶了很大的弯——配置正确,添加引用之后,仍然无法识别MPI函数. 后来换了个32位的MPIC ...
- MPI+WIN10并行试运行
系统:2015 win10专业版 x64 MPI安装包:mpich2-1.4.1p1-win-x86-64.man 将后缀改为.msi 以管理员身份安装 安装过程一路默认,注意<behappy为 ...
- Parallel Computing–Cannon算法 (MPI 实现)
原理不解释,直接上代码 代码中被注释的源程序可用于打印中间结果,检查运算是否正确. #include "mpi.h" #include <math.h> #includ ...
- 基于MPI的并行计算—矩阵向量乘
以前没接触过MPI编程,对并行计算也没什么了解.朋友的期末课程作业让我帮忙写一写,哎,实现结果很一般啊.最终也没完整完成任务,惭愧惭愧. 问题大概是利用MPI完成矩阵和向量相乘.输入:Am×n,Bn× ...
- 大数据并行计算利器之MPI/OpenMP
大数据集群计算利器之MPI/OpenMP ---以连通域标记算法并行化为例 1 背景 图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出 ...
- C++程序中调用MPI并行的批处理命令
问题来源:在使用MPI时,将程序并行实现了,运行时需要在dos窗口下输入批处理命令,以完成程序的执行. 如:mpiexec -localroot -n 6 d:/mpi/pro.exe 但每次这样挺麻 ...
随机推荐
- Django启动报错笔记
NO.1: You have 15 unapplied migration(s). Your project may not work properly until you apply the mig ...
- 每日笔记-redis的理解及相关应用
原文链接:常见面试题 本文大纲与之类似,在其基础上加入了自己在实际项目中对部分知识点的理解 Q1:谈谈对redis的理解 Q2:谈谈实际应用中怎么用redis的 2.1 缓存 2.2 分布式锁 2.3 ...
- JS工具类
封装了开发中常用的操作 并添加了一些扩展方法供调用 var util = { //获取Url中的参数(不支持中文) getParams: function() { var url = location ...
- docker学习-lnmp+redis之搭建lnp容器服务
nginx+php7.0容器服务 本来想用单独的容器(nginx和php分开),但是因为是初学,php容器安装扩展的时候一直失败,所以就把centos+nginx+php放一起搭建了,优点是扩展简单, ...
- ceph mimc版本ceph-deploy安装与配置
系统环境centos7.6 内核5.0.9 YUM源配置 [root@k8s-sys-10-82-4-200 ceph-cluster]# cat /etc/yum.repos.d/ceph.repo ...
- QT Designer基础——登录界面设计基础版
认识QT Designer提供的可选控件:以下八个大类 Layouts:布局相关 Spacers:留空 Buttons:可点击的按钮类 Item Views和 Item Widgets:高级控件,例如 ...
- 微信小程序日历面板插件
创建日历面板组件,在components目录下创建calendar文件夹 1.calendar.js // components/calendar/calendar.js var util = req ...
- python将文本写入剪切板
import pyperclip pyperclip.copy('The text to be copied to the clipboard.') spam = pyperclip.paste() ...
- project5 大数据
[概念] build和run不是一样的,要看输出,不要误解. [方法论] 先要搞懂每个方法的使用,不能乱写.文件名不要写成字符串内容. 又忘记用lab code了,该死. programcreek是个 ...
- linux下查看动态链接库so文件的依赖的相关组建
我们很多c程序在windows下是以dll形式展现的,在linux则是以so 形式展现的. windows一般不会因为编译dll文件的编译器版本不同而出先dll文件不能执行. 但是linux下,不同版 ...