openmpi + gotoblas + hpl的安装

      前天应老大要求安装hpl。而hpl需要mpi库和blas库支持,于是选用openmpi1.4.3和gotoblas2。

      需要说明的是openmpi的安装没有什么问题,除了路径的设定(要在./bash_profile中设定PATH和LD_LIBRARY_PATH)。而gotoblas的安装也不需要特别复杂的说明,直接运行主目录下的configure.64bit(我是64位机,所以选择这个,如果是32位机,就选用configure.32bit)。

      最后一步安装hpl。这才是最难得一部分,害得我浪费了两天的时间。两天的时间,我都可以把小月月全集看个好几遍了。痛心啊。不过这也源于我自己的一贯不太好的习惯。认为linux下的程序安装就是简单的make就完事儿了。岂料hpl给我上了教训惨痛的一课。现在自己记录一下hpl的安装步骤。首先从/hpl/setup中选择一个Make.*文件,我选择的是Make.Linux_PII_CBLAS,复制这个文件到/hpl目录下,然后修改此文件。直接贴出修改的Make文件:

SHELL        = /bin/sh
#
CD           = cd
CP           = cp
LN_S         = ln -s
MKDIR        = mkdir
RM           = /bin/rm -f
TOUCH        = touch
#
# ----------------------------------------------------------------------
# - Platform identifier ------------------------------------------------
# ----------------------------------------------------------------------
#
ARCH         = Linux_PII_CBLAS
#
# ----------------------------------------------------------------------
# - HPL Directory Structure / HPL library ------------------------------
# ----------------------------------------------------------------------
#
TOPdir       = $(HOME)/hpl-2.0
INCdir       = $(TOPdir)/include
BINdir       = $(TOPdir)/bin/$(ARCH)
LIBdir       = $(TOPdir)/lib/$(ARCH)
#
HPLlib       = $(LIBdir)/libhpl.a
#
# ----------------------------------------------------------------------
# - Message Passing library (MPI) --------------------------------------
# ----------------------------------------------------------------------
# MPinc tells the  C  compiler where to find the Message Passing library
# header files,  MPlib  is defined  to be the name of  the library to be
# used. The variable MPdir is only used for defining MPinc and MPlib.
#
MPdir        = $(HOME)/openmpi-1.4.3
MPinc        = -I$(MPdir)/build/include
MPlib        = $(MPdir)/build/lib/libmpi.so
#
# ----------------------------------------------------------------------
# - Linear Algebra library (BLAS or VSIPL) -----------------------------
# ----------------------------------------------------------------------
# LAinc tells the  C  compiler where to find the Linear Algebra  library
# header files,  LAlib  is defined  to be the name of  the library to be
# used. The variable LAdir is only used for defining LAinc and LAlib.
#
LAdir        = $(HOME)/GotoBLAS2
LAinc        =
LAlib        = $(LAdir)/libgoto2_nehalemp-r1.13.so $(LAdir)/driver/others/xerbla.o
#
F2CDEFS      =
#
# ----------------------------------------------------------------------
# - HPL includes / libraries / specifics -------------------------------
# ----------------------------------------------------------------------
#
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc)
HPL_LIBS     = $(HPLlib) $(LAlib) $(MPlib)
#
# - Compile time options -----------------------------------------------
#
# -DHPL_COPY_L           force the copy of the panel L before bcast;
# -DHPL_CALL_CBLAS       call the cblas interface;
# -DHPL_CALL_VSIPL       call the vsip  library;
# -DHPL_DETAILED_TIMING  enable detailed timers;
#
# By default HPL will:
#    *) not copy L before broadcast,
#    *) call the BLAS Fortran 77 interface,
#    *) not display detailed timing information.
#
#HPL_OPTS     = -DHPL_CALL_CBLAS
HPL_OPTS        =
#
# ----------------------------------------------------------------------
#
HPL_DEFS     = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
#
# ----------------------------------------------------------------------
# - Compilers / linkers - Optimization flags ---------------------------
# ----------------------------------------------------------------------
#
CC           = $(MPdir)/build/bin/mpicc
CCNOOPT      = $(HPL_DEFS)
CCFLAGS      = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops
#
# On some platforms,  it is necessary  to use the Fortran linker to find
# the Fortran internals used in the BLAS library.
#
LINKER       = $(MPdir)/build/bin/mpif77
LINKFLAGS    = $(CCFLAGS)
#
ARCHIVER     = ar
ARFLAGS      = r
RANLIB       = echo
#
# ----------------------------------------------------------------------
             

 之后运行make arch=<arch>命令,安装成功。安装成功的标志就是在/hpl/bin/<arch>下出现xhpl和HPL.DAT两个文件。

 

当然这一切都是在吃亏之后才总结出来的,感谢以前的大侠。现在找出原帖:http://www.cnblogs.com/xulei/archive/2009/03/30/1425258.html

 

这几天的一些总结,先发在这,以后整理

Dawning 5000A安装的OS有SUSE,遂决定装个SUSE,在Novell的site上down了64-bit的DVD,准备在虚拟机上安装
我的HP的laptop的OS是32-bit Vista Ultimate SP1,CPU是64-bit的Intel Core 2 Duo T7500,
在上面安装VMware Workstation 6.5.1 bulid-126130,但是从安装光盘启动后显示:
        This is a 32-bit computer. You cannot use 64-bit software on it!
VMware给出的错误信息:work_hard
This host is VT-capable, but VT is not enabled.
This is usually due to a BIOS/firmware problem. Please:
(1) Verify the BIOS/firmware settings enable VT mode.
(2) Power-cycle the host, if the BIOS/firmware VT settings were changed at boot.
(3) Power-cycle the host, if you have not done so since installing VMware Workstation.
(4) Update host BIOS/firmware to the latest version.
You have configured this virtual machine to use a 64-bit guest operating system. However, this host is not capable of running 64-bit virtual machines or this virtual machine has 64-bit support disabled.
For more detailed information, see
http://vmware.com/info?id=152

按照提示做了,修改BIOS的"Virtualisation Technology"为Enable,restart了pc无数次,问题依旧,耗时n久,最后在网上找到答案:关机再开机
也就是电脑冷启动才能让BIOS的设置生效,restart是不行的。
回头看看提示第(2),(3)点发现早有说明"Power-cycle the host",也就是重新加电啊
看来自己的e文还是太烂,以后要加强学习

安装完suse后,发现locate和updatedb都不能用
google到解决方案:
http://www.linuxquestions.org/questions/susenovell-60/what-is-the-equivlent-of-locate-and-updatedb-in-suse-321117/

安装rpm包,位于DVD的:/suse/x86_64/findutils-locate-4.2.27-14.15.x86_64.rpm
安装后就可以使用locate和updatedb命令了

*.tar.gz/*.tgz、*.bz2形式的源代码软件包  
  安装:tar   zxvf   *.tar.gz   或   tar   yxvf   *.bz2   先解压  
  然后进入解压后的目录:  
  ./configure   配置  
  make   编译  
  make   install   安装  
  卸载:make   uninstall   或   手动删除  
  说明:建议解压后先阅读说明文件,可以了解安装有哪些需求,有必要时还需改动编译配置。有些软件包的源代码在编译安装后可以用make   install命令来进行卸载,如果不提供此功能,则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中,往往很难把它删除干净, 那你应该在编译前进行配置,指定软件将要安装到目标路径:./configure   --prefix=目录名,这样可以使用“rm   -rf   软件目录名”命令来进行干净彻底的卸载。

在linux下运行程序时显示"error while loading shared libraries :xxx.so cannot open shared object file: No such file or directory"
Linux 运行的时候,是如何管理共享库(*.so)的?在 Linux 下面,共享库的寻找和加载是由 /lib/ld.so 实现的。 ld.so 在标准路经(/lib, /usr/lib) 中寻找应用程序用到的共享库。

但是,如果需要用到的共享库在非标准路经,ld.so 怎么找到它呢?

目前,Linux 通用的做法是将非标准路经加入 /etc/ld.so.conf,然后运行 ldconfig 生成 /etc/ld.so.cache。 ld.so 加载共享库的时候,会从 ld.so.cache 查找。

传统上, Linux 的先辈 Unix 还有一个环境变量 - LD_LIBRARY_PATH 来处理非标准路经的共享库。ld.so 加载共享库的时候,也会查找这个变量所设置的路经。
http://jicknan.blogspot.com/2007/09/ldlibrarypath.html
http://blogs.sun.com/rie/date/20040710

如何让.bash_profile里面的设置立即生效?
bash: source .bash_profile

MPI(Message Passing Interface)是一套高性能计算使用的公共的通信接口,也是这套接口软件实现的名称,MPICH是MPI在以太网上实现软件的名称。
MVAPICH是MPI接口在Infiniband网路上的实现版本,使用方法基本一致,在Infiniband上具有较高的性能。
OpenMPI是MPI2实现的高性能的MPI,可以运行于任何网络上。

在SUSE下安装openmpi
在http://www.open-mpi.org下载1.3版本的openmpi在suse 10SP2下安装
依次执行:
./configure --prefix=/usr/local/openmpi-1.3
make
make install

安装完成后,进入安装文件包的examples目录,make,编译完测试程序
在$HOME目录下新建.bash_profile文件(suse默认没有.bash_profile文件),写入内容
PATH=$PATH:/usr/local/openmpi-1.3/bin
LD_LIBRARY_PATH=/usr/local/openmpi-1.3/lib

export PATH LD_LIBRARY_PATH

完成后执行source .bash_profile
但是执行mpirun -np 4 hello_c输入password后,总是出现如下错误:
bash: orted: command not found
解决办法是在$HOME下,新建.bashrc,输入:
PATH=$PATH:/usr/local/openmpi-1.3/bin
LD_LIBRARY_PATH=/usr/local/openmpi-1.3/lib

export PATH LD_LIBRARY_PATH
然后再使用openmpi就没问题了

总结:问题出在对.bash_profile文件和.bashrc文件的作用的不了解,在网上搜到两个文件的区别如下:

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.修改后在shell中立即生效
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。

HPL+GotoBLAS
最近准备在SUSE 10SP2 x86_64下编译HPL,亲自动手后,发现问题原来是这么的多
我的GotoBLAS目录:$(HOME)/GotoBLAS
MPI使用的是openmpi,MPI目录:/usr/local/openmpi-1.3
HPL目录:$(HOME)/hpl-2.0
现在说一下我的安装过程中碰到的问题:
error 1:Make.inc 不存在
一开始就在GotoBLAS下make,
GotoBLAS/exports/下 make so
将 xerblas.o拷贝到GotoBLAS下面
修改完Make.Linux, 直接make arch=Linux,提示Make.inc不存在
找到出错的地方:ln -s /root/hpl-2.0  /Make.Linux Make.inc
看了半天才发现问题的所在,本来的操作是链接 Make.Linux和Make.inc
command应该为:ln -s /root/hpl-2.0/Make.Linux Make.inc
问题所在:在编辑Make.Linux文件时,在HPL目录后面多了些空格
看来Linux下空格的使用一定要慎重

error 2:/root/GotoBLAS/libgoto_core2-r1.26.so: could not read symbols: File in wrong format
除掉error 1后,出现error 2
在网上找资料,应该是libgoto_core2-r1.26.so是32-bit的库导致的
修改GotoBLAS下的Makefile.rule
将BINARY64 = 1
再make,出现error 3

SUSE 关闭防火墙
sudo SuSEfirewall2 stop

error 3: copy_sse_core2.S: Assembler message:
copy_sse_core2.S:244: Error: no such instruction: `palignr $4,%xmm0,%xmm1'
copy_sse_core2.S:249: Error: no such instruction: `palignr $4,%xmm9,%xmm2'
copy_sse_core2.S:254: Error: no such instruction: `palignr $4,%xmm10,%xmm3'
copy_sse_core2.S:259: Error: no such instruction: `palignr $4,%xmm11,%xmm4'
copy_sse_core2.S:264: Error: no such instruction: `palignr $4,%xmm12,%xmm5'
copy_sse_core2.S:269: Error: no such instruction: `palignr $4,%xmm13,%xmm6'
copy_sse_core2.S:274: Error: no such instruction: `palignr $4,%xmm14,%xmm7'
copy_sse_core2.S:279: Error: no such instruction: `palignr $4,%xmm15,%xmm8'

在网上搜到的解释:
Symptom:
GotoBLAS version 1.12 or greater fails to compile with
"copy_sse_core2.S:241: Error: no such instruction: `palignr $4,%xmm0,%xmm1'"
on SLES 10 x86_64.
Explanation:
This problem is caused by an incompatible binutils package released with
SLES 10 x86_64, as well as with SLES 10 SP1 x86_64.
Action:
While in the base build directory for GotoBLAS run the following commands:
cp level1/copy/x86_64/copy_sse.S level1/copy/x86_64/copy_sse_core2.S
cp level1/copy/x86_64/zcopy_sse.S level1/copy/x86_64/zcopy_sse_core2.S
cp level1/dot/x86_64/dot_sse.S level1/dot/x86_64/dot_sse_core2.S
上面这三条语句就是解决问题的办法。

Then re-run quickbuild.64bit.
下面是Kazushige Goto提供的解决这个问题的方法:
http://lists.tacc.utexas.edu/pipermail/gotoblas/2007-December/000003.html
http://lists.tacc.utexas.edu/pipermail/gotoblas/2008-April/000044.html
摘录如下:
What you need is the latest binutils (version 2.17 or 2.18).
Palignr instruction is in SSSE3, not SSE4.
Please apply attached patch. Original source is wrong set force to build Core2 version instead of Nocona (you don't need latest binutils, actually).
But if you want to solve this problem anyway, you may check actual path that gcc executes as. It should be different path like /usr/x86_64-linux/bin/as instead of /usr/bin/as.
最后一句是什么意思暂时还没明白
Kazushige Goto提供的这种解决办法需要安装新版本的binutils,没有测试过,以后有时间再试。
最后使用第一种解决办法解决,make成功。

正常的步骤如下:
(1)安装openmpi,见前面的文章
(2)编译GotoBLAS
编辑vi Makefile.rule
    #BINARY64 = 1  ==>> BINARY64 = 1
在GotoBLAS目录下,执行:
    cp level1/copy/x86_64/copy_sse.S level1/copy/x86_64/copy_sse_core2.S
    cp level1/copy/x86_64/zcopy_sse.S level1/copy/x86_64/zcopy_sse_core2.S
    cp level1/dot/x86_64/dot_sse.S level1/dot/x86_64/dot_sse_core2.S
编译
    make
进exports目录,生成so文件
    cd exports
    make so
拷贝xerbla.o到GotoBLAS目录
    cp level1/others/xerbla.o ./
done!
(3)编译HPL
在HPL目录下,在setup文件中选出Make文件,我的选择是Make.Linux_PII_CBLAS文件,copy在HPL的目录下,
重命名为Make.core2_SELS_x86_64

修改Make.core2_SELS_x86_64,如下:
ARCH         = Linux_PII_CBLAS     ==>>
ARCH         = core2_SELS_x86_64
TOPdir       = $(HOME)/hpl         ==>>
TOPdir         = $(HOME)/hpl-2.0
MPdir        = /usr/local/mpi      ==>> MPdir          = /usr/local/openmpi-1.3
MPlib        = $(MPdir)/lib/libmpich.a   ==>>
MPlib         = $(MPdir)/lib/libmpi.so
LAdir        = $(HOME)/netlib/ARCHIVES/Linux_PII ==>>
LAdir         = $(HOME)/GotoBLAS
LAlib        = $(LAdir)/libcblas.a $(LAdir)/libatlas.a  ==>>
LAlib         = $(LAdir)/libgoto_core2-r1.26.so $(LAdir)/xerbla.o
HPL_OPTS     = -DHPL_CALL_CBLAS  ==>> HPL_OPTS     =
CC           = /usr/bin/gcc  ==>>
CC           = /usr/local/openmpi-1.3/bin/mpicc
LINKER       = /usr/bin/g77 ==>>
LINKER         = /usr/local/openmpi-1.3/bin/mpif77

编译
    make arch=core2_SELS_x86_64
完成后在bin/core2_SELS_x86_64目录下会出现HPL.dat和xhpl两个文件,表示成功

附:
(1)HPL下载地址:
http://www.netlib.org/benchmark/hpl
(2)GotoBLAS下载地址: http://www.tacc.utexas.edu/resources/software/
(3)openmpi下载地址:www.open-mpi.org
修改SUSE的hostname:修改/etc/HOSTNAME文件

Ctrl+D注销系统

你可能感兴趣的:(vmware,linux,bash,SuSE,fortran)