博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并行计算程序-梯形积分法
阅读量:3943 次
发布时间:2019-05-24

本文共 1707 字,大约阅读时间需要 5 分钟。

并行计算的分析过程

1、将问题分解为多个子问题

2、为每个进程分配求解任务
3、将求解的结果汇总计算
并行程序设计与分治法的分析过程类似,如果想了解分治法的设计思路
并行程序相比较与串行程序的优点是:它很好地利用的cpu的资源,使得多个处理器同时解决一个问题。
这里我们计算 f(x) = x^2 + 2*x + 1;函数在 [0,3] 上的面积
代码中MPI的安装使用可以在网上找一些资料进行了解。

MPI 与普通的c程序在编译与执行命令上有写不同

mpicc -o test test.c 编译命令

mpirun -np 4 ./test 执行命令(用四个进程并行执行该程序)

#include 
#include "mpi.h"#include
//二次函数double Fun(double x){
return x*x+2*x+1; }//单个进程之间的面积求解//n 表示累加的次数,m 表示相邻元素间的跨度double Area(int n,double m,double start){
double title_d = 0; int i = 0; for(; i < n; i++) {
double tmp = Fun(start); double area = m*tmp; title_d += area; start += m; } //printf("进程号:%d = >%f\n",getpid(),title_d); return title_d;}int main(){
//rank 表示当前的进程号 //size 表示进程的总数 int rank,size; //求解的区间[0,3] double a = 0.0,b = 3.0; //将区间分成1024份 int num = 1024; //初始化 MPI_Init(NULL,NULL); //获取当前的进程号 从0开始 不是pid MPI_Comm_rank(MPI_COMM_WORLD,&rank); //获取进程的个数 MPI_Comm_size(MPI_COMM_WORLD,&size); //分成的1024份,计算出每份的宽度 double m = (b-a)/num; //计算每个进程需要计算的次数 int n = num/size; // double start = a + rank*m*n; double title_int = Area(n,m,start); if(rank != 0) {
//MPI_Send() 用于进程间通信的函数, //在这里将计算的结果发送给0号进程 //0号进程用于统计所有的结果 MPI_Send(&title_int,1,MPI_DOUBLE,0,0,MPI_COMM_WORLD); } else {
double title = 0.0; int i = 0; for(i = 1; i < size; i++) {
//0号进程统计所有的计算结果 title += title_int; MPI_Recv(&title_int,1,MPI_DOUBLE,i,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE); } title += title_int; printf("面积:%f\n",title); } //结束释放资源 MPI_Finalize(); return 0; }

转载地址:http://atnwi.baihongyu.com/

你可能感兴趣的文章
mysql操作技巧随笔--链表删除数据
查看>>
MySql在建立索引优化时需要…
查看>>
Mysql建表和索引使用规范
查看>>
mysql&nbsp;队列&nbsp;实现并发读
查看>>
MYSQL千万级数据量的优化方法积累
查看>>
经典分享MySQL的limit查询优化
查看>>
各大浏览器兼容性报告
查看>>
统计每个ip的访问量--linux--acces…
查看>>
常见hash算法的原理
查看>>
localForage——轻松实现&nbsp;Web&amp;n…
查看>>
yaf使用小记
查看>>
document.domain&nbsp;跨域问题
查看>>
window安装PHP的redis扩展
查看>>
给网站选择一个好的jquery库远程调…
查看>>
flash&nbsp;as&nbsp;与js通信(转)
查看>>
Linux系统手动安装rzsz&nbsp;软件包
查看>>
PHP的事务处理机制
查看>>
JS&nbsp;moveStart和moveEnd方法
查看>>
thrift的lua实现
查看>>
编写高性能的Lua代码
查看>>