【问题标题】:Efficiency of register allocation algorithms寄存器分配算法的效率
【发布时间】:2010-04-19 14:49:50
【问题描述】:

我正在尝试使用图形着色对寄存器分配进行研究/项目,我将在其中测试不同优化寄存器分配算法在不同场景中的效率。

我该如何开始?我可以测试它们的先决条件和依据是什么? 我可以使用哪些算法?


加法

我实际上想要一个快速的方法来解决这个问题,我没有做更深入的研究,但想(无耻地)向我的项目提交一份现成的分析,并稍微强调“效率”。即哪种类型的优化技术最适合不同的任务/编译器/解释器。

所以我的主要任务是(如何)在我的程序中实现寄存器分配。 我在 Core2 Duo 机器上使用 64 位 Linux 系统。我知道 C、C++ 和 Java。

谢谢!

【问题讨论】:

  • 您可能需要让这个问题更具体一点,或者让它顺时针。就目前而言,没有简单的答案。

标签: optimization compiler-construction project graph-theory register-allocation


【解决方案1】:

基线 - 大概您需要一组测试用例(从简单到复杂)来测试大量寄存器的使用,尤其是溢出。我相信有一些常见的/标准的。您需要在基本编译器和高性能现代编译器上对它们进行概要分析,并分析汇编输出以了解发生了什么。这会给你一个基线。

开发 - 选择一个编译器(或编写一个)。较旧的是LCC - 它很旧,很小,很简单,但有一本书可以完整地解释它。较新的替代方案可能是 LLVM,或者可能是 GCC。一些编译器已经用于此类研究 - 您甚至可以使用命令行开关在一系列分配器之间切换。

或者,澄清问题 - 我们是在谈论 C 风格的语言吗?动态的? JIT了?你想知道什么?目标 CPU 是什么?

【讨论】:

  • 嗨!感谢您的回复,我已添加到我的问题中。谢谢!
【解决方案2】:

LCC 没有优化,对吧?没关系,我假设您将需要许多不同的编译器,因为没有两个版本的相同编译器,也没有两个编译器会以相同的方式实现相同的优化。

我认为您需要先关注反汇编程序,然后分析代码流,然后才能注册使用情况。实际上,在此之前再次在这里选择一个 ISA(指令集),相同的代码相同的编译器将根据特定目标,甚至是同一家族中的特定目标,为相同的优化产生不同的结果。

由于优化算法导致的寄存器分配结果的话题非常广泛且非常动态。它与基准测试相提并论。尽管这听起来仍然是一个有趣的话题,但我认为您会发现,无论有没有优化,有或没有数十个通用寄存器,大多数编译器最终只使用少数几个寄存器。 (几个传递参数和几个函数来实现函数)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2021-07-07
    • 2017-03-10
    • 2010-12-29
    • 1970-01-01
    相关资源
    最近更新 更多