RISC并行化:流水线技术.
在进入超长指令字VLIW (Very Long Instruction Word )的内容之前,先简单描述一下RISC中用于实现指令并行的流水线技术。
《RISC-CPI 》中提到了CISC-RISC的演变过程,20世纪80年代,RISC发展起来,相较于CISC 中不等长 、高度聚合 的复杂指令以及相应的复杂寻址方式,RISC中的指令规范简洁 ,适合于采用流水线技术 来实现指令级并行,降低整个系统的延迟,提高处理数据的速度。规格化的事物适合于应用流水线技术,而特异化的事物则几乎无法发挥流水线的高效,就像汽车工厂(福特汽车公司于1913年发明了第一条汽车生产流水线)的生产线上高效产出的,只会是同一型号的汽车。
计算机科学中的指令流水线技术和汽车生产流水线师出同门。汽车的生产(并不了解,仅用于举例)的过程中有外壳镀漆、安装车轮等等一些能够重叠发生的步骤,所以我们将这些步骤分开,对于100量待生产的汽车,汽车1的镀漆过程和汽车2的安装过程完全可以并行执行互不冲突。虽然计算机指令之间并不一定是完全独立的,但仍然可以应用这样的思想。
我们将每条指令分为
N
N
N 步,并且允许不同指令之间的第
i
n
i_n
i n 步操作可以在时间轴上重叠 ,籍此来实现并行化操作。程序中的指令依然是一条条顺序执行,但我们事先取出 一个指令集合,在第
x
x
x 条指令尚未执行完时,可以预先启动第
x
+
k
x+k
x + k 条指令的操作步骤(指令的相关性,数据相关、控制相关以及结构相关,会影响到某些步骤的执行,导致流水线的停滞),这样显然可以加速一段程序的运行过程。
允许不同指令的部分操作在同一个时钟周期内执行,毫无疑问提高了整个程序的并发度,第
x
+
1
x+1
x + 1 指令需要等待第
x
x
x 条指令的时间从统计角度来看是降低的。将每个指令看作整个程序的不同子任务,这就相当于很多条子任务同时开始运行,一个关于并行化对性能影响的详细且严谨的示例分析可以参看《并行、延迟与吞吐量 》。
Pentium 处理器采用了6级流水线的结构,也就是将指令分为6步(所谓的超流水技术SuperPiplined 就是将步数进一步提高,即增加流水线的级数),其各级的操作如下所示: ①取指令,CPU从缓存或内存中取出指令; ②指令译码,分析指令的种类; ③操作数地址生成,不同指令中的操作数存放在不同的地方,有些可能就在指令中,有些可能需要等待前驱指令的计算结果; ④取操作数,需要操作数时,访存并取出操作数; ⑤执行指令,由ALU算逻单元执行相应的操作; ⑥存放/写回结果,最终需要将计算结果存储到内存单元或写入累加器Acc.
上述步骤每一步需要一个时钟周期,理想情况下流水线完全装满,那么统计角度来说平均每个周期都有一条指令被执行完,更加复杂的超标量SuperScalar技术会同时开辟多条独立的流水线,使得并行度进一步提高。
流水线的实现需要通过增加硬件 来实现,我们前面提到的预取指令、缓存指令都需要硬件来保证,而为了各级流水能够重叠执行,我们可能需要多个算逻单元,一组执行指令的运算,一组执行地址的计算。
理想情况下,流水线越长,步骤就被切分得越细致,每一步所需的操作时间就越少,那么CPU的主频就得以提高,但问题在于流水线级数越多,重叠执行的操作就越多,那么发生竞争冲突的可能性就越大,对流水线性能有负面影响。现代CPU已经不满足于6级流水线,大多会将超流水线技术和超标量技术结合使用 ,流水线级数也来到20级以上,主频能够轻松超过2GHz.
另一种并行化:超长指令字VLIW.
VLIW 于1983年提出,距离RISC与流水线技术兴起并不久远。
前面提到的流水线技术是将指令分级,而超标量技术是开辟多条流水线,以达到同时对若干条指令进行译码,将可以并行执行的指令送往不同的执行部件。VLIW和超标量技术类似,如果我们将超标量技术形象地看作,多条指令被切分后发布到不同执行部件并行执行,那么VLIW就是将可以并行执行的指令融合成一条超长的指令,通常会达到上百位,当中包含了多个操作数,多种运算。
一条超长的指令会被分割为多个独立控制字段,每个字段对应于不同的执行部件,并且其中的控制字段能够控制该执行部件。各运算部件和共享的大容量寄存器堆直接相连,以便提供运算所需要的操作数或存放运算结果,对数据的读/写操作也可以通过存储器指令字段对指定存储模块中的存储单元进行。运行时不需要用软件或硬件来检测其并行性,而直接由超长指令字来控制机器中多个相互独立的功能部件并行操作。
VLIW和超标量技术很大的不同在于,超标量技术中哪些指令能够并行是由硬件,包括状态记录部件、指令调度部件来完成指令调度的,而VLIW则将这一权力赋予编译器,让编译器控制所有的功能单元。一个优秀的编译器会进行数据流分析,从而精准地确定可以在何处执行何种操作,控制寄存器、存储器的读取和写入。在流水线技术中会出现的冲突,VLIW都交给了编译器来解决,所以VLIW机器中的硬件结构通常比较简单,它只需要执行由编译器所编译的程序,而无需控制资源调度。但这样的结构导致的问题就是,一旦编译出错,CPU也没有能力发现其中的错误(例如执行顺序出错等)。另外虽然经过编译处理,但由于程序在动态执行时不可避免的转移等操作,超长指令字指令仍可能在并行执行时出现相关,导致指令复杂的情况下出现执行速度的损失。
VLIW 类计算机在传统上被设计成没有高速缓存,主要处理反复循环、向量化的代码。其指令集无法被很好的推广,将指令的并行选择交给编译器使得整个机器对于指令本身的独立性要求很高,否则就会出现上面说到的问题。所以上世纪80年代兴起的VLIW最终没能占据市场,作为并行化的失败者退出了历史舞台。
随着神经网络与深度学习在大数据、高算力时代的复兴,深层网络参数学习的过程具有算法单一、运算稠密的特征,这正是VLIW所期望的。DL中大量的矩阵乘积、累加以及卷积运算,以及已经在DSP(Digital Signal Processing )领域获得的成功经验,VLIW或许能够在DL领域大放异彩。
Moreover.
Herb Sutter 于2005年的论文《The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software 》指出CPU高频化已经很难再提高机器的性能,那之后并行化就成为提升性能的主要方向。上面的流水线技术、VLIW所做的都是指令级并行,此外还有超线程技术充分利用闲置的CPU资源,模拟出多核的效果实现多线程并行执行;以及物理实际的多核架构实现多线程的并发执行。
显式并行指令代码(EPIC:explicitly parallel instruction code ):在计算机的一个指令周期内可以执行多于一条指令。CPU每取出并执行一条指令,都要完成一系列的操作,这一系列操作所需的时间通常叫做一个指令周期,也就是从取指令、分析指令到执行完所需的全部时间,主要是为了减少程序的执行时间和提高资源利用率。在1989年,HP公司认为RISC架构将来会遇到每周期只能运行一个指令的瓶颈。而HP的研究员在研究一个称之为显式并发指令运算(EPIC)的新架构,该架构允许处理器在一个周期内运行多条指令。EPIC是一种超长指令字(VLIW)架构,每个这种指令即包含多条小指令。使用EPIC技术后,编译器就能决定让这些小指令同时运行于单一周期,因此处理器能够简单的运行这些指令而不需要很复杂的架构去决定哪些指令能够并发运行。
相关文章:
2022-12-23
2022-12-23
2021-10-22
2021-11-11
2021-06-15
2021-09-26
2021-11-18
猜你喜欢
2022-12-23
2022-12-23
2021-08-07
2022-03-07
2021-06-05
2021-06-26
2022-03-12
相关资源
下载
2023-01-30
下载
2021-06-06
下载
2021-06-22