[关闭]
@sculxb 2018-01-18T08:51:30.000000Z 字数 5692 阅读 4200

Octopus安装-算盘

Octopus 安装 suanpan


这里主要记录一下在算盘安装Octopus的经历,供后来人参考
首先 让我们以崇高的敬意膜拜一下廉超大神 ▄█▀█● Charles lian
首先记录一下心路历程,刚开始是在自己的pc上安装Octopus,参照一篇新手教程,手动安装了必备的几个库libxc、blas、lapack、gsl、fftw、非常的的心累,关键是安装完了以后手动configure

  1. ./configure --prefix=/home/cris/software/octopus-7.1/ --with-libxc-prefix=/home/cris/software/lib/libxc-3.0.0/bin --with-blas=/home/cris/software/lib/BLAS-3.8.0/blas_LINUX.a --with-lapack=/home/cris/software/lib/lapack-3.8.0/liblapack.a --with-gsl-prefix=/home/cris/software/lib/gsl-2.0/bin --with-fftw-prefix=/home/cris/software/lib/fftw-3.3.7/bin --enable-mpi FC=/home/cris/software/lib/mpich-3.2.1/bin/bin/mpif90 CC=/home/cris/software/lib/mpich-3.2.1/bin/bin/mpicc

具体可参见我的另一个markdown文档https://www.zybuluo.com/sculxb/note/433640
结果就是编译完成之后make check都全都是FAIL
此处求助超哥,超哥表示在ubuntu下面为什么不用apt安装库呢,于是乎

  1. sudo apt install libxc-dev
  2. sudo apt install libblas-dev libscalapack-mpi-dev
  3. sudo apt install liblapack-dev
  4. sudo apt install libfftw3-dev
  5. ./configure
  6. make
  7. makecheck

就解决了问题(⊙o⊙)…

然后又打算在suanpan上装一个,这样就可以算更复杂的任务而且可以大家一起用

然后又开始了漫长的下载库→编译库-安装库的循环历程libxc、blas、lapack、gsl、fftw
然后非常小心翼翼的configure

  1. ./configure --prefix=/opt/software/octopus/octopus-7.1 --enable-mpi FC=/opt/software/openmpi/bin/mpif90 CC=/opt/software/openmpi/bin/mpicc --with-libxc-prefix=/home/xbLiu/src/libxc-3.0.0 --with-blas=/home/xbLiu/src/espresso-5.0.2/BLAS/blas.a --with-lapack=/home/xbLiu/src/lapack-3.8.0/liblapack.a --with-gsl-prefix=/home/xbLiu/src/gsl-2.0 --with-fftw-prefix=/home/xbLiu/src/fftw-3.3.7

然后编译安装,当然还是不可以,虽然make check [OK]了,但是真正mpirun -np 4 octopus的时候还是不行
果断又求救廉超大神,廉超大神改了一些./configure静态库的参数

  1. ./configure --with-libxc-prefix=/home/xbLiu/src/libxc-3.0.0 --enable-mpi --with-blas='-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lmkl_blas95_lp64' --with-gsl-prefix=/home/xbLiu/src/gsl-2.0 --with-fftw-prefix=/home/xbLiu/src/fftw-3.3.7 --prefix=/home/xbLiu/octopus

然后在自己文件夹下面就可以用了,然后提交脚本的话需要在脚本里边source intel的mkl的.sh文件

但是折腾是永不止息的,我还想把octopus安装在公共目录下面,所以就跟管理员要了root权限,在公共目录下面重新安装了libxc、gsl、fftw、三个库然后configure

  1. ./configure --prefix=/opt/software/octopus/octopus-7.1 --enable-mpi --enable-mpi --with-blas='-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lmkl_blas95_lp64' --with-libxc-prefix=/opt/lib/libxc-3.0.0 --with-gsl-prefix=/opt/lib/gsl-2.0 --with-fftw-prefix=/opt/lib/fftw-3.3.7/

然后改提交脚本,报错找不到libquadmath.so.0库,这就让我很不解了,locate一下发现这个库是

  1. /opt/software/anaconda3/lib/libquadmath.so.0
  2. /opt/software/anaconda3/lib/libquadmath.so.0.0.0
  3. /opt/software/anaconda3/pkgs/libgcc-4.8.5-2/lib/libquadmath.so.0
  4. /opt/software/anaconda3/pkgs/libgcc-4.8.5-2/lib/libquadmath.so.0.0.0
  5. /opt/software/gcc-4.8.4-release/lib64/libquadmath.so.0
  6. /opt/software/gcc-4.8.4-release/lib64/libquadmath.so.0.0.0
  7. /opt/software/temp/x86_64-unknown-linux-gnu/libquadmath/.libs/libquadmath.so.0
  8. /opt/software/temp/x86_64-unknown-linux-gnu/libquadmath/.libs/libquadmath.so.0.0.0

下边的,经胡史奇师兄提醒,看了一下root的.bashrc
里边赫然有三个环境变量

  1. export PATH="/opt/software/anaconda3/bin:$PATH"
  2. export PATH=/opt/software/gcc-4.8.4-release/bin:$PATH
  3. export LD_LIBRARY_PATH=/opt/software/gcc-4.8.4-release/lib64:$LD_LIBRARY_PATH

这不正是报错文件里边的三个路径吗,所以就把这三个环境变量添加到自己的.bashrc里边source .bashrc再改了脚本的路径(改成公共目录下Octopus的路径)提交,完成
撒花~~
其实主要还是blas跟lapack静态库的原因导致编译以后运行报错,所以尽量如果在本机使用apt安装这几个库,在suanpan的话就引用已经安装的mkl里边的库然后引入环境变量就可以了。
Octopus不能直接用blas和lapack的静态库应该使用并行版本,就酱

附上提交任务的脚本run_oct.sh

  1. #PBS -N oct_test
  2. #PBS -l nodes=1:ppn=12
  3. #PBS -l walltime=6:00:00
  4. #PBS -q batch
  5. #PBS -V
  6. #PBS -S /bin/bash
  7. ### Set intel environment###
  8. source /opt/intel/composer_xe_2015/bin/compilervars.sh intel64
  9. source /opt/intel/mkl/bin/intel64/mklvars_intel64.sh
  10. source /opt/intel/impi/5.0.2.044/bin64/mpivars.sh
  11. cd $PBS_O_WORKDIR
  12. EXEC=/opt/software/octopus/octopus-7.1/bin/octopus
  13. NP=`cat $PBS_NODEFILE | wc -l`
  14. NN=`cat $PBS_NODEFILE | sort | uniq | tee /tmp/nodes.$$ | wc -l`
  15. cat $PBS_NODEFILE > /tmp/nodefile.$$
  16. mpirun -genv I_MPI_DEVICE rdssm -machinefile /tmp/nodefile.$$ -n $NP $EXEC >& oct.out
  17. rm -rf /tmp/nodefile.$$
  18. rm -rf /tmp/nodes.$$

对于宋鹏师兄改的4.1.2版本

这个版本由于比较老,所以不太好找库文件libxc gsl fftw
所以需要安装比较早版本的一些库,libxc使用2.0.3的库,gsl用1.9的,fftw使用原来的方式去指定路径

  1. ./configure --prefix=/opt/software/octopus/octopus-4.1 --enable-mpi --with-blas='-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lmkl_blas95_lp64' --with-libxc-prefix=/opt/lib/libxc-2.0.3 --with-gsl-prefix=/opt/lib/gsl-1.9 --with-fftw=fftw3 --with-fft-lib=/opt/lib/fftw-3.3.7/lib/libfftw3.a

然后在编译的过程中我碰到一些perl脚本执行的时候permission denied的报错(可能是因为我把文件打包过来再解压的问题)只要找到并且附加权限就可以了find . -name "*.pl" |xargs chmod +x
还有一个问题是宋鹏师兄修改的td.F90的第600多行有一个写法是gfortran不支持的,所以编译的时候会报错

  1. gfortran error: unexpected element '\' in format string at (1)

这个时候只要把'\'去掉就可以了
然后在make check的时候intelmpi会报错不管它直接用脚本提交任务就行了,需要注意的是4.1.2这个上古版本输入文件有很多不一样的地方,需要注意。

Octopus串行版安装

由于Octopus的负优化,出现了未知的原因导致的7.1版本计算银链基态收敛缓慢的问题以及Octopus上下版本不兼容问题。(╯#-_-)╯~~~~~~~~~~~~~╧═╧
迫不得已,只能回过头来安装4.1.2版本
但是呢,4.1.2版本的并行版本里边没有计算吸收谱的可执行文件。 = =
恩,今天我们来安装一下它的串行版本。
由于之前的并行版的经验我们知道最难受的地方在于它使用到的库文件。
由于4.1.2版本比较老,而用到的这些库呢也都更新换代,所以我们最好呢,用我们上面的师兄师姐祖传下来的编译好的库文件,自己安装新的库文件反而会出现莫名其妙的问题比如死活找不到你编译安装的库 = =,可以说是非常心累了
这个祖传的库文件呢,我把压缩包放在百度盘上。路径和密码是
祖传的库文件 提取密码: 8xtm
我们把这个文件下载下来放到要安装库的路径下面我们假设这个路径为{path_a}(后面要用到这个路径名)
然后开始安装
首先解压安装包(并行跟串行的安装包是一样的,只是安装方式不同)
然后cd到解压后的文件夹

  1. ./configure CC=icc CFLAGS="-O2" FC=ifort FCFLAGS="-O3" --prefix=/home/mxguan/workdir/software/opt/OCTOPUS/4.1.2-sgl \
  2. --with-gsl-prefix=/home/mxguan/workdir/software/lib/gsl-1.9/ \
  3. --with-libxc-include=/home/mxguan/workdir/software/lib/include --with-libxc-prefix=/home/mxguan/workdir/software/lib\
  4. --with-blas='-L/opt/intel/composer_xe_2015.1.133/mkl/lib/intel64 -lmkl_blas95_lp64 -lmkl_intel_lp64 -lmkl_core -liomp5 -lmkl_intel_thread -lmkl_blacs_openmpi_lp64' \
  5. --with-fft=fftw3 --with-fft-lib=/home/mxguan/workdir/software/lib/fftw-3.3.4/lib/libfftw3.a

注意把里边的/home/mxguan/workdir/software换成你自己解压的文件夹{path_a}

自己安装过程中踩的坑以及需要注意的东西

编译器不同

在编译的时候注意要使用与编译库文件时使用的同样的编译器来编译Octopus 这个是有'FC='标签来指定的,我的库文件都是使用gfortran编译的,这里就会把它改成gfortran,但是gfortran这个编译器不是很给力啊,出现了即使给它在configure的时候手动指定prefix库文件的路径但是还是找不到,可能是我们不太熟悉gfortran的套路。所以尽量少使用ifort编译器来编译

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注