Cmake 等同于gcc/clang';s march=在其他编译器中为本机?
我想知道除了gcc和clang之外,是否还有其他编译器提供类似于Cmake 等同于gcc/clang';s march=在其他编译器中为本机?,cmake,cross-platform,compiler-optimization,intrinsics,Cmake,Cross Platform,Compiler Optimization,Intrinsics,我想知道除了gcc和clang之外,是否还有其他编译器提供类似于-march=native选项的功能,如果是,该选项是什么。我已经从另一个问题()中了解到,微软的编译器没有这个选项(除非在激活SSE2指令集的选项中暗示了这个选项,至少不包括AVX和更高版本) 用例很简单:提供一个cmake设置,从而为用户提供一个选项来激活和构建,并支持他或她的CPU支持的所有“内部函数”。目前,我们针对实际的内部函数(如x86上的SSE4.2和/或PCLMUL)提供了检测逻辑,但当需要考虑更多的平台和编译器时,
-march=native
选项的功能,如果是,该选项是什么。我已经从另一个问题()中了解到,微软的编译器没有这个选项(除非在激活SSE2指令集的选项中暗示了这个选项,至少不包括AVX和更高版本)
用例很简单:提供一个cmake设置,从而为用户提供一个选项来激活和构建,并支持他或她的CPU支持的所有“内部函数”。目前,我们针对实际的内部函数(如x86上的SSE4.2和/或PCLMUL)提供了检测逻辑,但当需要考虑更多的平台和编译器时,这种逻辑可能会变得非常复杂。简化它们可能导致编译器在运行时检查所保护的预期位置之外使用不支持的指令集的情况。 < P>目前,微软Visual C++编译器不提供与
关于英特尔C++编译器,这些标志的用途基本相同。 a。这不是我要找的。已经有运行时检查。当您使用需要激活内部函数(例如,-msse4)的编译器进行编译时,可能会出现的问题是,它将能够在整个编译单元中使用该指令集,包括在您不期望的表达式中使用该指令集。我在没有SSE4.2的CPU上运行并启用SSE4.2构建的代码时遇到了这个问题:它在
a=b+c
形式的表达式上崩溃,因为编译器已经确定它可以在SSE4.2上做得更好。-march=native
的优点是它将扩展到-mfoo
的适当列表,并且-适用于当前CPU的mno条
选项。cpu调度器方法有双重用途,但它提供了一个优势,即您可以使用单个标志构建完整的项目,并且可以从任何地方进行的优化中获益。谢谢。这应该涵盖主流编译器,对吧?