蒙特卡洛方法

就是通过概率模拟来近似计算。
其实算法进度不是很高。

代码

在下面代码中的input文件中的内容是

10000000

运行效果:下面用四个核来做计算

PS D:\C++\VS\repo\MPI-DEMO\Debug> mpiexec -n 4 ./MPI-DEMO.exe
3.14111
#include<stdio.h>
#include<string.h>
#include<mpi.h>
#pragma warning(disable : 4996)
#define MAX_STRING 100
using namespace std;
#include <fstream>
#include <ctime>
#include <iostream>#define random() (rand() / double (RAND_MAX) * 2 - 1)int main(void) {int comm_sz;int my_rank;MPI_Init(NULL, NULL);MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);// 只有一个线程的时候不操作if (comm_sz <= 1) {MPI_Finalize();return 0;}long long int count_time; // 总的计算次数long long int Cal[2] = { 0 };if (my_rank == 0) {ifstream cin("D:\\C++\\VS\\repo\\MPI-DEMO\\MPI-DEMO\\input.txt");cin >> count_time;long long int tempCal[2] = { 0 };long long int width = count_time / (comm_sz - 1);long long int reminder = count_time % (comm_sz - 1);long long int temp_count_time;for (int i = 1; i < comm_sz; ++i){temp_count_time = width;if (i <= reminder) temp_count_time++;MPI_Send(&temp_count_time, 1, MPI_LONG_LONG_INT, i, 0, MPI_COMM_WORLD);}for (int i = 1; i < comm_sz; ++i){MPI_Recv(tempCal, 2, MPI_LONG_LONG_INT, i, 0, MPI_COMM_WORLD, MPI_STATUSES_IGNORE);for (int j = 0; j < 2; ++j) { Cal[j] += tempCal[j]; }}std::cout << 4.0 * Cal[0] / count_time << endl;} // 运算的子节点else {srand((unsigned)time(NULL));MPI_Recv(&count_time, 1, MPI_LONG_LONG_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUSES_IGNORE);Cal[1] = count_time;Cal[0] = 0;double x, y, dst;for (int i = 0; i < count_time; ++i) {x = random();y = random();dst = x * x + y * y;if (dst <= 1) Cal[0] += 1;}MPI_Send(Cal, 2, MPI_LONG_LONG_INT, 0, 0, MPI_COMM_WORLD);}MPI_Finalize();return 0;
}

【MPI高性能计算】蒙特卡洛方法计算pi值相关推荐

  1. python学习之 利用蒙特卡洛方法计算PI值

    使用环境为python IDLE3.5. #利用蒙特卡洛方法计算PI值 from random import random from math import sqrt from time import ...

  2. 从蒙特卡洛方法计算pi值谈random模块

    计算机模拟常常需要用到随机选择的数.本文从随机数的一个简单应用开始简要地介绍Python的random模块. 使用蒙特卡洛方法计算pi值 Links:该问题来自于pudure university(普 ...

  3. 程序实现蒙特卡洛算法计算PI值和积分

    蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是 ...

  4. 搭建MPI并行计算环境并计算pi值[windows 和 Ubuntu]

    文章目录 一. 选在Linux,Ubuntu或者Windows上搭建mpi环境 First of all What's more 二.VS配置mpi 三.计算pi值 (1)基础编译环境的构建 (2)M ...

  5. 蒙特卡洛 pi C语言,python R 实现蒙特卡洛算法计算pi值

    算法说明 下面是摘抄内容,说明的非常详细,如果不懂就不要往下看了: 蒙特卡洛算法是通过概率来计算pi的值的.对于一个单位为1的正方形,以其某一个顶点为圆心,边为半径在正方形内画扇形(一个1/4的圆形的 ...

  6. Matlab--蒙特卡洛方法求pi值

    Matlab--蒙特卡洛方法求pi值 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论 ...

  7. linux多线程计算pi,使用蒙特卡洛方法多线程计算pi值

    我正在尝试使用montecarlo方法和使用并行C代码来查找PI的值.我已经写了serail代码并且工作正常.但是,并行代码给我一些时间0或PI错误的值负值使用蒙特卡洛方法多线程计算pi值 我的代码 ...

  8. 蒙特卡洛方法的使用:计算pi值与积分计算

    参考: https://blog.csdn.net/Cuixinyang19_/article/details/79888981 # -*- coding: utf-8 -*- "" ...

  9. 怎样用python计算π的值_IV.python初探日记:python实现蒙特卡洛方法计算π值

    早上中级微观经济学课上复习泰勒展开和麦克劳林展开,顺带讲到了用蒙特卡洛方法实现计算π值,于是下午着手用python尝试着实现了一下,并用matplotlib输出了一部分数据. 完整的代码在文末,本文适 ...

最新文章

  1. python 基础学习 正则表达式1(规则)
  2. Caffe中的损失函数解析
  3. 话里话外:项目部如何不再形同虚设
  4. 推荐算法炼丹笔记:序列化推荐系统
  5. Spring EL方法调用实例
  6. GARFIELD@02-24-2005
  7. 指针常量与常量指针精解【一次掌握】
  8. 文件系统c语言程序,C语言程序设计(第8章 输入输出和文件系统)01
  9. 【转】关于微信开发者平台移动应用获取签名解决问题
  10. 外部PLC触发VisionMaster多流程运行PLC部分特殊说明
  11. [已解决]linux ubuntu unicode emoji字符显示问题
  12. 软件工程课程实践-可行性研究报告
  13. 计算机学院考勤管理办法,计算机学院软件学院考勤制度(试行).doc
  14. 光纤线上线缆标识信息解读
  15. Ground Rover with Mavros
  16. H5微信分享自定义标题和图片的实现及遇到的各种坑
  17. android x86 remix,Phoenix OS X86 与 Remix OS X86 对比体验
  18. 基于容器的后端服务架构
  19. php 包含字母随机数_php随机生成数字字母组合的方法
  20. 使用PHP破解防盗链图片的一个简单方法

热门文章

  1. gitlab新增ssh
  2. rsync与inotify实现数据实时同步
  3. “5W1H”带你来学习JavaScript
  4. android之Fragment(官网资料翻译)二
  5. asp.net远程调用WebService的两种方法
  6. 最新版AnyDbTest数据库单元测试工具的下载地址
  7. CVPR2016:Improving Person Re-identification via Pose-aware Multi-shot Matching
  8. CNN卷积层图像和矩阵转换函数
  9. 【Python-ML】感知器学习算法(perceptron)
  10. 人类无法抗拒的10种心理(转)