通过 GCC/Clang/ICC/etc 我可以使用
-march=skylake
等生成针对特定微架构优化的代码,以及-march=native
生成针对本地计算机优化的代码。如何使用 MSVC 执行这些操作?
微软的编译器将其分为两个独立的区域。一种是生成特定于特定指令集的代码,该代码无法在不支持该指令集的 CPU 上运行。这属于其
-arch:
标志。 x64 编译器仅支持两种变体:AVX 和 AVX2(或无标志,最高支持 SSE2)。 x86 版本的编译器为较旧的指令集扩展(例如 SSE)添加了更多标志,但我怀疑您是否再关心这一点。
另一类是生成可在多种架构中的任何一种上运行的代码,但更倾向于其中一种架构。这是由
-favor
开关支持的,它支持 ATOM、AMD64、INTEL64 和“混合”目标(这基本上意味着尽量不以牺牲其他目标为代价来偏向其中一个)。
它没有任何(已记录的)标志来表示支持 Skylake 与(例如)Haswell 或 Broadwell。