0%

劈里啪啦、劈里啪啦的声音已经远去,过节的气氛也已在忙碌的工作中慢慢消散了。在节日的尾巴来到了首都出差,吃了14块钱但只有两块牛肉的牛肉面。闲暇时刻,写一些去年的总结。

阅读全文 »

摘要

本论文详细介绍了摇摆模调度的实现,这是一种软件流水技术,在编译时间和生成代码质量上具有有效性和高效性。软件流水致力于挖掘循环中的指令级并行度,这往往有助于科学和图形应用程序。

模调度是一类尝试重叠单基本块循环的迭代和基于优先级(来自一组启发式)调度指令的算法。摇摆模调度使用的方法被设计用于取得高度优化的调度,保持低寄存器压力,以及在取得两者的同时有个合理的编译时间。

摇摆模调度的一个缺点,(以及所有的模调度算法)是只处理单基本块循环会导致失去更多指令级平行度的优化机会。这篇论文详细介绍了将摇摆模调度算法扩展成以超级块的方式处理多个基本块循环。超级块是一组基本块,其单入口多出口的。将摇摆模调度扩展成能处理这种类型的循环,可以增加摇摆模调度可以应用的循环的数量。此外,它允许模调度应用到热点路径上(也是单入多出的),根据 profile 信息可以离线或者在运行时进行优化。

我们的摇摆模调度实现以及扩展到超级块循环的算法都进行了评估,发现它们是既有效又高效。对于原始算法,测试集被转换了有 10-33% 的性能收益,同时扩展的算法增加了测试集 7-22% 的性能收益。

阅读全文 »

摘要

这篇文章给出了一个新的软流水方法,称为摇摆模调度算法(SMS)。 它生成的调度在起始间隔,寄存器需求,和阶段数量方面都是几乎最优的。摇摆模调度算法是一个启发式方法,计算开销比较低。这篇文章首先描述了相关技术,然后在通用 VLIW 架构上的 Pefect Club 基准测试套上评估它。SMS 和其它的启发式方法相比,表明了它获得的调度质量和编译时间方面都优于其它的。为了进一步探索 SMS 的效果,描述了为 Equator MAP1000 处理器的生产质量编译器添加这个优化的一些经验;讨论了实现的问题,以及原始算法的修改和提高。最后,使用一组工业多媒体应用给出了一个实验结果。

阅读全文 »

摘要

这章介绍 CHESS,一个定点 DSP 处理器的可变目标代码生成环境。CHESS 解决了一系列的商业特定应用领域的处理器,它们越来越广泛地应用在通信,语音和音频处理中的嵌入式应用中。CHESS 是基于混合的行为/结构处理器表示模型的,它可以解释许多的架构特性,典型的如定点 DSP 处理器。此外,这个代码生成器采用了一系列高效的优化技术。这些特性产生了高度优化的机器码。

阅读全文 »

摘要

用激进的称为轨迹调度的技术编译普通的科学应用程序,我们为并行机器生成代码,其运行这些程序将会比等价的顺序机器来得快 – 我们期望是 10 到 30 倍快。

轨迹调度为称为超长指令字架构的机器生成代码。在超长指令字机器中,许多静态调度,紧密耦合,和细粒度的操作都是在单指令流里并行执行的。VLIW 是一些当前架构的并行扩展。

这些现存的架构从未突破基本的性能屏障。它们能从并行中获得的加速比从没有超过 2 到 3 倍。并不是说我们不能建造这种更高并行类型的机器;而是在轨迹调度之前,我们不知道如何为为它们生成代码。轨迹调度会在普通代码中发现足够多的并行性,从而可以证明考虑高并行度的 VLIW 是合理的。

在耶鲁,我们正在建造一个这种类型的机器。我们的机器,ELI-512,有超过 500 位的水平指令字,每个周期会执行 10 到 30 条 RISC 级别的操作 [Patterson 82]。ELI 表示极大长字指令;512 表示我们希望达成的指令字大小。(当前的设计已经有 1200 位指令字了。)

一旦清楚了我们可以为 VLIW 编译代码,一些新的问题就会出现,本文会给出这些问题的答案。我们如何在不使得机器太大的情况下,在每个周期里放入足够多的测试?我们如何在不使得机器太慢的情况下,在每个周期里放入足够多的内存依赖?

阅读全文 »

摘要

应用特定指令集处理器(ASIPs)是架构和指令集都针对特定应用领域优化过的现场或掩码可编程处理器。ASIPs 具有较高的自由度,因此越来越多地用于电信等竞争激烈的市场。但是,迄今为止,缺少适合于 ASIPs 设计和编程的 CAD 技术。在这篇文章中,提出了一种定义 ASIPs 优化微指令集的交互式方法。第二个问题是一个为预定义的ASIP 生成代码的指令选择方法。生成了一个指令集和数据路径模型的组合,在这上面映射了应用。

阅读全文 »

摘要

指令选择是代码生成中三个主要的优化问题之一 — 其它两个是指令调度和寄存器分配。指令选择器的任务是将来自目标独立表示的输入程序转换为一个特定目标的形式,期间会充分利用可以使用的机器指令。因此,指令选择是生成在特定目标机器上既正确又高效运行的代码至关重要的一部分。

尽管自 1960 年代后期以来一直在研究,但是这个领域的上一篇综合调查是写于 30 多年前的了。因为,自从它发表之后出现了许多新的方法和技术,所以需要对当前的文献进行新的审查。这个报告解决了这个需求,给出了一个广泛的调查,以及指令选者过时的方法和最新方法的分类。因此,这个报告取代和扩展了之前的调查,并且尝试着指出未来的研究方向。

阅读全文 »

简介

高级语言的大部分优化技术研究关注于改善生成的程序的执行时间,通常以增加储存为代价。当解决了存储优化之后,通常也会影响到时间类的优化,例如指令减少相关的代码转换。在 Bliss 编译器(WJWHG75) ,这样一个存储优化编译器中,也会执行降低寄存器临时存储的转换,但是没有解决程序变量自动覆盖的问题。

微型计算机和微处理器的日益普及表明,到了全面检验自动存储优化问题的时候了。因为在小型系统的环境下,缺少空间总会是一个问题,小型机器的普及意味着这个问题的重要性日益增加。虽然内存成本的下降会减缓这个趋势,但是墨菲定理的一个变体确保了程序大小的增长总是快于可用内存的增长。换句话说,程序员总是写不合适的程序,因此,随着时间的推移,他们会做得更多。

阅读全文 »