浅谈微处理器架构

2014-09-18 17:42胡健
电脑知识与技术 2014年23期

胡健

摘要:微处理器架构广泛应用于微处理器设计。 该文主要论述了流水线对处理器性能的影响,微处理器架构的关键技术包括缓存存储器、缓存一致性、分支预测、寄存器重命名、微指令、重新排序等技术。

关键词:缓存存储器;缓存一致性;分支预测

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)23-5536-03

1 概述

处理器架构定义了这种架构可以执行的指令,但是决定这些指令执行方式的是微处理器架构。在处理器设计流程的诸多决定因素中,处理器架构方面的因素对于处理器的性能和最终芯片的面积有着很大的影响。

根据定义,处理器架构之间的改变对于编程人员是可见,并且需要新软件来支持新处理器架构。对于采用了新的架构寄存器和SIMD指令的程序,处理器性能可以得到提升,但是对于原先版本的软件却没有影响。微处理器架构的改变对于程序员确实是不可见的,并且可以提升处理器性能而不需要软件进行任何改变。

2 流水线对处理器性能的影响

大部分微处理器架构改进的方面基本上集中在提高程序的指令并行度。处理器架构定义了软件的运行方式,其中就期望在程序执行过程中每一个时钟周期执行一条指令。然而,在程序中很多指令可以并行执行或者至少重叠执行。微处理器架构可以利用这些优势来提高处理器性能,但是为了保证软件兼容性,又要维持指令的顺序执行。通过允许不同指令的重叠执行,流水线可以提供更高的处理器性能。

最早时期的处理器并没有充分的晶体管来支持流水线。这些处理器只能如处理器架构定义的那样每个时钟周期顺序执行一条指令。简单的串行处理器每4个时钟周期完成一条指令,但是一个理想的流水线处理器每个时钟周期就可以完成一条指令。理想流水线只有在每条指令可以在同样的时钟周期完成并且在指令之间没有任何依赖的条件下才能达到。

为了提升性能,必须提高运行频率或者提高每周期执行指令的数量(IPC)或者减少所需要的指令条数。处理器架构方面的选择会影响IPC以及指令条数,在微处理器架构方面的选择则会提升运行频率或IPC。最简单的方法就是通过增加流水线深度来提高运行频率,将每条指令的执行分成更多更小的阶段。

指令类型决定每一条指令具有一定周期的逻辑延迟。增加流水线深度将计算时间分成更多周期,这样每个周期所需要的时间就降低了。理想情况下,将流水线深度翻1番可以将处理器运行频率提高1倍。但是实际上,每一个新的流水级中还是会增加一定数量的额外延迟开支。这些额外的开支限制了由于增加流水线深度而提升的处理器运行频率。

3 微处理器架构的关键技术

现在处理器采用流水线技术和增加指令发射宽度来使更多的指令可以并行执行。微处理器架构则需要解决数据依赖和控制依赖,这些依赖关系使得流水线无法达到理论上能达到的最大性能。

一些最重要的微处理器架构技术有以下几种:1) 缓存存储器;2) 缓存一致性;3) 分支预测;4) 寄存器重命名;5) 微指令;6) 重新排序(reorder)、重演(replay)、隐退(retire)。

3.1 缓存存储器

将最近使用过的数据存放在缓存存储器中以减少平均存储器访问时延,这种技术在现代微处理器架构中被不断地使用。指令、数据、虚拟内存转换以及程序跳转地址都是现代处理器中常被存放在缓存中的数据。在减少平均访问时延方面,缓存是十分有效的,这是因为程序通常按照一定规律的模式访问数据和指令。

通过在缓存中保持最近访问过的数据,当重复需要相同的数据时,处理器可以减少访问时延。另外,在不久后这个地址附近的数据也很可能被访问。假设一个标准程序访问了存储器100这个空间,那么这个程序就很可能访问存储器101这个空间。这种相近的存储器空间进行的访问的特点被称为空间域相关性(spatial locality)。

3.2 缓存一致性

当多个器件共享主存储器时,缓存会产生一个新的问题。即使在一个计算机系统中只有一个CPU,其它的计算机组件还是可以访问主存储器。显卡、外设以及其它硬件都可以对存储器进行读写。当其它器件需要读存储器时,最重要的一点就是这些器件需要读取的数据是最近被更新的值,而这个值只储存在处理器缓存中。而当其它写存储器的时候,最重要的一点就是存储在处理器缓存中的数据也同时被更新。在多核系统中,多个处理器全部共享主存储器,每个处理器都有自己的缓存。用于保障这些存储器的缓存同步的机制就被称为缓存一致性。

支持缓存一致性的首要条件是支持监听机制的总线协议。监听机制是当总线中存在数据通信时检查数据通信是否会影响自己缓存中的数据。

3.3 分支预测

现代微处理器架构中还有一个类型的专用缓存,那就是分支预测缓存。分支会给流水线和乱序执行处理器带来一系列问题。由于分支可以改变控制流程,所有在分支之后执行的指令都依赖于分支的结果。这种控制依赖不仅仅影响后续指令的执行,还决定了后续指令是否需要全部从存储器中读取出来。对很多程序而言,指令中20%或更多的操作为分支。如果没有解决分支控制依赖有效的处理机制,那么任何流水线处理器都不可能实现理想的性能加速。处理分支控制依赖最常用的方法是分支预测。处理器简单地猜测下一步哪一条指令需要从存储器中读取出来。

如果没有分支预测机制,在获取合适的指令之前,处理器需要停顿直到产生分支结果。采用分支预测机制,处理器可以猜测是否需要进行分支,并且基于预测的结果来获取指令而不会产生停顿。如果预测正确,就能节省时间,从而提高处理器性能。如果预测错误,那么在预测错误发现之前、分支指令之后已经进入流水线的几条指令就是不符合程序流程的。

3.4 寄存器重命名

由于分支控制程序执行流程,由分支产生的流水线停顿被称为控制依赖。由于一条指令必须等待另一条结果而导致的流水线停顿被称为数据依赖。从一条指令到另一条指令进行数据传输而产生的依赖为真数据依赖;由程序中寄存器的重复使用而产生的依赖为假依赖,这些假依赖可以被寄存器重命名技术消除从而提高性能。

每个计算机架构都定义了有限数量的寄存器,指令可以在这些寄存器中读取或存储数据。为了使指令空间和代码空间最小化,原先的处理器架构尽量把寄存器的数量定义的相对小。由于可以选择的架构寄存器数量有限,程序需要通过少量的指令尽量对寄存器实现重复使用,这种重复使用产生了假数据依赖。一个寄存器在被一条指令进行写操作之后马上被另一条指令进行读取时,会产生真数据依赖,这种依赖关系被称为写后读(RAW)依赖。而假数据依赖则是读后写(WAR)或写后写(WAW)依赖。读后写依赖需要一条指令必须将写寄存器操作停顿下来,直到另一条指令已经完成读取这个寄存器的数据。在写后写依赖中,两条指令在试图写同一个寄存器时会产生冲突。在没有分支指令的代码中,由于在结果数据被存储之后总是会有一条指令来读取这个结果数据,所以不会产生WAW依赖,但是如果代码中包含分支或者中断,程序有可能对同一个寄存器进行不止一次的写操作而不对这个寄存器进行任何读操作。

通过程序代码中的架构寄存器映射到处理器中的物理寄存器上,寄存器重命名技术可以消除假数据依赖。物理寄存器的数量可以大于架构寄存器的数量,这就允许寄存器重复使用的概率变小。消除假依赖可以允许更多的指令进行重新排序,从而提高处理器性能。寄存器别名表(RAT)可以用来记录当前每个架构寄存器映射到哪个物理寄存器。

3.5 微指令和微码

处理器流水线可将复杂的指令分解成简单的步骤,这就相当于把一个滚得很慢的小球替换成几个滚得快的小球。RISC架构可以达到上述要求,在RISC架构中只允许执行相对复杂度类似的简单指令。通过采用硬件来把采用复杂机器语言的指令转换成几个简单的步骤,支持CISC架构的处理器也可以达到同样的效果。在转换之前,机器语言指令被称为宏指令,而在转换之后的简单步骤被称为微指令。

3.6 重新排序、隐退以及重演

任何允许乱序执行的处理器都具有可以在执行后将指令重新排成顺序的机制。编写软件的时候都认为指令可以按照程序中的顺序执行。为了产生所期望的结果,需要在合适的时间处理中断以及异常。分支预测意味着处理器可能执行某些在顺序执行处理器中还没有获取的指令。必须存在将这些指令产生的结果置为无效的方法。所有可以提高性能的微处理器架构特性都需要能保证软件的兼容性。处理器乱序执行的本质也需要在程序中得到隐藏,而在程序中维持顺序执行,完成这个任务最常用的方法就是采用重排序缓存(ROB)。

重排序缓存将完成执行的乱序指令搜集起来并按照原始程序中的顺序进行排列。当指令从存储器中获取时,指令仍然保持原始程序中的顺序,那么按照期望的指令执行顺序,每条指令在ROB中对应一个条目。在指令乱序执行之后,ROB被重新以跟踪那些完成执行的指令。对于任何指令,只有当这条指令之前的所有指令都成功执行完之后,这条指令产生的结果的正确性才得到保证。也只有到了这时候,才提交指令的结果,这条指令才真正地执行完毕,这被称为指令隐退。

如果对于每种类型的指令都只考虑其最长的执行时间,那么填充满一个流水线会变得更加困难。相反,处理器可以假设每条指令可以完成的最短的周期数。指令执行完之后,可以检查这种假设是否正确。假设所需要的数据是有效的,这种情况被称为数据投机,这和分支预测非常类似。这两种方法都是在调度时进行预测,当预测正确时可以减少延迟,而预测错误时将会付出更大执行时延的代价。当分支预测错误时,指令将会误操作,因此必须将所执行的指令清除。当数据投机错误时,指令执行还是正确的,但是所执行的数据是错误的。这些指令并不能被清除,相反,它们必须被重新执行,并保证所执行的数据是正确的。将指令重新送到流水线的操作叫做指令重演。

4 总结

微处理器架构包含了在IPC、工作频率、芯片面积以及设计复杂度之间的权衡。硬件可以实现很多复杂的算法以提高处理器性能,,但是由于设计时间和芯片面积的限制而不能得以实现。

所以,处理器开发团队必须发掘这些特性才可以设计出最佳的处理器性能。

参考文献:

[1] 蒋本珊.电子计算机组成原理(修订版)[M].北京:北京理工大学出版社,1999.

[2] 王爱英.计算机组成与结构[M].2版.北京:清华大学出版社,1995.

[3] 陈国顺,宋新民,等.网络化测控技术[TP].北京:电子工业出版社,2006.