海湾合作委员会:三月和三月有什么不同?

我试图擦洗这个GCC手册页,但仍然没有得到它,真的。

-march-mtune什么区别?

什么时候一个人只是使​​用,而不是两个? 是否有可能只是 – -mtune

谢谢。

如果使用-march那么GCC将可以自由地生成在指定的CPU上工作的指令,但不能在架构系列中的(通常)较早的CPU上工作。 如果使用-mtune ,则编译器将生成可在其中任何一个上运行的代码,但会偏向指定的特定CPU上运行速度最快的指令序列。

这是我google了谷歌:

-march=X选项使用CPU名称X并允许GCC生成使用X所有特征的代码。 GCC手册准确解释了哪些CPU名称是指哪些CPU系列和function。

由于function通常是添加的,但不会被删除,所以使用-march=X构build的二进制文件将在CPU X上运行,并有机会在比X更新的CPU上运行,但几乎肯定不会运行在比X更早的任何东西上。 某些指令集(3DNow!,我猜?)可能特定于某个特定的CPU供应商,使用这些指令集可能会得到不能在竞争的CPU上运行的二进制文件,不pipe是新的还是其他的。

-mtune=Y选项会调整生成的代码,以便在Y上运行得比在可能运行的其他CPU上运行得更快。 -march=X意味着-mtune=X -mtune=Y不会覆盖-march=X ,因此,例如对于-march=core2-mtune=i686可能没有意义 – 因为-march=core2 ,那么为什么你要在地球上优化比core2更老的东西(function更less)呢? -march=core2 -mtune=haswell更有意义:除了core2提供的function之外,不要使用任何function(这仍然比-march=i686提供的更多),但是要为更新的haswell CPU优化代码,不是为了core2

还有-mtune=genericgeneric使GCC产生的代码在当前的CPU上运行得最好(意味着从一个版本的GCC到另一个版本的generic变化)。 在Gentoo论坛上有传言说, -march=X -mtune=generic产生的代码在X上运行得比在-march=X -mtune=X产生的代码上运行速度快(或者只是-march=X ,因为-mtune=X被暗示)。 不知道这是否属实。

一般来说,除非你确切地知道你需要什么,似乎最好的方法是指定-march=<oldest CPU you want to run on>-mtune=generic-mtune=generic在这里是为了-mtune=<oldest CPU you want to run on>隐含的-mtune=<oldest CPU you want to run on> ,因为您可能不想为最早的CPU进行优化)。 或者只是-march=native ,如果你只打算在你build立的同一台机器上运行。