设置
欢迎访问登录注册窗体顶端
窗体底端
跟随
你暂时没有新的跟随者,查看跟随者
登录并查看
消息
你暂时没有新消息,查看消息
登录并查看
mpi配置以及lammps并行安装
     
Mpi配置与安装
MPICH2MPIMessage-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具,在程序设计语言上支持C/C++Fortran。最近因为有项目需要的计算量比较大,所以就学习使用了MPICH2,在此根据网络上查询的相关信息和我自己的实际使用经历,分别总结一下MPICH2windowslinux下基本的安装使用方法。
 软件下载
 MPICH2的主页是v/mpi/mpich2/index.htm,在这个页面上就能到各平台最新版本MPICH2的下载地址,其中还包括源代码,我在开始作这个项目的时候最新版本是windowsmpich2-1.0.5p2,源代码mpich2-1.0.5p4。我们的项目是一个CentOSlinux下的程序,所以最终是要在linux下运行的,但是又舍不得windows,于是就打算可能的话就在windows下写程序,用MinGWwindows版的MPICH2编译调试,通过后再到wmware虚拟机组成的简单集作测试。所以,为避免不必要的麻烦,就要统一一下windowslinux下的MPICH2版本,而且不打算用最新的,因此决定用mpich2-1.0.5版。但是,如果在主页上的话是没有以前旧版本下载的链接的(至少我没到),只有最新版本的httpftp下载。这难不住我等有心之人,既然提供了ftp下载,那咱就直接到他ftp服务器上,最新源代码链接的地址是ftp://v/pub/mpi/mpich2-1.0.,把后面文件名去掉就应该是文件的ftp存放路径,把这个路径直接写到浏览器地址栏里回车(偶用的是FireFox2),就能看到他们服务器上这个目录的文件列表,里面就有1.0.5版的windows安装文件和源代码包,分别为ftp://v/pub/mpi/mpich2-1.0.5-win32-ia32.msi ftp://v/pub/mpi/mpich2-1.0. msi文件不用多说,这是windows下安装用的,源代码包我们拿来在linux下用。
文档下载
还是主页上就有MPICH2的安装和使用指南文档,主要有三个,分别是User's GuideInstaller's GuideWindows Developer's Guide,都down下来看看很有用的说。具体开发用的有关MPI标准的文档在MPI论坛的网站里都有,地址是/,我觉得最有用的是MPI-2: Extensions to the Message-Passing Interface
 Windows下的安装配置
 我用的参与计算的系统都是WindowsXP Pro SP2,安装的过程没什么太特别的,一般就是默认就可以,只是其中有个地方要填一个什么passphrase,上面提示说所有系统都要用相同的passphrase,照做就是了,在所有参与计算的结点机器上都填一样的passphrase就好了。另外就是需要 framework 2的运行环境。
默认安装的位置是C:\Program Files\MPICH2,下面的bin目录下是系统配置运行需要的程序,为了方便在控制台使用,可以把C:\Program Files\MPICH2\bin加到系统的PATH变量中去。Include是头文件,开发的时候用,lib是链接程序的时候用的库文件。Jumpshot下有个pdf的文档,干什么用的可以看看这个文档,我没仔细看,感觉我暂时还用不上。Examples下面是一个样本程序,就是一个用MPI计算圆周率的程序,分别有CC++Fortran版,C/C++的应该可以用VS2003以上版本打开。同时,安装程序还会自动向系统注册一个服务MPICH2 Process Manager,我们从控制面板-管理工具-服务里就能到,这是管理运行MPI程序的一个服务,安装好后就是自动启动的,所以一般也就不用动它。
安装完毕后开始菜单-程序中就添加了一个MPICH2目录,其中就有上面提到的Jumpshot,另外是用来配置运行环境的,我在网上有到的说明都是以前旧版本的,和现在的差别比较大,感觉这新版本用的不爽,没搞明白这个程序该咋用,不过好像默认状态下不改什么就能正常使用,所以也就不管它了。则是用来注册用户的,使用MPI之前需要在这个程序里注册一个系统里已经存在的用户,而且这个用户必需拥有管理员权限,拥有运行我们安装了的MPI系统的能力。比如我就在所有参与运算的机器上添加了一个管理员mpi,密码也是mpi
接下来,我们就可以开始试着运行一下MPI的程序了。就用examples目录下面的那个计算圆周率的程序。如果要多机并行计算的话,就需要在所有机器上的相同位置放置要运行的程序,我的情况就是在所有机器的C盘下建了一个mpiexe的目录,并把拷到所有机器的这个目录下。然后,在其中的某台机器上进入控制台(运行MPI程序其实也可以用开始菜单的MPICH2下的,这是个gui程序,但是我觉得用的不爽,不如直接在控制台下敲命令来得灵活),敲下命令mpiexec -hosts 2 192.168.10.142 192.168.0.23 c:\mpiexec是安装目录下bin目录里的一个程序,在本文的例子中就是C:\Program Files\MPICH2\,因为刚才说了,我把这个地址加入到PATH里了,所以可以在任何地方直接执行,它是用来启动MPI程序的,-hosts参数说明是启动多台机器并行运算,后面跟着的2就是说要在两台机器上执行程序,再后面的就是那两台机器的ip地址,其中第一个就是我启动程序的机器,当然,这个地方也可以写机器名,只要它的机器名能被正常的解析就可以,最后面的就是要运行的程序,也就是刚才提到的所有机器都要在相同位置放置的那个MPI程序。如果只是在本机运行,则命令为mpiexec –n -n表示是在本地运行,后面的2表示启动的进程数。程序运行后就会提示让你输入一个数字intervals,这个数字影响计算的精度,值越大精度越高,当然计算时间就越长了,然后程序会打印出计算的结果和花费的时间。
比如,我使用单机单进程运行,intervals设为99999999,耗时1.253849秒,而用两台机器双进程则只有0.628954秒,明显快很多,并行运算还是很有效果的。不过,如果我们把intervals改为9999,单机运行只用了0.000279秒,而两台机器却花了0.001548秒,这是因为并行运算过程中,参与运算的机器需要通过网络传递一些消息,如果计算量不大的话,花在了这上面的时间影响会比较明显,因而反不如单机版的来得快。
到现在我们的MPI运行环境就基本安装好了,当然,MPI还有很多其他的命令参数,只不过最常用估计也就这两条了,其他的用得着的时候就去查上面提到的文档,里面有比较详细的介绍。另外,如果按照以上的介绍进行安装配置,在运行多机并行MPI程序的时候却出现连接错误的话,八成是因为网络的问题,看看你的防火墙是不是开着,打开相应的端口,或者干脆关掉防火墙就好了。
Linux下的安装配置和单机运行
Linux下的操作要相对来说麻烦一点,这个麻烦从安装开始,呵呵。我用的系统是CentOS4.4,装在VMware Workstation里的,一共装了两个虚拟机,环境基本上完全一样。为运行MPI在两台虚拟机都创建了一个用户mpi,密码也是mpihome路径也都是/home/mpi,然后继续都创建了一个目录/home/mpi/mpich2用来作MPI运行环境的安装路径,一个/home/mpi/mpich2/src来存放编译用的源代码。然后将源代码包mpich2-1.0.下载到两台机器上,都解压缩到/home/mpi/mpich2/src中,然后到/home/mpi/mpich2/src下,指定安装路径,./configure -prefix=/home/mpi/mpich2
make
make install
几分钟后安装完毕。需要提一下的是,我曾经试着用root用户来安装MPICH2,但是安装后好重启系统就出了问题,所以建议还是另外建个用户来装吧(ubuntu干脆就把root给禁了,不让你直接用root)。
安装后/home/mpi/mpich2下多出来一些目录和文件,要比windows多,lib是库文件,include是头文件,bin还是程序文件,所以还是要写到环境变量里,可以用命令export PATH /home/mpi/mpich2/bin:$PATH,但我是用root用户直接在/etc/profile最后面加了这么一句export PATH=/home/mpi/mpich2/bin:$PATH,一劳永逸。
MPI应用一个管理器来管理运行MPI程序,这个管理器就是mpd,但是在正式开始运行mpd前还需要一个基于安全考虑的配置文件,.f,这个文件是要放在运行程序的用户的home目录下,本例子中就是/home/mpi/.f,而且这个文件只能由这个用户读写,创建文件的命令是,
cd $HOME
touch .f
chmod 600 .f
然后在文件中写入这么一行,secretword=******在参与计算的计算机上必需完全一致。如果是root用户的话,这个文件应该是/f
然后,我们就可以启动mpd管理器了,直接在控制台下使用mpd命令,或者是mpd &,让mpd在后台运行,若关闭启动的mpd,只需要命令mpdallexit即可。在启动mpd之后就可以运行MPI应用程序了,执行命令与windows下类似,如我们仍然是测试一下examples里的cpi程序可以这样来作,
cd ~/mpich2/examples
mpiexec -n 1 ./ cpi
参数含义同windows下的单机运行命令。另外,启动mpd后还可以用命令mpdtrace来察看当前运行的mpd情况。
SSH配置和多机并行
MPI的多机并行是用mpdboot来管理启动的,是由参与计算的其中一台机器通过mpdboot同时启动其他机器上的mpd管理器并运行相应MPI程序的,所以,需要赋予运行mpdboot的机器执行其他机器上程序的能力。MPICH2支持通过sshrsh来做到这一点,其中ssh是默认的,而且其安全性也优于rsh,因此,我在项目中是用的ssh
首先,我们需要修改所有机器上的/etc/hosts文件,在里面添加上参与计算的机器名和ip地址,比如本文中有两台机器参加的例子里,hosts文件应当为:
 127.0.0.1 localhost.localdomain localhost
 192.168.10.142 node0
 192.168.10.23 node1
这里的意思是说,主机名为node0的机器ip地址为192.168.10.142,主机名为node1的机器ip地址为192.168.10.23
当然,其实这一步也可以跳过,因为我们也可以在操作过程中直接使用ip地址,只不过那样不太方便。另外就是,有些机器默认情况下第一行可能包括本机的主机名,比如在ip192.168.10.142node0上,hosts文件第一行是
127.0.0.1 localhost.localdomain localhost node0
这样可能会使得mpdboot工作不正常,所以还是最好给成上面的那种形式。
 第二步是创建ssh密钥,命令行下:
#ssh-keygen -t rsa
-t rsa指的是密钥类型,具体请察看ssh相关资料,这里不多说。这样就在当前用户的home目录下生成了一个.ssh目录,本文中的就是/home/mpi/.ssh
 第三步,将/home/mpi/.ssh下的id_rsa.pub文件拷贝改名为authorized_keys,即
#cp id_rsa.pub authorized_keys
 第四步,在其他所有机器上进行以下操作。
#ssh-keygen -t rsa                                            生成.ssh文件夹
#scp node0IP:/home/mpi/.ssh/* ~/.ssh          拷贝node0上的.ssh文件夹覆盖本地的
第五步,在所有机器上建立与自己和所有其他机器的信任连接。
对每个节点执行:
 #ssh node0
 #ssh node1
根据提示键入yes即可。然后就可以在不需要用户名密码的情况下通过ssh登陆其他机器了,比如在node0#ssh node1
就可以直接进入node1
接下来,在启动mpdboot的机器上创建一个参与计算的host列表文件,如文件mpd.hosts,每行是一个主机名,创建过程如
#cd ~
#touch mpd.hosts
#vi mpd.hosts
nod0
node1
 现在,就可以启动运算集了
#mpdboot -n 2 -f mpd.hosts
-n表示要启动的机器个数,一般是不大于mpd.hosts文件中的机器数,比如本文中的例子就是两台机器。这样,列表中的机器就会启动其本机上的mpd管理器。
然后,就可以开始运行MPI程序,进行运算了,同windows下一样,程序需要放在每台机器上的相同位置(如果用NFS就只需在一台机器上放置程序,其他机器作映射就行),比如都是程序/home/mpi/mpich2/examples/cpi,在运行mpdboot 的结点机器上:
#mpiexec -n 2 /home/mpi/mpich2/examples/cpi
-n表示要启动的进程个数,一般是不大于mpd.hosts文件中的机器数(或者cpu核心数?偶用的机器就是双核的了,所以单机的时候双进程比单进程效率好很多,但是三进程就不行)。
Mpd在运行过程中,可以通过mpdtrace显示参与计算的机器名,mpdtrace –l则是显示机器名以及其端口
 
Ubuntu下编译并行版本lammps以及配置vmd
本人操作系统 ubuntu8.04,新装系统,因工作站不想更改原有操作系统,且原操作系统只有一个分区,故采用wubi安装,请勿鄙视。
为操作方便将terminal 加入到右键中
$sudo apt-get install nautilus-open-terminal
安装VMD
vmd网站上下载vmd-1.8.6.bin.LINUX.,地址为www.ks.uiuc.edu/Development/i安装之前需要先安装cshlibstdc++5,如没有libstdc++5,则安装会没有问题,安装后vmd将无法正常启动。
$sudo apt-get install csh
$sudo apt-get install libstdc++5
然后安装vmd
$cd vmd-1.8.6
$./configure LINUX
$cd src
$sudo make install
至此vmd安装成功,可以在terminal 中输入vmd测试软件运行效果。mdbbs曾讨论到ssh通信效率比rsh效率高,所以以下先安装 ssh,安装设置ssh
sudo apt-get install openssh-client openssh-server
设置ssh
terminal 中输入sudo gedit /etc/hosts,修改此文件,将所有节点名称及ip地址填入,格式如下:
127.0.0.1      localhost
202.118.247.123 ubuntu
此时可以使用ssh ubuntu测试ssh通信是否正常。
取消密匙登录
以设定的用于启动mpi计算的用户登录,运行
ssh-keygen -t rsa    #对于所有提示直接回车即可
这将生成一个密钥对,分别存放在~/.ssh/id_rsa~/.ssh/id_rsa.pub文件内。
然后进行访问授权,运行:
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod go-rwx ~/.ssh/authorized_keys
 ssh-agent $SHELL
ssh-add
以上配置ssh完毕。
配置完毕后启动ssh服务,sudo /etc/init.d/ssh start
以下将分步安装fftw,mpich,lammps
1:安装fftw
下载fftw-2.1. ,解压
$ tar xvzf fftw-2.1.
$ cd fftw-2.1.5
$sudo ./configure --prefix=/opt/matlib/fftw215-gnu --enable-float
此时如果出现以下错误
checking for vendor's cc to be used instead checking cc
checking for C compiler configure: error: C compiler
cannot create executables
则表示ssh工具windowsg++库缺失,可输入sudo apt-get install g++后再重新运行上句命令
$sudo make
$sudo make install
2:安装 mpich
下载
$tar xvzf
$ cd mpich-1.2.7p1/
$./configure --prefix=/opt/mpich-gnu -rsh=ssh (此处添加ssh通信方式,与以前的一个贴子略有不同)
$sudo make
$sudo make install
配置mpi 环境变量
登录根目录:sudo -i
也可以不登录
sudo /etc/profile
加入如下代码:
#! bin bash
exportMANPATH=${MANPATH}:/opt/mpich-gnu/man
exportPATH=${PATH}:/opt/mpich-gnu/bin
3:安装lammps
$tar xvzf
$cd lammps-28Oct08/
$cd src
$gedit MAKE/Makefile.g++
修改mpichfftw的安装路径
# g++ = RedHat Linux box, g++, MPICH2, FFTW
SHELL = /bin/sh
# System-specific settings
CC =        g++
CCFLAGS =    -g -O -DFFT_FFTW -DLAMMPS_GZIP -DMPICH_IGNORE_CXX_SEEK -I/opt/matlib/fftw215-gnu/include -I/opt/mpich-gnu/include
DEPFLAGS =    -M
LINK =        g++ -L/opt/matlib/fftw215-gnu/lib  -L/opt/mpich-gnu/lib
LINKFLAGS =    -g -O
USRLIB =    -lfftw -lmpich
SYSLIB =    -lpthread
ARCHIVE =    ar
ARFLAGS =    -rc
SIZE =        size
# Link target
$(EXE):    $(OBJ)
    $(LINK) $(LINKFLAGS) $(OBJ) $(USRLIB) $(SYSLIB) -o $(EXE)
    $(SIZE) $(EXE)
# Library target
lib:    $(OBJ)
    $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ)
# Compilation rules
%.o:%.cpp
    $(CC) $(CCFLAGS) -c $<
%.d:%.cpp
    $(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@
# Individual dependencies
DEPENDS = $(OBJ:.o=.d)
include $(DEPENDS)
保存后退出,然后在src目录下生成lmp_g++
$make g++
也可以将生成的lmp_g++复制到/bin下方便调用
$sudo cp lmp_g++ /bin
多核并行例子
$cd ../bench
2 /opt/mpich-gnu/bin/mpirun -np 16 ../src/lmp_g++ <in.chain
[7] 宋江宁,李炜疆.蛋白质二硫键的分布特征[J].无锡轻工大学学报,2002,21(5):464-467.
[8] 张涛,魏安池,刘若瑜.大豆蛋白改性技术研究进展[J].油脂开发,2011,19(5):26-29.
[9] Ellman GD.Tissue sulfhydryl groups.Arch Biochem.Biophys,1959,82(1):70-77.
[10] BeveridgeT,Toma SJ,Nakai S.Determination of SH- and S-S groups in some food pr-oteins using Ellmanreagent[J].Food science,1974,39(l):49-51.
[11]Pearce K N,Kinsella J E. Emulsifying properties of proteins:Evaluation of a turbdimet-ric technique.Journal of Agriculcal and Food Chemistry,1987,26(3):716-723.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。