计算化学公社

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

[xtb] 基于gnu编译器和cmake编译原生Windows版xtb

[复制链接 Copy URL]

1187

帖子

5

威望

2876

eV
积分
4163

Level 6 (一方通行)

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 snljty 于 2022-4-4 09:44 编辑

注:2022-02-16本文做了较大更新。建议用这个版本。

现在的xtb版本(本文发文的时候是6.4.1)编译比之前的版本容易多了,不需要Meson和Ninja了。只要有cmake也完全可以。
下面给出的基于TDM-gcc-64bit 10.3.0和cmake-win64 3.22.1以及Intel MKL 2022.0.0编译Windows版xtb 6.4.1的方法。本文假设操作系统为Windows10 64位,硬件为x86_64架构。
链接:https://pan.baidu.com/s/1qMuo24WRv1VFy3ZlA6C74g
提取码:bdsb

0.如果完全对编译没兴趣只想使用,可以下载本人编译的版本
MKL库有点大,某里网盘又不让分享zip,只能传很辣鸡的某毒网盘了,见谅。下载后解压到C:\xtb-6.4.1。这时候你应该有C:\xtb-6.4.1\bin等目录,然后在本文搜索--GOTO--,直接接着读后面的内容,跳过中间的内容即可。

1. 下载cmake-win64并安装
本文使用的是3.22.1,链接在cmake-3.22.1-windows-64。安装后
假设安装目录在C:\cmake-3.22.1-win64-x64,将C:\cmake-3.22.1-win64-x64\bin添加到环境变量PATH里面
如果不明白上面这句话,可以上网搜一下,比如Windows如何设置环境变量。(推荐放在前面,覆盖掉其他可能的gnu编译器,需要的是一个比较新的版本)。

2.下载TDM-gcc-64bit 10.3.0并安装
TDM-GCC-10.3.0-64bits
这个安装没有难度,不做过多提示,注意gcc,g++,gfortran以及openmp等部分都装上了。默认安装应该就可以。
假设安装目录是C:\TDM-GCC-64,将C:\TDM-GCC-64添加到环境变量PATH里面最前面。(注:临时做这一步只要在cmd里执行C:\TDM-GCC-64\mingwvars.bat即可)
将C:\TDM-GCC-64\bin里的mingw32-make.exe复制一份到同目录下,重命名为make.exe。

3. 下载Intel OneAPI ,安装MKL近年来Intel全家桶已经无需学术账号申请Intel Parallel Studio XE(虽然MPI新版可能有问题),而是被统一整合到了Intel OneAPI。只要用普通账号注册即可。
安装Intel OneAPI前,建议先安装Microsoft Visual Studio 2019,方便一些环境整合。到目前为止虽然已经出了Microsoft Visual Studio 2022,但是不推荐使用,一个重要原因是目前最新版OneAPI并没有与其很好地整合。
Intel OneAPI Toolkits有多个子工具包,科学计算常用的只有Intel oneAPI Base Toolkit和Intel oneAPI HPC Toolkit。其中Intel C/C++编译器以及Intel MKL在前者,Intel Fortran编译器以及Intel MPI在后者。本文只需要前者,因为使用的是GNU编译器。如果对开发感兴趣,建议装完前者后把后者也装上。前者下载地址在Intel OneAPI Base Toolkit for Windows,后者在Intel OneAPI HPC Toolkit for Windows,均点击download下载即可,下载后双击运行,按照提示一步一步走就行。可以选择要装的组件,但是对于本文的目的至少Intel Math Kernel Library必须要装的。如果不装这个用refBLAS和LAPACK虽然也能编译,但是会慢很多而且可能部分功能不能并行。
将C:\Program Files (x86)\Intel\oneAPI\mkl\latest\redist\intel64和C:\Program Files (x86)\Intel\oneAPI\mkl\latest\bin\intel64添加到PATH里面最前面。
设置环境变量MKLROOT,值为C:\Program Files (x86)\Intel\oneAPI\mkl\latest
设置环境变量LIB为C:\Program Files (x86)\Intel\oneAPI\mkl\latest\lib\intel64
注:临时做这三步只要在cmd里执行"C:\Program Files (x86)\Intel\oneAPI\mkl\latest\env\vars.bat" intel64 llp64即可)

4.下载xtb并编译安装。
github库在xtb-git,可以用git clone下载也可以直接下载压缩包。目前版本源码压缩包在xtb-6.4.1-src。如果访问不了,你需要正确的上网姿势。下载后解压。

启动cmd,用
  1. cd /d xtb源码解压后的目录
复制代码

进入解压后的目录。
执行
  1. set CC=gcc
  2. set FC=gfortran
  3. mkdir build
  4. cd build
  5. cmake .. -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=C:\xtb-6.4.1
  6. make -j 8
  7. make install
复制代码
其中make -j 8是8核并行编译,建议改成物理核心数。这会将xtb安装在C:\xtb-6.4.1里面。
注意这个过程中会自动联网下载test-drive并编译(也在github上)。请保持网络畅通。
编译完成后
--GOTO--
将C:\xtb-6.4.1\bin添加到环境变量PATH,并新建环境变量XTBPATH,值设为C:\xtb-6.4.1\share\xtb。设置环境变量的方法上面有。
设置环境变量OMP_NUM_THREADS=8,1。这里8是你想要的并行核数,建议等于物理核心数。
设置环境变量MKL_NUM_THREADS=8。这里8同理。
设置环境变量OMP_STACKSIZE=4G代表用4GB内存。(这里有风险,这个环境变量可能导致Gaussian等软件不能正常使用。如果不设这个运行不报错,就不用考虑)。
由于本文提供的压缩包已经将必要的动态库放进xtb的bin目录下,因此如果只想用本文链接预编译好的版本,--GOTO--前面的所有设置环境变量的操作都可以跳过。不使用静态库的主要原因是Intel编译器编译的MKL静态库和GNU编译器肯定是没法兼容的。Intel编译器的Windows版只提供Fortran编译器,不提供C/C++的,还要和MSVC一起整,太麻烦就不考虑了。
设置XTBPATH是由于gfn0要从里面读参数。
这样编译出的版本,链接的gcc,gfortran和openmp等库都是动态链接,所以如果把gnu编译器的bin目录从PATH里面除掉,运行xtb的时候就会因为找不到这些库报错。因此已经将需要的gnu编译器的运行库添加到上面预编译版本的压缩包里了,使用预编译版本不需要考虑这些问题。
运行的时候在输入文件的目录启动cmd,如果不知道怎么做,看在指定目录下启动cmd的方法一。然后输入chcp 65001回车,接着输入xtb后面接参数即可。

欢迎反馈。

做了几个简单的测试,和之前版本结果一致。
下面的内容不用看,过时了。就是打半天字不想删了。

这是本文之前版本提到的在Windows下编译blas、lapack、cblas以及lapacke静态库的方法,这有助于自己在Windows下开发一些依赖这些数学库的小程序。目前来看已经没什么意义了,MKL和OpenBLAS比这个香多了。这段现在不用看了。
下载lapack并编译安装。
本文使用3.9.1版本。
地址lapack-3.9.1
下载后解压到某个目录,启动cmd,用
  1. cd /d 解压后的目录
复制代码

进入解压后的目录。
  1. set CC=gcc
  2. set FC=gfortran
  3. set CXX=g++
  4. mkdir build
  5. cd build
  6. cmake .. -G "MinGW Makefiles" -DLAPACKE=ON -DCBLAS=ON -DCMAKE_INSTALL_LIBDIR=C:\lapack-3.9.1\lib -DCMAKE_INSTALL_INCLUDEDIR=C:\lapack-3.9.1\include
  7. cmake --build . -j8 --target install
复制代码

就会安装到C:\lapack-3.9.1。其中-j8是8核并行编译,建议改成CU物理核心数。
将C:\lapack-3.9.1\lib加入环境变量PATH。即可






评分 Rate

参与人数
Participants 6
eV +19 收起 理由
Reason
悠米 + 4 谢谢
lonicera + 1 谢谢
ZZZ2556540 + 4 谢谢分享
嘤嘤嘤 + 4 谢谢分享
zsu007 + 5 好物!
sobereva + 1

查看全部评分 View all ratings

37

帖子

0

威望

1629

eV
积分
1666

Level 5 (御坂)

23#
发表于 Post on 2022-7-23 17:02:54 | 只看该作者 Only view this author
xtb如何写输入文件,比如要和molclus一块筛选最优构型

455

帖子

1

威望

2923

eV
积分
3398

Level 5 (御坂)

22#
发表于 Post on 2022-6-24 14:21:56 | 只看该作者 Only view this author
lyj714 发表于 2022-6-24 12:15
说一下很久以前我是用的vs编译器搞成功的。用了putenv设置变量,mklink是dos命令,可创建链接。其他的啥 ...

好的好的,感谢指教!

313

帖子

2

威望

3900

eV
积分
4253

Level 6 (一方通行)

21#
发表于 Post on 2022-6-24 12:15:30 | 只看该作者 Only view this author
本帖最后由 lyj714 于 2022-6-24 12:23 编辑
snljty2 发表于 2022-6-24 09:24
具体参考OpenMP手册https://www.openmp.org/spec-html/5.0/openmpse50.html的解释,我怕我解释的不如官方 ...

说一下很久以前我是用的vs编译器搞成功的。用了putenv设置变量,mklink是dos命令,可创建链接。其他的啥啥啥的shell命令封装一个外部shell就能用了(当然也可以自己用写功能实现)。应该对你有帮助,我很久都不折腾这东西了,所以一直也就没有发布新的crest二进制windows版本了。

455

帖子

1

威望

2923

eV
积分
3398

Level 5 (御坂)

20#
发表于 Post on 2022-6-24 09:24:15 | 只看该作者 Only view this author
lanthanum 发表于 2022-6-23 23:59
请问大神,OMP_NUM_THREADS=8,1这里的1表示什么?
另,期待大神把新版的crest给编译成win版。

具体参考OpenMP手册https://www.openmp.org/spec-html/5.0/openmpse50.html的解释,我怕我解释的不如官方清楚。crest我试过,里面用了两个函数比较难搞,一个setenv一个symlink,前者用来设置运行中的环境变量,后者用来建立符号链接。但是Windows下我用过的C编译器都没有实现这两个功能,可能跟Windows的权限机制有关,这就很头疼,目前来看基本无解,还是用虚拟机/WSL吧,这个编译只是为了娱乐。

93

帖子

0

威望

4143

eV
积分
4236

Level 6 (一方通行)

19#
发表于 Post on 2022-6-23 23:59:03 | 只看该作者 Only view this author
snljty2 发表于 2022-6-1 18:26
是,或者临时使用在cmd里set OMP_NUM_THREADS=8,1现在这个版本已经没用了,官网上已经有了最新版的官方Wi ...

请问大神,OMP_NUM_THREADS=8,1这里的1表示什么?
另,期待大神把新版的crest给编译成win版。

1万

帖子

0

威望

9857

eV
积分
22093

Level 6 (一方通行)

18#
发表于 Post on 2022-6-10 18:05:03 | 只看该作者 Only view this author
Chela 发表于 2022-6-10 10:23
你好,我下载了官方的win版,也设置好了环境变量,但是运行时闪退,请问是什么原因?

在cmd里运行试试,如果仍然立刻结束,贴出完整的报错信息,另外如果计算已经生成了一些文件,把所有计算生成的文件上传
Zikuan Wang
山东大学光学高等研究中心 研究员
BDF(https://bdf-manual.readthedocs.io/zh_CN/latest/Introduction.html)、ORCA(https://orcaforum.kofo.mpg.de/index.php)开发团队成员
Google Scholar: https://scholar.google.com/citations?user=XW6C6eQAAAAJ
ORCID: https://orcid.org/0000-0002-4540-8734
主页:http://www.qitcs.qd.sdu.edu.cn/info/1133/1776.htm
GitHub:https://github.com/wzkchem5
本团队长期招收研究生,有意者可私信联系

22

帖子

0

威望

207

eV
积分
229

Level 3 能力者

17#
发表于 Post on 2022-6-10 17:23:03 | 只看该作者 Only view this author
snljty2 发表于 2022-6-1 18:26
是,或者临时使用在cmd里set OMP_NUM_THREADS=8,1现在这个版本已经没用了,官网上已经有了最新版的官方Wi ...

你好,我下载了官方的win版,也设置好了环境变量,但是运行时闪退,请问是什么原因?

24

帖子

0

威望

79

eV
积分
103

Level 2 能力者

16#
发表于 Post on 2022-6-1 19:48:38 | 只看该作者 Only view this author
snljty2 发表于 2022-6-1 18:26
是,或者临时使用在cmd里set OMP_NUM_THREADS=8,1现在这个版本已经没用了,官网上已经有了最新版的官方Wi ...

好的,谢谢大佬

455

帖子

1

威望

2923

eV
积分
3398

Level 5 (御坂)

15#
发表于 Post on 2022-6-1 18:26:15 | 只看该作者 Only view this author
本帖最后由 snljty2 于 2022-6-1 18:27 编辑
无敌菠萝派 发表于 2022-6-1 18:04
大佬请问设置环境变量OMP_NUM_THREADS=8,1意思是新建变量名是OMP_NUM_THREADS变量值是8,1吗?

是,或者临时使用在cmd里set OMP_NUM_THREADS=8,1现在这个版本已经没用了,官网上已经有了最新版的官方Windows版(6.5.0),下载设置好PATH和XTBPATH以及OMP_NUM_THREADS就能用。

24

帖子

0

威望

79

eV
积分
103

Level 2 能力者

14#
发表于 Post on 2022-6-1 18:04:35 | 只看该作者 Only view this author
大佬请问设置环境变量OMP_NUM_THREADS=8,1意思是新建变量名是OMP_NUM_THREADS变量值是8,1吗?

1187

帖子

5

威望

2876

eV
积分
4163

Level 6 (一方通行)

13#
 楼主 Author| 发表于 Post on 2022-2-18 10:11:00 | 只看该作者 Only view this author
阿瞳 发表于 2021-11-10 11:38
楼主你好,我用cmder运行会出现Program received signal SIGSEGV: Segmentation fault - invalid memory re ...

最好用cmd.exe运行。

1187

帖子

5

威望

2876

eV
积分
4163

Level 6 (一方通行)

12#
 楼主 Author| 发表于 Post on 2022-2-10 22:26:13 | 只看该作者 Only view this author
yet 发表于 2022-2-10 21:35
请问用gfn0会报错是为什么?用gfn1就不会

看最后一段红字。

1

帖子

0

威望

83

eV
积分
84

Level 2 能力者

11#
发表于 Post on 2022-2-10 21:35:02 | 只看该作者 Only view this author
请问用gfn0会报错是为什么?用gfn1就不会

48

帖子

0

威望

1513

eV
积分
1561

Level 5 (御坂)

10#
发表于 Post on 2021-11-10 11:38:32 | 只看该作者 Only view this author
楼主你好,我用cmder运行会出现Program received signal SIGSEGV: Segmentation fault - invalid memory reference. Backtrace for this error:   报错,而用自带的powershell运行则不会出现这个问题,这是怎么回事

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

GMT+8, 2026-2-19 23:26 , Processed in 0.179354 second(s), 22 queries , Gzip On.

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