工作需要在 HPC 集群上编译 FaSTMM,踩了一些小坑之后解决了问题。现将主要步骤总结如下:
首先,我测试时集群上的 HDF5 几个版本均不奏效,因此需要自己编译具有 Fortran 支持的 HDF5。这一步比较简单,我写在了另一篇文章里: HPC 编译 HDF5。
FaSTMM 依赖于 LAPACK 和 BLAS,编译脚本需要 CMake,还需要 Fortran 编译器来进行编译,因此需要提前在集群上加载好。其中 gcc 应该在上一步编译 HDF5 时已经加载上了。
module load gcc/4.8.5
module load cmake/3.16.0
module load lapack/3.9.0-gcc-4.8.5
克隆 FaSTMM 仓库到集群本地。
git clone https://bitbucket.org/planetarysystemresearch/fastmm_v1.0.git
cd fastmm_v1.0
这里需要对 CMakeLists.txt
进行一些修改:
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ed0bef3..596f812 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -13,7 +13,7 @@ FIND_PACKAGE(HDF5 COMPonENTS Fortran REQUIRED)
INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR})
-SET (CMAKE_Fortran_FLAGS "-O3 -cpp -mtune=native -fopenmp")
+SET (CMAKE_Fortran_FLAGS "-O3 -cpp -mtune=native -fopenmp -lblas -llapack")
ADD_EXECUTABLE(${PROJECTNAME} "main.f90"
"common.f90"
主要是在编译选项中加上了 -lblas
和 -llapack
,否则在编译完的链接那一步会报错找不到有关函数。
接下来就可以编译了。注意要使用 HDF5 附带的 h5fc
:
mkdir build && cd build
FC=~/.local/hdf5/bin/h5fc cmake ../src
make