0

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

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


加法

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

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

谢谢!

4

2 回答 2

0

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

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

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

于 2010-04-19T15:38:51.430 回答
0

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

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

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

于 2010-04-19T16:43:29.040 回答