从零开始学Octopus(5):Octopus12.2并行版安装详解

从零开始学Octopus(5):Octopus12.2并行版安装详解

首页休闲益智真实模拟解压器2更新时间:2024-09-23

1 简介

Ocotpus是一款科学计算软件,可以对多种不同体系进行从头计算(ab initio)模拟。在密度泛函理论(DFT)的理论框架下,用量子力学描述电子, 用经典粒子描述原子核,电子-核相互作用以赝势(Pseudopotentials)近似来描述。Octopus可以进行基态计算,也可以利用含时密度泛函(TDDFT)进行含时演化模拟。

Octopus还支持MPI和OpenMP进行并行计算,也支持OpenCL和CUDA利用GPU计算。Octopus是一款Linux系统下的免费软件,在GNU通用公共许可证(GPL)框架下发布,你可以免费下载、使用和修改。

Octopus的安装过程比较复杂,因为它有很多依赖库。本文根据octopus官网提供的详细安装指南,分享如何在Ubuntu系统中安装Octopus 12.2并行(parallel)版本的全过程。

在安装之前,我们先创建一个文件夹来作为octopus和各种库的安装位置,我们假设这个文件夹路径为 <basedir> ,别忘了在后文对这个文件夹进行操作时要将它换成你自己的路径,例如,我的<basedir>为/home/casaries/octopus/。

2 编译工具及编译器2.1 编译工具

首先,make、automake、m4和libtool这几个包是必要条件,可以直接用apt安装,使用“包名 --version”来检查是否安装成功。

sudo apt-get install make sudo apt-get install automake sudo apt-get install m4 sudo apt-get install libtool

其中make和automake是重要的编译工具,在linux环境下安装软件,一般都通过“配置->编译->安装”这个过程实现,即

./configure -> make -> make install

m4是一个通用的宏处理器,大多数人需要m4仅仅是因为GNU autoconf中的 “configure” 脚本依赖它。

libtool是处理动态链接库的工具,可以解决库依赖的问题,将使用动态库的复杂性隐藏在统一、可移植的接口中。

2.2 编译器

Octopus的代码使用标准Fortran 2003写成,还有一些例程(routines)是使用C语言编写,所以我们需要一个C编译器和Fortran 2003编译器。命令行下直接使用apt命令安装即可。

$ sudo apt install gcc # C编译器 $ sudo apt install gfortran # fortran编译器

很多人系统中可能已经安装过这两个编译器。以C编译器gcc为例,检查是否已经安装过gcc,可以输入以下命令:

gcc --version

意为查看gcc的版本,如果已经安装,则会输出相应版本号。

2.3 编译器标志

通常编译器标志(Compiler flags)取为系统默认选择的优化标志,但在安装Octopus过程中,需要我们指定标志,亲测使用不同标志会导致安装报错。这里,C编译器标志指定为:

-O3 -march=native (大写字母O)

fortran编译器标志为:

-O3 -ffree-line-length-none

如果正在编译32/64位架构,最好明确告诉编译器您想要哪种类型的二进制文件,许多问题都是由无意中混合32位和64位代码引起的。对于Octopus,通常你需要一个64位二进制文件(大多数编译器中的-m64标志)。由于此标志应始终传递,建议将其包含在本文中使用的编译器的命令中(有时会省略优化标志),因此例如 <cc> 可以是gcc -m64。

本文所有编译过程都使用上述标志。

2.4 并行编译器

这里采用Open MPI。Open MPI(Message Passing Interface)是一个开源的消息传递接口库项目, 用于处理并行计算。安装步骤如下:

(1)首先下载压缩包 https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.3.tar.gz;

(2)解压压缩包并进入新产生的文件夹;

(3)配置

./configure --prefix=<basedir> CC="gcc -m64" CFLAGS="-O3 -march=native" F77="gfortran -m64" F77FLAGS="-O3 -ffree-line-length-none"

(4)编译并安装

make make install

(5)可执行文件放在 <basedir>/bin/ 文件夹内,接下来将其路径添加到环境变量里(修改 ~/.bashrc 文件),

cd ~ vim .bashrc

在里面加入:

export PATH=<basedir>/octopus/bin:$PATH

重新启动terminal,以使修改生效。

3 数学依赖库

Octopus依赖于5个数学库:BLAS,LAPACK,GSL,FFTW3,LibXC,下面逐一介绍。

3.1 BLAS

BLAS (Basic Linear Algebra Subprograms)即基本线性代数子程序,提供用于执行基本矢量和矩阵运算的标准构建块的例程。

1级BLAS执行标量、矢量和矢量-矢量运算,2级BLAS执行矩阵矢量运算,3级BLAS执行矩阵运算。由于BLAS高效,便携且广泛可用,因此它们通常用于开发高质量线性代数软件,例如LAPACK。

安装步骤如下:

(1)首先在网上下载压缩包:http://www.netlib.org/blas/blas-3.11.0.tgz;

(2)解压压缩包并进入新创建的BLAS文件夹;

(3)编辑make.inc文件,并修改fortran编译器的标志为:

FC = gfortran -m64 FFLAGS = -O3 -ffree-line-length-none FFLAGS_DRV = $(FFLAGS) FFLAGS_NOOPT = LOADER = gfortran LOADOPTS =

(4)接下来使用make命令来进行编译,这会花费一段时间。

make

也可以使用2个或更多核同时编译来加速这一过程,lscpu可以显示本机cpu核数。

make -j 2

(5)然后在octopus安装路径下创建新文件夹 lib。

mkdir <basedir>/lib

(6)将make命令后新产生的文件blas_LINUX.a复制到<basedir>/lib/文件夹下并重命名:

cp blas_LINUX.a <basedir>/lib/libblas.a

注:产生的新文件总是叫blas_LINUX.a,独立于你所用的操作系统,只是叫这个名字而已。

3.2 LAPACK

Lapack即Linear Algebra Package,是一个线性代数包,它提供了求解联立线性方程组,线性方程组最小二乘解,特征值问题和奇异值问题的例程,还提供了相关的矩阵因子分解(LU,Cholesky,QR,SVD,Schur,广义Schur),以及相关计算。

安装步骤如下:

(1)首先在网上下载压缩包:https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.11.0.tar.gz;

(2)解压压缩包并进入新产生的lapack文件夹;

(3)复制make.inc.example文件为make.inc

cp make.inc.example make.inc

(4)编辑make.inc文件,修改相应编译器的标志为:

FC = gfortran -m64 FFLAGS = -O3 -ffree-line-length-none FFLAGS_DRV = $(FFLAGS) FFLAGS_NOOPT = LOADER = gfortran LOADOPTS =

(5)接下来使用make lib命令来进行编译,意为只编译部分功能如lib,不必编译全部功能。

(6)将新产生的文件lapack_LINUX.a复制到<basedir>/lib/文件夹下并重命名:

cp lapack_LINUX.a <basedir>/lib/liblapack.a

注:产生的新文件可能叫lapack_LINUX.a(官方教程产生的) ,也可能叫lapack.a或者 liblapack.a。

3.3 GSL

这是一个GNU数学函数库,该库提供了广泛的数学例程,如随机数生成器,特殊函数和最小二乘拟合。

安装步骤如下:

(1)首先下载压缩包 https://mirror.ibcp.fr/pub/gnu/gsl/gsl-latest.tar.gz;

(2)解压压缩包并进入新产生的文件夹;

(3)运行配置文件:

./configure CC="gcc -m64" CFLAGS="-O3 -march=native" --prefix=<basedir> --disable-shared --enable-static

注:configure命令的参数解释之--prefix:该参数指定了安装路径,这里我们把库安装在之前设好的<baseidr>下,并非是下载解压缩库后所形成的的新文件夹。

(4)编译并安装

make make install3.4 LibXC

这是一个密度泛函理论(DFT)的交换关联泛函库,其中你可以找到不同类型的泛函,例如:LDA, GGA, hybrids和mGGA。 Libxc库也可以用于Abinit软件,目前最新版本为6.1.0。安装步骤如下:

(1)首先下载压缩包 http://www.tddft.org/programs/libxc/down.php?file=6.1.0/libxc-6.1.0.tar.gz;

(2)解压压缩包并进入新产生的文件夹;

(3)配置:

./configure --prefix=<basedir> CC="gcc -m64" CFLAGS="-O3 -march=native" FC="gfortran -m64" FCFLAGS="-O3 -ffree-line-length-none"

注意:如果下载的不是稳定发行版,没有configure文件,需要通过命令autoreconf -i来产生 configure。

(4)编译并安装

make make install3.5 FFTW(并行版)

FFTW(the Fastest Fourier Transform in the West)是一个C子程序库,用于计算一个或多个维度,任意输入大小,实数和复数数据的离散傅里叶变换(DFT)。

安装步骤如下:

(1)首先下载压缩包 https://www.fftw.org/fftw-3.3.10.tar.gz;

(2)解压压缩包并进入新产生的文件夹;

(3)配置:

./configure --prefix=<basedir> CC="gcc -m64" CFLAGS="-O3 -march=native" F77="gfortran -m64" F77FLAGS="-O3 -ffree-line-length-none" --enable-mpi --enable-openmp --enable-threads --enable-shared --enable-static

(4)编译并安装:

make make install4 Octopus安装及测试4.1 Octopus安装

编译完这些库后,我们可以开始编译Octopus了。

安装步骤如下:

(1)首先下载最新版本的Octopus: https://octopus-code.org/down.php?file=12.2/octopus-12.2.tar.gz;

(2)解压压缩包并进入新产生的文件夹;

(3)定义几个环境变量,用来写配置脚本(bash中),

export LIBS_BLAS=basedir/lib/libblas.a export LIBS_LAPACK=basedir/lib/liblapack.a export LIBS_FFT=basedir/lib/libfftw3.a

(3)生成configure,

autoreconf -i

(4)配置脚本, 这里我们使用mpi版本的c和fortran编译器编译:

./configure CC="mpicc -m64" CFLAGS="-O3 -march=native" FC="mpifort -m64" FCFLAGS="-O3 -ffree-line-length-none" --prefix=<basedir> --with-gsl-prefix=<basedir> --with-libxc-prefix=<basedir> --with-fftw-prefix=<basedir> --enable-mpi --enable-openmp

注:configure命令的参数解释之--with :该参数指定了配置文件时去哪里寻找对应的库;

注: 如果想编译更多功能,可以使用帮助命令查看具体细节./configure -h。

(5)编译并安装

make make install

如果一切都进展顺利的话,Octopus应该会成功安装在你一开始设定的<basedir>文件夹内!

4.2 串行测试

新建一空文件夹并进入,建立一个文件,命名为inp,并将其内容编辑为:

CalculationMode = gs %Coordinates 'H' | 0 | 0 | 0 % Spacing = 0.25 * angstrom Radius = 4.0 * angstrom

注意:文件只能命名为inp,octopus只识别这个输入文件名。接下来试运行:

octopus &> output

即可运行octopus,&>意为将输出结果重定向到新建的output文件中。

若只运行:

octopus

则输出会在屏幕上实时显示。

4.3 并行测试

运行如下命令:

mpirun -np 2 octopus

输出信息中可以看到并行信息, 表示测试成功!

************************** Parallelization *************************** Info: Octopus will run in *parallel* Number of processes : 2 Number of threads per process : 1 ......

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved