- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 用软件开发指令级并行性.doc
第四章 用软件开发指令级并行性
目前处理器的研制方向正朝着开发出更多指令级并行操作的方向发展……
J. Fisher[1981],引自“指令级并行”的论文中
尽管IA-64宣称EPIC系统结构比超标量简单,但令人吃惊的是,它并没有宣称高时钟频率。其原因不得而知,但可以猜到,致力于提高CPI的IA-64系统结构整体复杂度仍然较高,使它难以提高时钟频率。
M. Hopkins[2000],对IA-64系统结构的介绍(IA-64是HP和Intel共同开发的新一代系统结构,旨在保证系统结构简单性的基础上开发高指令级并行性)
4.1 开发指令级并行性的基本编译技术
本章首先介绍提高流水线和多发射处理器性能的编译技术。这些技术对静态发射或静态调度的处理器是至关重要的,当然它对于动态发射、静态调度的处理器也很关键。在单发射的流水线中应用这些技术,可以减少由于数据冒险带来的流水线延迟。本章还介绍了基于编译的分支预测方法。在这些强大的编译技术支持下,讨论静态发射或静态调度的多发射处理器的设计方法,并对它进行性能评价。第4.4和第4.5节介绍开发指令级并行性更加高级的技术,包括软件方法和硬件方法。第4.7节介绍IA-64系统结构以及它的第一代产品安腾处理器(Itanium)。第4.8节简要介绍两种静态VLIW处理器。
4.1.1 基本流水线调度和循环展开
要保持一条流水线是充满的,就要去发现可以流水重叠的不相关的指令序列,并加以开发。为了避免流水线的暂停,要事先找出指令代码中相关的指令并加以分离,使其相隔的时钟周期正好等于原来指令在流水线中的延迟时间。一个编译器进行这方面调度的能力既依赖于程序中可开发的指令级并行性,又依赖于流水线中功能单元的延迟时间。在整个这一章中,除非特别明确地指出有不同的延迟时间,我们都假设浮点单元的延迟时间基本上如图4.1所示。采用标准的5段定点流水线,分支指令有1个时钟周期的延迟,并且假设功能单元都是完全流水的或是重复设置的(即可以与流水线的深度相同),所以,任何一种类型的操作都可以在一个时钟周期内发射而不存在结构冒险。
产生结果的指令类型 使用结果的指令类型 延迟的时钟周期 浮点ALU操作 另一个浮点ALU操作 3 浮点ALU操作 双精度store操作 2 双精度load操作 浮点ALU操作 1 双精度load操作 双精度store操作 0 图4.1 本章中涉及到的浮点操作的延迟时间。第一列表示的是产生结果的源指令类型,第二列则是使用结果的指令类型,最后一列是为避免暂停而需要间隔的时钟周期数。这些周期数与将要碰到的浮点单元的平均延迟时间是相似的。一个浮点load操作对浮点store操作的延迟时间是0,因为要取的数可以不用暂停store操作。我们还将继续假设一个定点load操作的延迟时间是1,而一个定点ALU操作的延迟时间是0。
在这一小节里,将会看到循环展开是如何提高指令级并行性的。以下例子除了阐述这一重要技术之外,还会涉及到本节后面将要讨论的各种定义和程序变换。这是一个实现数组元素加一个标量值的简单循环程序:
for (i=1; i=1000; i++)
x[i] = x[i] + s;
可以看出,循环中的每个循环体是相互独立的,都可以并行执行。在本节将对此作规范化阐述,讨论如何检测循环体之间是否是独立不相关的。首先考察在上述规定延迟的MIPS流水线中,这个程序的并行性是如何得到提高的。
先把代码转换成MIPS汇编语言。在下面的代码段中,R1存放数组元素的地址,初始时在最高地址,F2中存放增加量s。R2的值事先被计算出来了,所以8(R2)是要操作的最后一个元素。
没有经过优化的MIPS代码如下:
Loop: L.D F0,0(R1) ;F0=数组元素
ADD.D F4,F0,F2 ;加标量到F2中
S.D F4,0(R1) ;保存结果
DADDUI R1,R1,#-8 ;数组指针递减
;8个字节(一个双字)
BNE R1,R2,Loop ;R1(0转移
现在可以观察这个循环程序是如何在一个有着图4.1所示延迟时间的MIPS流水线中被调度执行的。
例题4.1: 考虑所有的暂停和空闲等待的时钟周期,写出这个循环程序在MIPS上调度之前和调度之后的执行过程。调度优化既要考虑浮点操作的延迟时间,也要考虑分支转移的延迟时间。
解: 未经任何调度的循环程序的执行过程如下:
发射的时钟周期
Loop: L.D F0,0(R1) 1
暂停 2
ADD.D F4,F0,F2 3
暂停 4
暂停 5
S.D F4,0(R1) 6
DADDUI R1
文档评论(0)