计算化学公社

标题: Windows下的gromacs2021.6的GPU版本与gromacs2022的CPU版本 [打印本页]

作者
Author:
Chris——szk    时间: 2022-11-28 19:34
标题: Windows下的gromacs2021.6的GPU版本与gromacs2022的CPU版本
本帖最后由 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的略快一点吧,使用的命令如下:
(, 下载次数 Times of downloads: 113)
  1. 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版本,命令如下:
  1. 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
复制代码
版本信息如下可以参考一下:
(, 下载次数 Times of downloads: 112)


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()对定义之下添加如下代码:
  1. 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,强制更改过来即可)

作者
Author:
yygong    时间: 2022-11-28 23:46
GROMACS2022.3的GPU版本编译确实不好整
作者
Author:
Chris——szk    时间: 2022-11-29 03:48
yygong 发表于 2022-11-28 23:46
GROMACS2022.3的GPU版本编译确实不好整

确实不好整,还会一直跳出来显示runtime library mismatch,哎,头大(
作者
Author:
charmm36    时间: 2022-11-29 19:01
请问,您编译好的gromacs版本能直接用吗?我自己编译的没成功
作者
Author:
夏一天    时间: 2022-11-29 19:48
大神,gromacs2021.6-gpu版下载运行时报错,显示找不到cufft64_10.dll,好像没有上传这个文件
作者
Author:
Chris——szk    时间: 2022-11-29 22:51
夏一天 发表于 2022-11-29 19:48
大神,gromacs2021.6-gpu版下载运行时报错,显示找不到cufft64_10.dll,好像没有上传这个文件

这个我没有一起上传,这个缺失的话可以直接安装一下cudatoolkit就可以运行了

作者
Author:
Chris——szk    时间: 2022-11-29 22:53
charmm36 发表于 2022-11-29 19:01
请问,您编译好的gromacs版本能直接用吗?我自己编译的没成功

两个都可以的,gromacs2021.6的这个版本可能需要自己安装好cudatoolkit就可以运行了,也有可能需要自己安装一下mkl库,intel oneAPI basetoolkit中安装一下MKL就可以了

作者
Author:
charmm36    时间: 2022-11-30 08:38
Chris——szk 发表于 2022-11-29 22:53
两个都可以的,gromacs2021.6的这个版本可能需要自己安装好cudatoolkit就可以运行了,也有可能需要自己安 ...

嗯嗯,谢谢
作者
Author:
heguscu    时间: 2022-11-30 23:08
驱动版本516.59,设置好环境变量后可以直接用
作者
Author:
大村驴    时间: 2022-12-1 11:16
你也停在这一步了
作者
Author:
对抗路达摩    时间: 2022-12-1 11:49
在咸鱼看到有个高手卖2022.3的windows版本,并且他自己也说这个版本特别难编译。
作者
Author:
夏一天    时间: 2022-12-1 22:18
win版的2022.3比2021.6能快多少呢?有没必要换2022.3?好像2022.4也出来了
作者
Author:
Chris——szk    时间: 2022-12-3 15:16
对抗路达摩 发表于 2022-12-1 11:49
在咸鱼看到有个高手卖2022.3的windows版本,并且他自己也说这个版本特别难编译。

我刚刚试出来了,今天应该可以发布一下编译好的Windows版本的2022了
作者
Author:
Chris——szk    时间: 2022-12-3 15:18
夏一天 发表于 2022-12-1 22:18
win版的2022.3比2021.6能快多少呢?有没必要换2022.3?好像2022.4也出来了

个人感觉2022的bug还是有一点多的,个人更加偏向于使用2021.6,目前来说

作者
Author:
Chris——szk    时间: 2022-12-3 15:21
夏一天 发表于 2022-12-1 22:18
win版的2022.3比2021.6能快多少呢?有没必要换2022.3?好像2022.4也出来了

2022的优点来说就是自由能计算支持SIMD指令集,使用GPU计算现在加速相比之前的版本快2-3倍吧,我上次找了一个小例子试了一下,确实差不多两倍,我用的3060
作者
Author:
Chris——szk    时间: 2022-12-3 15:35
gromacs2022的Windows系统下的GPU版本在这个链接,感兴趣可以尝试一下),设置环境变量就可以运行
链接:https://pan.baidu.com/s/18vuQLPTxm5sHq7PmTvYA7g?pwd=6666
提取码:6666
作者
Author:
Acee    时间: 2022-12-4 16:08
我之前也编译出了2022cpu版本的,gpu的没成功
作者
Author:
Acee    时间: 2022-12-4 16:09
Chris——szk 发表于 2022-12-3 15:16
我刚刚试出来了,今天应该可以发布一下编译好的Windows版本的2022了

期待,有编译过程的教程就更好啦
作者
Author:
夏一天    时间: 2022-12-5 11:35
Chris——szk 发表于 2022-12-3 15:21
2022的优点来说就是自由能计算支持SIMD指令集,使用GPU计算现在加速相比之前的版本快2-3倍吧,我上次找了 ...

这个“自由能计算支持SIMD指令集”指的是什么自由能计算?和gmmpbsa计算自由能不是一回事吧?
作者
Author:
夏一天    时间: 2022-12-5 11:38
Chris——szk 发表于 2022-12-3 15:35
gromacs2022的Windows系统下的GPU版本在这个链接,感兴趣可以尝试一下),设置环境变量就可以运行
链接:h ...

这2022.1版MD速度和2021.6一样,貌似没有提升
作者
Author:
Entropy.S.I    时间: 2022-12-5 11:54
Chris——szk 发表于 2022-12-3 15:21
2022的优点来说就是自由能计算支持SIMD指令集,使用GPU计算现在加速相比之前的版本快2-3倍吧,我上次找了 ...

2021版本计算TI/FEP就比2020版本快2-3倍。2022版本在这方面提升相较于2021版并不大。或许你所谓的“之前版本”指的是2020,但这里在说2021。
作者
Author:
Chris——szk    时间: 2022-12-5 15:00
Entropy.S.I 发表于 2022-12-5 11:54
2021版本计算TI/FEP就比2020版本快2-3倍。2022版本在这方面提升相较于2021版并不大。或许你所谓的“之前 ...

2022相比于2021版本,我找了TI和FEP 的benchmark测试过了一下确实没什么速度区别,但是好像在溶解自由能上面可能要快个2-3倍),可以试试下面这个)
https://www.mpinat.mpg.de/632213/benchSNC.zip
作者
Author:
Chris——szk    时间: 2022-12-5 15:01
夏一天 发表于 2022-12-5 11:35
这个“自由能计算支持SIMD指令集”指的是什么自由能计算?和gmmpbsa计算自由能不是一回事吧?

不是不是,我目前测出来的好像这个功能对溶解自由能管用,不知道具体设置上还有没有什么区别)

作者
Author:
Chris——szk    时间: 2022-12-5 15:02
夏一天 发表于 2022-12-5 11:38
这2022.1版MD速度和2021.6一样,貌似没有提升

一般MD的速度确实提升不大
作者
Author:
Entropy.S.I    时间: 2022-12-5 15:57
本帖最后由 Entropy.S.I 于 2022-12-5 16:04 编辑
Chris——szk 发表于 2022-12-5 15:00
2022相比于2021版本,我找了TI和FEP 的benchmark测试过了一下确实没什么速度区别,但是好像在溶解自由能 ...

TI/FEP是算法,溶解自由能计算是应用;溶解自由能在GMX中可用TI/FEP来算。两者不在同一层次上,请弄清楚基本概念。

至于你引用的这个benchmark文件,并不涉及自由能计算;此外模型的原子数过少,在当今硬件条件下没有测试价值。我试了,对于此任务,2021.6与2022.4速度上并无区别,硬件:AMD Ryzen R9 5950X & NVIDIA GeForce RTX 3080Ti,软件:Linux 5.15.0-56-generic x86_64,GNU 11.3.0,CUDA 11.8。

想深入了解GMX的GPU加速功能,仔细看性能翻倍?RTX4090科学计算之经典MD模拟全面测试以及末尾“推荐阅读”部分。

作者
Author:
Chris——szk    时间: 2022-12-5 19:28
Entropy.S.I 发表于 2022-12-5 15:57
TI/FEP是算法,溶解自由能计算是应用;溶解自由能在GMX中可用TI/FEP来算。两者不在同一层次上,请弄清楚 ...

好的好的,谢谢老师指点!)
作者
Author:
夏一天    时间: 2022-12-5 21:50
Chris——szk 发表于 2022-12-5 15:02
一般MD的速度确实提升不大

能够编辑出winGPU版本已经很厉害了,佩服!
作者
Author:
lmch    时间: 2022-12-31 14:15
Chris——szk 发表于 2022-12-3 15:16
我刚刚试出来了,今天应该可以发布一下编译好的Windows版本的2022了

请教一下,这个/MD与/MT不匹配的问题如何解决呢?需要把工程里所有的c++选项都手动修改吗?
作者
Author:
Chris——szk    时间: 2023-1-2 13:47
lmch 发表于 2022-12-31 14:15
请教一下,这个/MD与/MT不匹配的问题如何解决呢?需要把工程里所有的c++选项都手动修改吗?

将build.ninja这个文件中的MD替换成MT即可)
作者
Author:
xptracy    时间: 2023-1-24 09:14
Chris——szk 发表于 2022-11-29 22:53
两个都可以的,gromacs2021.6的这个版本可能需要自己安装好cudatoolkit就可以运行了,也有可能需要自己安 ...

cudatoolkit怎么看装好没,装了还是提示找不到cufft64_10.dll
作者
Author:
牧生    时间: 2023-1-24 14:42
本帖最后由 牧生 于 2023-1-24 14:53 编辑
xptracy 发表于 2023-1-24 09:14
cudatoolkit怎么看装好没,装了还是提示找不到cufft64_10.dll

https://www.jb51.net/dll/cufftw64_10.dll.html
作者
Author:
nianbin    时间: 2023-4-1 17:01
请问win11兼容吗

作者
Author:
Chris——szk    时间: 2023-4-14 04:14
nianbin 发表于 2023-4-1 17:01
请问win11兼容吗

是兼容的

作者
Author:
白也    时间: 2023-6-8 10:19
我下载了2022.5和2021.07版本的试了试,win11系统安装了intel oneAPI,实际使用时会报个错,说找不到mkl_intel_thread.2.dll,于是乎手动去intel oneAPI安装目录下把这个文件复制到bin目录下就ok了,我看这一点没有提到,不清楚我这个情况是不是个例。
作者
Author:
Chris——szk    时间: 2023-6-14 19:20
白也 发表于 2023-6-8 10:19
我下载了2022.5和2021.07版本的试了试,win11系统安装了intel oneAPI,实际使用时会报个错,说找不到mkl_in ...

对的,这个我确实是忘记说了,因为我编译的时候用的是mkl,确实是需要提前安装intel oneapi的,应该不是个例哈哈哈)

作者
Author:
y5315383    时间: 2024-7-29 22:25
大神,修改nvcc编译-std:c++17为-std=c++17的部分能详细说一下怎么修改嘛,您之前发的github链接点进去404了,我现在在编译cphmd版本的gromacs,刚好是2021的,编译的时候就报了这个错,谢谢大神!
作者
Author:
Surtr    时间: 2024-9-1 10:49
请问作者还有gromacs2021.6-CUDA版本吗,求一个链接


作者
Author:
Surtr    时间: 2024-9-1 10:50
请问作者还有2021.6CUDA版本编译好的版本吗,求一个




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3