PETSc 编译安装教程
# 什么是PETSc
PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations. It supports MPI, and GPUs through CUDA or OpenCL, as well as hybrid MPI-GPU parallelism.
英文版安装说明可参考官网: https://www.mcs.anl.gov/petsc/documentation/installation.html#exampleusage
因为安装PETSc可以有很多很多扩展包,所以我们在共享目录下只安装了基础的几个扩展,用户有需求的可以自行下载安装自己需要的扩展包。下面先介绍安装最基础的包,然后说明如何安装扩展包。
# 安装最基础环境
最基础的编译环境包括:
- 编译器 Intel Compiler 或 GNU Compiler
- MPI编译器:如mpich等
- BLAS/LAPACK库:如使用netlib的lapack,或者fblaslapack,或者Intel的MKL库
举例如下:
# 下载一个petsc的包,如无特殊需求,可以下载lite版,小一点
# 下载地址:https://www.mcs.anl.gov/petsc/download/index.html
cd ~ # 进入用户根目录
tar zxvf petsc-lite-3.14.1.tar.gz
cd petsc-lite-3.14.1
# 加载编译环境(Intel Compiler + MPI库)
module add Intel_compiler/13.0
module add MPI/mpich/intel2013
module add mkl/13.0.0
module add cmake/3.14.4
# configure
./configure prefix=$HOME/software/petsc/3.14.1-icc13-mpich \
--with-cc=mpicc --with-cxx=mpicxx --with-fc=mpif90 \
--with-mpiexec=/usr/bin/yhrun \
--with-blas-lapack-dir=$MKLROOT
# make
make PETSC_DIR=$HOME/petsc-3.14.1 PETSC_ARCH=arch-linux2-c-debug
# make install
make PETSC_DIR=$HOME/petsc-3.14.1 PETSC_ARCH=arch-linux2-c-debug install
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
建议
- 官网介绍有很多种情况下的配置说明,推荐阅读
- 默认是debug版本,如果希望获得opt版本,请添加configure的参数
--with-debugging=0
# 安装扩展包
PETSc添加扩展的方式有2中:
- 通过
--with-xx-dir
的方式指定已经安装过的目录 - 通过
--download-xx
的方式自动下载包并编译安装(需要联网) - 通过
--download-xx=/path/to/package.tar.gz
指定安装包的路径,扩展包可以去https://ftp.mcs.anl.gov/pub/petsc/externalpackages/下载
我们在平台上已经将https://ftp.mcs.anl.gov/pub/petsc/externalpackages/
网址下的包下载到的系统目录(定期会更新),TH-1A
集群用户的目录为/vol-th/software/petsc/externalpackages
,用户可以自行指定该目录。
我们尝试安装几个扩展包吧,比如:
- fblaslapack
- fftw
- hdf5
- netcdf
- metis
# 寻找包名
寻找包名有2个方式:
简单的方式,前往系统目录找一个比较新的。例如fftw
,我们前往/vol-th/software/petsc/externalpackages
目录,使用如ls | grep fftw
命令,找到包:
fftw-3.1.1.tar.gz
fftw-3.1.2.tar.gz
fftw-3.2alpha2.tar.gz
fftw-3.2alpha3.tar.gz
fftw-3.3.2.tar.gz
fftw-3.3.3.tar.gz
fftw-3.3.7.tar.gz
fftw-3.3.8.tar.gz
fftw-3.3alpha1.tar.gz
fftw-3.3-beta1.tar.gz
2
3
4
5
6
7
8
9
10
我们可以选用如最新的fftw-3.3.8.tar.gz
包。
其他的包:
- fblaslapack : fblaslapack-3.4.2.tar.gz
- hdf5 : hdf5-1.12.0.tar.bz2
- netcdf : netcdf-4.5.0.tar.gz
- metis : metis-5.1.0-p3.tar.gz
第二种,可以在petsc源码包的目录,找到该版本的对应的库版本。
# 进入用户根目录
cd ~
# 解压缩
tar zxvf petsc-lite-3.14.1.tar.gz
# 进入压缩包
cd petsc-lite-3.14.1
# 进入指定目录
cd config/BuildSystem/config/packages
2
3
4
5
6
7
8
这个目录下有各个包的下载方式和版本,例如fftw库,我们使用ls
查看全部文件,再找到fftw.py
文件,或者使用ls | grep fftw
找到fftw.py
文件。
我们打开这个文件:vim fftw.py
,内容如下:
import config.package
class Configure(config.package.GNUPackage):
def __init__(self, framework):
config.package.GNUPackage.__init__(self, framework)
# host locally as fftw.org url can expire after new release.
self.download = ['http://www.fftw.org/fftw-3.3.8.tar.gz',
'http://ftp.mcs.anl.gov/pub/petsc/externalpackages/fftw-3.3.8.tar.gz']
self.functions = ['fftw_malloc','fftw_mpi_cleanup']
self.includes = ['fftw3-mpi.h']
self.liblist = [['libfftw3_mpi.a','libfftw3.a']]
self.pkgname = 'fftw3'
self.precisions = ['double']
return
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
可以看到这个版本的petsc库自动关联的fftw库fftw-3.3.8.tar.gz
,我们前往/vol-th/software/petsc/externalpackages
,寻找到这个文件即可。
其他的包:
- fblaslapack : fblaslapack-v3.4.2-p3.tar.gz
- hdf5 : hdf5-1.12.0.tar.bz2
- netcdf : netcdf-4.5.0.tar.gz
- metis : metis-5.1.0-p3.tar.gz
注意
如果在/vol-th/software/petsc/externalpackages目录没有找到你希望的包,那么可以根据对应的py文件的路径,自行下载压缩包,传到自己账号目录下,并在接下来的路径设置时,配置为自己的路径
# 安装扩展包
注意给出扩展包的路径即可
# 进入用户根目录
cd ~
# 如果之前没有解压缩过
tar zxvf petsc-lite-3.14.1.tar.gz
cd petsc-lite-3.14.1
# 加载编译环境(GNU Compiler + MPI库)
module add GCC/4.9.4
module add MPI/mpich/gcc4.9.4
module add cmake/3.14.4
# configure
./configure prefix=$HOME/software/petsc/3.14.1-gcc49-mpich \
--with-cc=mpicc --with-cxx=mpicxx --with-fc=mpif90 \
--with-mpiexec=/usr/bin/yhrun \
--download-fblaslapack=/vol-th/software/petsc/externalpackages/fblaslapack-3.4.2.tar.gz \
--download-fftw=/vol-th/software/petsc/externalpackages/fftw-3.3.8.tar.gz \
--download-hdf5=/vol-th/software/petsc/externalpackages/hdf5-1.12.0.tar.bz2 \
--download-netcdf=/vol-th/software/petsc/externalpackages/netcdf-4.5.0.tar.gz \
--download-metis=/vol-th/software/petsc/externalpackages/metis-5.1.0-p3.tar.gz \
--with-debugging=0 \
COPTFLAGS="-O3" \
CXXOPTFLAGS="-O3" \
FOPTFLAGS="-O3"
# make
make PETSC_DIR=$HOME/petsc-3.14.1 PETSC_ARCH=arch-linux2-c-opt
# make install
make PETSC_DIR=$HOME/petsc-3.14.1 PETSC_ARCH=arch-linux2-c-opt install
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
建议
优先推荐使用Intel Compiler + 系统自带MPI + MKL库,这样速度快强烈不建议通过PETSc自行编译mpi,因为使用系统的MPI速度快
# 测试
配置环境(以刚刚使用gcc4.9.4编译的为例)
module add GCC/4.9.4
module add MPI/mpich/gcc4.9.4
export PETSC_DIR=$HOME/petsc-3.14.1
export PETSC_ARCH=arch-linux2-c-opt
2
3
4
进入算例目录编译并运行
cd ~/petsc-3.14.1/src/ksp/ksp/examples/tutorials
# 编译
make ex50
# 运行
./ex50 -da_grid_x 4 -da_grid_y 4 -mat_view
2
3
4
5
6
7