图6.10中还有一个中间存储器,它是指令缓冲器,它由256个16位寄存器组成,用来存放在指令执行之前就预取出来的指令。由于缓冲器较大,所以主要的程序段可留在其中。内循环指令有可能全部放在指令缓冲器中,这样就可以重复执行而不用再到主存去反复取指令。由于许多应用程序一般都是紧凑的循环形式,所以取指次数就大大减少。
图6.10中流水结构运算器的每个功能部件都有一个高速存储器与之相连。没有一个功能部件是象图6.7所示的处理器直接与主存相连。
设计这种系统结构的主要思想是使操作数离处理器很近,以保证处理器一直处于忙状态。中间存储器能提供给处理器快速存取的数据,而成本又比较低。
中间存储器的性能当然比速度最高的存储器要低。设计这种多级存储器系统时必须对有无中间存储器的性能以及用中间存储器代替高速寄存器能有多少节省进行权衡。这里的节省既是指成本的降低,也是指体积和能量消耗的降低。这在巨型计算机设计中可能是决定性的因素。
中间存储器还能形成新的数据结构,以满足高效处理的要求。流水线一般需要访问向量寄存器中连续的元素,而这些待处理的元素不一定位于存储器的连续单元之中。操作数可先放入中间存储器,再从中间存储器送往向量寄存器。这样,操作数就有可能被重新组织,使下一次要处理的数据被送到向量寄存器的相邻单元。下一节我们将详细地讨论实现这种变换的方法。
本节讨论的两种结构的最突出的特点是存储器和流水线之间密切的配合。第一种结构是依靠主存来保证流水线所需要的操作数。因此主存必须具有至少和运算器所要求带宽一样高的带宽。这就要求主存或者存取速度足够快,或者分为多个独立的存储模块,或者两者都具备,因为运算器要求的最大带宽非常高。
第二种结构是通过容量比主存小得多的中间存储器即寄存器来保证很高的带宽。这样,低速存取的主存就不会妨碍流水结构运算器的连续运行。第二种结构的另一好处是流水结构运算器可以重叠进行,因为高速寄存器的带宽足以满足几个流水结构运算部件的带宽要求。
Cray1的流水结构算术运算能重叠地运行,能同时进行三种相互独立的向量运算。一个向量运算所产生的输出可以直接作为下一个向量运算的输入。第一种结构没有提供这种数据通路,所以结果数据流必须首先存入存储器,然后取出再送往运算流水线进行其它的处理。
因为可变延迟器为所有的向量运算所共用,所以缓冲器在下次流水线的延迟建立之前必须排空。流水线在两次运算之间也必须排空,所以重叠操作就没有可能了。Cray1能够重叠地流水运算,严格地讲是由于它有中间缓冲器和高速寄存器。
虽然Cache存储器是高速计算机的一个很重要的部件,但Cray1却没有Cache存储器。Cray1设有几个存储器,它们在层次结构的存储系统中的位置与Cache存储器类似。没有采用Cache存储器的一个原因是向量运算不同于标量运算。
这类机器设计时应考虑非Cache结构的中间存储器的编程的成本和难度,也应考虑寄存器寻址方式要比Cache访问方式的性能高,必须对两者进行权衡。Cray1是为获得高性能而设计的。它的用户都是高级用户,愿意在软件上多花些功夫以获得性能的提高。所以设计时倾向于采用可编程的寄存器组而没采用Cache存储器。
另一方面,Cache存储器对于向量运算可能不如对标量运算那么有效。尽管目前我们还没有太多根据可以证明上述结论,但设计者必须考虑以下这些问题:
(1)如果Cray1中的V寄存器组采用Cache结构,那么命中率会很高吗?
(2)向量计算机中的Cache容量应该多大?
(3)Cache的容量是否应足以容纳几个完整的向量?
(4)Cache的容量是否应小一些,不是容纳几个完整的向量,而是只须容纳多个不同向量的部分分量?
这些问题至今尚无一致的答案,但随着向量技术越来越成熟,在今后几年会得到解决。
Cray1的中间寄存器组,包括标量用的T寄存器组、地址用的B寄存器组和指令缓冲器,都可以用Cache来代替。如果这些寄存器组采用Cache结构的话,其命中率应该可与一般串行机的命中率相比,但是Cache数据的一致性将是一个很困难的问题。
Cray1中的有些部件可以修改数据,任何修改必须使存放这些数据的Cache能够知道。有些Cache一致性协议要求每当一个新数据存入Cache时,必须检查所有其它Cache中是否已有该数据。这可能引起Cache访问冲突而影响性能。
尽管上述方法不是实现互锁地访问Cache的唯一途径,但是互锁几乎总是会导致性能的降低和成本的增加。因此Cache结构不适合于Cray1这类机器。
看来,将来的设计不必沿着Cray1的方向。器件技术很有可能发生很大变化,使得存储器的集成度、速度和价格都会发生很大的变化。所有这些因素或其中任何一个因素的比较大的变化都有可能产生完全不同的系统结构。随着存储器变得越来越大,越来越快,越来越便宜,有可能出现大容量的中间存储器。
但是,为了使计算机系统的冷却比较容易,要求体积比较小,这就迫使设计者采用小容量的中间存储器,或者根本不采用中间存储器。对巨型机来说,一个比较适当的方法是先保证尽量大的容量和尽量好的性能,然后在不严重影响性能前提下设法减小体积、能量消耗和总的成本。