当前位置: 首页 > 知识库问答 >
问题:

-游行与-mtune有何不同?

柳修为
2023-03-14

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

-march-mtune 有什么区别?

什么时候只用< code>-march,而不是两个都用?有没有可能只是< code>-mtune?

共有2个答案

闾丘谦
2023-03-14

这是我用谷歌搜索的内容:

-mar=X选项采用CPU名称X并允许GCC生成使用X所有功能的代码。GCC手册准确解释了哪些CPU名称意味着哪些CPU系列和功能。

由于功能通常是添加的,而不是删除的,因此使用<code>构建的二进制文件将在CPU<code>X<code>上运行,有很好的机会在比<code>X<code>更新的CPU上运行,但几乎肯定不会在早于<code>的任何CPU上运行。某些指令集(我猜是3DNow!)可能特定于特定的CPU供应商,使用这些可能会得到不在竞争CPU上运行的二进制文件,无论是更新的还是其他的。

-mtune=Y选项可调整生成的代码,使其在Y上运行的速度比在其他CPU上运行的更快。-三月=X,意味着-mtune=X-mtune=Y不会覆盖-march=X,因此,例如,使用-march=core2-mtune=i686-您的代码不会在任何早于的core2上运行,因为-march=core2,所以您到底为什么要优化比core2更老(功能更少)的东西-march=core2-mtune=haswell更有意义:不要使用任何超出<code>core2-march=i686提供的功能多得多!),但是要为更新得多的<code>haswell<code>CPU优化代码,而不是为<code>core2<code>优化代码。

还有-mtune=通用通用使GCC生成在当前CPU上运行最佳的代码(意思是通用从一个版本的GCC更改为另一个版本)。Gentoo论坛上有传言称,-mar=X-mtune=通用生成的代码在X上运行速度快于-mar=X生成的代码(或者只是-mar=X,因为-mtune=X是隐含的)。不知道这是真是假。

一般来说,除非你确切地知道你需要什么,否则最好的方法似乎是指定-march=

莘光华
2023-03-14

如果您使用-march,那么GCC将可以自由生成在指定CPU上工作的指令,但(通常)不会在体系结构系列中的早期CPU上工作。

如果您只使用< code>-mtune,那么编译器将生成适用于其中任何一个的代码,但会优先选择在您指定的特定CPU上运行最快的指令序列。例如为该CPU适当地设置循环展开试探法。

-march=foo 意味着 -mtune=foo,除非您还指定了不同的 -mtune。这就是为什么使用 -march 比仅仅启用 -mavx 等选项而不做任何调整更好的原因之一。

警告:在 GCC 无法明确识别的 CPU 上 -march=native 仍将启用 GCC 可以检测到的新指令集,但会保留 -mtune=generic。使用一个足够新的GCC,如果你希望它成为好的代码,它知道你的CPU。

 类似资料:
  • 问题内容: 我只知道一个js库,那就是jQuery。 但是我小组中的其他编码人员正在将AngularJS更改为新项目中的默认库。 我对此一无所知。与jQuery有何不同? 我已经为jQuery中的类似任务完​​成了一组功能。我还能在AngularJS中使用jQuery吗? 问题答案: Angular 1是一个框架,而Angular 2是一个 平台 。(参考) 对于开发人员,Angular2提供了一

  • 我正在阅读GRPC的解释,这张图很有趣: 传输层是如何工作的?如果是通过网络...为什么叫RPC?更重要的是,这与为服务层实现API的REST(客户机中具有发出http请求的方法的类)有何不同?

  • 一篇关于设置幽灵博客的文章说,使用从本地计算机复制到远程服务器:

  • 我在获取引用光标时遇到问题。 假设我有引用游标的变量,“c_cursor SYS_REFCURSOR”,并且参考游标将具有具有以下列的行 列A|列B|列C 我有这个行类型变量“r_table TestTable%rowtype” 这个行类型有列A,列B和列C,其中包含额外的列。所以它就像这个 列A|列B|列C|列D|列E|列F 因此,我要做的是创建一行,其中列a、B和C从游标值中提取,其余列给出一

  • 问题内容: 我发现docker swarm,kubernetes非常相似,然后有docker这是一家公司,上面两个是docker集群工具。那么,这些工具到底是什么,它们之间的区别呢? 问题答案: 有很多文章可以解释这些差异。简而言之: 两者都试图解决相同的问题-在大量主机上进行容器编排。本质上,这些问题可以按如下方式分解: 在多个主机之间调度容器(考虑资源利用率等) 将容器分组为逻辑单元 缩放容器

  • 问题内容: JavaEE 7下的Servlet 3.1吗? 哪个版本的eclipse支持servlet 3.1开发? 问题答案: JavaEE 7下的Servlet 3.1吗? Servlet 3.1是JavaEE 7引入的。 Servlet 3.1与Servlet 3.0有何不同? 关于Servlet 3.1的新变化,请阅读Arun Gupta的博客文章:Servlet 3.1的新增功能?-Ja