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 但每次这样挺麻 ...
随机推荐
- 如何激活已经运行过的Activity, 而不是重新启动新的Activity
Intent i=new Intent(this,Activity1.class); i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); st ...
- 基于WebGL架构的3D可视化平台—实现小车行走路线演示
小车行走路线演示New VS Old 刚接触ThingJS的时候,写的一个小车开进小区的演示,今天又看了教程中有movePath这个方法就重新写了一遍,其中也遇到了一些问题,尤其突出的问题就是小车过弯 ...
- react 关闭eslint 配置
在 package.json 中修改为一下 "eslintConfig": { "extends": "react-app", " ...
- git 合并冲突 取消合并
如果有冲突,会出现MERING 使用git merge --abort命令解决冲突
- Froms 认证 二级域名共享session登录凭证
1. 需要共享的web.config 里需要加添 <authentication mode="Forms"> <forms name="/> &l ...
- Spark2.0学习(三)--------核心API
Spark核心API----------------- [SparkContext] 连接到spark集群,入口点. [HadoopRDD] 读取hadoop上的数据, [MapPartitionsR ...
- stark组件开发之组合搜索高级显示和扩展
上一篇,我只是做了. 默认的显示. def __iter__(self): '''默认显示. 用户可以自定制''' if isinstance(self.queryset_or_tuple, list ...
- 生成二维码、条形码、带logo的二维码
Nuget安装ZXing.Net,帮助类: using System; using System.Collections.Generic; using System.Drawing; using Sy ...
- 7K - find your present (2)
In the new year party, everybody will get a "special present".Now it's your turn to get yo ...
- JS学习记录------JS基本指令
对未来的恐慌,和想成为一名自由开发的梦想.让我觉得应该点亮一个新的技能:WEB前端开发. 重新学习JS以及jQuery,让我在日常code的过程中可以更得心应手,毕竟,我爱代码. 这篇文章主要记录的内 ...