PRESTO的配置(高算版)

作者为:левский Уильямс

一、准备工作

在配置安装的时候,没有load任何的Module。 如果在此之前有导入过任何的模块(用module list查看已导入的模块),请全部卸载

保证gcc是4.8.5版本的。

需要下载如下的工具:

  1. fftw-3.3.9 (点击下载)
  2. pgplot5.2 (点击下载,有点慢)
  3. tempo (点击下载)
  4. cfitsio-4.0.0 (点击下载) (注意其大小只有4M左右,如果不是4M左右肯定是下错了)
  5. presto (点击下载)

数据集下载如下:

GBT_Lband_PSR.fil

注:如果想自己下载,可以参考下面的链接

fftw-3.3.9

wget http://www.fftw.org/fftw-3.3.9.tar.gz

pgplot:

wget ftp://ftp.astro.caltech.edu/pub/pgplot/pgplot5.2.tar.gz

tempo:

git clone git://git.code.sf.net/p/tempo/tempo
cfitsio
wget http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio-4.0.0.tar.gz
presto
git clone git://github.com/scottransom/presto

网络方面的问题请自己想办法(ง •_•)ง

需要会的基本命令与操作

二、正式安装

再强调一遍,在配置安装的时候,没有load任何的Module。 如果在此之前有导入过任何的模块(用module list查看已导入的模块),请全部卸载

在正式安装之前,我建议把源码目录和安装目录分开,像下面这样的一个文件树是比较推荐的。

之后所有的指令都是基于下面这个文件结构来的。
~ # 用户根目录
├── Data # 数据集存放目录
│   └── GBT_Lband_PSR.fil
├── Downloads # 源码目录
│   ├── cfitsio
│   ├── fftw
│   ├── pgplot
│   ├── presto
│   └── tempo
└── Program_Files # 安装目录
    ├── cfitsio
    ├── fftw
    ├── pgplot
    ├── presto
    └── tempo

也就是说,需要在用户根目录下(~)新建3个文件夹:DataDownloadsProgram_Files相。 新建完之后,需要在安装目录里(Program_Files)新建5个文件夹。

在上面这个文件目录下,需要添加的环境变量如下:(如果看不懂没关系,那就先跳到下面正式安装部分)

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${HOME}/Program_Files/fftw/lib/" # 这里${HOME}是你用户的根目录
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${HOME}/Program_Files/fftw/lib/pkgconfig"
export PATH="$PATH:${HOME}/Program_Files/fftw/bin"
export C_INCLUDE_PATH="$C_INCLUDE_PATH:${HOME}/Program_Files/fftw/include"
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:${HOME}/Program_Files/fftw/include"

export PGPLOT_DIR="${HOME}/Program_Files/pgplot/" 
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${HOME}/Program_Files/pgplot/"   # 注意:没有lib的子文件夹
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${HOME}/Program_Files/pgplot/lib/pkgconfig"

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${HOME}/Program_Files/tempo/lib/pkgconfig" 
export TEMPO="${HOME}/Program_Files/tempo" 

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${HOME}/Program_Files/cfitsio/lib/pkgconfig"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${HOME}/Program_Files/cfitsio/lib"

export PRESTO="${HOME}/Downloads/presto/" 
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${HOME}/Downloads/presto/lib" 

export PATH="$PATH:${HOME}/Downloads/presto/bin" # 注意,这条是在源码目录下!!!
export C_INCLUDE_PATH="$C_INCLUDE_PATH:${HOME}/Program_Files/presto/include"
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:${HOME}/Program_Files/presto/include"

注: 直接加在~/.bashrc里有风险,可以参考: bashrc改不改?

1.fftw安装

fftw.第1步:安装

进入fftw的源码根目录,然后依次执行如下命令:(如果不知道源码根目录在哪里,看看上面。)

./configure --enable-shared --enable-single --prefix="${HOME}/Program_Files/fftw"
make 
make install

通常来说,第1个安装包的安装都是顺利的。

有几点需要说明:

  1. 此处用make -j4可能会报错。如果执行make报错,就执行一下make clean,清理掉编译错误的文件之后再执行make

fftw.第2步:添加环境变量

加入环境变量 直接在终端里执行下面的指令,仅当前shell有效,退出或者重连之后就失效。 而我们需要环境变量一直存在,因此把下面的指令追加到~/.bashrc文件末尾 note

然后再重新载入.bashrc(重新载入需要在终端里执行source ~/.bashrc

具体来说,就是:

# 第1步,打开.bashrc
vim ~/.bashrc   

# 第2步,把如下行加到.bashrc的末尾
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${HOME}/Program_Files/fftw/lib/" # 这里${HOME}是你用户的根目录
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${HOME}/Program_Files/fftw/lib/pkgconfig"
export PATH="$PATH:${HOME}/Program_Files/fftw/bin"
export C_INCLUDE_PATH="$C_INCLUDE_PATH:${HOME}/Program_Files/fftw/include"
export C_INCLUDE_PATH="$C_INCLUDE_PATH:${HOME}/Program_Files/presto/include"
# 如果写在~/.bashrc里,记得source ~/.bashrc
# 第3步,重新载入.bashrc
source ~/.bashrc   

2.pgplot的安装

pgplot.第1步:移动1个文件到安装目录

现在请切换到pgplot的源码根目录(~/Downloads/pgplot)

执行下面的命令以备份相关文件

##### 如果想直接复制粘贴,请确保你当前的目录是pgplot的源码的根目录!
cp drivers.list ~/Program_Files/pgplot/drivers.list

pgplot.第2步:修改3个文件

用vim打开安装目录下~/Program_Files/pgplot下面的drivers.list文件,也就是执行vim drivers.list,然后把下面这几行前面的!去掉

# 去掉这几行前面的感叹号

   GIDRIV 1 /GIF GIF-format file, landscape                            # line 19
  GIDRIV 2 /VGIF GIF-format file, portrait                            # line 20
  NUDRIV 0 /NULL Null device (no output) Std F77                      # line 38
  PSDRIV 1 /PS PostScript printers, monochrome, landscape Std F77     # line 44
  PSDRIV 2 /VPS Postscript printers, monochrome, portrait Std F77     # line 45
  PSDRIV 3 /CPS PostScript printers, color, landscape Std F77         # line 46
  PSDRIV 4 /VCPS PostScript printers, color, portrait Std F77         # line 47
  XWDRIV 1 /XWINDOW Workstations running X Window System C            # line 71
  XWDRIV 2 /XSERVE Persistent window on X Window System C             # line 72

然后保存并退出——:wq

用vim打开~/Downloads/pgplot/src/grpckg1.inc文件,然后对第29行作如下修改

# Replace " PARAMETER (GRIMAX = 8) " in line 29
#    by   " PARAMETER (GRIMAX = 32) "
然后保存并退出——:wq

用vim打开~/Downloads/pgplot/src/pgplot.inc文件,然后对第7行作如下修改

# Replace " PARAMETER (PGMAXD=8) " in line 7
#    by   " PARAMETER (PGMAXD=32) "
然后保存并退出——:wq

pgplot.第3步:安装前的配置

现在请切换到pgplot的安装目录(~/Program_Files/pgplot)

在安装目录运行位于源码目录里的makemake,并执行2遍。

# 目录结构见本文开头
~/Downloads/pgplot/makemake ~/Downloads/pgplot linux g77_gcc
~/Downloads/pgplot/makemake ~/Downloads/pgplot linux g77_gcc

注:

上面的命令是可以正常执行的。不要看见makemake前面有一堆路径就觉得这个写的有问题。 只需要把对应文件的路径换成你自己的路径。

如果报错说Permission denied,说明你的makemake没有可执行权限。执行下面的指令以加上:

chmod +x ~/Downloads/pgplot/makemake
如遇其它文件没有权限,类似处理。

执行完毕之后安装目录下会出现如下的文件:(如果你安装文件夹和我开头写的是一样的结构的话)

drivers.list   grexec.f   grpckg1.inc   makefile   pgplot.inc   rgb.txt

然后更改makefile文件的第25和第26行

# Replace "FCOMPL=g77"       in line 25 
#   by    "FCOMPL=gfortran" 
# 
# Replace "FFLAGC=-u -Wall -fPIC -O" in line 26
#   by    "FFLAGC=-ffixed-form -ffixed-line-length-none -u -Wall -fPIC -O"

pgplot.第4步,安装

# 在安装目录下执行
make
make cpg

如果make报错,make clean之后再运行一次试试。

注: 如果需要编译pgplot.html,需要更改~/Downloads/pgplot/makehtml文件。只需要把第1行替换为这个:

#!/usr/bin/perl
然后:
# 在安装目录下执行
make pgplot.html

pgplot.第5步,添加环境变量

export PGPLOT_DIR="${HOME}/Program_Files/pgplot/" # 记得替换USER为自己的用户名
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${HOME}/Program_Files/pgplot/"   # 注意:没有lib的子文件夹
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${HOME}/Program_Files/pgplot/lib/pkgconfig"

# 如果写在~/.bashrc里,记得source ~/.bashrc

注:

pgplot有一些demo可以运行。只需要切换到安装目录,运行./pgdemo1,弹出如下信息可说明pgplot正常安装

Graphcs device/type (? to see list, default /Xserve):
# 或 Graphcs device/type (? to see list, default /NULL):

3.Tempo安装

tempo.第1步:安装前的准备

现在请切换到Tempo的源码根目录(~/Downloads/tempo)

可以尝试运行源码根目录下的prepare,像这样:

./prepare   # 一般无法正常运行
如果可以正常工作,就跳到下一步,否则就别执行那个prepare了,改成执行如下的操作:
autoreconf --install

另外需要把./src/get_version_id.sh加上执行权限,并把它的file format改成Unix。(用下面的dos2unix,服务器上自带)

chmod +x ./src/get_version_id.sh
dos2unix ./src/get_version_id.sh
dos2unix ./configure.ac

tempo.第2步:正式安装

./configure --prefix="${HOME}/Program_Files/tempo"
make 
make install

注:

如果之间那步没有把configure.ac转换成unix格式,configure之后会报错,此时重新运行configure是没有用的,需要按如下方法运行

dos2unux ./configure.ac
aclocal
autoconf
automake -a
./configure --prefix="${HOME}/Program_Files/tempo"
之后再继续makemake install即可

tempo.第3步:添加环境

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${HOME}/Program_Files/tempo/lib/pkgconfig" 
export TEMPO="${HOME}/Program_Files/tempo" 
# 如果写在~/.bashrc里,记得source ~/.bashrc

4.cfitsio安装

cfitsio.第1步:安装

现在请切换到cfitsio的源码根目录(~/Downloads/cfitsio)

./configure --prefix="${HOME}/Program_Files/cfitsio" 
make 
make install

cfitsio.第2步:添加环境变量


export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${HOME}/Program_Files/cfitsio/lib/pkgconfig"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${HOME}/Program_Files/cfitsio/lib"
# 如果写在~/.bashrc里,记得source ~/.bashrc

5.安装PRESTO

presto.第1步:添加安装用的环境变量

export PRESTO="${HOME}/Downloads/presto/" # 把USER替换为你的用户名
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${HOME}/Downloads/presto/lib" 
# 如果写在~/.bashrc里,记得source ~/.bashrc

presto.第2步:修改1个文件

现在请切换到presto下的src目录(~/Downloads/presto/src)

打开./realfft.c,编辑第70行,

# 改前
...
for (int fi = 0 ; fi < numfiles ; fi++) {
...



# 改后
...
int fi;
for (fi = 0 ; fi < numfiles ; fi++) {
...

presto.第3步:安装

保持在presto下的src目录(~/Downloads/presto/src)

make makewisdom
make prep
make    # 目前只能安装在源码目录下

# 下面这两行本来也是安装的步骤,但服务器没网就算了,不影响
cd $PRESTO
pip install .

presto.第4步:添加环境变量

export PATH="$PATH:${HOME}/Downloads/presto/bin" # 注意,这条是在源码目录下!!!
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:${HOME}/Program_Files/fftw/include"
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:${HOME}/Program_Files/presto/include"
# 如果写在~/.bashrc里,记得source ~/.bashrc

到目前为止,你应该正确安装了presto。下面我们进行一些验证。输入readfile --help,应该有如下的输出

readfile: unknown option `--help'

   [-page] [-byte] [-b] [-float] [-f] [-double] [-d] [-fcomplex] [-fc] [-dcomplex] [-dc] [-short] [-s] [-int] [-i] [-long] [-l] [-rzwcand] [-rzw] [-bincand] [-bin] [-position] [-pos] [-pkmb] [-bcpm] [-wapp] [-spigot] [-filterbank] [-psrfits] [-fortran] [-index [index]] [-nph nph] [--] file
      Reads raw data from a binary file and displays it on stdout.
          -page: Paginate the output like 'more'
          -byte: Raw data in byte format
             -b: Raw data in byte format
         -float: Raw data in floating point format
             -f: Raw data in floating point format
        -double: Raw data in double precision format
             -d: Raw data in double precision format
      -fcomplex: Raw data in float-complex format
            -fc: Raw data in float-complex format
      -dcomplex: Raw data in double-complex format
            -dc: Raw data in double-complex format
         -short: Raw data in short format
             -s: Raw data in short format
           -int: Raw data in integer format
             -i: Raw data in integer format
          -long: Raw data in long format
             -l: Raw data in long format
       -rzwcand: Raw data in rzw search candidate format
           -rzw: Raw data in rzw search candidate format
       -bincand: Raw data in bin search candidate format
           -bin: Raw data in bin search candidate format
      -position: Raw data in position struct format
           -pos: Raw data in position struct format
          -pkmb: Raw data in Parkes Multibeam format
          -bcpm: Raw data in BCPM format
          -wapp: Raw data in WAPP format
        -spigot: Raw data in Spigot Card format
    -filterbank: Raw data in SIGPROC filterbank format
       -psrfits: Raw data in PSRFITS format
       -fortran: Raw data was written by a fortran program
         -index: The range of objects to display
                 0...2 int values between -1 and oo
                 default: `0' ` -1'
           -nph: 0th FFT bin amplitude (for 'RZW' data)
                 1 double value
                 default: `1.0'
           file: Input data file name.
                 1 value
  version: 12Mar10

如果有这些输出,就说明是成功安装了

三、跑数据集

跑数据集的第1步:预处理

在数据目录(~/Data/)下执行如下指令

readfile ~/Data/GBT_Lband_PSR.fil
rfifind -time 1.0 -o Lband ~/Data/GBT_Lband_PSR.fil
prepdata -nobary -o ~/Data/Lband_topo_DM0.00 -dm 0.0 -mask ~/Data/Lband_rfifind.mask ~/Data/GBT_Lband_PSR.fil

跑数据集的第2步:写脚本

编写如下的脚本,注意保存的后缀需要是*.slurm(可以取名为run.slurm):

#!/bin/bash
#SBATCH -J presto
#SBATCH -p cpu-low
#SBATCH -N 2
#SBATCH -n 16
#SBATCH --ntasks-per-node=8
#SBATCH -t 5:00
#SBATCH -o run.out
#SBATCH -e run.err

module load intel/18.0.3.222

cd $PRESTO/tests/
mpirun -np 2 accelsearch -numharm 4 -zmax 0 "${HOME}/Data/Lband_topo_DM0.00.dat" -ncpus 8

然后,我们可以先在本地试试脚本能不能正常运行。在终端里输入如下:

bash ./run.slurm 1>run.out 2>run.err # 假设你保存的脚本叫run.slurm

如果run.err大小为0b0K,说明没有问题,那么就放心提交作业吧!

注:命令含义解释

1>run.out表示把脚本的执行的正常输出写到run.out文件,尖括号左右不要有空格

2>run.err表示把脚本的执行的错误输出写到run.err文件,尖括号左右不要有空格

跑数据集的第3步:提交

如果在上面你脚本里Lband_topo_DM0.00.dat用的是绝对路径,那么在这一步你的slurm脚本就可以随便放。

在你放脚本的地方执行如下指令:

sbatch run.slurm # 提交作业脚本
如果正常提交,会有如下的结果:
[para_xxxxxxxx@ln04 ~]$ sbatch run.slurm
Submitted batch job xxxxxxxx        # 仅表示成功提交

至于运行的结果,则需要在run.outrun.err里面看了。(对应你slurm脚本的#SBATCH -o run.out#SBATCH -e run.err

至于其它的问题,请自己解决吧,因为我也没有解决(笑

参考文献

CentOS 7 安装 pgplot

PRESTO指导手册中文版

脉冲星PRESTO部署文档


  1. note.直接加在~/.bashrc里有风险,可以参考我的另一篇文章:bashrc改不改

PRESTO的配置(高算版)
https://levsky-williams.top/posts/3da3d5a5/
作者
Levski-Williams
发布于
2024年3月13日
许可协议