计算化学公社

标题: 求助:CP2K编译正常,但运行中提醒当前编译版本不支持CPU的avx512指令集 [打印本页]

作者
Author:
stishovite    时间: 2024-5-25 16:13
标题: 求助:CP2K编译正常,但运行中提醒当前编译版本不支持CPU的avx512指令集
请教大家,按照社长的方法CP2K第一性原理程序在CentOS中的简易安装方法 - 第一性原理 (First Principle) - 计算化学公社 (keinsci.com),在AMD 7950x + 64G + Ubuntu24.04上顺利编译了CP2K-2024.1,运行任务没啥问题,但总会出现下面的提示,意思是说当前编译版本不支持CPU的avx512指令集。
  1. *** HINT in environment.F:920 :: The compiler target flags (generic) used ***
  2. *** to build this binary cannot exploit all extensions of this CPU model  ***
  3. *** (x86_avx512). Consider compiler target flags as part of FCFLAGS and   ***
  4. *** CFLAGS (ARCH file).                                                   ***
复制代码


另外,我在另一台Intel Xeon E5v4*2 上编译,会有类似的提醒,关于x86_avx2指令集。


按照一些帖子的说法,把cp2k/tool/toolchain/script/generate_arch_file.sh里的OPT_FLAGS="-O2 改成OPT_FLAGS="-O3, 即提高编译等级就可以支持先进指令集,但我试了编译过不去,总是报错(没有保存报错信息)。


请教大家,如何编译才能启用avx512或avx2呢?需要修改哪个文件或哪一步呢?



作者
Author:
abin    时间: 2024-5-26 08:51
target-cpu=native

不过,BLAS相关,仅仅支持到zen2.

其实你可以忽略以上的提示……
就跑用了target-cpu=native,
有可能还会遇到同样的提示信息。

作者
Author:
stishovite    时间: 2024-6-27 08:38
abin 发表于 2024-5-26 08:51
target-cpu=native

不过,BLAS相关,仅仅支持到zen2.

谢谢大神回复,能否用AMD自己的blas编译呢?
作者
Author:
abin    时间: 2024-6-27 11:35
stishovite 发表于 2024-6-27 08:38
谢谢大神回复,能否用AMD自己的blas编译呢?

spack aocc cp2k
作者
Author:
stishovite    时间: 2024-6-28 10:26
abin 发表于 2024-6-27 11:35
spack aocc cp2k

非常感谢,我试试
作者
Author:
Assiduitas    时间: 2025-3-3 16:15
本帖最后由 Assiduitas 于 2025-3-4 09:00 编辑

AMD 7900x+64G+Ubuntu22.04/24.04遇到一样的问题,显示编译没使用最优的AVX512指令集。已解决!!!

下面分享一下本人解决心得:
1.Linux系统:
最开始也是安装的Ubuntu,因为听别人说这个系统安装东西比较省心。但是基于目前的体验来看,如果是做计算,还是安装CentOS比较好。(虽然Ubuntu安装某些东西确实简单,CentOS安装起来稍微麻烦一点。但如当年明月所说:慢慢做才是最有效率的方式)具体可能是个人主观意向,请大家根据自己实际情况安装适合自己的Linux系统。
2.gcc/fortran的版本
出现这个报错的原因源头首先是gcc/fortran的版本,Ubuntu22.04/24.04检索搜索引擎信息,学习之后安装gcc/fortran,你用-v查看版本一般都是11,不会超过12。第一个问题就出现了:Zen4架构的CPU,需要gcc/fortran >13.1之后的版本才能正确识别znver4这个词。所有你用Ubuntu22.04/24.04想在AMD 7000系列以及更新的CPU安装CP2K,首先要更新gcc/fortran至比较新的版本,至少要>13.1。而我后面用的CentOS stream10(目前应该是下载的最新的CentOS版本自带的gcc/fortran是13/14版本,完全不是11这种古早的版本,所有没有这个问题)
3.用toolchain安装好所有的库后,sob老师教程中提到使用make -j 4 ARCH=local VERSION="ssmp psmp"的命令安装。此时arch中会有local.ssmp与local.psmp两个文件,你需要用文本编辑器打开,找到CFLAGS与FCFLAGS中 -mtune=native 的词条。把这个关键词换成你CPU对应的架构,对于AMD 7000都是Zen4,所以需要写成 -mtune=znver4。我是仿照AI给出的建议:写成了-march=znver4 -mtune=znver4。

总结:
1.检查gcc/fortran版本,不要太老,不然可能不支持最新的CPU机构。
2.检查local.psmp以及local.ssmp这两个文件,里面的-mtune=native部分用显式指令定义硬件的具体信息,别让他自动识别。

性能提升:原有的错误消除后,测试了一个120原子的slab的结构优化,使用popt版本计算性能提升了15%。

分割线- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ubuntu安装成功心得:

Ubuntu安装成功的重点:更新gcc,gfortran以及g++到足够新的版本(能够支持zen4架构的CPU,即能够识别-march=znver4 -mtune=znver4)
1.gcc更新:
step1:运行gcc -v看看gcc的版本,如果小于13.1基本就是要更新。
           细致一点的操作是:gcc -march=native --help=target。查看支持的CPU架构类型
step2: 利用PPA库安装高版本号的gcc
            sudo add-apt-repository ppa:ubuntu-toolchain-r/test
          sudo apt update
            #示例安装gcc -13
            sudo apt install gcc -13
            #安装完毕需配置gcc -13,不然还是未升级前的gcc版本
            sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 13
          #查看gcc版本是否已经是gcc -13
          gcc -v

2.g++更新
step1:如上,把gcc的关键词更换为g++
step2:不同的语句:sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 -12
3.gfortran更新
step1:如上,把gcc的关键词更换为gfortran,以及查看版本命令是:gfortran --version
step2:不同的语句:sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-13 200


作者
Author:
stishovite    时间: 2025-3-4 09:32
Assiduitas 发表于 2025-3-3 16:15
AMD 7900x+64G+Ubuntu22.04/24.04遇到一样的问题,显示编译没使用最优的AVX512指令集。已解决!!!

下 ...

谢谢你,这是迄今我看到的抓住了问题的关键、最详细的解决方案!




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