求PI值

数值积分的常见算法

  • 矩形法
  • 梯形法
  • 抛物线法

几何意义:

以矩形法为例进行并行编程

1.串行程序

#include<stdio.h>
#define MAX_N 10000
int main()
{double pi = 0.0;int i;double x,step = 1.0 / MAX_N;for (i = 0; i < MAX_N; i++){x = (i + 0.5)*step;//中点法pi += 4.0 / (x*x + 1.0);}pi = step*pi;printf("pi=%lf\n", pi);
}

2.使用并行域并行化程序

#define MAX_N 1000
#define THREAD_NUMS 4
int main()
{int i, tid;double step = 1.0 / (double)MAX_N;double sum[THREAD_NUMS];double pi = 0.0;omp_set_num_threads(THREAD_NUMS);
#pragma omp parallel private(tid){double x;tid = omp_get_thread_num();for (i = tid,sum[tid]=0.0; i < MAX_N; i += THREAD_NUMS){x = (i + 0.5)*step;sum[tid] += 4.0 / (x*x + 1.0);}printf("tid=%d,sum[%d]=%lf\n", tid, tid, sum[tid]*step);}for (i = 0; i < THREAD_NUMS; i++)pi += sum[i];pi *= step;printf("pi=%lf\n", pi);
}

3.使用共享任务结构并行化的程序

#include<stdio.h>
#include "omp.h"
#define MAX_N 1000
#define NUM_THREADS 4
int main()
{int i;double step = 1.0 / (double)MAX_N;double sum[NUM_THREADS] = { 0.0 };double pi = 0.0;omp_set_num_threads(NUM_THREADS);
#pragma omp parallel{int id;double x;id = omp_get_thread_num();sum[id] = 0.0;
#pragma omp forfor (i = 0; i < MAX_N; i++){           x = (i + 0.5)*step;sum[id] += 4.0 / (1.0 + x * x);}        }for (i = 0; i < NUM_THREADS; i++){pi += sum[i] * step;}printf("pi=%lf\n", pi);return 0;
}

4.使用private子句和critical部分并行化的程序

#include <omp.h>
#include<stdio.h>
#define NUM_THREADS 4
#define MAX_N 1000int main() {int i;double x, sum, step,pi = 0.0;step = 1.0 / (double)MAX_N;omp_set_num_threads(NUM_THREADS);
#pragma omp parallel private (x, sum){  int id = omp_get_thread_num();for (i = id, sum = 0.0; i < MAX_N; i = i + NUM_THREADS) {x = (i + 0.5)*step;sum += 4.0 / (1.0 + x * x);}
#pragma omp criticalpi += sum*step;}printf("pi=%lf\n", pi);return 0;
}

5.使用并行归约的并行程序

#include<stdio.h>
#include <omp.h>
#define MAX_N 1000
#define NUM_THREADS 4
int main()
{int i;double x, pi, step,sum = 0.0;step = 1.0 / (double)MAX_N;omp_set_num_threads(NUM_THREADS);
#pragma omp parallel for reduction(+:sum) private(x) for (i = 1; i <= MAX_N; i++) {x = (i - 0.5)*step;sum = sum + 4.0 / (1.0 + x * x);}pi = step * sum;printf("pi=%lf\n", pi);return 0;
}

OpenMP求PI的四种方式相关推荐

  1. 【Java并发编程】并发模拟的四种方式

    文章目录 并发模拟的四种方式 一.Postman 二.Apache Bench(AB) 三.并发模拟工具JMeter 四.代码模拟 并发模拟的四种方式 一.Postman Postman是一个款htt ...

  2. 6.1_6 Python3.x入门 P7 【字符串格式化】四种方式(手动、%-formatting、str.format()、f-String)

    相关链接 目录 Mac M1 Python环境搭建 Python3.x入门 P1 [基础]基础语法.注释.标识符.变量.数据类型.键盘录入input Python3.x入门 P2 [基础]运算符 Py ...

  3. android四种点击事件,android点击事件的四种方式

    android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...

  4. java配置文件实现方式_java相关:详解Spring加载Properties配置文件的四种方式

    java相关:详解Spring加载Properties配置文件的四种方式 发布于 2020-4-29| 复制链接 摘记: 一.通过 context:property-placeholder 标签实现配 ...

  5. Java遍历Map对象的四种方式

    关于java中遍历map具体哪四种方式,请看下文详解吧. 方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. 1 2 3 4 Map<Integer, Intege ...

  6. 详解vue 路由跳转四种方式 (带参数)

    本文介绍了vue 路由跳转四种方式 (带参数),本文通过实例代码给大家介绍的详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1. router-link 1. 不带参数 <router-li ...

  7. 解决存储过程中数据安全问题的四种方式

    随着科技的不断发展,数据量也正在呈指数倍的增加.在这样一个大背景下,存储产品成为了时下市场中最热的产品.而数据的安全性也变得尤为重要.后端存储已经逐渐成为企业业务系统的核心和关键. 一般而言,我们有四 ...

  8. android java 多线程,Android多线程的四种方式

    当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread.通常一个应用的所有组件都运行在 ...

  9. pdf转换为html5,PDF转换为HTML5的四种方式

    原标题:PDF转换为HTML5的四种方式 这里有四种方法能让你把一个PDF文件转换为HTML5格式,但选择哪一种方式就取决于你的优先事项.IDR解决方案已经花费超过四年的时间来处理这个问题了.我们发现 ...

最新文章

  1. ARM 之九 Cortex-M/R 内核启动过程 / 程序启动流程(基于ARMCC、Keil)
  2. wp java_Java WordPress工具库wp-client
  3. 创维oled工厂模式abd_创维OLED游戏电视创维专业电竞显示器 为SN战队保驾护航
  4. php随机获取一行文本,一行PHP随机字符串生成器?
  5. MySQL_日期时间处理函数及应用
  6. Python监听键盘和鼠标事件,并发送内容至邮箱!
  7. 解决gradle项目每次编译都下载gradle-x.x-all.zip gradle-x.x-bin.zip
  8. repo/git提交代码
  9. 5个冷门的MacOS快捷键,小众但好用
  10. 与程序员相关的CPU缓存知识
  11. android 文件上传参数,Android OkHttp Post上传文件并且携带参数实例详解
  12. java 报表系统源码_常用的6款Java开源报表制作工具
  13. asp.net pdf如何转换成tif_PDF如何转换成PPT文档?怎么使用PDF转换成PPT的软件?
  14. 计算机如何设置桌面文件筐,360安全桌面怎么设置文件筐 自定义分框其实非常简单...
  15. 两轮电动车高端VS中低端,雅迪、爱玛谁更靠近市场?
  16. 如何设置快速启动栏 win7 快速启动栏 快速启动栏不见了.
  17. <Java>设计一个名为Fan的类
  18. 聊天类 APP 功能测试总结
  19. 【行业科普】一篇文读懂四大、咨询、投行、PE
  20. Android10.0修改默认usb为MTP模式

热门文章

  1. 伦敦银实时走势图决胜关键
  2. 相机标定 calib3d 学习笔记
  3. oracle 数据库中 connect by 和level 的用法
  4. Qt Quick 3D介绍:Qt Quick的高级3D API
  5. redis的集成在springbooot版本之间差异(主要分为1.4版本之前后之后)
  6. 计算机网络三大总线,计算机总线分为哪三种?
  7. network中的weight initialization
  8. 游戏本天梯_上分必读!大数据解读天梯前一百玩家阵容!
  9. 长沙距离中国的“凤凰城”还有多远?
  10. oracle中的列在此处不,为什么列在此处不允许?