由Visual Studio 2022编译而成,其中FFTW采用单精度版本;SIMD编译选项采用SSE4.1。
文件链接:https://donothing.cn/NetDisk
GROMACS官方源码:https://manual.gromacs.org/current/download.html
2022.12.31
前面编译的是不包含GPU的版本,编译gromacs的GPU版历经许多波折,但在2022年结束之际终于编译成功。
在Windows上使用Visual Studio来编译GMX_GPU模块,主要面临两个问题,
- gmxManageNvccConfig.cmake 中
GMX_CUDA_NVCC_FLAGS
标识符解析错误问题 - Cmake的(-MD -MT)编译链接问题
问题1 通过修改自定义标识符来匹配MSVC编译器,即
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8)
list(APPEND GMX_CUDA_NVCC_FLAGS "${CMAKE_CXX14_STANDARD_COMPILE_OPTION}")
else()
list(APPEND GMX_CUDA_NVCC_FLAGS "-std=c++17")
endif()
问题2 由Cmake默认为MSVC启用-MD编译链接选项引发。具体可查看Cmake手册中CMAKE_MSVC_RUNTIME_LIBRARY
字段解释,可以通过自定义以下标识符解决,
if(MSVC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
check_cxx_source_compiles("#include <intrin.h>\n int main(){unsigned long r;unsigned long i=1;_BitScanReverse(&r,i);return r;}" HAVE_BITSCANREVERSE)
check_cxx_source_compiles("#include <intrin.h>\n int main(){unsigned long r;unsigned __int64 i=1;_BitScanReverse64(&r,i);return r;}" HAVE_BITSCANREVERSE64)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "XL")
check_cxx_source_compiles("int main(){ return __cntlz4(1);}" HAVE_CNTLZ4)
check_cxx_source_compiles("int main(){ return __cntlz8(1);}" HAVE_CNTLZ8)
endif()
2 INSTALL CP2K WITH GROMACS TO DO QM/MM
编译cp2k时,开启libcp2k选项
make ARCH=<your arch file> VERSION=<your version like psmp> libcp2k
FFT, BLAS and LAPACK应该与cp2k编译时一致,
# sudo apt install mpich
sudo tar -zxvf gromacs-2022.tar.gz
cd gromacs-2022
plumed patch -p
# choose 2022.3
mkdir build
cd build
# use sudo to install!!!
# no need to specify the fftw2 location and need to renew version of oppenblas and scalapack.
cmake .. -DBUILD_SHARED_LIBS=OFF -DGMXAPI=OFF -DGMX_INSTALL_NBLIB_API=OFF -DGMX_DOUBLE=ON -DGMX_CP2K=ON -DCP2K_DIR=/home/eli/program/cp2k-9.1/lib/local/ssmp -DGMX_FFT_LIBRARY=fftw3 -DFFTWF_LIBRARY=/home/eli/program/cp2k-9.1/tools/toolchain/install/fftw-3.3.8/lib -DFFTWF_INCLUDE_DIR=/home/eli/program/cp2k-9.1/tools/toolchain/install/fftw-3.3.8/include -DGMX_BLAS_USER=/home/eli/program/cp2k-9.1/tools/toolchain/install/openblas-0.3.19/lib/libopenblas.a -DGMX_LAPACK_USER=/home/eli/program/cp2k-9.1/tools/toolchain/install/scalapack-2.1.0/lib/libscalapack.a -DGMX_MPI=ON
#cmake .. -DBUILD_SHARED_LIBS=OFF -DGMXAPI=OFF -DGMX_INSTALL_NBLIB_API=OFF -DGMX_DOUBLE=ON-DGMX_FFT_LIBRARY=fftw3 -DFFTWF_LIBRARY=/opt/cp2k-2023.1/tools/toolchain/install/fftw-3.3.10/lib -DFFTWF_INCLUDE_DIR=/opt/cp2k-2023.1/tools/toolchain/install/fftw-3.3.10/lib/libfftw3.a -DGMX_BLAS_USER=/opt/cp2k-2023.1/tools/toolchain/install/openblas-0.3.21/lib/libopenblas.a -DGMX_LAPACK_USER=/opt/cp2k-2023.1/tools/toolchain/install/scalapack-2.2.1/lib/libscalapack.a -DGMX_CP2K=ON -DCP2K_DIR="/opt/cp2k-2023.1/lib/local/psmp" -DGMX_MPI=on
# -DGMX_BUILD_OWN_FFTW=ON
make -j24
make install