安装

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. Echarts一个页面加载多个图表及图表自适应

    Echarts一个页面加载多个图表及图表自适应 模块化加载 //入口 require.config({ paths: { echarts: 'http://echarts.baidu.com/buil ...

  2. Memcached 分布式缓存实现原理简介

    摘要 在高并发环境下,大量的读.写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生.无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数, ...

  3. 八 Django框架,模板语言

    模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到html用模板语言渲染 {{...}}接收一 ...

  4. Python中深拷贝与浅拷贝区别

    浅拷贝, list值是可变的,str值不可变,只能重新赋值 a=b=c='wjx'print(a,b,c)c= 'jmy'#重新赋值了,所以内存分配了新的地址print(a,b,c)print(id( ...

  5. MySQL--开发技巧(一)

    Inner Join: Left Outer Join: Right Outer Join: Full Join: Cross Join: SELECT t1.attrs ,t2.attrs FROM ...

  6. 关于MFC的DLL调用方法问题

    参考资料: 一.dll导出方式: MFC的DLL函数导出方法有两种:一种是通过模块定义文件DEF文件:另一种是在导出函数前加_declspec(dllexport). 1.def文件方法: 只需要在E ...

  7. C++中类型转换

    static_cast            静态类型转换. 在编译的时候C++编译器会做类型检查,基本类型能转换,指针类型不进行转换. C语言中隐式类型转换的地方均可以使用static_cast. ...

  8. Struts2 - 与 Servlet 耦合的访问方式访问web资源

    •       直接访问 Servlet API 将使 Action 与 Servlet 环境耦合在一起,  测试时需要有 Servlet 容器, 不便于对 Action 的单元测试. •       ...

  9. [原]NYOJ-6174问题-57

    大学生程序代写 /*6174问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b ...

  10. [原]NYOJ-公约数和公倍数 -40

    大学生程序代写 //http://acm.nyist.net/JudgeOnline/problem.php?pid=40 公约数和公倍数 时间限制:1000 ms  |  内存限制:65535 KB ...