分子动力学软件 Gromacs-2022 Windows x64版

由Visual Studio 2022编译而成,其中FFTW采用单精度版本;SIMD编译选项采用SSE4.1。

图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模块,主要面临两个问题,

  1. gmxManageNvccConfig.cmake 中 GMX_CUDA_NVCC_FLAGS 标识符解析错误问题
  2. 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()

希望你能够评论一下我,这样我就可以给你点赞了💖