Jam*_*son 76 compiler-construction optimization flags gcc options
我试图为此刷新GCC手册页,但仍然没有得到它,真的.
-march
和之间有什么区别-mtune
?
什么时候才使用-march
,而不是两者兼而有之?是否有可能只是-mtune
?
Jam*_*man 90
如果您使用,-march
那么GCC将可以自由生成在指定CPU上工作的指令,但不能生成(通常)架构系列中较早的CPU.如果您使用-mtune
,那么编译器将生成适用于其中任何一个的代码,但将支持在您指定的特定CPU上运行速度最快的指令序列.
LRN*_*LRN 46
这就是我用Google搜索的内容:
该-march=X
选项采用CPU名称,X
并允许GCC生成使用其所有功能的代码X
.GCC手册确切地解释了哪些CPU名称意味着哪些CPU系列和功能.
因为通常会添加但不会删除功能,所以构建的二进制文件-march=X
将在CPU上运行X
,很有可能在比新版本更高的CPU上运行X
,但它几乎肯定不能在比旧版本更高的版本上运行X
.某些指令集(3DNow !,我猜?)可能特定于某个特定的CPU供应商,利用这些可能会让您获得不在竞争CPU上运行的二进制文件,无论是更新还是其他.
该-mtune=Y
选项调整生成的代码,使其运行速度Y
比运行在其他CPU上的速度快.-march=X
暗示-mtune=X
.-mtune=Y
不会覆盖-march=X
,所以,例如,它可能没有任何意义-march=core2
和-mtune=i686
- 你的代码将不会运行在比任何时候更早的任何东西core2
,因为-march=core2
,为什么在地球上你想要优化比core2更老的(功能更少)?-march=core2 -mtune=haswell
更有意义的是:不要使用超出core2
提供的任何功能(这仍然比-march=i686
提供给你的更多!),但是为更新的haswell
CPU 优化代码,而不是core2
.
还有-mtune=generic
.generic
使GCC生成的代码在当前CPU上运行得最好(意味着generic
从一个版本的GCC更改为另一个版本).还有一些对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>
,因为您可能不希望针对最老的CPU进行优化).或者只是-march=native
,如果你只想在你建立的同一台机器上运行.
归档时间: |
|
查看次数: |
26086 次 |
最近记录: |