在其他编译器中等同于 gcc/clang 的 march=native?
Equivalents to gcc/clang's march=native in other compilers?
我想知道除 gcc 和 clang 之外是否还有其他编译器提供类似 -march=native
的选项,如果有,该选项是什么。我已经从另一个问题 (Automatically building for best available platform in visual c++ (equivalent to gcc's -march=native)) 了解到,微软的编译器没有该选项(除非它隐含在激活 SSE2 指令集的选项中,至少不包括 AVX 和更高版本)。
用例很简单:提供一个 cmake 设置,因此用户可以选择激活和构建,支持所有 "intrinsics" 他或她的 CPU 支持。我们目前有针对实际目标的检测逻辑(例如 x86 上的 SSE4.2 and/or PCLMUL),但当必须考虑更多平台和编译器时,该逻辑可能会变得非常复杂。简化它们可能会导致编译器开始在受运行时检查保护的预期位置之外使用不受支持的指令集。
目前,Microsoft Visual C++ 编译器不提供与 march=native 等效的标志。在构建代码之前,您必须手动或使用脚本确定适当的标志。
关于英特尔 C++ 编译器,xHost and QxHost 标志具有基本相同的目的。
我想知道除 gcc 和 clang 之外是否还有其他编译器提供类似 -march=native
的选项,如果有,该选项是什么。我已经从另一个问题 (Automatically building for best available platform in visual c++ (equivalent to gcc's -march=native)) 了解到,微软的编译器没有该选项(除非它隐含在激活 SSE2 指令集的选项中,至少不包括 AVX 和更高版本)。
用例很简单:提供一个 cmake 设置,因此用户可以选择激活和构建,支持所有 "intrinsics" 他或她的 CPU 支持。我们目前有针对实际目标的检测逻辑(例如 x86 上的 SSE4.2 and/or PCLMUL),但当必须考虑更多平台和编译器时,该逻辑可能会变得非常复杂。简化它们可能会导致编译器开始在受运行时检查保护的预期位置之外使用不受支持的指令集。
目前,Microsoft Visual C++ 编译器不提供与 march=native 等效的标志。在构建代码之前,您必须手动或使用脚本确定适当的标志。
关于英特尔 C++ 编译器,xHost and QxHost 标志具有基本相同的目的。