Intel MPI 配置与基本使用
安装
编译环境
设置
- 加载 mpivars.[c]sh 脚本。
- 创建文本文件 mpd.hosts ,其中保存有集群的节点列表,每行一个名字
(只针对开发者) 确保环境变量 PATH 中包含有相应的编译器,比如 icc。
(只针对开发者) 使用适当的编译驱动编译测试程序,比如 mpiicc。
$ mpiicc -o test test.c - 使用 mpirun 运行测试程序
$ mpirun -r ssh -f mpd.hosts -n <# of processes> ./test
编译链接
- 保证在
PATH环境变量中编译器设置正确。使用Intel编译器,确保LD_LIBRARY_PATH环境变量中含有编译库的路径。 - 通过相应的 mpi 命令编译 MPI 程序。比如调用 mpicc 使用 GNU C 编译器:
$ mpicc <path-to-test>/test.c
(所以支持的编译器都有对应的以 mpi 开头的命令,比如 Intel Fortran (ifort ) 对应的为mpiifort).
运行MPI程序
设置 MPD 守护进程
Intel MPI 库使用 Multi-Purpose Daemon (MPD) 任务调度机制。为运行使用 mpiicc 编译的程序,首先需要设置好 MPD 守护进程。
与系统管理员为系统中所有用户启动一次 MPD 守护进程不同,用户需要启动和维护自己的一组 MPD 守护进程。这种设置增强了系统安全性,并为控制可执行程序的环境提供了更强的灵活性。
设置MPD的步骤如下:
设置相应的环境变量和目录。比如,在
.zshrc或.bashrc文件中:- 保证 PATH 变量中包含有
<installdir>/bin或者 Intel 64 位架构对应的<installdir>/bin64目录,其中<installdir>指的是 MPI 的安装路径。可 使用 Intel MPI 库中带有的mpivars.[c]sh来设置此变量。 - 确保 PATH 中包含有的 Python 至少为 2.2 或以上版本。
- 如果使用 Intel 编译器,确保
LD_LIBRARY_PATH变量包含有编译器的库目录。可使用编译器中带有的{icc,ifort}*vars.[c]sh脚本来设置。 - 设置应用程序所需要的其它环境变量。
- 保证 PATH 变量中包含有
创建
$HOME/.mpd.conf文件,设置 MPD 密码,需要在文件中写入一行:
secretword=<mpd secret word>
不要使用 Linux 登陆密码。<mpd secret word>可为任意字符串,它仅仅在不同的集群用户对 MPD 守护进程进行控制时有用。使用 chmod 设置
$HOME/.mpd.conf文件的权限
$ chmod 600 $HOME/.mpd.conf保证你在集群的所有节点上 rsh 命令看到同样的
PATH和.mpd.conf内容。 比如在集群的所有节点上执行下面的命令:
$ rsh <node> env
$ rsh <node> cat $HOME/.mpd.conf
保证每个节点都能够与其它任意节点连接。可使用安装中提供的sshconnectivity脚本。该脚本使用提供所有节点列表的文件作为参数,每个节点一行:
$ sshconnectivity.exp machines.LINUX
集群使用的是 ssh 而不是 rsh:- 需要确保任一节点与其它节点连 接时都不需要密码。这需要参照系统管理手册。
- 在启动 mpdboot 时需要加上调 用参数
-r ssh或--rsh=ssh
创建文本文件
mpd.hosts, 其中列出了集群中所有的节点,每行一个主机名。比如:
$ cat > mpd.hosts
node1
node2
...
- 使用 mpdallexit 命令关闭上一次的 MPD 守护进程。
$ mpdallexit - 使用 mpdboot 命令启动 MPD 守护进程。
$ mpdboot -n <#nodes>
如果文件$PWD/mpd.hosts存在,则会被用作默认参数。如果没有主机名文件,启用mpdboot只会在本地机器上运行 MPD 守护进程。 - 使用
mpdtrace命令检查MPD守护进程的状态:
$ mpdtrace
其输出结果应该为当前进行 MPD 守护进程的节点列表。该列表应该与mpd.hosts文件中节点列表符合。
网络结构选择
Intel MPI 库会动态选择大部分适用的网络结构以便 MPI 进程之间进行通讯。设置环境变量 I_MPI_DEVICE为下表中的某个值:
| I_MPI_DEVICE 值 | 支持的结构 |
|---|---|
| sock | TCP/Ethernet/sockets |
| shm | Shared memory only (no sockets) |
| ssm | TCP + shared memory |
| rdma[:] | InfiniBand, Myrinet (via specified DAPL provider) |
| rdssm[:] | TCP + shared memory + DAPL |
要保证所选择的网络结构可用。比如,使用 shm 只有当所有进程可以通过共享内存进 行通讯时才行;使用 rdma 只有当所有进程可以通过单一的 DAPL 相互通讯时才行。
运行MPI程序
运行使用 Intel MPI 库连接的程序,使用 mpiexec 命令:
$ mpiexec -n <# of processes> ./myprog
使用 -n 参数设置进程数,这是 mpiexec 唯一需要明显指定的选项。
如果使用的网络结构与默认的不同,需要使用 -genv 选项来提供一个可以赋给 I_MPI_DEVICE 变量的值。
比如使用 shm 结构来运行 MPI 程序,可执行如下命令:
$ mpiexec -genv I_MPI_DEVICE shm -n <# of processes> ./myprog
比如使用 rdma 结构来运行 MPI 程序,可执行如下命令:
$ mpiexec -genv I_MPI_DEVICE rdma -n <# of processes> ./myprog
可以通过命令选择任何支持的设备。
如果应用程序运行成功,可将其移动到使用不同结构的集群中,不需要重新链接程序。
Intel MPI 配置与基本使用的更多相关文章
- 【MPI环境配置】 vs2019配置MPI环境
MPI 即 Message-Passing Interface,提供了一系列并行编程的接口,为了在本机能够学习和使用并行编程,需要提前安装MPI; 配置环境: Microsoft Visual Stu ...
- MPI编程简单介绍
第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储 ...
- MPI编程简述
第三章MPI计划 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植. 一般来讲,并行机不一定在各处理器之间共享存 ...
- MPI编程简介[转]
原文地址http://blog.csdn.net/qinggebuyao/article/details/8059300 3.1 MPI简介 多线程是一种便捷的模型,其中每个线程都可以访问其它线程的存 ...
- MPI简谈
MPI简谈 MPI是分布式内存系统,区别于OpenMP和Pthreads的共享内存系统.MPI是一种基于消息传递的并行编程技术,是如今最为广泛的并行程序开发方法. MPI前世今生 MPI(Messag ...
- Intel Edison的那些事:修改Edison的HTTP服务的页面
Intel Edison配置好之后,按住PWR键2-7秒(4秒恰到好处),就可以进入AP热点模式(此时,Arduino扩展板上的灯不停闪烁),可以将笔记本接入Edison的热点,然后在浏览器中访问“h ...
- Intel Edision —— 从SSH无法连接到systemd
前言 原创文章,转载引用务必注明链接.如有疏漏,欢迎斧正. 最近在试用Wyliodrin,安装过程中出现了两个问题,一是无法使用SSH登录到Edison:二是EDISON磁盘的问题.分别涉及到syst ...
- IMPI Python集群运行报错:
Intel MPI环境利用hostfile多主机运行下报错 HYDU_process_mfile_token (../../utils/args/args.c:523): token slots no ...
- software collection
software software Table of Contents 1. Privacy 2. GFW 2.1. google search 2.2. 修改 DNS 服务器 2.2.1. 修改ip ...
随机推荐
- 2015 ETSI NFV用例指南
译者简介:忍忍鱼,曾经从SDNLAB获取了很多知识,现在努力为SDNLAB贡献自己的力量.爱学习,求进步!SDNLAB,么么哒! ETSI NFV ISG已经确定了9个潜在的NFV用例.本章节简单介绍 ...
- NTFS文件系统的主要优点体现在以下三个方面
1.NFTS格式具有用户权限的控制管理功能 2.NTFS有更好的压缩率 3.NTFS具有日志功能,可以提高系统安全性
- java中properties
一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...
- linux下安装rpm格式的mysql
1.下载安装包官网下载.rpm格式安装包,需要下面两个文件: MySQL-server-5.0.26-0.i386.rpm MySQL-client-5.0.26-0.i386.rpm 注:官网下载时 ...
- adb命令(一)
针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中. And ...
- bzoj 3611: [Heoi2014]大工程 虚树
题目: 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道. 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上. 在 2 个国家 a,b 之间建一条新通道需要的代价为树上 ...
- 洛谷【P1303】A*B Problem
题目传送门:https://www.luogu.org/problemnew/show/P1303 高精度乘法板子题,灵性地回忆一下小学时期列竖式的草稿纸即可. 时间复杂度:\(O(len^2)\) ...
- [bzoj2142]礼物(扩展lucas定理+中国剩余定理)
题意:n件礼物,送给m个人,每人的礼物数确定,求方案数. 解题关键:由于模数不是质数,所以由唯一分解定理, $\bmod = p_1^{{k_1}}p_2^{{k_2}}......p_s^{{k_ ...
- 【转】Pro Android学习笔记(四六):Dialog(3):对话框弹对话框
目录(?)[-] 帮助提示框的实现 实现再弹框 再谈fragment管理器 提示框的按钮Help,将触发弹出新的帮助提示框. 帮助提示框的实现 帮助提示框的实现很简单,利用重写onCreateView ...
- netty支持的协议
流经网络的数据总是具有相同的类型:字节.这些字节是如何流动的主要取决于我们所说的 网络传输--一个帮助我们抽象底层数据传输机制的概念.用户并不关心这些细节:他们只想确保他们的字节被可靠地发送和接收. ...