win 10 在vs2017下对mpi的安装以及认识
这里我先对MPI进行一下简单的介绍,MPI的全称是Message Passing Interface,即消息传递接口。
它并不是一门语言,而是一个库,我们可以用Fortran、C、C++结合MPI提供的接口来将串行的程序进行并行化处理,也可以认为Fortran+MPI或者C+MPI是一种再原来串行语言的基础上扩展出来的并行语言。
它是一种标准而不是特定的实现,具体的可以有很多不同的实现,例如MPICH、OpenMPI等。
它是一种消息传递编程模型,顾名思义,它就是专门服务于进程间通信的。
MPI的工作方式很好理解,我们可以同时启动一组进程,在同一个通信域中不同的进程都有不同的编号,程序员可以利用MPI提供的接口来给不同编号的进程分配不同的任务和帮助进程相互交流最终完成同一个任务。就好比包工头给工人们编上了工号然后指定一个方案来给不同编号的工人分配任务并让工人相互沟通完成任务。
1.首先MPI是基于消息传递的并行计算模式,与之前的pthread,openMP等共享内存的完全两码事,这是首先要明白的。
2.MPI程序中,既有串行执行的程序,也有并行执行的程序。其中,并行的部分全部放在MPI_Init(&argc,&argv)和MPI_Finalize()内部。(其实外部的程序也都会在每一个进程中运行,此处不太理解内部具体是怎么搞的)
3.也是最让我开始纳闷的地方:MPI 的程序怎么在代码中控制开多少个进程啊?费了我半天劲,原来MPI有自己的编译和运行命令。
最简单的编译命令 mpicc mpi.c -o mpi
最简单的运行命令mpirun -np 4 ./mpi 其中-np就是指定开启的进程数
4.貌似MPI发挥作用是要在集群上运行的,但是单机下也可以运行,用上述命令即可。
还有很多不懂正在学习
---------------------
一、mpi的安装
去微软下载安装
直接下载地址(点击下载)
1 点击下面

2.直接点击下载

3、直接运行msi文件,按照安装提示安装
4、安装后会有3个文件夹

主要是头文件include与库文件lib
5、打开vs2017,创建一个空的.cpp文件

右击上面的那个,调出菜单,找到最下面的“”属性“”

打开是这样子的

3、导入头文件,库文件
(1)头文件



如果是64位选择x86文件夹,32位选x64
(2)库文件夹

导入方式和头文件的一样,不过应该注意的是选文件夹是一定要选x86或者是x64,否则可能会报找不到xxx.lib
(3)添加依赖项

点击小勾,这个地方选中这行是会出现小勾

复制几个xxx.lib的名字依次填进去中间用;隔开或者换行写

最后点击“”应用“”就行

二、mpi的简单运用运用
(1)常用的基本函数
int MPI_Init(int* argc ,char** argv[] );//初始化 int MPI_Comm_size(MPI_Comm comm ,int* size);//进程数 int MPI_Comm_rank(MPI_Comm comm ,int* rank);//当前进程号 int MPI_Send(void *message, int count, MPI_Datatype datatype, int rank, int tag, MPI_Comm comm);//发送信息 int MPI_Recv(void *message, int count, MPI_Datatype datatype, int rank, int tag, MPI_Comm comm, MPI_Status *status);//接受信息 int MPI_Finalize(void);//释放init的资源
(2)函数参数介绍
MPI_Comm comm 通信域,一组共享该空间的进程
int *size 进程数将会存在里面
int *rank 进程号将会存在里面,进程号为大于等于0的整数,其中主进程进程号(rank)为0
void *message 为被发送的信息
int count 你发送的消息的个数(注意:不是长度,例如你要发送一个int整数,这里就填写1,如要是发
送“hello”字符串,这里就填写6(C语言中字符串未有一个结束符,需要多一位))。
MPI_Datatype datatype 你要发送的数据类型,需要用MPI定义的数据类型
int dest 进程号
int tag 信息标签(当发送的信息标签和接受端的信息标签相等时在,接受端才接受)
MPI_Status *status 包含实际接收到的消息的有关信息
(3)简单实例
#include<stdio.h>
#include<string.h>
#include<mpi.h>
#pragma comment(lib,"msmpi.lib") int main(int argc, char* argv[])
{
int proceNum;//进程数量 int thisId;//当前进程id MPI_Status status;//状态信息 char message[];//发送信息内容 MPI_Init(&argc, &argv);//初始化mpi进程 MPI_Comm_rank(MPI_COMM_WORLD, &thisId);//获取当前进程号 if (thisId == )
{
MPI_Comm_size(MPI_COMM_WORLD, &proceNum);//获取进程数量 printf("当前共有%d个进程\n", proceNum);
} if (thisId != ) //当前进程不是主进程
{
printf ("我是进程%d,正在发送......", thisId); sprintf(message, "你好主进程!!");
// int MPI_Send(void *message, int count, MPI_Datatype datatype, int rank, int tag, MPI_Comm comm);发送信息到0进程(主进程)
MPI_Send(message, strlen(message)+, MPI_CHAR, , , MPI_COMM_WORLD); //MPI_COMM_WORLD:包含程序中所有MPI进程 }
else {//thisId != 0即不是主进程,那么这里就是主进程
for (int i = ; i < proceNum; i++)//其实这是阻塞式的发送和接受,所以可以靠循环来读取message所指缓冲区的信息
{
// int MPI_Recv(void *message, int count, MPI_Datatype datatype, int rank, int tag, MPI_Comm comm, MPI_Status *status);//接受信息
MPI_Recv(message, , MPI_CHAR, i, , MPI_COMM_WORLD, &status); printf("你好,进程%d\n", status.MPI_SOURCE); }
} MPI_Finalize(); return ;
}
然后运行,如果在这里出现如下错误
error C4996: 'sprintf': This function or variable may be unsafe.
解决如下:
原因解释
这种微软的警告,主要因为那些C库的函数,很多函数内部是不进行参数检测的(包括越界类的),微软担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数进行了参数的检测,使用这些新的函数会更安全和便捷。关于这些改写的函数你不用专门去记忆,因为编译器对于每个函数在给出警告时,都会告诉你相应的安全函数,查看警告信息就可以获知,在使用时也再查看一下MSDN详细了解。库函数改写例子:
mkdir改写为 _mkdir
fopen”改写为 fopen_s
stricmp改写为 stricmp_s
sprintf改写为sprintf_s
strcpy改写为strcpy_s
方法一:调用VS2005鼓吹的那些带“_s”后缀的非标准函数,即在其后加上"_S",如sprintf改为sprintf_s 。
方法二:在文件最开始添加#define _CRT_SECURE_NO_DEPRECATE或#pragma warning(disable:4996) ,这是忽略警告的方法(一般比较少用)。
方法三:干粹在工程属性中设置(推荐)。
在工程属性中设置的方法如下:
对于VC6:
打开Project----settings----Resources----Preprocessor definitions,
添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE这两个宏。
对于VS系列的版本:
打开项目----项目属性---配置属性----C/C++ ----预处理器----预处理定义,
添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE这两个宏。
成功运行之后:
然后右击左上角蓝色的mai.cpp打开所在文件夹

返回上一级

进入Debug文件夹

空白处shift+鼠标右键,打开菜单然后打开Powershell窗口,输入mpiexec -n 17 mpi.exe,17为进程数将会生成0-16的进程号。
结果如下:

win 10 在vs2017下对mpi的安装以及认识的更多相关文章
- 在 Win 7或8 下使用 VirtualBOX 虚拟机安装 OS X 10.11 El Capitan 及 Xcode 7.0
注:本文源自于: http://bbs.feng.com/read-htm-tid-9908410.html _____________________________________________ ...
- WIN 10下Mysql 5.7.21解压缩(免安装版)配置
网上看了N多大神的东西东抄抄西抄抄,老是就不对,因为很多资料不是针对5.7这个版本的内容. 首先解压文件,比如我解压到D:\Program Files\mysql-5.7.21-winx64 第一步: ...
- WIN 10环境下JDK的安装和环境配置
在做测试的过程中,诸如Selenium.Appium.Macaca.Airtest.RobotFramework.Jmeter等框架或工具都需要用到一样基础的环境JAVA JDK.最近刚好换了电脑,就 ...
- Win 10环境下6sV2.1模型编译心得
最新版本6sV2.1模型是通过FORTRAN95编写的,2017年11月代码编写完成,2018年11月发布在模型官网上.通常我们在使用过程中都是调用模型的.exe可执行文件,而下载下来的是FORTRA ...
- Win 10 下 android studio显示 Intel haxm无法安装,以及VT-X和hyper-x的冲突问题
我 的电脑是神舟战神k650c i7 D4,处理器是Intel core i7 4710-MQ,系统是win 10的 我心血来潮想学习一下安卓开发,就首先安装了android s ...
- Win 10下安装 Redis
目录 写在前面 一.安装环境 二.下载windows版本的Redis 三.安装Redis 四.安装服务 五.启动服务 六.测试Redis 七.常用的Redis服务. 写在前面 Redis 是一个开源使 ...
- 【Win 10 应用开发】导入.pfx证书
这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...
- 【Win 10应用开发】Adaptive磁贴模板的XML文档结构
在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...
- 【Win 10 应用开发】RTM版的UAP项目解剖
Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...
随机推荐
- 在c#中 RemoveAt、 Remove、delete用法区别
有三种方法可以删除 DataTable 中的 DataRow: Delete 方法和 Remove 方法和 RemoveAt 方法 其区别是: Delete 方法实际上不是从 DataTable 中删 ...
- Python相关
当Python源码编译以后,需要对一些依赖库重新安装,而且有些是要用pip去安装. python 文件.目录属性的操作os.path等os模块函数 https://blog.csdn.net/bytx ...
- 2018.5.24 lvm创建pool
在调试生产环境时遇到以下情况: 好奇心驱使下,发现是lvm的一个功能——lvm创建pool,就手动创建了相似的环境,操作截图如下: 主要命令: vgcreate -s 32M vg /dev/vdb1 ...
- auto-encoder小记
1.使用auto-encoder生成手写数字 2.中间code层使用二维向量,使用L2norm处理中间层数据 3.从[-1,1]的矩形框中等间隔选取100个坐标点 作为code值 最终生成图像 后期应 ...
- 为什么要用docker
一:更高效的利用系统资源 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高.无论是应用执行速度.内存损耗或者文件存储速度,都要比传统 ...
- 简单尝试利用维控LeviStudioU的一栈缓冲区溢出漏洞
这是别人给我发的,让我分析一下,看能否写出exp.只怪自己水平不够,最后没能写出exp,以下为自己的分析思路 环境为win10 pro x64 英文版(10.0.16299) 默认安全配置 一.漏洞分 ...
- javascript DOM document属性
DOM控制页面中的所有元素 每个载入浏览器的HTML文档都会成为Document对象,利用它可对HTML页面中的所有元素进行访问 常用属性: title:返回或设置当前文档的标题 常用方法 write ...
- himm的使用
1.设置管脚复用 himm 0x200F0100 1 himm 0x200F0104 1 2.设置GPIO_DIR himm 0x201C0400 0xff 3.设置GPIO_DATA himm 0x ...
- java-log4j日志打印
参考路径: https://blog.csdn.net/edward0830ly/article/details/8250412 https://www.cnblogs.com/ITtangtang/ ...
- tcpdump+wireshark抓包分析
上一篇文章中,我们介绍了tcpdump如何抓包. tcpdump是命令行下便捷的抓包和分析工具,但使用方式不够友好, wireshark是带图形化界面的抓包和分析工具,操作简便,但需要主机有显示器. ...