0

我正在尝试使用图着色来做一个关于寄存器分配的研究/项目,在这里我将测试不同场景下不同优化寄存器分配算法的效率。寄存器分配算法的效率

我该如何开始?我可以测试他们的先决条件和理由是什么? 我可以使用什么算法?


加成

其实我是想的快捷方式离开这里,我没有做更深入的研究,但要提交(无耻)一个现成的分析到我的项目有一点强调'效率'。即哪种类型的优化技术最适合不同的任务/编译器/解释器。

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

谢谢!

+1

您可能需要使这个问题更具体些,或使其成为CW。目前还没有简单的答案。 – 2010-04-19 15:07:24

回答

0

基线 - 假设您需要一套测试用例 - 从简单到复杂 - 测试繁重的注册使用情况,尤其是溢出。我相信这有一些共同的/标准的。你需要在一个基本的编译器和一个高性能的现代编译器上对它们进行配置文件分析,并分析程序集的输出结果以确定发生了什么。这会给你一个基准。

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

或者,澄清问题 - 我们在谈论C语言吗?动态的?即时编译?你想知道什么? CPU的目标是什么?

+0

嗨!谢谢你的回复,我已经加入了我的问题。 谢谢! – aksci 2010-04-20 04:35:10

0

LCC是非优化的权利?那好吧,我想你会想要许多不同的编译器,因为没有两个版本的同一个编译器和两个编译器会以同样的方式实现相同的优化。

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

归因于优化算法的寄存器分配结果的主题非常宽且非常动态。它与基准一致。尽管这听起来像是一个有趣的话题,但我认为你会发现,无论是否进行优化,有或没有数十个通用寄存器,大多数编译器最终只使用少数寄存器。 (几个传递参数和一些函数来实现该功能)