- 一. 选在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计算结果。
一. 选在Linux,Ubuntu或者Windows上搭建mpi环境以下是具体安装流程和实验结果分析,分析n值对pi精度的影响,并行进程的个数对计算速度的影响。
以下是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了
开始安装mpi了:https://www.microsoft.com/en-us/download/details.aspx?id=57467
运行下图两个文件
这样mpi就安装完成(上图仅是SDK,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#include #include #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 %lfn", pi*w); switch(N){ case 100: printf("n = 100, time is %lfn", t2-t1);break; case 1000: printf("n = 1000, time is %lfn", t2-t1);break; case 10000: printf("n = 10000, time is %lfn", 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] 搭建MPI并行计算环境并计算pi值[windows 和 Ubuntu]](http://www.mshxw.com/aiimages/31/612490.png)
