计算机系统结构-第6章课件.pptVIP

  • 1
  • 0
  • 约1.85千字
  • 约 21页
  • 2026-02-03 发布于北京
  • 举报

指令调度:找出不相关的指令序列,让它们在流水线上重叠并行执行。

制约编译器指令调度的因素

程序固有的指令级并行

流水线功能部件的延迟;表6.1本节使用的浮点流水线的延迟

;;6.1基本指令调度及循环展开;6.1基本指令调度及循环展开;6.1基本指令调度及循环展开;循环展开

把循环体的代码复制多次并按顺序排放,然后相应调整循环的结束条件。

开发循环级并行的有效方法

例6.2将例6.1中的循环展开3次得到4个循环体,然后对展开后的指令序列在不调度和调度两种情况下,分析代码的性能。假定R1的初值为32的倍数,即循环次数为4的倍数。消除冗余的指令,并且不要重复使用寄存器。;展开后没有调度的代码如下(需要分配寄存器);

调度后的代码如下:;6.1基本指令调度及循环展开;VLIWvs.超标量

在动态调度的超标量处理器中,相关检测和指令调度基本都由硬件完成。

在静态调度的超标量处理器中,部分相关检测和指令调度工作交由编译器完成。

在VLIW处理器中,相关检测和指令调度工作全部由编译器完成,它需要更“智能”的编译器。;实例分析;6.3静态多指令流出——VLIW技术;VLIW性能分析

VLIW目标代码编码效率低

为消除流水线“空转”需要增加循环展开的次数

很难从应用程序中找到足够多的并行指令填满VLIW指

令中的每一个slot

VLIW流水线的互锁机制

VLIW处理器中没有实现任何相关检测逻辑,而是靠互

锁机制保证执行结果的正确

这种简单的互锁机制将造成较大的开销

目标代码兼容性差

二进制翻译;循环携带相关

循环携带相关是指一个循环的某个叠代中的指令与其他叠代中的指令之间的数据相关。

例6.7在下面的循环中,

for(i=1;i=100;i=i+1){

A[i+1]=A[i]+C[i]; /*S1*/

B[i+1]=B[i]+A[i+1];/*S2*/

}

假设数组A、B和C中所有元素的存储地址都互不相同,请问语句

S1与S2之间存在哪些数据相关?;解S1和S2之间存在两种不同类型的数据相关:

循环携带RAW数据相关:相邻连词叠代的语句S1之间,相邻

两次叠代中的语句S2之间。

RAW数据相关:同一叠代内的语句S2与S1之间。

分析:

循环携带相关迫使指令只能按照所在叠代的先后顺序依

次执行。

限制了同一叠代内存在数据相关的各语句之间的相对顺序。;怎样消除循环携带数据相关?

例6.8在下面的循环中,语句S1和S2之间存在哪些数据相关?

该循环的各次叠代是否可以并行执行?如果不能,请修改其代码,

使之可以并行。

for(i=1;i=100;i=i+1){

A[i]=A[i]+B[i]; /*S1*/

B[i+1]=C[i]+D[i]; /*S2*/

};解第i次叠代中语句S1与第i-1次叠代中语句S2之间存在RAW类型

的循环携带数据相关,但它们之间没有形成环(S2与上次叠代的S1不

相关)。修改后代码

A[1]=A[1]+B[1];

for(i=1;i=99;i=i+1){

B[i+1]=C[i]+D[i];/*原S2*/

A[i+1]=A[i+1]+B[i+1];/*原S1*/

}

B[101]=C[100]+D[100];;复杂循环携带数据相关的处理

for(i=6;i=100;i=i+1)

Y[i]=Y[i-5]+Y[i];//相关距离为5

for(i=2;i=100;i=i+1)

Y[i]=Y[i-1]+Y[i];//相关距离为1;存储别名分析

什么是存储别名

一个元素可能同时拥有多个合法的地址表达式

A[i+5]、A[j*2-6]、A[k]

数组是仿射的

如果一个一维数组A[m:n]的下标可以被表示为形如

a×i+b的形式,那么就称该数组是仿射的(affine)。

一个多维数组,如果它每一维的下标都是仿射的,那

么它就是仿射的。;谢谢大家!

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档