这俩指令都会根据当前系统使用的微架构对程序进行优化,优点是针对计算密集型任务会有较大程度的优化,但是可移植性不好,因为是针对特定架构的优化
一。确定选项 使用如下命令可查询编译器自己查询到的微系统结构gcc -mcpu=native -Q --help=target
点击查看代码
The following options are target specific:
-mabi= lp64
-march= armv8.2-a
-mbig-endian [disabled]
-mbionic [disabled]
-mbranch-protection=
-mcmodel= small
-mcpu= tsv110+dotprod+fp16fml
-mfix-cortex-a53-835769 [enabled]
-mfix-cortex-a53-843419 [enabled]
-mgeneral-regs-only [disabled]
-mglibc [enabled]
-mlittle-endian [enabled]
-mlow-precision-div [disabled]
-mlow-precision-recip-sqrt [disabled]
-mlow-precision-sqrt [disabled]
-mmusl [disabled]
-momit-leaf-frame-pointer [enabled]
-moverride=
-mpc-relative-literal-loads [enabled]
-msign-return-address= none
-mstack-protector-guard-offset=
-mstack-protector-guard-reg=
-mstack-protector-guard= global
-mstrict-align [disabled]
-msve-vector-bits=
-mtls-dialect= desc
-mtls-size= 24
-mtrack-speculation [disabled]
-mtune= tsv110
-muclibc [disabled]
-mverbose-cost-dump [disabled]
注意gcc有bug,可能会错误的识别系统微结构,有时需要手动指定,例如编译时,使用选项
`g++ -O3 -mcpu=tsv110 -o main main.cpp `
二。 指令集相关
对于ARM结构,使用 -mcpu
对于X86结构,使用 -march
tips: 能使用 -mcpu时不要使用 -march