计算化学公社

 找回密码 Forget password
 注册 Register
Views: 9976|回复 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

114

帖子

4

威望

4004

eV
积分
4198

Level 6 (一方通行)

2#
发表于 Post on 2022-11-28 23:46:08 | 只看该作者 Only view this author
GROMACS2022.3的GPU版本编译确实不好整

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

3#
 楼主 Author| 发表于 Post on 2022-11-29 03:48:36 | 只看该作者 Only view this author
yygong 发表于 2022-11-28 23:46
GROMACS2022.3的GPU版本编译确实不好整

确实不好整,还会一直跳出来显示runtime library mismatch,哎,头大(

103

帖子

0

威望

723

eV
积分
826

Level 4 (黑子)

4#
发表于 Post on 2022-11-29 19:01:30 | 只看该作者 Only view this author
请问,您编译好的gromacs版本能直接用吗?我自己编译的没成功

43

帖子

0

威望

2265

eV
积分
2308

Level 5 (御坂)

5#
发表于 Post on 2022-11-29 19:48:31 | 只看该作者 Only view this author
大神,gromacs2021.6-gpu版下载运行时报错,显示找不到cufft64_10.dll,好像没有上传这个文件

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

6#
 楼主 Author| 发表于 Post on 2022-11-29 22:51:34 | 只看该作者 Only view this author
夏一天 发表于 2022-11-29 19:48
大神,gromacs2021.6-gpu版下载运行时报错,显示找不到cufft64_10.dll,好像没有上传这个文件

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

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

7#
 楼主 Author| 发表于 Post on 2022-11-29 22:53:38 | 只看该作者 Only view this author
charmm36 发表于 2022-11-29 19:01
请问,您编译好的gromacs版本能直接用吗?我自己编译的没成功

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

103

帖子

0

威望

723

eV
积分
826

Level 4 (黑子)

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

嗯嗯,谢谢

5

帖子

0

威望

216

eV
积分
221

Level 3 能力者

9#
发表于 Post on 2022-11-30 23:08:13 | 只看该作者 Only view this author
驱动版本516.59,设置好环境变量后可以直接用

34

帖子

0

威望

907

eV
积分
941

Level 4 (黑子)

10#
发表于 Post on 2022-12-1 11:16:57 | 只看该作者 Only view this author
你也停在这一步了

82

帖子

2

威望

793

eV
积分
915

Level 4 (黑子)

分子模拟晶戈

11#
发表于 Post on 2022-12-1 11:49:24 | 只看该作者 Only view this author
在咸鱼看到有个高手卖2022.3的windows版本,并且他自己也说这个版本特别难编译。

43

帖子

0

威望

2265

eV
积分
2308

Level 5 (御坂)

12#
发表于 Post on 2022-12-1 22:18:41 | 只看该作者 Only view this author
win版的2022.3比2021.6能快多少呢?有没必要换2022.3?好像2022.4也出来了

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

13#
 楼主 Author| 发表于 Post on 2022-12-3 15:16:59 | 只看该作者 Only view this author
对抗路达摩 发表于 2022-12-1 11:49
在咸鱼看到有个高手卖2022.3的windows版本,并且他自己也说这个版本特别难编译。

我刚刚试出来了,今天应该可以发布一下编译好的Windows版本的2022了

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

14#
 楼主 Author| 发表于 Post on 2022-12-3 15:18:14 | 只看该作者 Only view this author
夏一天 发表于 2022-12-1 22:18
win版的2022.3比2021.6能快多少呢?有没必要换2022.3?好像2022.4也出来了

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

50

帖子

1

威望

688

eV
积分
758

Level 4 (黑子)

15#
 楼主 Author| 发表于 Post on 2022-12-3 15:21:02 | 只看该作者 Only view this author
夏一天 发表于 2022-12-1 22:18
win版的2022.3比2021.6能快多少呢?有没必要换2022.3?好像2022.4也出来了

2022的优点来说就是自由能计算支持SIMD指令集,使用GPU计算现在加速相比之前的版本快2-3倍吧,我上次找了一个小例子试了一下,确实差不多两倍,我用的3060

本版积分规则 Credits rule

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

GMT+8, 2026-2-19 02:57 , Processed in 0.274695 second(s), 24 queries , Gzip On.

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