安装

Document

系统配置/含NFS

编译环境

设置

  1. 加载 mpivars.[c]sh 脚本。
  2. 创建文本文件 mpd.hosts ,其中保存有集群的节点列表,每行一个名字

    (只针对开发者) 确保环境变量 PATH 中包含有相应的编译器,比如 icc。

    (只针对开发者) 使用适当的编译驱动编译测试程序,比如 mpiicc。

    $ mpiicc -o test test.c
  3. 使用 mpirun 运行测试程序

    $ mpirun -r ssh -f mpd.hosts -n <# of processes> ./test

编译链接

  1. 保证在PATH环境变量中编译器设置正确。使用Intel编译器,确保LD_LIBRARY_PATH环境变量中含有编译库的路径。
  2. 通过相应的 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的步骤如下:

  1. 设置相应的环境变量和目录。比如,在 .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 脚本来设置。
    • 设置应用程序所需要的其它环境变量。
  2. 创建 $HOME/.mpd.conf 文件,设置 MPD 密码,需要在文件中写入一行:

    secretword=<mpd secret word>

    不要使用 Linux 登陆密码。 <mpd secret word> 可为任意字符串,它仅仅在不同的集群用户对 MPD 守护进程进行控制时有用。

  3. 使用 chmod 设置 $HOME/.mpd.conf 文件的权限

    $ chmod 600 $HOME/.mpd.conf

  4. 保证你在集群的所有节点上 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
  5. 创建文本文件 mpd.hosts , 其中列出了集群中所有的节点,每行一个主机名。比如:

$ cat > mpd.hosts

node1

node2

...
  1. 使用 mpdallexit 命令关闭上一次的 MPD 守护进程。

    $ mpdallexit
  2. 使用 mpdboot 命令启动 MPD 守护进程。

    $ mpdboot -n <#nodes>

    如果文件 $PWD/mpd.hosts 存在,则会被用作默认参数。如果没有主机名文件,启用 mpdboot 只会在本地机器上运行 MPD 守护进程。
  3. 使用 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 配置与基本使用的更多相关文章

  1. 【MPI环境配置】 vs2019配置MPI环境

    MPI 即 Message-Passing Interface,提供了一系列并行编程的接口,为了在本机能够学习和使用并行编程,需要提前安装MPI; 配置环境: Microsoft Visual Stu ...

  2. MPI编程简单介绍

    第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储 ...

  3. MPI编程简述

    第三章MPI计划 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植. 一般来讲,并行机不一定在各处理器之间共享存 ...

  4. MPI编程简介[转]

    原文地址http://blog.csdn.net/qinggebuyao/article/details/8059300 3.1 MPI简介 多线程是一种便捷的模型,其中每个线程都可以访问其它线程的存 ...

  5. MPI简谈

    MPI简谈 MPI是分布式内存系统,区别于OpenMP和Pthreads的共享内存系统.MPI是一种基于消息传递的并行编程技术,是如今最为广泛的并行程序开发方法. MPI前世今生 MPI(Messag ...

  6. Intel Edison的那些事:修改Edison的HTTP服务的页面

    Intel Edison配置好之后,按住PWR键2-7秒(4秒恰到好处),就可以进入AP热点模式(此时,Arduino扩展板上的灯不停闪烁),可以将笔记本接入Edison的热点,然后在浏览器中访问“h ...

  7. Intel Edision —— 从SSH无法连接到systemd

    前言 原创文章,转载引用务必注明链接.如有疏漏,欢迎斧正. 最近在试用Wyliodrin,安装过程中出现了两个问题,一是无法使用SSH登录到Edison:二是EDISON磁盘的问题.分别涉及到syst ...

  8. IMPI Python集群运行报错:

    Intel MPI环境利用hostfile多主机运行下报错 HYDU_process_mfile_token (../../utils/args/args.c:523): token slots no ...

  9. software collection

    software software Table of Contents 1. Privacy 2. GFW 2.1. google search 2.2. 修改 DNS 服务器 2.2.1. 修改ip ...

随机推荐

  1. django实现用户注册、登录、退出

    视图 from django.contrib import auth from django.contrib.auth.models import User from django.views.dec ...

  2. POJ 3126 Prime Path(BFS算法)

    思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...

  3. ffmpeg处理RTMP流媒体的命令和发送流媒体的命令(UDP,RTP,RTMP)

    将文件当做直播送至live ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName     re限制输出速率, ...

  4. 1103 Integer Factorization (30)(30 分)

    The K-P factorization of a positive integer N is to write N as the sum of the P-th power of K positi ...

  5. 根据sid或sqlID查询SQL

    根据sid查询已经执行过的sql select sql_text from v$sqlarea a,v$session b where a.SQL_ID=b.PREV_SQL_ID and b.SID ...

  6. CQOI2018做题记录

    T1.破解D-H协议 传送门 这个题就是BSGS的板子题-- 然后这里补充一点嘛,就是第二重循环的枚举范围.我们是在枚举\(a^{tm-y}\),把tm换成i,这个的最大值就是\(i - (m - 1 ...

  7. 一:ORM关系对象映射(Object Relational Mapping,简称ORM)

    狼来的日子里! 奋发博取 10)django-ORM(创建,字段类型,字段参数) 一:ORM关系对象映射(Object Relational Mapping,简称ORM) ORM分两种: DB fir ...

  8. 代码实现跟控制器跳转到storyBoard

  9. HDOJ1171(多重背包)

    #include<iostream> #include<cstdio> using namespace std; #define MAX(a,b) (a>b)?a:b + ...

  10. windows服务和进程的区别和联系

    Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出. 任何的用户消息通常都是记录在Windows 事件日志里.Windows Serv ...