体系结构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.保留真相关
虎子敲可爱(๑• . •๑) 发布了48 篇原创文章 · 获赞 11 · 访问量 3461 私信 关注
标签:11,CPI,并行,并行性,指令,循环展开,流水线,体系结构 来源: https://blog.csdn.net/weixin_42596333/article/details/104207966