1

确实在编译器中的-march标志(例如:gcc)真的很重要吗?编译器-march标志基准?

会是更快,如果我编译使用-march = my_architecture而不是-march我所有的程序和内核= i686的

+3

嗯,它很重要。否则,该选项将不存在。它影响指令集和编译器将生成的调度。 – Mysticial 2013-03-19 18:25:06

回答

3

是这样做,虽然差别只是偶尔相关。但是,如果您的代码可以被矢量化以使用SSE或其他扩展指令集,而这些指令集在一个架构上可用,而另一个架构上不可用,则它们可能相当大。当然,32位和64位之间的差异可以(但不一定)显而易见(如果您认为它是-march参数的类型,则为-m64)。

由于anegdotic证据,几年前我遇到了一个有趣的错误在gcc哪里这是在Pentium 4上运行特定的代码块将大约2倍时-march=pentium4-march=pentium2编译比编译

所以:通常没有什么区别,有时候是有的,有时候是相反的。与往常一样:在决定使用超出“安全”范围的任何优化之前(例如,使用您的实际确切CPU模型而不是更通用的模型)进行测量。

1

无法保证您使用march进行编译的任何代码的速度会更快/更慢w.r.t.另一个版本。这实际上取决于代码的“种类”,实际结果可能只能通过测量获得。例如,如果你的代码有很大的矢量化潜力,那么结果可能会与“行军”不一样。另一方面,有时编译器在向量化过程中做得不好,并且在编译特定体系结构时可能导致代码变慢。