3.1 指令级并行:概念与挑战

发布时间 2023-11-23 17:02:07作者: 杨小靖

3.1 指令级并行:概念与挑战

指令集并行ILP的定义

处理器使用流水线来重叠指令的执行并提高性能,指令之间的这种潜在重叠被称为指令级并行,因为指令可以并行计算。

利用ILP有两种主流方法

1.依靠硬件来帮助动态地发现和利用并行性的方法(桌面端CPU常用,例如酷睿系列);

2. 依靠软件技术在编译时静态地发现并行性的方法(移动端追求能效,设计师利用较低水平的ILP,不过未来如Cortex-A9正在使用动态方法)。

数据依赖

数据依赖性会限制我们可以利用的指令级并行性的数量,本章的主要重点是克服这些限制。可以通过两种不同的方式克服依赖关系:(1)维护依赖关系,但避免危险;(2)通过转换代码消除依赖关系。对代码进行调度是在不改变依赖关系的情况下避免危险的主要方法,这种调度可以由编译器和硬件完成。

  1. 数据依赖:指令i产生的结果被指令j使用(真数据依赖)

  2. 名字依赖:当两个指令使用相同的寄存器或内存位置时必须保证顺序。(1)指令 i 读后指令 j 写(反依赖)(2)指令 i 和 j 先后写(输出依赖)

数据危险

只要指令之间存在依赖关系且足够接近,就会导致执行期间重叠改变访问顺序,就会存在危险。

  1. 写后读RAW:真数据依赖

  2. 写后写WAW:输出依赖

  3. 读后写WAR:反依赖

控制依赖

决定指令 i 相对分支指令的顺序,以便正确执行。通常施加两条约束:

  1. 受分支影响的指令不能放在控制指令之前,否则无法对其进行控制;

  2. 不受分支影响的指令不能放在控制指令之后,否则它的执行会受到控制;