体系结构11_指令级并行

指令级并行的概念

  指令级并行:当指令之间不存在相关时,它们在流水线中是可以重叠起来并行执行的。这种指令序列中存在的潜在并行性称为指令级并行。

  Instruction-Level Parallelism ,简记为ILP

如何知道指令之间可以并行?硬、软件如何支持指令级并行?如何研究这些问题?

   -硬件技术或者软件技术都可以提高指令级并行性

   -必须要硬件技术和软件技术互相配合,才能够最大限度地挖掘出程序中存在的指令级并行

流水线处理器的实际CPI(平均每条指令使用的周期数)等于理想流水线的CPI加上各类停顿引起的周期数的总和

        CPI(流水线) = CPI(理想)

                                 + 停顿(结构相关)

                                 + 停顿(先写后读)

                                 + 停顿(先读后写)

                                 + 停顿(写后写)

                                 + 停顿(控制相关)

减少其中的任何一种停顿,都可以有效地减少CPI,从而提高流水线的性能

上述技术中有些技术主要是硬件支持

       -循环展开

       -寄存器换名的动态调度(基本的Tomasulo‘s)

       -动态分支指令预测

       -每个周期多发射

       -前瞻技术

所有的技术必须和软件,特别是编译器合作完成

几个基本概念

基本(程序)块:一段除了入口和出口以外不包含其它分支的线性代码段

        程序平均每6-7条指令就会有一个分支

        必须在多个基本快之间开发指令级的并行性

循环级并行:循环体中指令之间的并行性

开发循环级并行的基本技术方法:

   指令调度(scheduling)

   循环展开(loop unrolling)

   换名(renaming)

循环展开调度的基本方法:

 循环展开是展开循环体若干次,将循环级并行转化为指令级并行的技术。

这个过程既可以通过编译器静态完成,也可以通过硬件动态进行。

    开发循环级并行性的另外一个重要技术是向量处理技术

    具有向量处理指令的典型机器是向量计算机,有关向量处理和向量计算机的内容本章不作讨论

本章中的分支指令就是指条件转移指令。

编译器在完成这种指令调度时,受限于以下两个特性

  一是程序固有的指令级并行性

  二是流水线功能部件的执行延迟

 

    

 

  

 

   

 

  

 

   

 

   

 

   

循环展开总结:

  1.对指令进行移动是有效的

  2.展开是有用的

  3.用不同的寄存器

     - 换名

     - 更多的寄存器

  4.消除额外的测试开销

  5.在循环展开时分析LOAD/STORE指令进行内存地址换名

  6.保留真相关

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值