指令级并行

您所在的位置:网站首页 时钟周期的计算方法有哪些 指令级并行

指令级并行

#指令级并行| 来源: 网络整理| 查看: 265

指令级并行

流水线提高的是指令带宽(吞吐率),而不是单条指令的执行速度 相关限制了流水线性能的发挥     结构相关:需要更多的硬件资源     数据相关:需要定向,编译器调度     控制相关:尽早检测条件,计算目标地址,延迟转移,预测 增加流水线的级数会增加相关产生的可能性 异常,浮点运算使得流水线控制更加复杂 编译器可降低数据相关和控制相关的开销     Load 延迟槽     Branch 延迟槽

    Branch预测

指令级并行性又称细粒度并行, 主要是相对粗粒度并行而言的。粗粒度并行存在于程序间,主要是进程或线程间的并行性。

 指令级并行是指存在于指令一级即指令间的并行性, 主要是指机器语言一级, 如存储器访问指令、整型指令、浮点指令之间的并行性等。主要特点是并行性由处理器硬件和编译程序自动识别和利用, 不需要程序员对顺序程序作任何修改。正是由于这一优点, 使得它的发展与处理器的发展紧密相连。

基于硬件的动态方法

 基于软件的静

硬件+软件技术

 CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据冲突                   + 停顿控制冲突 理想CPI是衡量流水线最高性能的一个指标。减少等式右端的各项就减少了总的的CPI,从而提高IPC. IPC:Instructions Per Cycle   (每个时钟周期完成的指令条数) 开发循环级并行的技术     循环展开(loop unrolling)技术

   采用向量指令和向量数据表示

程序顺序:由源程序确定的在完全串行方式下指令的执行顺序。

:数据流和异常行为。

保持异常行为是指:无论怎么改变指令的执行顺序,都不能改变程序中异常的发生情况。

数据流:指数据值在产生结果的指令到使用结果的指令的实际流动。 分支指令使得数据流具有动态性,因为它让给定指令的数据可以有多个来源。

仅仅保持数据相关性是不够的,只有再加上保持控制顺序,才能够保持程序顺序。(因为一条指令可能数据相关于多条先前的指令)

静态调度 依靠 编译器对 代码进行静态调度,以减少相关和冲突。 它不是在程序执行的过程中、而是在 编译期间进行代码调度和优化 ,对相关的处理方法在程序执行过程中始终不变。 通过把相关的指令拉开距离来减少可能产生的停顿。 动态调度 在程序的执行过程中,依靠 专门硬件对代码进行调度 ,减少数据相关导致的停顿。 动态调度的基本思想

流水线的最大的局限性:指令必须按序流出和按序执行

乱序执行基本思想:通过指令窗口按序保存多条指令,采用数据流技术,控制操作数就绪的指令优先执行(乱序执行)。异常处理比较复杂

动态调度要保持正确的异常行为:对于一条会产生异常的指令来说,只有当处理机确切地知道该指令将被执行后,才允许它产生异常。即使保持了正确的异常行为,动态调度处理机仍可能发生不精确异常。 不精确异常:当执行指令i导致发生异常时,处理机的现场(状态)与严格按程序顺序执行时指令i的现场不同。发生不精确异常的原因:      因为当发生异常(设为指令i)时:流水线可能已经执行完按程序顺序是位于指令i之后的指令;流水线可能还没完成按程序顺序是指令i之前的指令。 

精确异常:如果发生异常时,处理机的现场跟严格按程序顺序执行时指令i的现场相同。

 Tomasulo算法 

核心思想     记录和检测指令相关,操作数一旦就绪就立即执行,把发生RAW冲突的可能性减少到最小;    通过寄存器换名来消除WAR冲突和WAW冲突。寄存器换名是通过保留站和流出逻辑来共同完成的。

load缓冲器和store缓冲器(load1,load2,load3)用于存放读/写存储器的数据或地址 load缓冲器的作用有3个:存放用于计算有效地址的分量;记录正在进行的load访存,等待存储器的响应;保存已经完成了的load的结果(即从存储器取来的数据),等待CDB传输。

store缓冲器的作用有3个:存放用于计算有效地址的分量;保存正在进行的store访存的目标地址,该store正在等待存储数据的到达;保存该store的地址和数据,直到存储部件接收。

优点

冲突检测逻辑是分布的     (通过保留站和CDB实现)

消除了WAW冲突和WAR冲突导致的停顿

流出---执行 ---写结果

动态分支预测技术:在程序运行时,根据分支指令过去的表现来预测其将来的行为。

分支预测的有效性取决于:    预测的准确性    预测正确和不正确两种情况下的分支开销    决定分支开销的因素:        流水线的结构        预测的方法        预测错误时的恢复策略等

采用动态分支预测技术的目的      预测分支是否成功     尽快找到分支目标地址(或指令)    (避免控制相关造成流水线停顿) 需要解决的关键问题     如何记录分支的历史信息;     如何根据这些分支的历史信息来预测分支的去向(甚至取到指令)。

(1)仅仅记录最近一次或最近几次的分支历史;  (2)记录分支成功的目标地址;  (3)记录分支历史和分支目标地址,相当于前            面两种方式的结合;  (4)记录分支目标地址的一条或若干条指令。     

采用分支历史表 BHT  或分支预测缓冲器

预测错误两次,才会改变预测结果

两个步骤:分支预测。当分支指令到达译码段(ID)时,根据从BHT读出的信息进行分支预测 。若预测正确,就继续处理后续的指令,流水线没有断流。否则,就要作废已经预取和分析的指令,恢复现场,并从另一条分支路径重新取指令。 状态修改。 BHT方法只在以下情况下才有用:    判定分支是否成功所需的时间大于确定分支目标地址所需的时间。 

  如果预测错误或在BTB中没有匹配的项,要有至少2个时钟周期的开销。   因为:   ①需要更新BTB中的项,要花费一个时钟周期;   ②在更新BTB 中的项时,要停止取指令,那么取新的   指令又要花费一个时钟周期。

更快地获得分支目标处的指令;可以一次提供分支目标处的多条指令,这对于多流出处理器是很有必要的;

使我们可以进行称为分支折叠(branch folding)的优化。

基于硬件的前瞻执行

   允许指令乱序执行,但必须按程序顺序确认。

ROB中的每一项由以下4个字段组成:指令类型    指出该指令是分支指令、store指令或寄存器操作指令。目标地址       给出指令执行结果应写入的目标寄存器号(如果是    load和ALU指令)或存储器单元的地址(如果是store指    令)。数据值字段   用来保存指令前瞻执行的结果,直到指令得到确认。就绪字段    指出指令是否已经完成执行并且数据已就绪。控制字段    设置ROB的某一项是否被占用

9



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3