M.5 流水线与指令级并行性的发展(第 3 章及附录 C、H)
早期的流水线 CPU
IBM 7030,即 Stretch,通常被认为是第一种通用流水线处理器。Stretch 接续 IBM 704,目标是比 704 快 100 倍;这一目标远远超出当时的技术水平,因而获得 Stretch 这个绰号。设计计划用四级流水线重叠取指、译码和执行,获得 1.6 倍的加速。Bloch[1959]和 Bucholtz[1962]介绍了其设计和工程权衡,包括 ALU 旁路的使用。
20 世纪 70 年代末至 80 年代初出现了一系列关于流水线的一般性论述,形成了大部分常用术语,也介绍了简单流水线采用的大部分基本技术。这些综述包括 Keller[1975]、Ramamoorthy 和 Li[1977]、Chen[1980],以及 Kogge[1981];Kogge 的整本书都围绕流水线展开。Davidson 及其同事[1971、1975]提出了流水线预约表的概念,作为设计带反馈的多周期流水线的方法,Kogge[1981]也介绍了这一方法。许多设计者在设计流水线或编写调度流水线的软件时,都使用了这些概念的某种变体。
RISC 处理器最初就把易于实现和易于流水线化作为设计目标。20 世纪 80 年代初发表的几篇早期 RISC 论文,尝试量化简化指令集所带来的性能优势。不过,最有说服力的分析,是 Bhandarkar 和 Clark 于 1991 年发表的 VAX 与 MIPS 实现比较,距第一批 RISC 论文发表已过去十年,参见图 M.1。在关于 RISC 实现优势的十年争论之后,这篇论文使最持怀疑态度的设计者也信服了 RISC 指令集体系结构的优点。
J. E. Smith 及其同事撰写了多篇论文,研究高速标量 CPU 的指令发射、异常处理和流水线深度。Kunkel 和 Smith[1986]评估了流水线开销和依赖对最优流水线深度选择的影响,还出色地讨论了锁存器设计及其对流水线的影响。Smith 和 Pleszkun[1988]评估了多种保持精确异常的技术。Weiss 和 Smith[1984]评估了多种硬件流水线调度与指令发射技术。
MIPS R4000 是最早的一批深流水线微处理器,Killian[1991]和 Heinrich[1993]对其进行了介绍。Alpha 的首个实现 21064 具有相似的指令集和整数流水线结构,但浮点单元的流水线划分更深。
动态调度的引入
1964 年,CDC 交付了第一台 CDC 6600。CDC 6600 在许多方面都独具特色。除了引入记分牌机制,它还是第一种广泛使用多个功能单元的处理器;其外围处理器也采用了多线程。设计者理解流水线与指令集设计之间的相互影响,采用简单的 load-store 指令集来促进流水线化。CDC 6600 还使用了先进的封装技术。Thornton[1964]介绍了它的流水线和 I/O 处理器体系结构,包括指令乱序执行的概念。Thornton[1970]的书从工艺技术到体系结构,对整个处理器作了出色的描述,并由 Cray 作序;遗憾的是,原文撰写时该书已绝版。CDC 6600 的 FORTRAN 编译器还具有指令调度器,见 Thorlin[1967]。
IBM 360 Model 91:一台里程碑式的计算机
IBM 360/91 引入了许多新概念,包括数据标记、寄存器重命名、动态检测内存冒险,以及通用的转发机制。Tomasulo 在 1967 年的论文中描述了他的算法。Anderson、Sparacio 和 Tomasulo[1967]介绍了处理器的其他方面,包括分支预测的使用。360/91 中的许多思想在近 25 年里淡出了实际应用,直到 20 世纪 90 年代才广泛复兴。遗憾的是,360/91 并未成功,只售出了少量机器。设计过于复杂使其上市延迟,也使 IBM 第一种带缓存的处理器 Model 85 能够在性能上超过 Model 91。
分支预测方案
J. E. Smith[1981]描述了 2 位动态硬件分支预测方案。Ditzel 和 McLellan[1987]介绍了 CRISP 的一种新型分支目标缓冲区,它实现了分支折叠。书中研究的相关预测器由 Pan、So 和 Rameh[1992]描述。Yeh 和 Patt[1992、1993]将相关性的思想推广,提出利用各分支历史的多级预测器,类似于 21264 使用的局部历史预测器。McFarling 在 1993 年的技术报告中介绍了竞赛预测方案,他称之为组合预测器。此后出现的许多分支预测论文,都是多级预测器和相关预测器思想的变体。Kaeli 和 Emma[1991]介绍了返回地址预测,Evers 等人[1998]则深入分析了多级预测器。第 3 章的数据来自 Skadron 等人[1999]。还有几种预测方案,可能在竞赛预测器之上进一步获益;Eden 和 Mudge[1998]以及 Jimenez 和 Lin[2002]描述了这些方法。
多发射处理器的发展
IBM 在多发射方面开展了先驱性工作。20 世纪 60 年代,一个名为 ACS 的项目在加利福尼亚州开展。它包含多发射概念、动态调度方案,以及沿分支两条路径取指的设计。动态调度采用备份寄存器,其机制比 Tomasulo 方案简单。项目最初旨在设计一种接续 Stretch、超越 CDC 6600/6800 的新体系结构。ACS 起步于纽约,随后迁往加利福尼亚州,后来又改为与 S/360 兼容,最终被取消。John Cocke 是该团队在思想上的主要推动者之一。团队汇集了 IBM 的资深人员和年轻贡献者,其中许多人后来在 IBM 或其他地方承担了重要职责,包括 Jack Bertram、Ed Sussenguth、Gene Amdahl、Herb Schorr、Fran Allen、Lynn Conway 和 Phil Dauber 等。编译器团队发表了许多思想,对 IBM 以外的研究产生了重大影响,但体系结构方面的思想当时并未广泛传播。关于这个重要项目,最完整的公开资料位于 www.cs.clemson.edu/~mark/acs.html,其中包括对 ACS 老成员的访谈和其他资料的线索。Sussenguth[1999]对 ACS 作了很好的概述。
早期真正进入市场的多发射处理器,大多采用 LIW 或 VLIW 设计。Charlesworth[1981]介绍了 Floating Point Systems 的 AP-120B,它是最早在一条指令中包含多个操作的宽指令处理器之一。Floating Point Systems 在编译器和手工编写的汇编语言库中都采用软件流水线,以高效利用处理器。由于它是附接处理器,可以忽略通用处理器实现多发射时的许多难题,例如虚拟内存和异常处理。
AP-120B、i860 等早期 VLIW 处理器采用过一种有趣的流水线组织方式:操作必须被“推过”功能单元,再在流水线末端“接住”结果。在这种处理器中,只有后续另一个操作按顺序从后面推动时,已有操作才会前进。而且,一条新指令指定的目的位置,属于更早发射的某条指令:新操作被推进流水线时,先前的结果就被推出。这样做的优点是,操作初次发射时无需指定结果目的位置,直到真正写结果寄存器时才指定。这种分离使硬件不必检测写后写(WAW)和读后写(WAR)冒险。缺点是代码大小会增加:如果程序依赖一个仍留在流水线中的操作,而眼下又不需要同类的其他操作,就可能必须用 no-op 将结果推出。几乎所有设计者最终都选择了能够自行排空的流水线,而不是这两种处理器的“推入—接住”方式。在自行排空的流水线中,发射指令本身指定目的位置,指令发射后无需进一步推动便能完成。代码密度的优势和代码生成的简化,看来超过了这种特殊结构带来的好处。
20 世纪 80 年代中期,一些研究项目引入了某种形式的多发射。例如,Stanford MIPS 处理器能将两个操作放在一条指令中;不过,主要出于性能原因,商用版本取消了这一能力。Fisher[1983]和 Yale 的同事提出,建造指令极宽、达到 512 位的处理器,并将这类处理器命名为 VLIW。其代码使用踪迹调度生成;Fisher[1981]最初为生成水平型微代码而开发了这种技术。Fisher 等人[1984]和 Ellis[1986]介绍了 Yale 处理器的踪迹调度实现。
虽然 IBM 取消了 ACS,20 世纪 80 年代这一领域的研究仍然活跃。ACS 取消十多年后,John Cocke 提出新的超标量处理器方案,由硬件动态决定发射;他和 Tilak Agerwala 在 80 年代中期的几次演讲中介绍了关键思想,并创造了 superscalar(超标量)一词。Cocke 将该设计命名为 America,见 Agerwala 和 Cocke[1987]。IBM Power1 体系结构,即 RS/6000 产品线,以这些思想为基础[Bakoglu 等人,1989]。
J. E. Smith[1984]及其在 Wisconsin 的同事提出了解耦方法,支持多发射和有限的动态流水线调度。这种处理器的重要特点,是利用队列保持某一类指令,例如访存指令内部的顺序,同时允许该类指令落后于或超前于另一类指令。Smith 等人[1987]介绍的 Astronautics ZS-1 体现了这种方法,用队列连接 load-store 单元与运算单元。Power2 也以类似方式使用队列。J. E. Smith[1989]还讨论了动态调度的优点,并将其与静态调度比较。
推测的概念可以追溯到最初的 360/91,它执行了一种非常有限的推测。后来处理器采用的方法,将 360/91 的动态调度技术与允许按序提交的缓冲区相结合。Smith 和 Pleszkun[1988]研究了用缓冲区保持精确中断的方法,并描述了重排序缓冲区的概念。Sohi[1990]介绍了加入重命名和动态调度的办法,使这一机制能够用于推测。Patt 及其同事很早就主张进行积极的重排序和推测;他们重点研究检查点和重启机制,并率先提出名为 HPSm 的方法,也是 Tomasulo 算法的一种扩展[Hwu 和 Patt,1986]。
Smith、Johnson 和 Horowitz[1989]使用重排序缓冲区,评估了多发射处理器中的推测技术,目的是研究非科学计算代码在推测和多发射条件下可利用的 ILP。Johnson[1990]随后在一本书中描述了推测超标量处理器的设计。他后来领导 AMD K-5 的设计;K-5 是最早的一批推测超标量处理器。
在超标量发展的同时,商业界对 VLIW 的兴趣也在增长。Multiflow 处理器[Colwell 等人,1987]以 Yale 开发的概念为基础,但作出了许多重要改进,提高其实用性。其中包括一种可控的 store 缓冲区,支持某种形式的推测。虽然 Multiflow 处理器售出超过 100 台,公司仍因多方面问题而失败:小公司引入新指令集困难重重,商用 RISC 微处理器又改变了小型机市场的经济格局,带来了强烈竞争。
与 Multiflow 大约同时,Cydrome 公司成立,目标是制造 VLIW 风格的处理器[Rau 等人,1989];它在商业上也未成功。Dehnert、Hsu 和 Bratt[1989]介绍了 Cydrome Cydra 5 的体系结构和性能。Cydra 5 采用宽指令字,提供动态寄存器重命名,以及额外的软件流水线支持。它将硬件与软件独特地结合起来,包括条件指令和寄存器轮转,旨在开发 ILP。Cydrome 比 Multiflow 处理器依赖更多硬件,主要在向量风格的代码上取得了有竞争力的性能。最终,Cydrome 遇到了与 Multiflow 类似的困难,未能获得商业成功。虽然这两家公司都未能成功,但它们培养了一批具有丰富 ILP 开发经验和先进编译技术经验的人才;其中许多人后来把这些经验和部分技术带入了新处理器。Fisher 和 Rau[1993]编辑了一部全面的论文集,涵盖这两种重要处理器的硬件与软件。
Rau 还开发了名为 polycyclic scheduling 的调度技术,它构成了大多数软件流水线方案的基础[Rau、Glaeser 和 Picard,1982]。Rau 的工作继承了 Davidson 及其同事关于为流水线处理器设计最优硬件调度器的早期研究。历史上的其他 LIW 处理器还包括 Apollo DN 10000 和 Intel i860,两者都能双发射浮点操作和整数操作。
调度的编译器技术与硬件支持
循环级并行性和依赖分析,主要由 D. Kuck 及其在 Illinois 大学的同事在 20 世纪 70 年代发展起来。他们还创造了如今常用的反依赖和输出依赖术语,并开发了几种标准的依赖检验,包括 GCD 检验和 Banerjee 检验。后者以 Uptal Banerjee 命名,有多种变体。后来,依赖分析的研究重点转向一系列精确检验,最后使用名为 Fourier–Motzkin 的线性规划算法。D. Maydan 和 W. Pugh 都证明,这种精确检验序列是一种实用方案。
在发现和调度 ILP 方面,许多早期工作与前述 VLIW 处理器的发展有关。Lam[1988]开发了软件流水线算法,并在 Warp 上评估其使用效果;Warp 是为专用应用设计的宽指令字处理器。Weiss 和 Smith[1987]比较了软件流水线与循环展开,研究它们作为流水线处理器代码调度技术的效果。Rau[1994]开发了模调度,以处理循环的软件流水线化问题,并同时处理寄存器分配。
研究者在多种背景下探索了推测代码调度的支持。几种处理器提供了忽略异常的模式,使 load 可以被更积极地调度,例如 MIPS TFP[Hsu,1994]。一些研究组还探索了更积极的推测代码调度硬件支持。例如,Smith、Horowitz 和 Lam[1992]提出名为 boosting 的概念:用硬件设施支持推测,同时提供检查和恢复机制,类似于 IA-64 和 Crusoe 的机制。Illinois 大学与 HP Laboratories 的研究者共同开发了哨兵调度思想[Mahlke 等人,1992],也类似于 Crusoe 和 IA-64 采用的“推测后检查”方法。
20 世纪 90 年代初,Illinois 大学的 Wen-Mei Hwu 及其同事开发了名为 IMPACT 的编译器框架[Chang 等人,1991],用来探索多发射体系结构与编译技术之间的相互作用。该项目产生了几个重要思想,包括超块调度[Hwu 等人,1993]、广泛利用运行剖析来指导过程内联等各种优化,以及使用特殊缓冲区实现编译器辅助的内存冲突检测[Gallagher 等人,1994];这种缓冲区类似于 ALAT 或程序控制的 store 缓冲区。他们还在 Mahlke 等人[1995]中研究了部分支持与完全支持谓词执行之间的性能权衡。
早期 RISC 处理器都采用延迟分支,这一方案受到微程序设计的启发;延迟分支机制又启发了若干关于编译时分支预测的研究。McFarling 和 Hennessy[1986]量化比较了多种编译时与运行时分支预测方案。Fisher 和 Freudenberger[1992]用相邻误预测之间的距离作为指标,评估了一系列编译时分支预测方案。Ball 和 Larus[1993]及 Calder 等人[1997]描述了利用已收集程序行为的静态预测方案。
EPIC 与 IA-64 的发展
EPIC 方法的根源,在于早期建造 LIW 和 VLIW 机器的尝试,特别是 Cydrome 和 Multiflow 的工作,也在于长期积累的编译器研究。这些公司失败之后,相关编译器工作仍在 HP、Illinois 大学及其他机构继续。由此获得的认识,使 HP 的设计者提出一种 VLIW 风格的 64 位体系结构,以接续 HP PA RISC。Intel 当时正在寻找新体系结构,以替换 x86——后来称为 IA-32——并提供 64 位能力。1995 年,两家公司建立合作关系,设计新体系结构 IA-64[Huck 等人,2000],并据此制造处理器。Itanium[Sharangpani 和 Arora,2000]是第一种这样的处理器。2002 年,Intel 推出了第二代 IA-64 设计 Itanium 2[McNairy 和 Soltis,2003;McCormick 和 Knies,2002]。
ILP 的研究及增加 ILP 的思路
一系列早期论文,包括 Tjaden 和 Flynn[1970]、Riseman 和 Foster[1972],得出结论:如果不投入极其庞大的硬件,在指令级能够获得的并行性就很少。这些论文使多指令发射的吸引力减弱了十多年。Nicolau 和 Fisher[1984]根据踪迹调度的工作发表论文,指出科学程序中存在大量潜在 ILP。
此后,可用 ILP 成为许多研究的对象。这些研究受到批评,因为它们都预设了一定程度的硬件支持和编译器技术。尽管如此,它们仍有助于建立合理预期,并理解限制因素的来源。Wall 参与了多项此类研究,包括 Jouppi 和 Wall[1989]以及 Wall[1991、1993]。早期研究被批评为过于保守,例如没有考虑推测;但其中最后一项,是截至原文所述时期最为大胆、范围最广的 ILP 研究,也是 3.10 节数据的基础。Sohi 和 Vajapeyam[1989]提供了宽指令字处理器可用并行性的测量。Smith、Johnson 和 Horowitz[1989]也用推测超标量处理器研究了 ILP 的极限。在研究时,他们认为自己规定的处理器已经是合理设计的上限。然而,后来已有和即将出现的处理器,很可能至少与它同样激进。Skadron 等人[1999]考察了一种与 2005 年最激进处理器相当的设计的性能权衡和限制,认为如果整数程序的分支预测没有显著改善,扩大窗口就没有意义。
Lam 和 Wilson[1992]研究了推测带来的限制,表明如果允许处理器沿多个方向推测,还可以获得额外收益,但这需要不止一个 PC。这类方案无法超过完美推测所能达到的性能,却有助于缩小实际预测与完美预测之间的差距。Wall 在 1993 年的研究中,对这种方法作了有限评估,最多探索 8 个分支。
超越数据流极限
文献中探索的另一种方法是值预测。值预测允许处理器根据预测的数据值进行推测。关于其用途已有多项研究。Lipasti 和 Shen 在 1996 年发表两篇论文,评估值预测的概念及其对 ILP 开发的潜在影响。Calder、Reinman 和 Tullsen[1999]探索了选择性值预测。Sodani 和 Sohi[1997]则从重用指令产生的值这一角度研究同一问题。
Moshovos 等人[1997]表明,要通过值推测获得性能收益,关键是跟踪过去的推测是否准确,据此决定何时推测。Moshovos 和 Sohi[1997]以及 Chrysos 和 Emer[1998]重点研究了内存依赖的预测,并利用这些信息消除经由内存形成的依赖。González 和 González[1998]、Babbay 和 Mendelson[1998],以及 Calder、Reinman 和 Tullsen[1999]是稍后的值预测研究。原文撰写时,这一领域十分活跃,每次会议都有新成果发表。
较新的先进微处理器
1994 年和 1995 年,各主要处理器厂商都发布了宽超标量处理器,即每周期发射三条或更多指令的处理器:Intel Pentium Pro 和 Pentium II,两者共享核心流水线体系结构[Colwell 和 Steck,1995];AMD K-5、K-6 和 Athlon;Sun UltraSPARC[Lauterbach 和 Horel,1999];Alpha 21164[Edmondson 等人,1995]和 21264[Kessler,1999];MIPS R10000、R12000[Yeager,1996];PowerPC 603、604、620[Diep、Nelson 和 Shen,1995];以及 HP 8000[Kumar,1997]。该年代后半段,即 1996—2000 年,许多产品出现了第二代,例如 Pentium III、AMD Athlon 和 Alpha 21264。第二代的发射率虽然相近,却能维持更低的 CPI,并提供高得多的时钟频率。它们都采用动态调度,且几乎普遍支持推测。实际中,实现技术、存储层次结构、设计者的水平,以及用作基准的应用类型等许多因素,共同决定哪种方法最好。
2000—2005 年,超标量处理器的发展主要体现出三个趋势:通过更深流水线获得更高时钟频率,例如 Pentium 4[Hinton 等人,2001];IBM 在 Power 4、Intel 在 Pentium 4 Extreme 中引入多线程;以及开始转向多核,包括 IBM 的 Power 4、AMD 的 Opteron[Keltcher 等人,2003],以及稍后的 Intel 产品[Douglas,2005]。
多线程与同时多线程
多线程概念可以追溯到最早的一批晶体管计算机之一 TX-2。TX-2 还因 Ivan Sutherland 在它上面创建 Sketchpad 而闻名;Sketchpad 是第一个计算机图形系统。TX-2 由 MIT Lincoln Laboratory 建造,于 1959 年投入运行。它用多个线程支持快速上下文切换,以处理 I/O 功能。Clark[1957]介绍了基本体系结构,Forgie[1957]介绍了 I/O 体系结构。CDC 6600 也使用多线程,其 I/O 处理器采用细粒度多线程,在线程间交错调度。Denelcor 设计的流水线多处理器 HEP 于 1982 年交付,利用细粒度多线程同时隐藏流水线延迟和所有处理器共享的大容量存储器的访问延迟。HEP 没有缓存,因此隐藏内存延迟至关重要。主要设计者之一 Burton Smith 在 1978 年的论文中介绍了 HEP 体系结构,Jordan[1983]发表了性能评估。TERA 扩展了多线程思想,Alverson 等人在 1992 年的论文中进行了介绍。Niagara 的多线程方法与 HEP、TERA 类似,但 Niagara 使用缓存,降低了通过线程隐藏延迟的需求。
20 世纪 80 年代末至 90 年代初,研究者探索了粗粒度多线程,也称块多线程,用来容忍延迟,尤其是多处理器环境中的延迟。Alewife 系统的 SPARCLE 处理器采用这种方案:每当发生高延迟的异常事件,例如耗时很长的缓存未命中,就切换线程。Agarwal 等人在 1993 年的论文中描述了 SPARCLE。IBM Pulsar 处理器使用了类似思想。
到 20 世纪 90 年代初,几个研究组形成了两点关键认识。首先,要获得最大的性能收益,需要细粒度多线程;粗粒度方案中的线程切换和启动开销,例如用新线程的指令重新填满流水线,会抵消很大一部分性能优势[Laudon、Gupta 和 Horowitz,1994]。其次,要有效利用大量功能单元,需要同时利用指令级并行性(ILP)和线程级并行性(TLP)。这些认识促成了几种将多线程与多发射结合的体系结构。Wolfe 和 Shen[1991]介绍了 XIMD,它对为 VLIW 处理器调度的线程进行静态交错。Hirata 等人[1992]描述了一种面向媒体的处理器方案,将静态超标量流水线与多线程支持相结合,并报告了同时利用两种并行性所获得的加速。Keckler 和 Dally[1992]则在具有多个功能单元的处理器中,将 ILP 的静态调度与线程的动态调度结合。如何在 ILP 和 TLP 之间平衡功能单元分配,以及如何调度这两种并行性,当时仍是尚未解决的问题。
20 世纪 90 年代中期,人们已经明确看到动态调度超标量处理器即将问世,几个研究组提出利用其动态调度能力,在运行中混合来自不同线程的指令。Yamamoto 等人[1994]似乎发表了最早的此类方案,不过其多线程超标量体系结构的仿真采用了过于简单的假设。紧接着,Tullsen、Eggers 和 Levy[1995]给出了第一份较为真实的仿真评估,并创造了 simultaneous multithreading(同时多线程,SMT)一词。该团队随后与产业界合作者解决了许多有关 SMT 的开放问题。例如,Tullsen 等人[1996]研究了 ILP 与 TLP 调度的挑战;Lo 等人[1997]广泛讨论了 SMT 概念并评估其性能潜力;Lo 等人[1998]评估了 SMT 处理器上的数据库性能;Tuck 和 Tullsen[2003]回顾了 Pentium 4 上的 SMT 性能。
IBM Power4 引入了多线程[Tendler 等人,2002],Power5 则采用同时多线程。Mathis 等人[2005]研究了 Power5 的 SMT 性能,Sinharoy 等人[2005]介绍了其系统体系结构。
参考文献
Agarwal, A., J. Kubiatowicz, D. Kranz, B.-H. Lim, D. Yeung, G. D’Souza, and M. Parkin [1993]. “Sparcle: An evolutionary processor design for large-scale multiprocessors,” IEEE Micro 13 (June), 48–61.
Agerwala, T., and J. Cocke [1987]. High Performance Reduced Instruction Set Processors, Tech. Rep. RC12434, IBM Thomas Watson Research Center, Yorktown Heights, N.Y.
Alverson, G., R. Alverson, D. Callahan, B. Koblenz, A. Porterfield, and B. Smith [1992]. “Exploiting heterogeneous parallelism on a multithreaded multiprocessor,” Proc. ACM/IEEE Conf. on Supercomputing, November 16–20, 1992, Minneapolis, Minn., 188–197.
Anderson, D. W., F. J. Sparacio, and R. M. Tomasulo [1967]. “The IBM 360 Model 91: Processor philosophy and instruction handling,” IBM J. Research and Development 11:1 (January), 8–24.
Austin, T. M., and G. Sohi [1992]. “Dynamic dependency analysis of ordinary programs,” Proc. 19th Annual Int’l. Symposium on Computer Architecture (ISCA), May 19–21, 1992, Gold Coast, Australia, 342–351.
Babbay, F., and A. Mendelson [1998]. “Using value prediction to increase the power of speculative execution hardware,” ACM Trans. on Computer Systems 16: 3 (August), 234–270.
Bakoglu, H. B., G. F. Grohoski, L. E. Thatcher, J. A. Kaeli, C. R. Moore, D. P. Tattle, W. E. Male, W. R. Hardell, D. A. Hicks, M. Nguyen Phu, R. K. Montoye, W. T. Glover, and S. Dhawan [1989]. “IBM second-generation RISC processor organization,” Proc. IEEE Int’l. Conf. on Computer Design, October, Rye Brook, N.Y., 138–142.
Ball, T., and J. Larus [1993]. “Branch prediction for free,” Proc. ACM SIGPLAN’93 Conference on Programming Language Design and Implementation (PLDI), June 23–25, 1993, Albuquerque, N.M., 300–313.
Bhandarkar, D., and D. W. Clark [1991]. “Performance from architecture: Comparing a RISC and a CISC with similar hardware organizations,” Proc. Fourth Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), April 8–11, 1991, Palo Alto, Calif., 310–319.
Bhandarkar, D., and J. Ding [1997]. “Performance characterization of the Pentium Pro processor,” Proc. Third Int’l. Symposium on High Performance Computer Architecture, February 1–5, 1997, San Antonio, Tex., 288–297.
Bloch, E. [1959]. “The engineering design of the Stretch computer,” Proc. Eastern Joint Computer Conf., December 1–3, 1959, Boston, Mass., 48–59.
Bucholtz, W. [1962]. Planning a Computer System: Project Stretch, McGraw-Hill, New York.
Calder, B., D. Grunwald, M. Jones, D. Lindsay, J. Martin, M. Mozer, and B. Zorn [1997]. “Evidence-based static branch prediction using machine learning,” ACM Trans. Program. Lang. Syst. 19:1, 188–222.
Calder, B., G. Reinman, and D. M. Tullsen [1999]. “Selective value prediction,” Proc. 26th Annual Int’l. Symposium on Computer Architecture (ISCA), May 2–4, 1999, Atlanta, Ga.
Chang, P. P., S. A. Mahlke, W. Y. Chen, N. J. Warter, and W. W. Hwu [1991]. “IMPACT: An architectural framework for multiple-instruction-issue processors,” Proc. 18th Annual Int’l. Symposium on Computer Architecture (ISCA), May 27–30, 1991, Toronto, Canada, 266–275.
Charlesworth, A. E. [1981]. “An approach to scientific array processing: The architecture design of the AP-120B/FPS-164 family,” Computer 14:9 (September), 18–27.
Chen, T. C. [1980]. “Overlap and parallel processing,” in Introduction to Computer Architecture, H. Stone, ed., Science Research Associates, Chicago, 427–486.
Chrysos, G. Z., and J. S. Emer [1998]. “Memory dependence prediction using store sets,” Proc. 25th Annual Int’l. Symposium on Computer Architecture (ISCA), July 3–14, 1998, Barcelona, Spain, 142–153.
Clark, D. W. [1987]. “Pipelining and performance in the VAX 8800 processor,” Proc. Second Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 5–8, 1987, Palo Alto, Calif., 173–177.
Clark, W. A. [1957]. “The Lincoln TX-2 computer development,” Proc. Western Joint Computer Conference, February 26–28, 1957, Los Angeles, 143–145.
Colwell, R. P., and R. Steck [1995]. “A 0.6 μm BiCMOS processor with dynamic execution.” Proc. of IEEE Int’l. Symposium on Solid State Circuits (ISSCC), February 15–17, 1995, San Francisco, 176–177.
Colwell, R. P., R. P. Nix, J. J. O’Donnell, D. B. Papworth, and P. K. Rodman [1987]. “A VLIW architecture for a trace scheduling compiler,” Proc. Second Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 5–8, 1987, Palo Alto, Calif., 180–192.
Cvetanovic, Z., and R. E. Kessler [2000]. “Performance analysis of the Alpha 21264-based Compaq ES40 system,” 27th Annual Int’l. Symposium on Computer Architecture (ISCA), June 10–14, 2000, Vancouver, Canada, 192–202.
Davidson, E. S. [1971]. “The design and control of pipelined function generators,” Proc. IEEE Conf. on Systems, Networks, and Computers, January 19–21, 1971, Oaxtepec, Mexico, 19–21.
Davidson, E. S., A. T. Thomas, L. E. Shar, and J. H. Patel [1975]. “Effective control for pipelined processors,” Proc. IEEE COMPCON, February 25–27, 1975, San Francisco, 181–184.
Dehnert, J. C., P. Y.-T. Hsu, and J. P. Bratt [1989]. “Overlapped loop support on the Cydra 5,” Proc. Third Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), April 3–6, 1989, Boston, Mass., 26–39.
Diep, T. A., C. Nelson, and J. P. Shen [1995]. “Performance evaluation of the PowerPC 620 microarchitecture,” Proc. 22nd Annual Int’l. Symposium on Computer Architecture (ISCA), June 22–24, 1995, Santa Margherita, Italy.
Ditzel, D. R., and H. R. McLellan [1987]. “Branch folding in the CRISP microprocessor: Reducing the branch delay to zero,” Proc. 14th Annual Int’l. Symposium on Computer Architecture (ISCA), June 2–5, 1987, Pittsburgh, Penn., 2–7.
Douglas, J. [2005]. “Intel 8xx series and Paxville Xeon-MP Microprocessors,” paper presented at Hot Chips 17, August 14–16, 2005, Stanford University, Palo Alto, Calif.
Eden, A., and T. Mudge [1998]. “The YAGS branch prediction scheme,” Proc. of the 31st Annual ACM/IEEE Int’l. Symposium on Microarchitecture, November 30–December 2, 1998, Dallas, Tex., 69–80.
Edmondson, J. H., P. I. Rubinfield, R. Preston, and V. Rajagopalan [1995]. “Superscalar instruction execution in the 21164 Alpha microprocessor,” IEEE Micro 15:2, 33–43.
Ellis, J. R. [1986]. Bulldog: A Compiler for VLIW Architectures, MIT Press, Cambridge, Mass.
Emer, J. S., and D. W. Clark [1984]. “A characterization of processor performance in the VAX-11/780,” Proc. 11th Annual Int’l. Symposium on Computer Architecture (ISCA), June 5–7, 1984, Ann Arbor, Mich., 301–310.
Evers, M., S. J. Patel, R. S. Chappell, and Y. N. Patt [1998]. “An analysis of correlation and predictability: What makes two-level branch predictors work,” Proc. 25th Annual Int’l. Symposium on Computer Architecture (ISCA), July 3–14, 1998, Barcelona, Spain, 52–61.
Fisher, J. A. [1981]. “Trace scheduling: A technique for global microcode compaction,” IEEE Trans. on Computers 30:7 (July), 478–490.
Fisher, J. A. [1983]. “Very long instruction word architectures and ELI-512,” 10th Annual Int’l. Symposium on Computer Architecture (ISCA), June 5–7, 1982, Stockholm, Sweden, 140–150.
Fisher, J. A., and S. M. Freudenberger [1992]. “Predicting conditional branches from previous runs of a program,” Proc. Fifth Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 12–15, 1992, Boston, 85–95.
Fisher, J. A., and B. R. Rau [1993]. Journal of Supercomputing, January (special issue).
Fisher, J. A., J. R. Ellis, J. C. Ruttenberg, and A. Nicolau [1984]. “Parallel processing: A smart compiler and a dumb processor,” Proc. SIGPLAN Conf. on Compiler Construction, June 17–22, 1984, Montreal, Canada, 11–16.
Forgie, J. W. [1957]. “The Lincoln TX-2 input-output system,” Proc. Western Joint Computer Conference, February 26–28, 1957, Los Angeles, 156–160.
Foster, C. C., and E. M. Riseman [1972]. “Percolation of code to enhance parallel dispatching and execution,” IEEE Trans. on Computers C-21:12 (December), 1411–1415.
Gallagher, D. M., W. Y. Chen, S. A. Mahlke, J. C. Gyllenhaal, and W.W. Hwu [1994]. “Dynamic memory disambiguation using the memory conflict buffer,” Proc. Sixth Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 4–7, Santa Jose, Calif., 183–193.
González, J., and A. González [1998]. “Limits of instruction level parallelism with data speculation,” Proc. Vector and Parallel Processing (VECPAR) Conf., June 21–23, 1998, Porto, Portugal, 585–598.
Heinrich, J. [1993]. MIPS R4000 User’s Manual, Prentice Hall, Englewood Cliffs, N.J.
Hinton, G., D. Sager, M. Upton, D. Boggs, D. Carmean, A. Kyker, and P. Roussel [2001]. “The microarchitecture of the Pentium 4 processor,” Intel Technology Journal, February.
Hirata, H., K. Kimura, S. Nagamine, Y. Mochizuki, A. Nishimura, Y. Nakase, and T. Nishizawa [1992]. “An elementary processor architecture with simultaneous instruction issuing from multiple threads,” Proc. 19th Annual Int’l. Symposium on Computer Architecture (ISCA), May 19–21, 1992, Gold Coast, Australia, 136–145.
Hopkins, M. [2000]. “A critical look at IA-64: Massive resources, massive ILP, but can it deliver?” Microprocessor Report, February.
Hsu, P. [1994]. “Designing the TFP microprocessor,” IEEE Micro 18:2 (April), 2333.
Huck, J. et al. [2000]. “Introducing the IA-64 Architecture” IEEE Micro, 20:5 (September–October), 12–23.
Hwu, W.-M., and Y. Patt [1986]. “HPSm, a high performance restricted data flow architecture having minimum functionality,” 13th Annual Int’l. Symposium on Computer Architecture (ISCA), June 2–5, 1986, Tokyo, 297–307.
Hwu, W. W., S. A. Mahlke, W. Y. Chen, P. P. Chang, N. J. Warter, R. A. Bringmann, R. O. Ouellette, R. E. Hank, T. Kiyohara, G. E. Haab, J. G. Holm, and D. M. Lavery [1993]. “The superblock: An effective technique for VLIW and superscalar compilation,” J. Supercomputing 7:1, 2 (March), 229–248.
IBM. [1990]. “The IBM RISC System/6000 processor” (collection of papers), IBM J. Research and Development 34:1 (January).
Jimenez, D. A., and C. Lin [2002]. “Neural methods for dynamic branch prediction,” ACM Trans. Computer Sys 20:4 (November), 369–397.
Johnson, M. [1990]. Superscalar Microprocessor Design, Prentice Hall, Englewood Cliffs, N.J.
Jordan, H. F. [1983]. “Performance measurements on HEP—a pipelined MIMD computer,” Proc. 10th Annual Int’l. Symposium on Computer Architecture (ISCA), June 5–7, 1982, Stockholm, Sweden, 207–212.
Jouppi, N. P., and D. W. Wall [1989]. “Available instruction-level parallelism for superscalar and superpipelined processors,” Proc. Third Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), April 3–6, 1989, Boston, 272–282.
Kaeli, D. R., and P. G. Emma [1991]. “Branch history table prediction of moving target branches due to subroutine returns,” Proc. 18th Annual Int’l. Symposium on Computer Architecture (ISCA), May 27–30, 1991, Toronto, Canada, 34–42.
Keckler, S. W., and W. J. Dally [1992]. “Processor coupling: Integrating compile time and runtime scheduling for parallelism,” Proc. 19th Annual Int’l. Symposium on Computer Architecture (ISCA), May 19–21, 1992, Gold Coast, Australia, 202–213.
Keller, R. M. [1975]. “Look-ahead processors,” ACM Computing Surveys 7:4 (December), 177–195.
Keltcher, C. N., K. J. McGrath, A. Ahmed, and P. Conway [2003]. “The AMD Opteron processor for multiprocessor servers,” IEEE Micro 23:2 (March– April), 66–76.
Kessler, R. [1999]. “The Alpha 21264 microprocessor,” IEEE Micro 19:2 (March/ April) 24–36.
Killian, E. [1991]. “MIPS R4000 technical overview–64 bits/100 MHz or bust,” Hot Chips III Symposium Record, August 26–27, 1991, Stanford University, Palo Alto, Calif., 1.6–1.19.
Kogge, P. M. [1981]. The Architecture of Pipelined Computers, McGraw-Hill, New York.
Kumar, A. [1997]. “The HP PA-8000 RISC CPU,” IEEE Micro 17:2 (March/ April).
Kunkel, S. R., and J. E. Smith [1986]. “Optimal pipelining in supercomputers,” Proc. 13th Annual Int’l. Symposium on Computer Architecture (ISCA), June 2–5, 1986, Tokyo, 404–414.
Lam, M. [1988]. “Software pipelining: An effective scheduling technique for VLIW processors,” SIGPLAN Conf. on Programming Language Design and Implementation, June 22–24, 1988, Atlanta, Ga., 318–328.
Lam, M. S., and R. P. Wilson [1992]. “Limits of control flow on parallelism,” Proc. 19th Annual Int’l. Symposium on Computer Architecture (ISCA), May 19–21, 1992, Gold Coast, Australia, 46–57.
Laudon, J., A. Gupta, and M. Horowitz [1994]. “Interleaving: A multithreading technique targeting multiprocessors and workstations,” Proc. Sixth Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 4–7, San Jose, Calif., 308–318.
Lauterbach, G., and T. Horel [1999]. “UltraSPARC-III: Designing third generation 64-bit performance,” IEEE Micro 19:3 (May/June).
Lipasti, M. H., and J. P. Shen [1996]. “Exceeding the dataflow limit via value prediction,” Proc. 29th Int’l. Symposium on Microarchitecture, December 2–4, 1996, Paris, France.
Lipasti, M. H., C. B. Wilkerson, and J. P. Shen [1996]. “Value locality and load value prediction,” Proc. Seventh Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 1–5, 1996, Cambridge, Mass., 138–147.
Lo, J., L. Barroso, S. Eggers, K. Gharachorloo, H. Levy, and S. Parekh [1998]. “An analysis of database workload performance on simultaneous multithreaded processors,” Proc. 25th Annual Int’l. Symposium on Computer Architecture (ISCA), July 3–14, 1998, Barcelona, Spain, 39–50.
Lo, J., S. Eggers, J. Emer, H. Levy, R. Stamm, and D. Tullsen [1997]. “Converting thread-level parallelism into instruction-level parallelism via simultaneous multithreading,” ACM Trans. on Computer Systems 15:2 (August), 322–354.
Mahlke, S. A., W. Y. Chen, W.-M. Hwu, B. R. Rau, and M. S. Schlansker [1992]. “Sentinel scheduling for VLIW and superscalar processors,” Proc. Fifth Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 12–15, 1992, Boston, 238–247.
Mahlke, S. A., R. E. Hank, J. E. McCormick, D. I. August, and W. W. Hwu [1995]. “A comparison of full and partial predicated execution support for ILP processors,” Proc. 22nd Annual Int’l. Symposium on Computer Architecture (ISCA), June 22–24, 1995, Santa Margherita, Italy, 138–149.
Mathis, H. M., A. E. Mercias, J. D. McCalpin, R. J. Eickemeyer, and S. R. Kunkel [2005]. “Characterization of the multithreading (SMT) efficiency in Power5,” IBM J. of Research and Development, 49:4/5 (July/September), 555–564.
McCormick, J., and A. Knies [2002]. “A brief analysis of the SPEC CPU2000 benchmarks on the Intel Itanium 2 processor,” paper presented at Hot Chips 14, August 18–20, 2002, Stanford University, Palo Alto, Calif.
McFarling, S. [1993]. Combining Branch Predictors, WRL Technical Note TN-36, Digital Western Research Laboratory, Palo Alto, Calif.
McFarling, S., and J. Hennessy [1986]. “Reducing the cost of branches,” Proc. 13th Annual Int’l. Symposium on Computer Architecture (ISCA), June 2–5, 1986, Tokyo, 396–403.
McNairy, C., and D. Soltis [2003]. “Itanium 2 processor microarchitecture,” IEEE Micro 23:2 (March–April), 44–55.
Moshovos, A., and G. S. Sohi [1997]. “Streamlining inter-operation memory communication via data dependence prediction,” Proc. 30th Annual Int’l. Symposium on Microarchitecture, December 1–3, Research Triangle Park, N.C., 235–245.
Moshovos, A., S. Breach, T. N. Vijaykumar, and G. S. Sohi [1997]. “Dynamic speculation and synchronization of data dependences,” Proc. 24th Annual Int’l. Symposium on Computer Architecture (ISCA), June 2–4, 1997, Denver, Colo.
Nicolau, A., and J. A. Fisher [1984]. “Measuring the parallelism available for very long instruction word architectures,” IEEE Trans. on Computers C-33:11 (November), 968–976.
Pan, S.-T., K. So, and J. T. Rameh [1992]. “Improving the accuracy of dynamic branch prediction using branch correlation,” Proc. Fifth Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 12–15, 1992, Boston, 76–84.
Postiff, M.A., D. A. Greene, G. S. Tyson, and T. N. Mudge [1999]. “The limits of instruction level parallelism in SPEC95 applications,” Computer Architecture News 27:1 (March), 31–40.
Ramamoorthy, C. V., and H. F. Li [1977]. “Pipeline architecture,” ACM Computing Surveys 9:1 (March), 61–102.
Rau, B. R. [1994]. “Iterative modulo scheduling: An algorithm for software pipelining loops,” Proc. 27th Annual Int’l. Symposium on Microarchitecture, November 30–December 2, 1994, San Jose, Calif., 63–74.
Rau, B. R., C. D. Glaeser, and R. L. Picard [1982]. “Efficient code generation for horizontal architectures: Compiler techniques and architectural support,” Proc. Ninth Annual Int’l. Symposium on Computer Architecture (ISCA), April 26–29, 1982, Austin, Tex., 131–139.
Rau, B. R., D. W. L. Yen, W. Yen, and R. A. Towle [1989]. “The Cydra 5 departmental supercomputer: Design philosophies, decisions, and trade-offs,” IEEE Computers 22:1 (January), 12–34.
Riseman, E. M., and C. C. Foster [1972]. “Percolation of code to enhance paralleled dispatching and execution,” IEEE Trans. on Computers C-21:12 (December), 1411–1415.
Rymarczyk, J. [1982]. “Coding guidelines for pipelined processors,” Proc. Symposium Architectural Support for Programming Languages and Operating Systems (ASPLOS), March 1–3, 1982, Palo Alto, Calif., 12–19.
Sharangpani, H., and K. Arora [2000]. “Itanium Processor Microarchitecture,” IEEE Micro, 20:5 (September–October), 24–43.
Sinharoy, B., R. N. Koala, J. M. Tendler, R. J. Eickemeyer, and J. B. Joyner [2005]. “POWER5 system microarchitecture,” IBM J. of Research and Development, 49:4–5, 505–521.
Sites, R. [1979]. Instruction Ordering for the CRAY-1 Computer, Tech. Rep. 78-CS-023, Dept. of Computer Science, University of California, San Diego.
Skadron, K., P. S. Ahuja, M. Martonosi, and D. W. Clark [1999]. “Branch prediction, instruction-window size, and cache size: Performance tradeoffs and simulation techniques,” IEEE Trans. on Computers, 48:11 (November).
Smith, A., and J. Lee [1984]. “Branch prediction strategies and branch-target buffer design,” Computer 17:1 (January), 6–22.
Smith, B. J. [1978]. “A pipelined, shared resource MIMD computer,” Proc. Int’l. Conf. on Parallel Processing (ICPP), August, Bellaire, Mich., 6–8.
Smith, J. E. [1981]. “A study of branch prediction strategies,” Proc. Eighth Annual Int’l. Symposium on Computer Architecture (ISCA), May 12–14, 1981, Minneapolis, Minn., 135–148.
Smith, J. E. [1984]. “Decoupled access/execute computer architectures,” ACM Trans. on Computer Systems 2:4 (November), 289–308.
Smith, J. E. [1989]. “Dynamic instruction scheduling and the Astronautics ZS-1,” Computer 22:7 (July), 21–35.
Smith, J. E., and A. R. Pleszkun [1988]. “Implementing precise interrupts in pipelined processors,” IEEE Trans. on Computers 37:5 (May), 562–573. (This paper is based on an earlier paper that appeared in Proc. 12th Annual Int’l. Symposium on Computer Architecture (ISCA), June 17–19, 1985, Boston, Mass.)
Smith, J. E., G. E. Dermer, B. D. Vanderwarn, S. D. Klinger, C. M. Rozewski, D. L. Fowler, K. R. Scidmore, and J. P. Laudon [1987]. “The ZS-1 central processor,” Proc. Second Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 5–8, 1987, Palo Alto, Calif., 199–204.
Smith, M. D., M. Horowitz, and M. S. Lam [1992]. “Efficient superscalar performance through boosting,” Proc. Fifth Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 12–15, 1992, Boston, 248–259.
Smith, M. D., M. Johnson, and M. A. Horowitz [1989]. “Limits on multiple instruction issue,” Proc. Third Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), April 3–6, 1989, Boston, 290–302.
Sodani, A., and G. Sohi [1997]. “Dynamic instruction reuse,” Proc. 24th Annual Int’l. Symposium on Computer Architecture (ISCA), June 2–4, 1997, Denver, Colo.
Sohi, G. S. [1990]. “Instruction issue logic for high-performance, interruptible, multiple functional unit, pipelined computers,” IEEE Trans. on Computers 39:3 (March), 349–359.
Sohi, G. S., and S. Vajapeyam [1989]. “Tradeoffs in instruction format design for horizontal architectures,” Proc. Third Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), April 3–6, 1989, Boston, 15–25.
Sussenguth, E. [1999]. “IBM’s ACS-1 Machine,” IEEE Computer 22:11 (November).
Tendler, J. M., J. S. Dodson, J. S. Fields, Jr., H. Le, and B. Sinharoy [2002]. “Power4 system microarchitecture,” IBM J. of Research and Development, 46:1, 5–26.
Thorlin, J. F. [1967]. “Code generation for PIE (parallel instruction execution) computers,” Proc. Spring Joint Computer Conf., April 18–20, 1967, Atlantic City, N.J., 27.
Thornton, J. E. [1964]. “Parallel operation in the Control Data 6600,” Proc. AFIPS Fall Joint Computer Conf., Part II, October 27–29, 1964, San Francisco, 26, 33–40.
Thornton, J. E. [1970]. Design of a Computer, the Control Data 6600, Scott, Foresman, Glenview, Ill.
Tjaden, G. S., and M. J. Flynn [1970]. “Detection and parallel execution of independent instructions,” IEEE Trans. on Computers C-19:10 (October), 889–895.
Tomasulo, R. M. [1967]. “An efficient algorithm for exploiting multiple arithmetic units,” IBM J. Research and Development 11:1 (January), 25–33.
Tuck, N., and D. Tullsen [2003]. “Initial observations of the simultaneous multithreading Pentium 4 processor,” Proc. 12th Int. Conf. on Parallel Architectures and Compilation Techniques (PACT’03), September 27–October 1, New Orleans, La., 26–34.
Tullsen, D. M., S. J. Eggers, and H. M. Levy [1995]. “Simultaneous multithreading: Maximizing on-chip parallelism,” Proc. 22nd Annual Int’l. Symposium on Computer Architecture (ISCA), June 22–24, 1995, Santa Margherita, Italy, 392–403.
Tullsen, D. M., S. J. Eggers, J. S. Emer, H. M. Levy, J. L. Lo, and R. L. Stamm [1996]. “Exploiting choice: Instruction fetch and issue on an implementable simultaneous multithreading processor,” Proc. 23rd Annual Int’l. Symposium on Computer Architecture (ISCA), May 22–24, 1996, Philadelphia, Penn., 191–202.
Wall, D. W. [1991]. “Limits of instruction-level parallelism,” Proc. Fourth Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), April 8–11, 1991, Palo Alto, Calif., 248–259.
Wall, D. W. [1993]. Limits of Instruction-Level Parallelism, Research Rep. 93/6, Western Research Laboratory, Digital Equipment Corp., Palo Alto, Calif.
Weiss, S., and J. E. Smith [1984]. “Instruction issue logic for pipelined supercomputers,” Proc. 11th Annual Int’l. Symposium on Computer Architecture (ISCA), June 5–7, 1984, Ann Arbor, Mich., 110–118.
Weiss, S., and J. E. Smith [1987]. “A study of scalar compilation techniques for pipelined supercomputers,” Proc. Second Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), October 5–8, 1987, Palo Alto, Calif., 105–109.
Wilson, R. P., and M. S. Lam [1995]. “Efficient context-sensitive pointer analysis for C programs,” Proc. ACM SIGPLAN’95 Conf. on Programming Language Design and Implementation, June 18–21, 1995, La Jolla, Calif., 1–12.
Wolfe, A., and J. P. Shen [1991]. “A variable instruction stream extension to the VLIW architecture,” Proc. Fourth Int’l. Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS), April 8–11, 1991, Palo Alto, Calif., 2–14.
Yamamoto, W., M. J. Serrano, A. R. Talcott, R. C. Wood, and M. Nemirosky [1994]. “Performance estimation of multistreamed, superscalar processors,” Proc. 27th Annual Hawaii Int’l. Conf. on System Sciences, January 4–7, 1994, Maui, 195–204.
Yeager, K. [1996]. “The MIPS R10000 superscalar microprocessor,” IEEE Micro 16:2 (April), 28–40.
Yeh, T., and Y. N. Patt [1992]. “Alternative implementations of two-level adaptive branch prediction,” Proc. 19th Annual Int’l. Symposium on Computer Architecture (ISCA), May 19–21, 1992, Gold Coast, Australia, 124–134.
Yeh, T., and Y. N. Patt [1993]. “A comparison of dynamic branch predictors that use two levels of branch history,” Proc. 20th Annual Int’l. Symposium on Computer Architecture (ISCA), May 16–19, 1993, San Diego, Calif., 257–266.