Computer Architectrure: Quantitative Approch 第三章第七节

Exploiting ILP Using Multiple Issue and Static Scheduling

前面各节中的技术可用于消除数据、控制停顿并达到理想的CPI。为了进一步提高性能,我们希望将CPI降低到小于1,但是如果我们每个时钟周期仅发出一条指令,则CPI不能降低到1以下。

在接下来的几节中讨论的多issue处理器的目标是允许多个指令在一个时钟周期内发出。多issue处理器有以下三种主要形态:
1.静态调度的超标量处理器
2.VLIW(超长指令字)处理器
3.动态调度的超标量处理器
两种类型的超标量处理器每个时钟发出不同数量的指令,如果它们是静态调度的,则使用有序执行;如果是动态调度的,则使用无序执行。

相反,VLIW处理器发出固定数量的指令,格式为一个大指令或固定指令包,并在指令明确指示的指令之间具有并行性。 VLIW处理器本质上是由编译器静态调度的。 英特尔和惠普创建附录H中所述的IA-64体系结构时,他们还为这种体系结构样式引入了名称EPIC(显式并行指令计算机)。

尽管静态调度的超标量每个时钟发出变化的指令,而不是固定数量的指令,但是它们实际上在概念上更接近于VLIW,因为这两种方法都依赖于编译器为处理器调度代码。 由于随着发布宽度的增长,静态调度的超标量的优势逐渐减少,因此静态调度的超标量主要用于较窄的发布宽度,通常只有两个指令。 除了这个宽度,大多数设计人员选择实现VLIW或动态调度的超标量。 由于硬件和所需的编译器技术的相似性,我们在本节中重点介绍VLIW,在第7章中将再次看到它们。本节的见解可以轻松地推断到静态调度的超标量。

在这里插入图片描述
图3.19总结了解决多个问题的基本方法及其区别特征,并显示了使用每种方法的处理器。

The Basic VLIW Approach

VLIW使用多个独立的功能单元。 VLIW不会尝试向单元发出多个独立的指令,而是将多个操作打包为一个非常长的指令,或者要求发出数据包中的指令满足相同的约束。 由于这两种方法没有根本区别,因此,我们仅假定与原始VLIW方法一样,将多个操作放置在一条指令中。

由于VLIW的优势随着最大发射率的增长而增加,因此我们将重点放在更宽发射处理器上。确实,对于简单的双发射处理器,超标量的开销可能很小。许多设计人员可能会争辩说,四核处理器的开销可控,但是我们稍后会看到在本章中,开销的增加是限制更宽发射处理器发展的主要因素。

让我们考虑一个VLIW处理器,其指令包含五个操作,包括一个整数操作(也可以是一个分支),两个浮点操作和两个内存引用。该指令将为每个功能单元提供一组字段,大约每单元16-24位,从而产生80至120位的指令长度。相比之下,Intel Itanium1和Intel Itanium2每个指令包包含六个操作(即,它们允许同时发出两个三指令束,如附录H所述)。

为了使功能单元保持繁忙,代码序列中必须有足够的并行度以填充可用的操作插槽。通过在更大的单个循环体内展开循环和调度代码,可以展示这种并行性。如果展开生成直线代码,则可以使用在单个基本块上运行的本地调度技术。如果发现和利用并行性需要跨分支调度代码,则必须使用实质上更复杂的全局调度算法。全局调度算法不仅在结构上更加复杂,而且还必须在优化中处理复杂得多的折衷方案,因为跨分支移动代码非常昂贵。

在附录H中,我们讨论了跟踪调度,这是专门为VLIW开发的全局调度技术之一;我们还将探索特殊的硬件支持,该技术可以消除某些条件分支,从而扩展了本地调度的效用并增强了全局调度的性能。现在,我们将依靠循环展开来生成长的直线代码序列,以便我们可以使用本地调度来构建VLIW指令,并专注于这些处理器的运行状况。

在这里插入图片描述

对于原始的VLIW模型,同时存在技术和逻辑问题,这使得该方法的效率降低。技术问题是代码大小增加和固定步调(一组中即使只有少部分指令需要执行,运行时间也是一组指令中最长的指令运行时间)的局限性。两个不同的问题结合起来,实质上增加了VLIW的代码大小。首先,在直线代码段中生成足够的操作需要大量地展开循环(如前面的示例中所示),从而增加了代码大小。其次,每当指令未满时,未使用的功能单元就会转换为指令编码中的浪费位。在附录H中,我们研究了无需大量代码扩展即可实现展开优势的软件调度方法(例如软件流水线)。

为了解决此代码大小增加的问题,有时会使用巧妙的编码。例如,任何功能单元可能只使用一个大的立即数字段。另一种技术是压缩主存储器中的指令,并在将其读入高速缓存或对其进行解码时对其进行扩展。在附录H中,我们展示了其他技术,并记录了IA-64中显着的代码扩展。

早期的VLIW步调一致;根本没有冒险检测硬件。这种结构表明,任何功能单元流水线中的停顿都必须导致整个处理器停顿,因为所有功能单元必须保持同步。尽管编译器可能已经能够调度确定性功能单元来防止停顿,但是要预测哪些数据访问将遇到高速缓存停顿并且对它们进行调度是很难的。因此,缓存需要阻塞并让所有功能单元停止运行。随着发射率和内存引用数量变大,此同步限制变得无法接受。在较新的处理器中,功能单元更独立地运行,并且使用编译器来避免发射时的危害,而一旦发出指令,硬件检查将允许不同步执行。

对于通用VLIW或运行第三方软件的VLIW,二进制代码兼容性也是一个主要的逻辑问题。在严格的VLIW方法中,代码序列同时使用了指令集定义和详细的流水线结构,包括功能单元及其延迟。因此,不同数量的功能单元和单元等待时间需要不同版本的代码。与超标量设计相比,此要求使在后续实现之间或具有不同问题宽度的实现之间迁移变得更加困难。当然,从新的超标量设计获得更高的性能可能需要重新编译。但是,运行旧二进制文件的能力是超标量方法的实际优势。在我们将在第7章中讨论的特定于领域的体系结构中,此问题并不严重,因为应用程序是专门为体系结构配置编写的。

EPIC方法以IA-64架构为主要示例,它为早期通用VLIW设计中遇到的许多问题提供了解决方案,包括扩展了更积极的软件推测方法,以及在保持二进制兼容性的同时克服了硬件依赖性的限制的方法。

所有多发射处理器的主要挑战是尝试利用大量的ILP。当并行性来自展开FP程序中的简单循环时,原始循环可能可以在矢量处理器上有效运行(在下一章中介绍)。尚不清楚对于此类应用,多问题处理器是否优于矢量处理器?成本是相似的,并且矢量处理器通常是相同的速度或更快的速度。与矢量处理器相比,多发射处理器的潜在优势在于前者具有从结构较少的代码中提取一些并行性并轻松缓存所有形式的数据的能力。由于这些原因,多问题方法已成为利用指令级并行性的主要方法,向量已成为这些处理器的主要扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值