最近对只能对着教授没有注释的代码边猜边改的状态越来越厌烦,于是我终于下定决心去学一学 Bridge++ 库的用法,甚至还想复刻教授那个没有注释的库。鉴于物理学家们写的代码实在是让人头大,所以我准备把折腾过程中遇到的问题、学到的小技巧等等都记录下来,以供未来的自己做参考。
文中的安装流程是以 Bridge++ 目前的最新版本 2.0.2
作为例子来完成的,但仅就安装来说这个版本和之前的并没有太大的不同,小改动有
makeconfig.sh
中多了几个选项- 所有额外库的 tarball 文件都已经在
bridge-2.0.2/extra
内提供
我的 bridge++ 库的路径 为 ~/lqcd/bridge-2.0.2
,之后也将以这个路径来举例。
安装 prerequisites#
Lattice QCD 的计算离不开 MPI,这部分就来搭建一下 MPI 环境。选择 MPICH 大概是因为教授的偏好。
我的服务器预装的操作系统为 Debian GNU/Linux 11 (bullseye),而我的办公电脑则是 MacBook Air,故以下说明将以它们为例。最后的目的是 确保存在可以运行的 mpicc 文件 且 Bridge++ 在编译时可以找到 MPI 库。
在 Linux 上#
2024/03/13 Update
关于这部分的安装,Debian 12 上没有这么繁琐,似乎是取消了 Recommended packages 并且直接帮用户安装了这些包。所以在 Debian 12 上的话直接运行sudo apt install mpich
一键安装即可。
运行 sudo apt install gcc mpich
后,可以看到跳出来了一些 Suggested packages,如果需要里面的文档包的话可以安装一部分。而 Recommended packages 的部分一定要装,特别是 libc-dev
、libmpich-dev
这种的,不装的话后续编译都会提醒找不到库(血与泪的教训)。最终需要安装的包有这些:
sudo apt install gcc make libc-dev mpich libhwloc-plugins libmpich-dev
在 MacOS 上#
brew install mpich
一键安装!
安装外部库#
前面提到了,额外库的 tarball 文件都已经在 ~/lqcd/bridge-2.0.2/extra
内提供。为了不产生冲突,我们先把它们复制到其他目录下解压。安装时主要有三步,./configure -> make -> make install
,我们需要在 configure 的时候配置好安装目的地:--prefix=path_to_bridge/extra/lib_name
。
比如对我来说,就要进行如下配置:
./configure --prefix=$HOME/lqcd/bridge-2.0.2/extra/lib_name
这里的 lib_name
也不能乱写,因为在 Bridge++ 中已经规定好了相应的路径。
C-LIME#
安装包可以在 C-LIME 官网找到。
在 lime-1.3.2
文件夹内执行:
mkdir -p ~/lqcd/bridge-2.0.2/extra/lime-1.3.2
./configure --prefix=$HOME/lqcd/bridge-2.0.2/extra/lime-1.3.2
make -j4 # -j 后面的数字指用几个线程编译(多线程可以让 make 更快)
make install
FFTW3#
安装包可以在 FFTW3 官网找到。
在 fftw-3.3.10
文件夹内执行:
mkdir -p ~/lqcd/bridge-2.0.2/extra/fftw
./configure --enable-mpi --prefix=$HOME/lqcd/bridge-2.0.2/extra/fftw
make -j4 # -j 后面的数字指用几个线程编译(多线程可以让 make 更快)
make install
安装 Bridge++#
进入 ~/lqcd/bridge-2.0.2
后,首先运行 ./makeconfig.sh
。里面大多数的选项设为默认即可,下面记录一些需要手动调整的项目:
### Select Platform ### 这个根据自己的情况来选
1 [PC WorkStation with GNU C++] (default)
2 [PC WorkStation with Clang C++]
3 [PC WorkStation with Intel C++]
### Select Communicator Type ###
2 [MPI]
### Select Compiler Optimization Level ###
3 [High]
### Use LIME library Option ###
1 [Yes]
### Use FFTW library Option ###
## set [No] on FX1000
1 [Yes]
然后执行
make all -j4
至此,安装过程就全部结束了!编译好的库放在了 ~/lqcd/bridge-2.0.2/build
路径下,在 ~/lqcd/bridge-2.0.2/tests
以及 ~/lqcd/bridge-2.0.2/sample_spectrum
中可以找到一些代码示例。