热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ubuntu上进行mpi环境搭建-通往hpc的第一步

好不容易实验室来了两台性能还可以的服务器,正好师兄师姐比较忙没空来配置服务器,所以我可以暂时使用服务器来学一下怎么配置集群,哈哈,单机已经满足不了我了。首先,我们那比较简单的mpich进行开

好不容易实验室来了两台性能还可以的服务器,正好师兄师姐比较忙没空来配置服务器,所以我可以暂时使用服务器来学一下怎么配置集群,哈哈,单机已经满足不了我了。
首先,我们那比较简单的mpich进行开刀,配置一个简单的mpich集群。
先介绍一下MPI:
MPI 全称Message Passing Interface 消息传递接口,是一种编辑接口标准,而不是一种具体的编辑语言。该标准是由消息传递论坛(MEssage Passing Interface Form,简称MPIF)发起讨论并进行规范化的。
MPI标准从1992年开始起草,1994年发布第一个版本MPI-1(MPI v1.0,进而发展出1.1和1.2版),到1997年发布第二个版本MPI-2(MPI v2.0)。MPI标准如今已经成为事实意义上的消息传递并行编程标准,也是最为流行的并行编程接口。
由于MPI提供了统一的接口,该标准受到各种并行平台上的广泛支持,这也使得MPI程序具有良好的可移植性。目前,MPI支持多种编程语言,包括Fortran77,Fortran90以及C/C++,目前看到的是python,java也支持了mpi;尽管MPI属于OSI参考模型的第五层或者更高,他的实现可能通过传输层的sockets和Transmission Control Protocol (TCP)覆盖大部分的层;MPI还支持多核(Multicore)、对称多处理机(SMP)、集群(Cluster)等各种硬件平台。
我们这边使用的是MPICH,是由阿公国家实验室和芝加哥大开发的,是一个开源软件开源在http://www.mpich.org/上下载到。
首先从http://www.mpich.org/downloads上下载mpich源码。
这里写图片描述
我们这里使用了mpich-3.2.1版本
下载好后,

tar -zxvf mpich-3.2.1.tar.gz
cd mpich-3.2.1
./configure -prefix=/usr/local/mpich

prefix参数表示安装的路径
接下来:

make
sudo make install

mpich被安装在/usr/local/mpich目录下面
接下来添加环境变量:

sudo vi /etc/profile

在末尾添加

export PATH=/usr/local/mpich/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpich/lib:$LD_LIBRARY_PATH

接着执行

source /etc/profile

使环境变量生效
可以在mpich-3.2.1目录下面运行:

cp -r examples/ /usr/local/mpich
mpiexec -n 10 /usr/local/mpich/examples/cpi

如果最后输出的无误,则到这里单机版本的mpich环境配置好了。
接下来配置多机版本,
这里设置有两台机器,主机为A,从机为B
现在A,B两机上按上述方法配置mpich
这里MPI是使用ssh进行消息的传递
所以先在A,B两台机器上下配置ssh:

sudo apt-getinstallopenssh-server
/etc/init.d/ssh start

为了方便我们对B机进行ssh无密码登陆访问的设置
在A机上生成公钥

ssh-keygen -t rsa

按提示输入三次回车,在默认的~/.ssh目录下生成一个公钥
在A机上执行

scp /home/A'sname/.ssh/id_rsa.pub B'name@B'sIP:/home/B'sname/.ssh/authorized_keys

其中A‘sname,B’s name为A,B机的用户名,B’sIP为B的ip地址,可以在B机上用ifconifg看到
这时候可以在A机上直接用

ssh B'sname@B'sIP

登陆B机
如果A,B两机的登陆用户名相同可以简化为:

ssh B'sIP

如出现:Could not open a connection to your authentication agent.

 eval `ssh-agent -s`
 ssh_add

接下来在mpich3.2.1目录下,创建machinefile,里面填写其他机器的用户名,IP和线程数:
B’sname@B’sIP:thread count
C’sname@C’sIP:thread count

mpiexec -n 10 -machinefile ./machinefile /usr/local/mpich/examples/cpi 

用多机来计算圆周率
测试在多机上执行时要注意在两台机器相同路径上有相同的文件
如果使用python的话可以安装mpi4py
下面是openmp与mpi之间的区别:
openmp 全称 Open Multi-Processing是一套支持跨平台共享内存方式的多线程并发的编程API(当然多核还可以用OPENCL),openmp的编程方式有点像openacc的编辑形式,在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。现在常用的编译器如Visual Studio都支持openmp,只需要加入mpi.h的头文件,不过openmp是线程上的并发,所以是共享内存的,无法多机并发,这与mpi有区别。
但mpi的编程比较繁琐,由此出现的openmp+mpi组合的形式
这里写图片描述


推荐阅读
  • NFS文件共享系统
    1、概述:NFS(NetworkFileSystem)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • Nextcloudsnap一键安装包: https:github.comextcloudextcloud-snap建议安装Ubuntu系统,因为官方一键安装包用的是Snap,Cen ... [详细]
  • python网络编程 day27 网络编程初识 ——socket
    一、内容回顾1、两个内置函数(装饰器)及类中的魔术方法 ... [详细]
  • 今天搭建了redis环境,使用自带的benchmark进行了性能测试选择测试键的范围大小默认情况下面,基准测试使用单一的key。在一个基于内存的数据库里,单一key测试和真实情况下 ... [详细]
  • python图书管理系统类_Python标准库socketserver使用线程混入实现异步TCP服务器
    推荐图书:《Python程序设计开发宝典》,ISBN:978-7-302-47210-0,董付国,清华大学出版 ... [详细]
  • SpringBoot使用Netty实现远程调用的示例
    这篇文章主要介绍了SpringBoot使用Netty实现远程调用的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着 ... [详细]
author-avatar
mobiledu2502872877
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有