chp10安腾高性能处理机体系的结构.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chp10安腾高性能处理机体系的结构

传统流水线与安腾处理机比较 10.4指令级并行机制 10.4指令级并行机制 二、推测技术 1、存储器访问延迟与指令级并行 在现代计算机体系结构中,多级存储体系能够有效提高存储系统的性能价格比。但是,在多个功能单元实现并行处理的处理机中,执行指令的速度仍然受到存储器访问速度的制约。 现代RISC处理机用专用指令访问内存,取数指令往往成为影响处理机性能的瓶颈。见下图看一下取数指令对处理机并行执行指令的影响。 取数指令对处理机并行执行指令的影响 给出的实例显示了取数指令对处理机并行执行指令的影响。现利用具有四个并行执行单元的超标量处理机完成如下的指令序列: ①load(a)//从内存单元取数至寄存器a ②k=k+1 ③i=i-1 ④n=n+3 ⑤q=q+a 假设所有的算术运算指令可以在一个时钟周期中完成,而访存指令需要三个时钟周期。前四条指令可以分别安排在四个执行单元中并行执行。如果load指令所要访问的内存单元并没有被调入cache,那么load指令直接访问内存需要三个时钟周期才能执行完毕。而第五条指令依赖于load指令取得的操作数,所以在执行第五条指令之前需要等待两个时钟周期,从而所有的执行单元都必须闲置两个时钟周期,这就大大降低了执行效率。 10.4指令级并行机制 10.4指令级并行机制 2、控制推测 解决处理机访存延迟的办法就是将访存操作尽可能提前执行。 在安腾处理机中,控制推测技术用于解决上述与取数指令有关的控制相关问题。 10.4指令级并行机制 3、数据推测 控制推测技术能够解决分支和取数操作中的控制相关,但在指令优化过程中还可能存在数据相关。 【例3】考察下面包含分支与取数指令的程序段: if(r3=0) then r2=r2+1 else r1=[r3] 其功能是判断指针寄存器r3的值是否为零:若是则将寄存器r2加1;否则将r3指向的内存单元的内容加载到寄存器r1中。其原始汇编代码如下: ①cmp.eq P1,P2=0,r3;//无条件执行:将r3寄存器的值与0比较,若相等则置推断寄存器P1为1,P2为0,否则置推断寄存器P1为0,P2为1 ②(P1) add r2=1,r2 //若P1为1,则r2+1送r2 ③(P2)ld8 r1=[r3]//若P2为1,则以r3的内容为地址访存.,8字节操作数被加载至寄存器r1.为了减少访存延迟,希望将第3条取数指令提前至第1条指令的前面,或是更早的位置。但第3条指令是推断执行的,其实际结果只有在P2为真的情况下才会被真正存储。如果第3条指令固执行错误而引起异常处理,但最后发现该取数指令实际上并不需要执行,那么将浪费大量时间。 安腾体系结构采用的控制推测技术对此的解决方案 由编译器将一条取数指令分解为两条指令: (1)推测取数指令(loads),可以提前到适当位置先期执行取数操作,但如果需要进行异常处理时,并不真正调用操作系统的异常处理例程,而仅仅设置一个与被装入寄存器相关联的标志。这一标志就是每个通用寄存器中64位以外的延迟异常标记(NaT)位。 (2)推测检查指令chks), 安排在原来的取数指令位置,也即真正使用数据之前的位置。chks指令检查被装入的寄存器的延迟异常标记位:如果有未被执行的异常处理,则转入异常处理程序;否则,处理机将loads指令的执行结果保存,并继续执行下一条指令。 【例4】按照上面的处理方式,安腾的编译器将对例3的汇编代码进行优化 ①1d8.S r1=[r3]//以r3内容为地址访存,推测加载寄存器r1 ②……//加载指令被提前若干个周期 ③cmp.eq P1,P2=0,r3;//无条件执行:将r3寄存器的值与0比较,若相等则置推断寄存器P1为1,P2为0,否则置推断寄存器P1为0,P2为1 ④(P1) add r2=1,r2 //若P1为1,则r2+l送r2 ⑤(P2) chk.S r1.err_recov //若P2为1,则检查r1寄存器的NaT标记,若NaT=1,则转入err_recov例程,若NaT=0,则保存[r3]到r1 【例5】研究下面的程序段 ①add r5=4,r0; ②st4[r7]=r5; / /将r5的值存入r7指向的内存单元 ③ld4 r2=[r8];//以r8的内容为地址访存,加载寄存器r2 ④add r6=r2,r5 //r6=r2+r5 其中第4条指令需要使用第3条指令取数的结果。为了减少访存延迟,编译器可以将第3条指令提前到第1条指令之前。但这样做的风险是,假如当前寄存器r8的值和r7的值相等,则意味着第三条取数指令和第二条存数指令访问的是同一个内存单元。而把取数指令提前到存数指令之前将使取数指令得到存数之前的值,而不是程

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档