1、下载mpich2-1.4.1p1-win-x86-64.msi
链接Index of /static/downloads/1.4.1p1
2、以管理员身份安装。
这一步是是第一个坑。大多数帖子都提到了一定要以管理员身份安装,且win10中无法直接通过右键选择以管理员身份安装.msi文件。
大多数帖子给的方法是改注册表,参考链接是以管理员身份运行msi文件_shellpackage.msi-CSDN博客。但是!!!我试了很多遍我的电脑就是不行。
所以推荐命令行里以管理员身份运行msi文件。方法如下:
以管理员身份运行cmd
进入msi文件目录,输入命令msiexec /package 文件名,我的输入:msiexec /package mpich2-1.4.1p1-win-x86-64.msi
(参考 命令行里以管理员身份运行msi文件_msi文件以管理员运行-CSDN博客)
3、进入安装过程
(第二个坑)在process manager setup页面输入电脑登录密码,点击next。一定要输入电脑登陆密码不要用behappy这个默认短语,这一点很少有人提,但我就是改了这一点后终于成功了。
4、安装完成以后配置MPICH,首先找到wmpiregister,这里的account和password输入windows账户里具有超级管理员权限的账户名和密码,看到password encrypted into the Registry 则表明注册成功,如图
至此应该已经大功告成。接下来测试一下。
5、最后可以运行wmpiexec,可以选择MPICH2的examples文件夹下的exe文件,运行时选择run in an seperate window,然后点击excute执行,若能成功运行,则表明安装成功。
在弹出的窗口填上执行步数。
一、在VS2022中的配置:
1.首先新建一个C++控制台程序:
2.在属性中配置
3.配置选择所有配置,在左侧找到C/C++,编辑附加包含目录:
先点击图标新建,然后点击后面那三个点:
选择MPICH2安装所在文件夹中的include文件夹:
默认安装在C盘路径一般是C:\Program Files\MPICH2\include
4.在属性页面,在左侧找到“链接器”,编辑附加库目录:
先点击图标新建,然后点击后面那三个点:
选择MPICH2安装所在文件夹中的lib文件夹:
默认安装在C盘路径一般是C:\Program Files\MPICH2\lib
5.在属性页面,在左侧找到“链接器”,展开“链接器”,点击“输入”,在右侧第一项“附加依赖项”,前面加上“mpi.lib;”,末尾有分号。
最后点击应用,确定,配置完成。
二、命令行测试,演示Hello world:
1.运行控制台程序所生成的初始文件
2.在文件资源管理器中打开文件夹:
3.在Debug文件夹中找到.exe可执行文件,debug文件夹在x64里面
4.复制当前文件夹所在路径D:\code_test\test\x64\Debug
5.Win + R输入并打开cmd,先输入cd + MPICH2安装文件夹bin所在路径,MIPCH2 C盘安装bin默认路径为C:\Program Files\MPICH2\bin
输入cd C:\Program Files\MPICH2\bin
6.再输入“mpiexec -n 6 D:\code_test\test\x64\Debug\test”,前面复制过路径D:\code_test\test\x64\Debug,该命令行中的路径处可以用粘贴方式输入 。
“-n 6”是参数,是指6个进程,后面就是路径 + .exe文件名。
配置环境变量在cmd命令中就可以不用每次都cd+路径
此电脑+右键属性+高级系统设置+环境变量+系统变量+PATH+新建+C:\Program Files\MPICH2\bin
三.两个演示程序的实现
1.第一个演示程序代码:
#include <stdio.h>
#include <mpi.h>
int main(int argc, char * argv[])
{
int myrank, nprocs;
// 初始化MPI环境
MPI_Init(&argc, &argv);
// 获取当前进程在通信器MPI_COMM_WORLD中的进程号
MPI_Comm_size (MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
printf("Hellow, world! %dth of totalTaskNum = %d\n", myrank, nprocs);
MPI_Finalize();
return 0;
}
2.第二个演示程序代码:
#include <stdio.h>
#include "mpi.h"
#include <windows.h>
int main(int argc, char* argv[])
{
int myrank, nprocs, name_len, flag;
double start_time, end_time;
char host_name[20];
MPI_Initialized(&flag);
//fprintf(stderr, "flag:%d/n", flag);
MPI_Init(0, 0);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Get_processor_name(host_name, &name_len);
if (myrank == 0)
{
fprintf(stderr, "Precision of MPI_WTIME(): %f.\n", MPI_Wtick());
fprintf(stderr, "Host Name:%s\n", host_name);
}
start_time = MPI_Wtime();
Sleep(myrank * 3);
end_time = MPI_Wtime();
fprintf(stderr, "flag:%d/nmyrank: %d. I have slept %f seconds.\n", flag, myrank, end_time - start_time);
MPI_Finalize();
return 0;
}
将代码替换上面的控制台应用程序所生成的初始代码,若新建工程后VS2022需要重新配置,参照上面内容。
调用MPI演示程序:
第一个演示程序:
在cmd命令中输入
mpiexec -n 8 D:\code_test\test\x64\Debug\test
mpiexec -n 16 D:\code_test\test\x64\Debug\test
8个进程并行运行,16个进程并行运行,运行次序随机显示。
第二个演示程序:
在cmd命令中输入
mpiexec -n 16 D:\code_test\test\x64\Debug\test
16个进程并行运行,运行次序随机显示。