由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()