报错:CPU指令集的问题
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编译器。