【问题标题】:Cross Compiling To Atom Z510 From Intel i7从 Intel i7 交叉编译到 Atom Z510
【发布时间】:2012-03-30 18:23:34
【问题描述】:

我正在编写一个包含大量源代码的服务器应用程序。在我的 Intel Atom z510 上编译应用程序大约需要 15-20 分钟,而在我的 Intel i7 上编译大约需要 2-3 分钟。

我对交叉编译很陌生,因为我从来没有做过。我找不到任何关于如何交叉编译到 Z510 的参考资料。我发现了一篇关于原子here 的优化标志的很棒的 SO 文章。但是,没有说明如何在我的 Intel i7 电脑上将它们用于我的 Intel Atom CPU。

我假设在我的 i7 上编译的任何内容都将默认为我的 i7 进行优化,从而导致 Atom 的性能下降。任何建议/搜索词/网站将不胜感激。

一如既往,非常感谢您。

编辑:我使用的是 gcc 4.4。道歉。 (Ubuntu 10.04自带的那个)

康斯坦丁

【问题讨论】:

  • 提及您使用的编译器会有所帮助...
  • 你如何构建你的项目?这决定了需要在哪里传递 gcc 选项。最终他们需要在 gcc 命令行上结束。使用make,您通常会调整您的CFLAGS 变量。
  • 嘿,Ben,我正在使用 scons ......不是我的选择。我明白了,有很多关于如何为 scons 设置编译器标志的文档,我只是不知道什么标志。

标签: c++ cross-compiling compiler-optimization


【解决方案1】:

我认为您认为在 Atom 上编译的代码会自动针对 Atom 进行优化的假设是错误的。

即使您通过-march=native -mtune=native 请求该行为,gcc 4.4 也不知道如何针对 Atom 进行优化。

只有当您传递这些标志以获得针对 Core i7 优化的代码(我认为这也需要更高版本的 gcc)时,为 Core i7 优化的代码才会比在 Atom 上编译的代码运行得更慢。去掉这些标志会导致 i7 上的编译器生成与 Atom 上相同的代码。

【讨论】:

  • 好的,谢谢 Ben,您和 timday 似乎都同意,我没有理由不只在 i7 上进行常规编译并复制二进制文件。我想这就是我现在要做的,稍后我会花一些时间阅读有关 -march 的内容。
【解决方案2】:

如果您使用的是 i7,并且想要编译与 Atom 兼容并针对您的 Atom 进行优化的二进制文件,只需在 gcc 中使用 -march=atom 选项。生成的二进制文件应该可以工作,条件是您在两个系统上运行相同的操作系统(这包括同意 32/64 位),并且存在任何必要的运行时依赖项。

【讨论】:

  • 对,这不是真正的交叉编译,因为架构是相同的。这只是对优化器的不同提示。另请注意,链接的问题表明-march=atom 是 gcc 4.5 中的新问题,因此康斯坦丁不可用
  • 抱歉,没有意识到这只是最近添加的。老实说,对于大多数“通用”代码而言,处理器特定优化的效果被高估了。听起来这里最大的收获是节省了几分钟的编译时间,而不是运行时的百分之几。所以你不妨使用 -march=i686;二进制文件仍然可以在 Atom 上运行,即使它们不是完全最佳的(如果您真的关心最佳执行,请进入 4.5)。
  • 太棒了!谢谢蒂姆的建议。你也知道我刚刚意识到的,我的 i7 在我的具有 gcc 4.6 的虚拟机中运行 11.10。所以我也许可以使用那个原子标志!但是,我的 11.10 是 64 位的,我需要另一个标志来强制 32 位编译吗?谢谢!
  • 啊,在这一点上我已经超出了我的深度。如果我是你,我会阅读“multiarch”,这与在 Debian 系统上混合 32 位和 64 位有关(尽管即使你可以构建 32 位,它仍然适用于 11.10 的 libc 并且不适用于 10.04除非您可能陷入 pbuilder 争吵),或者因为您无论如何都在使用 virtualbox,只需在您的 i7 上运行另一个具有 32 位 10.04 的 virtualbox 来进行 atom 兼容的构建(失去 atom 优化选项,但这真的没什么大不了的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 2016-11-18
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 2012-08-06
相关资源
最近更新 更多