报错:CPU指令集的问题

发布于:2024-09-19 ⋅ 阅读:(10) ⋅ 点赞:(0)

bug描述

我在运行CMAQ中的icon时,遇到bug:

Please verify that both the operating system and the processor support Intel(R) X87, CMOV, MMX, FXSAVE, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, POPCNT and AVX instructions.

解决办法

经过查询,是因为:
我使用的超算平台是基于AMD自研的CPU,不支持-xHost,而我的icon是通过ifort编译的,只用了-xHost,因此不兼容。

(1)通过命令

grep -i xhost * -r

去找到使用xhost命令的编译文件

(2)重新编译,我将我的编译代码从:

set FSTD       = "${myFSTD}"

改为了

set FSTD       = "-O3 -fno-alias -mp1 -fp-model source -ftz -simd -align all -march=core-avx2 -vec-guard-write -unroll-aggressive"

注:
如果还是不行,兼容不了,就用:

set FSTD       = "-O3 -fno-alias -mp1 -fp-model source -ftz -simd -align all -march=core-avx -vec-guard-write -unroll-aggressive"

甚至更保守的:

set FSTD       = "-O3 -fno-alias -mp1 -fp-model source -ftz -simd -align all -msse4.2 -vec-guard-write -unroll-aggressive"

编译完就可以成功运行了。

说明:

-xHost:
这是Intel编译器特有的选项。
它会自动检测当前编译机器的CPU,并为该特定CPU生成最优化的代码。
优点:可以充分利用编译机器CPU的所有特性。
缺点:生成的可执行文件可能无法在不同架构的CPU上运行,或运行效率降低。

-march=core-avx2:
这是一个更通用的选项,被多种编译器支持(如GCC、Clang和Intel编译器)。
它指定了目标架构为支持AVX2指令集的CPU。
优点:生成的可执行文件可以在所有支持AVX2的CPU上运行,提供了更好的可移植性。
缺点:可能无法利用编译机器CPU的一些特殊优化或更新的指令集。

如果再到AMD平台编译软件,而且使用的ifort,可以使用-march=core-avx2提高兼容性。
当然,还有个办法就是,都使用GCC编译器。


网站公告

今日签到

点亮在社区的每一天
去签到