指令级并行(ILP)
Contents
Instruction-level parallelism
ILP指令级并行 wiki
指令级并行(ILP)是对计算机程序中有多少条指令可以同时执行的一种度量。
ILP不能与并发性混淆:
- ILP是一个属于进程执行的特定线程的指令序列的并行执行(一个运行中的程序有它的一组资源:地址空间、一组寄存器、它的标识符、它的状态、程序计数器(又名指令指针)等等)。
- 另一方面,并发性涉及到将一个或不同进程的线程以严格的交替方式分配给一个CPU的内核,或者在有足够的CPU内核的情况下实现真正的并行,理想情况下每个可运行线程有一个内核。
硬件级工作在动态并行之上,而软件级工作在静态并行之上。动态并行是指处理器在运行时决定哪些指令要并行执行,而静态并行是指编译器决定哪些指令要并行执行。奔腾处理器的并行执行是动态的,而安腾处理器的并行执行是静态的。
编译器和处理器设计者的一个目标是尽可能多地识别和利用ILP。普通程序通常是在一个顺序执行模型下编写的,在这个模型中,指令按照程序员指定的顺序一个接一个地执行。ILP允许编译器和处理器重叠执行多个指令,甚至改变指令执行的顺序。
程序中存在多少ILP是非常特定于应用程序的。在某些领域,例如图形和科学计算,其数量可能非常大。但是,诸如密码学之类的工作负载可能表现出更少的并行性。
用于利用ILP的微体系结构技术包括:
-
指令流水线,其中多个指令的执行可以部分重叠。
-
超标量执行,VLIW和密切相关的显式并行指令计算概念,其中多个执行单元用于并行执行多个指令。
-
乱序执行,即指令以不违反数据依赖性的任何顺序执行。请注意,此技术与流水线和超标量执行无关。动态无序执行的当前实现是动态执行的(即,在程序执行时且没有编译器的任何帮助)从普通程序中提取ILP。一种替代方法是在编译时提取此并行性,然后以某种方式将此信息传递给硬件。由于扩展乱序执行技术的复杂性,业界已经重新检查了指令集,这些指令集显式地对每个指令编码多个独立的操作。
-
寄存器重命名是指一种用于避免程序操作不必要的序列化的技术,该程序操作是由那些操作对寄存器的重用所强加的,用于实现乱序执行
-
推测执行,它允许在确定是否应该执行全部指令之前执行全部指令或部分指令。推测执行的常用形式是控制流推测,其中在确定控制流指令的目标之前执行经过控制流指令(例如,分支)的指令。已经提出并正在使用其他几种形式的推测执行,包括由值预测,存储器依赖性预测和高速缓存等待时间预测驱动的推测执行。
-
分支预测,用于避免停顿以解决控制依赖性。分支预测与推测执行一起使用。
众所周知,编译器和硬件支持都可以利用ILP,但是编译器还可以通过编译优化为硬件提供程序中固有的和隐式的ILP。用于提取程序中可用ILP的一些优化技术将包括调度,寄存器分配/重新命名和内存访问优化。
other
安腾处理器的并行执行是静态的原因
目前的理解:由于安腾用了VLIW,这项技术要求编译器把多条无依赖的指令打包成一个指令包,让cpu直接多条流水线并行执行一个包里的所有指令。所以安腾比较依赖编译器的静态调度的能力。
Author sorvik
LastMod 2020-12-25