针对特定的机器/处理器架构进行优化

Beg*_*ner 11 c++ optimization

在这个关于C++和Java之间性能差异的问题的高度评价的答案中,我了解到JIT编译器有时能够更好地进行优化,因为它可以确定机器的确切细节(处理器,缓存大小等):

通常,C#和Java可以同样快或者更快,因为JIT编译器 - 在第一次执行时编译IL的编译器 - 可以优化C++编译的程序,因为它可以查询机器.它可以确定机器是Intel还是AMD; Pentium 4,Core Solo或Core Duo; 或者如果支持SSE4等

C++程序必须事先通过混合优化进行编译,以便它在所有机器上运行得相当好,但是没有像单个配置(即处理器,指令集,其他硬件)那样进行优化.

问题:有没有办法告诉编译器专门针对我当前的机器进行优化?有没有能够做到这一点的编译器?

Vit*_*tor 9

对于GCC,您可以使用该标志-march=native.请注意,生成的代码可能无法在其他CPU上运行,因为

GCC使用此名称来确定生成汇编代码时可以发出的指令类型.

因此可以生成CPU特定的程序集.

如果您希望您的代码在其他CPU类型上运行,但是为了在CPU上获得更好的性能进行调整,那么您应该使用-mtune=native:

指定用于调整性​​能的处理器的名称.将调整代码,就像目标处理器属于此选项中指定的类型一样,但仍使用与-mcpu =选项指定的目标处理器兼容的指令.