计算化学公社

 找回密码 Forget password
 注册 Register
Views: 9984|回复 Reply: 37
打印 Print 上一主题 Last thread 下一主题 Next thread

[GROMACS] Windows下的gromacs2021.6的GPU版本与gromacs2022的CPU版本

[复制链接 Copy URL]

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

本帖最后由 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的略快一点吧,使用的命令如下:

  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
复制代码
版本信息如下可以参考一下:



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,强制更改过来即可)

评分 Rate

参与人数
Participants 6
威望 +1 eV +21 收起 理由
Reason
yicheng526 + 3 赞!
boqiang + 4 赞!
Acee + 4 好物!
夏一天 + 5 赞!
lnf + 5 好物!
sobereva + 1

查看全部评分 View all ratings

2

帖子

0

威望

103

eV
积分
105

Level 2 能力者

38#
发表于 Post on 2024-9-1 10:50:51 | 只看该作者 Only view this author
请问作者还有2021.6CUDA版本编译好的版本吗,求一个

2

帖子

0

威望

103

eV
积分
105

Level 2 能力者

37#
发表于 Post on 2024-9-1 10:49:05 | 只看该作者 Only view this author
请问作者还有gromacs2021.6-CUDA版本吗,求一个链接

1

帖子

0

威望

19

eV
积分
20

Level 1 能力者

36#
发表于 Post on 2024-7-29 22:25:38 | 只看该作者 Only view this author
大神,修改nvcc编译-std:c++17为-std=c++17的部分能详细说一下怎么修改嘛,您之前发的github链接点进去404了,我现在在编译cphmd版本的gromacs,刚好是2021的,编译的时候就报了这个错,谢谢大神!

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

35#
 楼主 Author| 发表于 Post on 2023-6-14 19:20:46 | 只看该作者 Only view this author
白也 发表于 2023-6-8 10:19
我下载了2022.5和2021.07版本的试了试,win11系统安装了intel oneAPI,实际使用时会报个错,说找不到mkl_in ...

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

48

帖子

0

威望

703

eV
积分
751

Level 4 (黑子)

34#
发表于 Post on 2023-6-8 10:19:36 | 只看该作者 Only view this author
我下载了2022.5和2021.07版本的试了试,win11系统安装了intel oneAPI,实际使用时会报个错,说找不到mkl_intel_thread.2.dll,于是乎手动去intel oneAPI安装目录下把这个文件复制到bin目录下就ok了,我看这一点没有提到,不清楚我这个情况是不是个例。
我见青山多妩媚,料青山见我应如是。

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

33#
 楼主 Author| 发表于 Post on 2023-4-14 04:14:40 | 只看该作者 Only view this author

是兼容的

182

帖子

0

威望

2233

eV
积分
2415

Level 5 (御坂)

32#
发表于 Post on 2023-4-1 17:01:01 | 只看该作者 Only view this author
请问win11兼容吗

1560

帖子

0

威望

4995

eV
积分
6555

Level 6 (一方通行)

31#
发表于 Post on 2023-1-24 14:42:57 | 只看该作者 Only view this author
本帖最后由 牧生 于 2023-1-24 14:53 编辑
xptracy 发表于 2023-1-24 09:14
cudatoolkit怎么看装好没,装了还是提示找不到cufft64_10.dll

https://www.jb51.net/dll/cufftw64_10.dll.html
又菜又爱玩

49

帖子

0

威望

1094

eV
积分
1143

Level 4 (黑子)

30#
发表于 Post on 2023-1-24 09:14:07 | 只看该作者 Only view this author
Chris——szk 发表于 2022-11-29 22:53
两个都可以的,gromacs2021.6的这个版本可能需要自己安装好cudatoolkit就可以运行了,也有可能需要自己安 ...

cudatoolkit怎么看装好没,装了还是提示找不到cufft64_10.dll

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

29#
 楼主 Author| 发表于 Post on 2023-1-2 13:47:01 | 只看该作者 Only view this author
lmch 发表于 2022-12-31 14:15
请教一下,这个/MD与/MT不匹配的问题如何解决呢?需要把工程里所有的c++选项都手动修改吗?

将build.ninja这个文件中的MD替换成MT即可)

75

帖子

0

威望

1361

eV
积分
1436

Level 4 (黑子)

28#
发表于 Post on 2022-12-31 14:15:24 | 只看该作者 Only view this author
Chris——szk 发表于 2022-12-3 15:16
我刚刚试出来了,今天应该可以发布一下编译好的Windows版本的2022了

请教一下,这个/MD与/MT不匹配的问题如何解决呢?需要把工程里所有的c++选项都手动修改吗?

43

帖子

0

威望

2265

eV
积分
2308

Level 5 (御坂)

27#
发表于 Post on 2022-12-5 21:50:53 | 只看该作者 Only view this author
Chris——szk 发表于 2022-12-5 15:02
一般MD的速度确实提升不大

能够编辑出winGPU版本已经很厉害了,佩服!

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

26#
 楼主 Author| 发表于 Post on 2022-12-5 19:28:24 | 只看该作者 Only view this author
Entropy.S.I 发表于 2022-12-5 15:57
TI/FEP是算法,溶解自由能计算是应用;溶解自由能在GMX中可用TI/FEP来算。两者不在同一层次上,请弄清楚 ...

好的好的,谢谢老师指点!)

878

帖子

17

威望

5433

eV
积分
6651

Level 6 (一方通行)

小屁孩

25#
发表于 Post on 2022-12-5 15:57:19 | 只看该作者 Only view this author
本帖最后由 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模拟全面测试以及末尾“推荐阅读”部分。
- 向着虚无前进 -

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-2-19 21:42 , Processed in 0.212464 second(s), 31 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list