文章目录

  • 一. 选在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/

abaqus配置python环境 abaqus mpi环境配置_编译环境


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

abaqus配置python环境 abaqus mpi环境配置_多线程_02


abaqus配置python环境 abaqus mpi环境配置_abaqus配置python环境_03


然后等待安装好即可

中间有错误的话可以参考官方纠错文档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了

abaqus配置python环境 abaqus mpi环境配置_并行计算_04

What’s more

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

abaqus配置python环境 abaqus mpi环境配置_c++_05


abaqus配置python环境 abaqus mpi环境配置_多线程_06


运行下图两个文件

abaqus配置python环境 abaqus mpi环境配置_并行计算_07


abaqus配置python环境 abaqus mpi环境配置_c++_08


这样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

abaqus配置python环境 abaqus mpi环境配置_编译环境_09

(2)MPICH安装

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

sudo apt-get install -y mpich

观察mpicc版本信息

mpicc -v

abaqus配置python环境 abaqus mpi环境配置_多线程_10

(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

abaqus配置python环境 abaqus mpi环境配置_并行计算_11


改为N2=1000再运行

abaqus配置python环境 abaqus mpi环境配置_多线程_12


abaqus配置python环境 abaqus mpi环境配置_abaqus配置python环境_13


N3=10000

abaqus配置python环境 abaqus mpi环境配置_abaqus配置python环境_14