文章目录

  • 一. 选在Linux,Ubuntu或者Windows上搭建mpi环境
    • First of all
    • What’s more
  • 二、VS配置mpi
  • 三、计算pi值
    • (1)基础编译环境的构建
    • (2)MPICH安装
    • (3)第一个mpi程序:pi值计算

搭建MPI并行计算环境,利用计算pi 的公式,计算pi 值,多线程数量n分别使用 100、1000、10000计算结果。

以下是具体安装流程和实验结果分析,分析n值对pi精度的影响,并行进程的个数对计算速度的影响。

一. 选在Linux,Ubuntu或者Windows上搭建mpi环境

以下是windows环境搭建,Ubuntu方式在第三点

First of all

安装visual studio
官网下载 地址:https://visualstudio.microsoft.com/zh-hans/vs/


下完后,双击exe文件。选择必要的工具


然后等待安装好即可

中间有错误的话可以参考官方纠错文档https://docs.microsoft.com/zh-cn/troubleshoot/visualstudio/general/visual-studio-2022-unsupported-operating-systems

PS:linux或者不使用VS的人可以到https://www.open-mpi.org/software/ompi/v4.1/下载对应的mpich版本,就不用VS了

What’s more

开始安装mpi了:https://www.microsoft.com/en-us/download/details.aspx?id=57467


运行下图两个文件


这样mpi就安装完成(上图仅是SDK,mpi图一样就没放)

二、VS配置mpi

参考http://t.zoukankan.com/CheeseIce-p-10626345.html

三、计算pi值

官网的VS C++ HelloWord 计算器应用https://docs.microsoft.com/zh-cn/cpp/get-started/tutorial-console-cpp?view=msvc-160
PS:可以先看看这个再去计算PI值哦、

以下采用Ubuntu方法

(1)基础编译环境的构建

为了正常编译MPI代码,需要安装C, C++与Fortran的编译环境。

Ubuntu缺省情况下,并没有提供这些语言的编译环境,因此需要手动安装。如果单独安装这些编译环境非常麻烦。幸运的是,build-essential工具提供了许多与编译相关的软件包,包括gcc/g++/gfortran等编译器、libc6-dev等必要的库与其他工具。于是,我们只需要通过包管理器安装build-essential即可。

apt-get命令的 -y 选项默认安装过程中同意所有的默认选择。

sudo apt-get install -y build-essential

下载与安装完成后,可键入下面的命令观察gcc版本信息。

gcc -v

(2)MPICH安装

软件包中包含了mpich,可以直接通过apt-get下载安装。

sudo apt-get install -y mpich

观察mpicc版本信息

mpicc -v

(3)第一个mpi程序:pi值计算

切换到用户家目录

cd ~

利用vim新建一份代码文件

vim mpi.c

vim进入后默认为控制模式。需要按字母i进入编辑模式,写入MPI程序代码。

#include<mpi.h>
#include<stdio.h>
#include<math.h>
#pragma comment(lib,"mpi.lib")#define N1 100
#define N2 1000
#define N3 10000 //n分别使用**100、1000、10000**计算结果void PI(int N){double local = 0, pi, w, temp;int i, rank, size,k;w = 1.0 / N;MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &size);MPI_Status status;double t1, t2;t1 = MPI_Wtime();for (i = rank; i < N; i = i + size){     temp = (i + 0.5)*w;local = 4.0 / (1.0 + temp*temp) + local;}   if ((rank!=0))MPI_Send(&local, 1, MPI_DOUBLE, 0, rank, MPI_COMM_WORLD);if (rank == 0)for (i = 1; i < size;i++){MPI_Recv(&temp, 1, MPI_DOUBLE,i, i, MPI_COMM_WORLD, &status);local += temp;}if (rank == 0)pi = local;t2 = MPI_Wtime();//t = t2 - t1;if (rank == 0){printf("pi is %lf\n", pi*w);switch(N){case 100: printf("n = 100, time is %lf\n", t2-t1);break;case 1000: printf("n = 1000, time is %lf\n", t2-t1);break;case 10000: printf("n = 10000, time is %lf\n", t2-t1);break;}    }MPI_Finalize();
}int main(int argc, char **argv)
{int i;MPI_Init(&argc, &argv);PI(N1);return 0;
}

按esc键进入控制模式,输入:wq保存并退出文件。

利用 mpicc 命令编译MPI代码文件。mpicc 是编译并链接用C编写的MPI程序的命令。

mpicc pi.c -o pi.o

利用 mpirun 命令运行程序。其中 -np 选项指定处理器数目。mpirun 是MPI程序的启动脚本,它可以简化作业的启动程序,并且尽可能把不同特征屏蔽掉,提供给用户一个通用的MPI并行机的概念。

mpirun -np 8 ./pi.o


改为N2=1000再运行


N3=10000

搭建MPI并行计算环境并计算pi值[windows 和 Ubuntu]相关推荐

  1. Ubuntu下搭建MPI并行计算环境

    Ubuntu下搭建MPI并行计算环境 [日期:2012-10-10] 来源:Linux社区 作者:hs794502825 [字体:大 中 小] 在这里面可以选择一个合适的openmpi安装包,此处我选 ...

  2. 基于CUDA的GPU计算PI值

    访问[WRITE-BUG数字空间]_[内附完整源码和文档] 基于CUDA的GPU计算PI值.本项目使用CUDA编程模型并行计算PI值,研究GPU与CPU效率的比较,分析不同GPU线程分块对性能的影响. ...

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

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

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

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

  5. 用hadoop计算PI值

    一.计算PI值的方式与原理 百度一下,计算PI的方法还真不少.但在hadoop examples代码中的注释写的是:是采用 Quasi-Monte Carlo 算法来估算PI的值. 维基百科中对Qua ...

  6. matlab 蒙特卡罗计算pi值

    蒙特卡罗法计算pi值是比较基础的入门应用之一,网上流传的大部分代码包括百度百科上的代码都是使用for循环完成迭代的,运算速度非常慢,这里我们提供一个向量化运算的方式,以加快运算速度.接触编程久了后,会 ...

  7. 如何用hadoop自带的包计算pi值

    一.计算pi的值的原理 通过hadoop计算pi值确实是一件很酷的事情,我想你可能会有疑问,(Hadoop不是一个分布式计算的处理数据的吗?)当然,计算它能处理大量数据,我们可以通过这种方式来计算pi ...

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

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

  9. 多台工作站搭建MPI并行环境

    因为所作研究工作计算量真是太大了,一台z840的48核工作站还是感觉有点慢,所以就想着自己搭建一个小的集群环境,正好办公室里面有台人家不用z800,所以就拿过来试了一下. 折腾了两天,终于在两台hp ...

最新文章

  1. 拥抱Node.js 8.0,N-API入门极简例子
  2. 固态器件理论(9)晶闸管
  3. MyBatis-09MyBatis注解方式之@Update/@Delete
  4. oracle Fusion Applications 的架构
  5. 肝了这200页!火爆全网的Python学习知识手册!(附下载)
  6. 自己虚拟服务器都用json可以吗,vue+webpack项目中使用dev-server搭建虚拟服务器,请求json文件数据,实现前后台分离开发...
  7. Spark源码分析之SparkContext
  8. 【Express】 —利用 Express 托管静态文件
  9. JS---Math.Random()*10--[0,10)随机变颜色
  10. 正确的python变量名_Python变量的命名
  11. java common-lang_commons-lang.jar下载
  12. 知识图谱构建技术综述与实践
  13. python查找excel中重复数据_python中查找excel某一列的重复数据 剔除之后打印
  14. 为Jumpserver 配置企业微信
  15. VOT目标跟踪测试中的测试效果展示
  16. 使用Matlab求解矩阵方程的解
  17. spss分析 sus量表高低分组
  18. 【Unity3D应用案例系列】答题系统开发
  19. 中国天气通android版,中国天气通(全国天气实时查询)
  20. seqminopt matlab,smo算法matlab实现

热门文章

  1. 【深度学习技巧】数据扩充--常规手法
  2. STM32驱动新西达电调和无刷电机
  3. 2021美赛E题题译+思路+参考资料
  4. mysql-获取当前系统时间
  5. Taro3.2 适配 React Native 之运行时架构详解
  6. 使用UC浏览器安卓版访问大多数网站遇到400 bad request错误
  7. SDK和API的区别
  8. Polar SCL的C语言实现
  9. intellij idea搜索功能快捷键汇总
  10. MAX7219产品级驱动分享