GCC 支持 -march
允许您指定目标架构的开关 - 允许它调整该平台的指令序列以及使用平台上可能可用但在“默认”或基础版本架构上不可用的指令。
例如,-march=skylake
将告诉编译器以 Skylake CPU 为目标,包括使用 Skylake 上可用的指令集,例如 AVX2。
我怎么知道 -march
的值是什么? gcc
本地版本支持?当传递无效参数时,较新版本有助于列出有效参数,但较旧版本不会。
最佳答案
对于 gcc7 及更高版本,gcc 将打印它支持的值作为错误消息的一部分。
$ gcc -E -march=help -xc /dev/null
# 1 "/dev/null"
cc1: error: bad value (‘help’) for ‘-march=’ switch
cc1: note: valid arguments to ‘-march=’ switch are: nocona core2 nehalem corei7 westmere sandybridge corei7-avx ivybridge core-avx-i haswell core-avx2 broadwell skylake skylake-avx512 bonnell atom silvermont slm knl x86-64 eden-x2 nano nano-1000 nano-2000 nano-3000 nano-x2 eden-x4 nano-x4 k8 k8-sse3 opteron opteron-sse3 athlon64 athlon64-sse3 athlon-fx amdfam10 barcelona bdver1 bdver2 bdver3 bdver4 znver1 btver1 btver2
我查了 on Godbolt , 和 x86 gcc6.x 及更早版本只是说
error: bad value (invalid) for -march= switch
即使与 -v
.它也不适用于 clang5.0 或 ICC18。
这是特定于目标的:ARM gcc6.3 确实生成了一个受支持的列表
-march
值,或 -mcpu=
.
关于performance - 如何确定 gcc 支持哪些架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299458/