openmp与openmpi区别.docx

上传人:b****2 文档编号:1711425 上传时间:2023-05-01 格式:DOCX 页数:24 大小:191.69KB
下载 相关 举报
openmp与openmpi区别.docx_第1页
第1页 / 共24页
openmp与openmpi区别.docx_第2页
第2页 / 共24页
openmp与openmpi区别.docx_第3页
第3页 / 共24页
openmp与openmpi区别.docx_第4页
第4页 / 共24页
openmp与openmpi区别.docx_第5页
第5页 / 共24页
openmp与openmpi区别.docx_第6页
第6页 / 共24页
openmp与openmpi区别.docx_第7页
第7页 / 共24页
openmp与openmpi区别.docx_第8页
第8页 / 共24页
openmp与openmpi区别.docx_第9页
第9页 / 共24页
openmp与openmpi区别.docx_第10页
第10页 / 共24页
openmp与openmpi区别.docx_第11页
第11页 / 共24页
openmp与openmpi区别.docx_第12页
第12页 / 共24页
openmp与openmpi区别.docx_第13页
第13页 / 共24页
openmp与openmpi区别.docx_第14页
第14页 / 共24页
openmp与openmpi区别.docx_第15页
第15页 / 共24页
openmp与openmpi区别.docx_第16页
第16页 / 共24页
openmp与openmpi区别.docx_第17页
第17页 / 共24页
openmp与openmpi区别.docx_第18页
第18页 / 共24页
openmp与openmpi区别.docx_第19页
第19页 / 共24页
openmp与openmpi区别.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

openmp与openmpi区别.docx

《openmp与openmpi区别.docx》由会员分享,可在线阅读,更多相关《openmp与openmpi区别.docx(24页珍藏版)》请在冰点文库上搜索。

openmp与openmpi区别.docx

openmp与openmpi区别

LammpsMac的并行之路

openmp与openmpi区别

openmp比较简单,修改现有的大段代码也容易。

基本上openmp只要在已有程序基础上根据需要加并行语句即可。

而mpi有时甚至需要从基本设计思路上重写整个程序,调试也困难得多,涉及到局域网通信这一不确定的因素。

不过,openmp虽然简单却只能用于单机多CPU/多核并行,mpi才是用于多主机超级计算机集群的强悍工具,当然复杂。

(1)MPI=messagepassinginterface:

在分布式内存(distributed-memory)之间实现信息通讯的一种规范/标准/协议(standard)。

它是一个库,不是一门语言。

可以被fortran,c,c++等调用。

MPI允许静态任务调度,显示并行提供了良好的性能和移植性,用MPI编写的程序可直接在多核集群上运行。

在集群系统中,集群的各节点之间可以采用MPI编程模型进行程序设计,每个节点都有自己的内存,可以对本地的指令和数据直接进行访问,各节点之间通过互联网络进行消息传递,这样设计具有很好的可移植性,完备的异步通信功能,较强的可扩展性等优点。

MPI模型存在一些不足,包括:

程序的分解、开发和调试相对困难,而且通常要求对代码做大量的改动;通信会造成很大的开销,为了最小化延迟,通常需要大的代码粒度;细粒度的并行会引发大量的通信;动态负载平衡困难;并行化改进需要大量地修改原有的串行代码,调试难度比较大。

(2)MPICH和OpenMPI:

它们都是采用MPI标准,在并行计算中,实现节点间通信的开源软件。

各自有各自的函数,指令和库。

Reference:

TheyaretwoimplementationsoftheMPIstandard.Inthelate90sandearly2000s,thereweremanydifferentMPIimplementations,andtheimplementorsstartedtorealizetheywereallre-inventingthewheel;therewassomethingofaconsolidation.TheLAM/MPIteamjoinedwiththeLA/MPI,FT-MPI,andeventuallyPACX-MPIteamstodevelopOpenMPI.LAMMPIstoppedbeingdevelopedin2007.ThecodebaseforOpenMPIwascompletelynew,butitbroughtinideasandtechniquesfromallthedifferentteams.

Currently,thetwomajoropen-sourceMPIimplementationcode-basesareOpenMPIandMPICH2.

而MPICH2是MPICH的一个版本。

有的计算机厂商,也会针对旗下机型特点,自主开发基于MPICH的MPI软件,从而使机器的并行计算效率得以提高。

(3)OpenMP:

在节点内(多核SMP)执行的基于共享内存的编程模型。

OpenMP是针对单主机上多核/多CPU并行计算而设计的工具,换句话说,OpenMP更适合单台计算机共享内存结构上的并行计算。

由于使用线程间共享内存的方式协调并行计算,它在多核/多CPU结构上的效率很高、内存开销小、编程语句简洁直观,因此编程容易、编译器实现也容易(现在最新版的C、C++、Fortran编译器基本上都内置OpenMP支持)。

不过OpenMP最大的缺点是只能在单台主机上工作,不能用于多台主机间的并行计算。

安装参考帖子1:

硬件:

SMP服务器,4个CPU(XeonE7450),内存64G,ATI显卡

软件:

RedHatEnterprise4,gcc3.4.6

前言:

由于服务器比较老,而且我没有root权限,安装起来很不方便,各种软件和库都没有,都是下载后手工编译安装的,用了3天时间,除了GPU和CUDA因为是ATI显卡的原因无法安装外,成功安装了各个包

参考网上教程和manul安装还比较顺利,但是有几个包特别麻烦...写出来分享下,希望能帮到需要的人

USER-ATC:

 先将MPI的头文件,用-I包含,但由于gcc版本太低,所以总是报错,手动安装gcc4.8.1后libatc.a顺利编译,但lammps编译时报错dsygvd,dgesvd两个函数找不到,google下发现是BLAS和LAPACK里的函数,由此怀疑是lammps自带的linalg库有问题,自己下载GotoBLAS或者LAPACk都可以,解决

USER-AWPMD:

这个也比较坑爹,主要是makefile只有Makefile.openmpi,但是我编译lammps用的mpich,文档又说库和lammps编译时用的mpi要一致,解决办法是手动修改Makefile.openmpi中CC编译器为mpich的mpicxx,这样有一些警告,但是能顺利编译库,和lammps

USER-REAXC:

要将连接库的名字与ifort库中的完全一致,-lifcore-lsvml-liompstubs5-limf,特别是-liompstubs5跟以前的版本不一样了

KIM:

这个很好解决,下载openkim-ati库,google下即可,下载编译后将头文件的目录-I连接上

VORONOI:

 也需要自己下载voro++源码,手动编译出来即可

libjpeg:

下载libjpeg源码,手工编译即可

附上我lammps的makefile,仅供参考

[cpp] viewplain copy

1.# my = RedHat Linux box, g++ (v3), MPICH, FFTW3  

2.  

3.SHELL = /bin/sh  

4.  

5.# ---------------------------------------------------------------------  

6.# compiler/linker settings  

7.# specify flags and libraries needed for your compiler  

8.  

9.CC =        g++481 //自己link的gcc4.8.1  

10.CCFLAGS =   -g -O  

11.SHFLAGS =   -fPIC  

12.DEPFLAGS =  -M  

13.  

14.LINK =      g++481 //同上  

15.LINKFLAGS = -g -O  

16.LIB =  

17.SIZE =      size  

18.  

19.ARCHIVE =   ar  

20.ARFLAGS =   -rc  

21.SHLIBFLAGS =    -shared  

[html] viewplain copy

1.# ---------------------------------------------------------------------  

2.# LAMMPS-specific settings  

3.# specify settings for LAMMPS features you will use  

4.# if you change any -D setting, do full re-compile after "make clean"  

5.  

6.# LAMMPS ifdef settings, OPTIONAL  

7.# see possible settings in doc/Section_start.html#2_2 (step 4)  

8.  

9.LMP_INC =   -DLAMMPS_GZIP -DLAMMPS_JPEG //jpeg包  

10.  

11.# MPI library, REQUIRED  

12.# see discussion in doc/Section_start.html#2_2 (step 5)  

13.# can point to dummy MPI library in src/STUBS as in Makefile.serial  

14.# INC = path for mpi.h, MPI compiler settings  

15.# PATH = path for MPI library  

16.# LIB = name of MPI library  

17.  

18.MPI_INC = -I/home/xhshi/mpich/include/ -DMPICH_SKIP_MPICXX //mpich头文件  

19.MPI_PATH =-L/home/xhshi/mpich/lib //mpich库  

20.MPI_LIB = -lmpich -lpthread -lmpl //库名称,要一致  

21.  

22.# FFT library, OPTIONAL  

23.# see discussion in doc/Section_start.html#2_2 (step 6)  

24.# can be left blank to use provided KISS FFT library  

25.# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings  

26.# PATH = path for FFT library  

27.# LIB = name of FFT library  

28.  

29.FFT_INC =  -I/home/xhshi/fftw3/include -DFFT_FFTW3  //fftw3.3.2版本  

30.FFT_PATH = -L/home/xhshi/fftw3/lib  

31.FFT_LIB =   -lfftw3  

32.  

33.# JPEG library, OPTIONAL  

34.# see discussion in doc/Section_start.html#2_2 (step 7)  

35.# only needed if -DLAMMPS_JPEG listed with LMP_INC  

36.# INC = path for jpeglib.h  

37.# PATH = path for JPEG library  

38.# LIB = name of JPEG library  

[html] viewplain copy

1.JPG_INC = -I/home/xhshi/jpeg6b/include  

2.JPG_PATH =  -L/home/xhshi/jpeg6b/lib  

3.JPG_LIB =   -ljpeg  

 

参考文献2:

(非常有用的帖子)

Lammps是做分子模拟的开源软件,其模拟过程和简介可参考这里。

整个安装大致流程是,首先需要安装一些必备的支持软件,然后才是下载并解压lammps源文件得到例如lammps-21Sep12这个文件夹,以下不经特殊说明的路径均是指这个文件夹下的相对路径。

Lammps中包含多个部件包(package),各个部件包具有不同的功能,因此用户可以依据自己模拟体系的需要进行选装。

我喜欢大。

也喜欢全。

就是喜欢大而全,所以在后面会尽可能的把所有的包都装上。

部件包分为标准包和用户包,标准包由官方开发,它们包括asphere、kspace、meam等;用户包则出自一些比较牛x的用户,例如user-misc、user-colvars、usr-cuda等。

你可以在src目录下执行make命令查看所有包的名称、增添包的方法、clean和src/MAKE目录下各种预置的编译配置文件Makefile.foo的介绍。

这些Makefile文件是官方根据不同主流机器硬件、编译环境预先给用户写好的,虽然绝大多数情况下直接使用还是无法成功,但作为模板文件只需要对其中的一小部分进行相应修改就可以用了。

例如Makefile.g++就适用于g++编译器环境的系统,而Makefile.openmpi就适用于安装openmpi软件的系统,注意Makefile文件的后缀(例如前两个文件的后缀就是g++和openmpi)被官方手册统称为foo,编译lammps时只需要使用命令makefoo即可。

foo的意思是,如果你选择MAKE/Makefile.g++作为编译配置文件,那么你编译lammps的命令就是makeg++;如果你选择的是MAKE/Makefile.openmpi作为编译配置文件,那么编译lammps的命令就是makeopenmpi。

在选装好各包之后,还需要把包的名称与lib目录下的各文件夹名称对照一下。

例如如果选装了meam包,那么可以看到lib目录中也有这个文件夹,这就表明在编译lammps的时候编译器还需要额外的meam库文件,所以还需要先到lib/meam里面编译一下静态库文件。

这在后面会详细说明。

上述准备工作完成之后,只要在src目录下编译执行makefoo命令,编译成功后就可以得到可执行的lmp_foo文件了,至此大功告成。

下文采用Lammps-21Sep12(版本号8817)为源文件,在Ubuntu12.04LTS上安装。

在安装时,有几个地方可以详细查看安装方法和可能错误的解决方法。

首先是官网安装说明,然后是源文件lammps/src/MAKE/下的Makefile.foo文件,在lammps/lib下各库包内的README、Makefile.foo和Makefile.lammps里均包含了其安装方法和注意要点。

 

1.必备软件安装

1.1apt-get安装部分

需要用sudoapt-getinstallXXXX的命令安装以下几个包:

build-essential,gfortran,csh或tcsh,libjpeg62,libjpeg62-dbg,libjpeg62-dev。

例如可使用以下命令即可同时安装

清单1:

安装必备软件

$sudoapt-getinstallbuild-essentialgfortrancshlib62lib62-dbglib62-dev

其中gfortran是fortran编译器包,而build-essential是GNUc/c++命令行编译器包,安装后可用下面命令测试一下,反正结果不能为"g++:

"

清单2:

查询g++是否安装

$whereisg++

g++:

/usr/bin/g++ /usr/bin/X11/g++ /usr/share/man/man1/g++.1.gz

csh或tcsh二选一即可,据某经验用户说是“通讯用的”,可能是mpich调用多核并行计算时,各核进行信息和数据共享所用的。

libjpeg的三个包是用来支持lammps输出图片的。

接下来的fftw和mpich均使用原始码安装,嫌麻烦的可以参考这里使用apt-get或ubuntu里的软件中心安装,效果一样的。

 

1.2FFTW

用于所谓的快速傅立叶计算,如果lammps中不打算安装KSPACE就不用安装fftw了,相应的Makefile.foo文件中fftwlibrary部分的设定可以置空。

下载fftw-2.1.5的源文件,到默认的地方(~/Downloads)。

原始码安装的补习资料可参考这里。

原始码的安装简单而言可依次用./configure、make和makeinstall三条命令完成,这样原始码会采用默认的目录进行安装,即头文件(*.h)在/usr/include,执行文件在/usr/bin,库文件(*.a和*.so)在/usr/lib,当然还包括bin文件、man文件等。

这样做的好处是系统在执行每条命令时会依序在$PATH中找,而上述几个目录已经被系统预添加进$PATH变量中了。

但是弊端在于,虽然根据GNU标准的要求每个源文件都应该提供makeuninstall命令进行卸载,但软件作者均表示无法保证卸载干净。

所以我采用自定义安装目录的方法将fftw安装到/usr/local/fftw2内,这样如果要卸载软件,直接删除该目录即可。

为了方便运行,可以按照后面的方法把/usr/local/fftw2/bin添加到$PATH即可。

清单3:

安装fftw2

$cd/usr/local/src

$sudotarxzvf~/Downloads/fftw-2.1.5.tar.gz

$cdfftw-2.1.5

$sudo./configure--prefix=/usr/local/fftw2--enable-float

$sudomake

$sudomakeinstall

 

1.3MPI

MPI是用来做并行计算用的,听起来好像只有多台服务器主机同时计算这样的规模才配称为并行,但现在的多核CPU已经非常普遍,2核、4核和8核这样的CPU已经稀松平常了,所以只要你的电脑是多核CPU就可以用到MPI,它可以让CPU里的多个核心一起计算。

当然,如果你死心眼非要只用CPU里的一个核心跑运算也可以,MPI不需要安装,但是你需要编译src/STUB,而且在编译lammps的时候使用Makefile.serial这个文件,但这个不在本文的范围之内。

MPI软件可以有两个选择:

openmpi-1.6.2和mpich2-1.4.1p1,它们的安装可在解压后查看其文件夹中的INSTALL和README这两个文件。

这里以mpich2为例说明其安装,其全套命令如下

清单4:

安装mpich2

$cd/usr/local/src

$sudotarxzvf~/Downloads/mpich2-1.4.1p1.tar.gz

$cdmpich2-1.4.1p1

$sudo./configure--prefix=/usr/local/mpich2

$sudomake

$sudomakeinstall

此前的许多帖子里都说还需要一个~/.mpd.conf文件,可以依次使用touch~/.mpd.conf和chmod600~/.mpd.conf命令即可搞定,而且每次用lmp做并行运算前需要执行一下mpd&命令才行。

但我的单机版lmp好像并不需要这个。

 

2.lammps的下载和安装

Ericsaid,RTFMandSTFW。

从这里开始就是错误的重灾区了,建议出了问题首先通读官方的手册中对安装部分的介绍:

GettingStarted。

 

2.1下载

Lammps的下载可采用两种方式,一种是直接去官网下载,然后解压得到lammps-21Sep12(当前版本8817)文件夹;另一种是使用svn更新的方式,这样做的好处是可以随时更新lammps的最新发布,svn可以用Ubuntu软件中心中搜索安装,然后在~下建立一个存放下载lammps的目录,全套命令为

清单5:

svn更新lammps

$mkdir~/lammps

$svncosvn:

//svn.icms.temple.edu/lammps-ro/trunk ~/lammps #同步下载lammps

$cd~/lammps

$svnupdate #更新lammps

$svn–qustatus #查询当前lammps的最新版本

版本的8817状态

 

2.2编译库文件

lammps中lib目录下含有atc,awpmd,colvars,cuda,gpu,linalg,meam,poems和reax文件夹(红色字体的包因为无法排错而没有安装,因此也就不用编译这几个库文件),为了尽可能安装lammps所有的包,每个都需要进去编译。

我的电脑比较原始,没有显卡运算功能,所以在这里就没有编译和安装cuda和gpu,而atc和awpmd安装失败问题在下面会提到。

以linalg为例,进去后可以发现其中的Makefile只有Makefile.gfortran和Makefile.mingw_cross这两种,文件名的后缀就是这个Makefile适用的编译器。

由于此前已经安装了gfortran编译器,因此需要使用命令make-fMakefile.gfortran进行编译。

这里插一句,lib下的各包,除了awpmd只有Makefile.openmpi、cuda和gpu外,其它所有包中要么有Makefile.g++,要么有Makefile.gfortran,因此在这里使用g++和gfortran这两个编译器就足够了。

下表中为各库文件家中各编译器版的Makefile,第一个即为我所用的Makefile。

LIB

Makefile的后缀

atc

g++,icc,serial,lammps

awpmd

openmpi,lammps

colvars

g++,femi,mingw32-cross,lammps

cuda

无后缀,common,cudalib,defaults,lammps

gpu

femi,lens,lincoln,linux,linux_opencl,longhorn,mac,mac_opencl,serial,serial_opencl,lammps

linalg

gfortran,mingw_cross

meam

gfortran,g95,ifort,pgf90,tbird,lammps,lammps.gfortran,lammps.glory,lammps.ifort

poems

g++,icc,storm,lammps

reax

gfortran,g77,g95,ifort,pgf90,redsky,tbird,lammps,lammps.gfortran,lammps.ifort

各包中均包含README文件,里面指出如果编译成功了,会生成静态库文件lib*.a和配置文件Makefile.lammps,它俩为接下来的lammps编译所用。

atc是需要BLAS(BasicLinearAlgebraSubroutines)和LAPACK(LinearAlgebraRoutines)的,如果系统没有安装这两个东西,有两种解决办法:

要么编译lib中的linalg并利用它做伪BLAS和LAPACK,然后再供atc编译时调用。

但在对atc使用make-fMakefile.g++编译时提示错误:

mpi.h没有那个文件或目录。

要么apt-get安装了li

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2