2

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

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

4

2 回答 2

3

是的,它确实如此,尽管这些差异有时只是相关的。但是,如果您的代码可以向量化以使用 SSE 或其他扩展指令集,这些指令集在一种架构上可用,但在另一种架构上不可用,它们可能会非常大。当然,32 位和 64 位之间的差异可以(但不必总是)很明显(-m64如果您认为它是一种-march参数)。

作为一个有趣的证据,几年前我遇到了一个有趣的错误,gcc其中在 Pentium 4 上运行的特定代码段在编译时会-march=pentium4使用-march=pentium2.

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

于 2013-03-19T19:02:22.033 回答
1

无法保证您编译的任何代码march都会比其他版本更快/更慢。这实际上取决于代码的“种类”,实际结果可能只能通过测量获得。例如,如果您的代码有很大的矢量化潜力,那么使用和不使用“march”的结果可能会有所不同。另一方面,有时编译器在矢量化过程中表现不佳,这可能会导致在为特定架构编译时代码变慢。

于 2013-03-21T06:29:47.057 回答