从源来构建编译器从源产生更好的优化?

问题描述 投票:0回答:2

考虑这种简单的情况:

I为我的通用操作系统(不是Windows)下载C ++编译器(例如

CLang
或其他任何内容)的预构建二进制文件。我编译我的代码,其中包括一些具有优化标志的计算昂贵的数学计算,并且执行时间为
GCC
.
一次尝试,这次不是使用预构建的二进制文件,而是下载源代码并在通用机器上自己构建编译器。我用相同的优化标志编译了相同的代码,从而实现了执行时间
-O3

会或多或少会一样?

换句话说,执行时间是否独立于编译器的构建方式?

编译器对您的代码的优化是编译器的

Behavior

的结果,而不是编译器的效果。

如果编译器具有相同的行为设计,它将产生完全相同的输出。
c++ optimization
2个回答
7
投票

从类似地,相同的编译器版本应生成相同的汇编代码给定相同的C ++代码输入。但是,某些事情可能会进一步影响运行编译器时正在执行的代码。 A发行版可能已经从其他版本中退出(甚至创建了自己的)补丁。 现代编译器通常具有图书馆的依赖(例如,cloog),它们可能在不同的版本中具有不同的行为,从而导致编译器基于其他数据基本上的其他数据做出代码生成决策。 这些库可能(在某些编译器版本中)在编译时是可选的(可能需要给出 - 启用开关以配置或配置尝试自动进行自动检测)。

compiler Switch像

T1

会查看您编译的硬件并尝试相应地优化的硬件。 编译器优化器触发的时间限制,实质上是在更好的机器上进行更好的优化;或对记忆的相同(我认为这已经不再是现代编译器)

2
投票

说,即使是同一组装程序也可能在您的机器和他们的机器上执行不同的表现,例如因为一个针对AMD进行了优化,另一个是针对Intel的。

  • 在我的看法和理论上,编译速度可以更快,因为您可以对“编译编译器的编译器”,“请针对我的计算机,您可以使用我的计算机处理器自己的机器代码来优化。
  • 但我认为
  • Compiler的优化不能更快。要使编译器的优化更快,我认为我们需要将新技术之类的东西放入编译器中,而不仅仅是重新编译。
  • 取决于该编译器的实现以及您的平台如何实现,但是答案很可能是“否”的。
  • 如果您的平台提供了特定的功能,可以提高程序的性能,编译器中的优化器
    might
  • 使用该功能来生成更快的程序。优化器只有在编译器作者知道该功能并在优化器中为您的平台实施了特殊处理时,才能做到这一点。
  • IF
  • 就是这样,检测可以在优化器中动态完成,这意味着优化器的任何构建都可以检测平台并优化您的代码。仅由于某种原因,只有在优化器的编译时进行检测,在您的平台上重新编译它可以带来这一优势。但是,对于您的plaform来说,这是一个更好的构建,编译器供应商很可能为其提供了二进制文件。 SO,使用所有这些IFS,当您将编译器重新编译到平台上时,您的程序不太可能更快。但是,如果将编译器优化到您的平台而不是通用二进制文件,则有可能会更快一些,从而在较短的编译中。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.