|
|
本帖最后由 Chris——szk 于 2023-5-12 21:46 编辑
因为一直都对于gromacs在Windows下的编译很感兴趣,所以就对gromacs2021和gromacs2022的版本下到研究了一下他们的编译问题,然后就是大致阐述一下过程吧):一.准备
1.Visual Studio 2022
2.Intel oneAPI basetoolkit/fftw-3.3.10
3.CUDA Toolkit 11.6
4.gromacs2021/2022的安装包
二.编译的过程
1.gromacs2021.6(GPU)
在之前Visual Studio 2022的版本刚刚出来的时候就曾经尝试着去编译gromacs2021版本,然后就失败了,具体原因不太记得清了,当时好像是涉及到了编译器版本的问题来着,现在经过测试可以通过VS2022进行gromacs的GPU版本编译了,在编译gromacs2021之前需要将cmake文件中gmxManageNvccConfig.cmake文件进行小小的修改,修改的结果如下,将CXX改为CUDA即可进行正常编译,编译出来的gromacs做过测试可以正常运行,然后也分别做了含有MKL库的gromacs2021gpu版本和含有FFTW3.3.10的gromacs2021gpu版本,发现貌似计算速度没什么区别,MKL的略快一点吧,使用的命令如下:
- cmake -GNinja -S. -B./build -DGMX_GPU=CUDA -DGMX_FFT_LIBRARY=mkl -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=off -DMKL_INCLUDE_DIR="C:/Program Files (x86)/Intel/oneAPI/mkl/latest/include" -DMKL_LIBRARIES="C:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64/mkl_intel_lp64.lib;C:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64/mkl_sequential.lib;C:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64/mkl_core.lib" -DCMAKE_INSTALL_PREFIX=C:/gromacs2021.6
复制代码 可能是需要自己安装一下MKL的吧
2.gromacs2022.1(CPU)
没有做源码的修改可以正常编译CPU版本,命令如下:
- cmake -GNinja -S. -B./build -DGMX_FFT_LIBRARY=mkl -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=off -DMKL_INCLUDE_DIR="C:/Program Files (x86)/Intel/oneAPI/mkl/latest/include" -DMKL_LIBRARIES="C:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64/mkl_intel_lp64.lib;C:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64/mkl_sequential.lib;C:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64/mkl_core.lib" -DCMAKE_INSTALL_PREFIX=C:/gromacs2022.1
复制代码 版本信息如下可以参考一下:
3.未成功GROMACS2022.3(GPU版本)
我做过很多尝试,分别修改了src/gromacs/nbxmn与src/gromacs/ewald下面的几个源码,如果不改的话就会出现奇怪的报错,所以就将例如nbxnm_cuda_kernal_utils.cuh中的static_assert改成了assert之后,编译的过程貌似可以进行较为顺利,但是还是会出现比较离谱的问题如下面这个链接所述:
https://gitlab.com/gromacs/gromacs/-/issues/4582
/MD与/MT不匹配的问题,尝试通过VS去改release的编译选项,也不会成功,而且VS编译很慢 ,目前也不清楚接下来改怎么改,欢迎大家讨论!
附上两个已经编译好的gromacs版本链接:
gromacs2022-cpu:链接:https://pan.baidu.com/s/1rXwIK0rIxC9bJ47FrTmc6g?pwd=6666
提取码:6666
gromacs2021.6-gpu: 链接:https://pan.baidu.com/s/1hlBsuOdJvx9twZOJEnKBYQ?pwd=6666
提取码:6666
---------------------------------------------分割线-----------------------------------------------
最近静下心来重新研究了一下源码的修改方式,发现其实主要修改gmxManageNvccConfig.cmake文件即可,大致修改内容就是将nvcc的编译flag由-std:c++17(linux下这么写没问题)改为-std=c++17,具体在哪里修改我已经在下面的github中写明了,也做了从2021-2023的gromacs的Windows版本的release,感兴趣的各位欢迎下载测试提issue:
https://github.com/CondaPereira/Gromacs_windows_Release(修改方式)
https://github.com/CondaPereira/Gromacs_windows_Release/releases(直接下载使用)
另外在修改完gmxManageNvccConfig.cmake文件之后还需要彻底避免/MT和/MD的mismatch问题,这里我提出一种解决方案为在CMakeList.txt文件中project()对定义之下添加如下代码:
- set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThread[ DISCUZ_CODE_62 ]lt;[ DISCUZ_CODE_62 ]lt;CONFIG:Debug>:Debug>")
复制代码 强制命令在编译GPU版本的GROMACS的时候可以使用/MT的flag而不是/MD,我基本上把cmake文件夹下的所有.cmake文件都看了一遍都没有发现明确定义/MD这一个FLAG的选项,所以应该是在CMakeList.txt文件中只要开始project()就默认配置了参数/MD,强制更改过来即可)
|
评分 Rate
-
查看全部评分 View all ratings
|