我正在尝试使用图着色进行寄存器分配的研究/项目,我将测试不同场景下不同优化寄存器分配算法的效率。
我该如何开始?我可以测试它们的先决条件和理由是什么? 我可以使用哪些算法?
加成:
我实际上想要快速解决这个问题,我没有做过更深入的研究,但是想要(无耻地)将一个现成的分析提交到我的项目中,同时注重“效率”。即哪种类型的优化技术最适合不同的任务/编译器/解释器。
所以我的主要任务是(如何)在我的程序中实现寄存器分配。 我在Core2 Duo机器上使用64位Linux系统。我知道C,C ++和Java。
谢谢!
答案 0 :(得分:0)
基线 - 据推测,您需要一组测试用例 - 从简单到复杂 - 测试繁重的寄存器使用情况,特别是溢出。我相信这有一些共同/标准的。您需要在基本编译器和高性能现代编译器上对它们进行分析,并分析汇编输出以确定正在发生的事情。这会给你一个基线。
开发 - 选择一个编译器(或编写一个)。较旧的是LCC - 这是旧的,小的,简单的,但有一本书可以完整地解释它。更新的替代方案可能是LLVM,或者可能是GCC。有些编译器已经用于此类研究 - 您甚至可以使用命令行开关在一系列分配器之间切换。
或澄清问题 - 我们是在谈论C风格的语言吗?动态的?即时编译?你想知道什么?什么是目标CPU?
答案 1 :(得分:0)
LCC是非优化的吗?多数民众赞成好吧我假设您将需要许多不同的编译器,因为没有相同编译器的两个版本,也没有两个编译器将以相同的方式实现相同的优化。
我认为您首先需要关注反汇编程序然后分析代码流然后才能注册使用情况。实际上在此之前再次选择ISA(指令集)相同的代码相同的编译器将根据特定目标,甚至同一系列中的特定目标,针对相同的优化产生不同的结果。
由于优化算法导致的寄存器分配结果主题非常广泛且非常动态。它与基准测试相提并论。尽管它仍然听起来像一个有趣的话题,但我认为你会发现,无论有没有优化,有或没有几十个通用寄存器,大多数编译器最终只使用少量寄存器。 (一些传递参数和一些函数来实现函数)