使用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
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. Myeclipse添加外部Tomcat出现启动故障的问题解决
  2. [Eclipse]解决: Eclipse Maven “Add Dependency”搜索无结果
  3. cannot use the same dataset for report.dataset and page.dataset
  4. ABBYY有哪些图像处理选项
  5. 使用VPN服务器解决公司不能上淘宝的问题
  6. 字符串转json
  7. Matlab求范数
  8. svn的merge使用例子
  9. android 设置字体颜色、EditText自己主动输入转换成大写字母的多种方式
  10. Linux查看文件夹大小du
  11. Oracle中 Instr 这个函数
  12. 框架学习笔记之Mybatis(一)
  13. 浅谈java中内置的观察者模式与动态代理的实现
  14. DEDE整站动态/静态转换
  15. JS for循环 if判断、white循环。小练习二
  16. Error:java: Compilation failed: internal java compiler error 解决办法
  17. 打造SharePoint之在线开发神器SPOnlineDevelopTool(一)——概述
  18. mpvue——引入antv-F2图表
  19. python 全栈开发,Day69(Django的视图层,Django的模板层)
  20. C++11之auto和decltype

热门文章

  1. docker镜像无法下载或者下载缓慢
  2. html注册栏网页练习代码
  3. linux下的dhcp服务器实现
  4. maven的pom.xml文件详解
  5. Spring 初学笔记
  6. SQL语句 拆分某些字段,一行变多行
  7. Vue项目碰到&quot;‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件&quot;报错
  8. # 2018-2019-20175302实验一《Java开发环境的熟悉》实验报告
  9. tensorflow实现二分类
  10. python学习中遇到的错误及解决办法