带有指令高速缓冲 存储器的处理器 本发明涉及带有指令高速缓冲存储器的计算机处理器及为这种计算机处理器生成指令的方法。
本发明更具体地涉及VLIW(超长指令字)处理器及具体涉及这种处理器的指令格式以及处理这种指令格式的装置与方法。
VLIW处理器具有包含多个发布栏(issue slot)的指令字。该处理器还包含多个功能单元。各功能单元用于执行给定类型的一组操作。各功能单元与RISC的类似之处在于它能以流水线方式在各机器周期中起动指令。各发布栏用于保持各自的操作。同一指令字中的所有操作是在处理器的单一周期中在功能单元上并行开始的。从而VLIW实现细粒度的并行性。
从而,VLIW机器上的指令通常包含多个操作。在传统机器上,各操作可称作一条独立的指令。然而,在VLIW机器中,各指令是由多个操作或no-op(空操作)构成的。
和传统处理器相同,VLIW处理器使用诸如盘驱动器等存储设备来存储供在处理器上执行的指令流。VLIW处理器和传统处理器一样也能利用高速缓冲存储器来存储对处理器具有高带宽可存取性的指令流片段。
VLIW机器中的指令是由程序员或编译程序从这些操作中建立的。从而VLIW处理器中的调度是受软件控制地。
可将VLIW处理器与诸如矢量处理器及超标量处理器等其它类型的并行处理器比较如下。矢量处理器具有同时在多个数据项上执行的单一操作。超标量处理器与VLIW处理器一样实现细粒度并行性,但与VLIW处理器不同,超标量处理器在硬件中调度操作。
由于长指令字,VLIW处理器具有严重的高速缓冲存储器使用问题。尤其是,大的代码长度导致高速缓冲存储器不能命中,即需要的指令不在高速缓冲存储器中的情况。大的代码长度还需要较高的主存储器带宽将代码从主存储器传送到高速缓冲存储器。
有关本申请的技术背景的进一步信息可在这里通过引用引入的本专利申请的发明人申请的并转让给同一申请人(申请人参照号PHA23122)的共同未决专利申请及以下先有申请中找到,通过引用将它们包含在此:-1992年12月29日提交的美国申请(序列号为998,090)(PHA21,777),其中示出用于实现细粒度并行性的VLIW处理器体系结构;-1993年10月25日提交的美国申请(序列号为142,648)(PHA1205),其中示出保护位的使用;以及-1994年12月30日提交的美国申请(序列号为366,958)(PHA21,932),其中示出与VLIW体系结构一起使用的寄存器文件存储器。
本发明的目的为简化高速缓冲存储器配置。
本发明的另一目的为提供产生混洗位流的方法,该位流允许简化的高速缓冲存储器配置。
本发明提供权利要求1中所述的计算机处理器。这便有可能独立地布置输入总线与输出总线以便满足分别对主存储器与处理单元的连接要求。从而采用了简化高速缓冲存储器配置的混洗位流。该高速缓冲存储器存储混洗指令流并将位从存储装置多路传输到总线上以便解开位的混洗。多条线路从存储装置引向总线。这些线路不互相交叉。
本发明还涉及权利要求7中所述的方法。编译程序与/或连接程序生成经过编译与连接的目标模块并接收代码用于混合(swizzling)该编译与连接的软件以产生第二目标模块。从采用不交叉的输出总线线路的高速缓冲存储器结构的高速缓冲存储器中读取时,第二目标模块适合于解开混合(deswizzle)。
下面参照附图用非限制性实例的方式描述本发明,附图中:
图1a示出采用本发明的压缩指令格式的处理器。
图1b示出图1a的处理器的CPU的更多细节。
图2a~2e示出指令在高速缓冲存储器中的可能位置。
图3展示按照本发明的代码编译与连接。
图4为压缩与混洗模块的流程图。
图5扩充图4的框902。
图6a为展示输入端上的指令高速缓冲存储器103的操作的示意图。
图6b为展示输出端上的一部分指令高速缓冲存储器103的操作的示意图。
图7为展示输出端上的指令高速缓冲存储器104的操作的示意图。
图8展示解压缩过程。
图1a示出按照本发明的处理器的一般结构。按照本发明的微处理器包含CPU102、指令高速缓冲存储器103及数据高速缓冲存储器105。CPU用高带宽总线连接在高速缓冲存储器上。微处理器还包含存储指令流的存储器104。
将高速缓冲存储器103构造成具有512位的双字。字中的各个字节是可寻址的,但位不能。字节为8位长。最好双字能在单个时钟周期中作为单字存取。
指令流作为压缩格式的指令存储。压缩格式既用在存储器104也用在高速缓冲存储器103中。
图1b示出按照本发明的VLIW处理器的更多细节。处理器包含多端口寄存器文件存储器150、若干功能单元151、152、153、…及指令发布寄存器152。多端口寄存器文件存储器存储来自功能单元的结果及用于功能单元的操作数。指令发布寄存器包含多个发布栏用于包含要在单个时钟周期中在功能单元151、152、153、…上并行开始的操作。解压缩单元155将来自指令高速缓冲存储器103的压缩的指令转换成IIR 154可用的形式。
简言之,压缩的指令包含指定该压缩的指令要使用的发布栏的格式字段。为了提高检索效率,将格式位存储在与这些格式位相关的指令的前面的指令中。这便允许了指令检索的流水作业。对于N个发布栏的机器有2*N个格式位,组织成N个2位的组,各组对应于一个发布栏。一组中的位指定是否要使用对应的发布栏以及指令中该发布栏的操作占用的操作长度。
图3示出源代码如何变成可加载的压缩目标模块的图。首先源代码801必须经编译程度802编译以建立第一组目标模块803。这些模块由连接程序804连接以建立第二类型的目标模块805。然后在806上压缩与混洗这一模块以产生可加载模块807。
可采用任何标准编译程序或连接程序。目标模块II包含若干标准数据结构。其中包含:首部;全程与局部符号表;重定位信息参照表;分段表;及调试信息,其中的一些是由压缩与混洗模块807使用的。目标模块II还具有分区,其中包含要处理的指令所在的正文分区及记录该正文的出处源文件的源分区。
图4中示出压缩与混洗模块的高层流程图。在901上,读入目标模块II。在902上处理正文分区。在903上处理其它分段。在904上更新首部。在905上输出该目标模块。
图5扩充框902。在1001上获得参照表,即重定位信息。在1002上,收集分支目标,因为它们不要压缩。在1003上,软件检验判定源分区中有无更多的文件。如果有,便在1004上检索对应于下一文件的部分。然后在1005上压缩该部分。在1006上,更新源分区中的文件信息。在1007上,更新局部符号表。
一旦源分区中不再有文件,便在1008上更新全程符号表。然后在1009上,更新下一正文段中的地址参照。然后在1010上实行256位混洗。下面将讨论这种混洗的动机。
图8扩充框1005。首先在1101上判定是否有其它指令要压缩。如果有,便在1102上检索下一条指令。随后在1103上压缩该指令中的各操作并在1108上更新散布表(scatter table)。散布表为新的数据结构,用作压缩与混洗的结果,下面将对其进一步说明。然后在1104,组合一条指令中的所有操作及下一随后指令的格式位。如果当前指令中包含地址,随后在1105上必须更新参照表中的重定位信息。在1106上,收集更新正文段中的地址参照所需的信息。在1107上,将压缩的指令附加在输出位串的尾部并将控制返回给框1101。当不再有指令时,控制返回到框1006。
可将用作本发明的压缩与混洗的结果的散布表说明如下。
参照表包含指令流所使用的地址的单元表及列出在这些单元上的实际地址的对应表。压缩代码时以及加载它时,必须更新这些地址。从而,在这些时间上使用参照表以便更新。
然而,在压缩与混洗代码时,是将地址的实际位互相分离并重新排序的。因此,散布表为参照表中的各地址列出各位所在位置。在较佳实施例中该表列出位字段的宽度、从源文本中地址的对应变址的偏移量、来自目的文本中的地址中的对应变址的对应偏移量。
当加载目标模块III以便在处理器上运行时,即使在解开这些位的混洗以前散布表也容许更新列出在参照表中的地址。
为了VLIW处理器处理如上所述压缩的指令,必须解压缩指令。解压缩之后,指令将填入具有N个发布栏的指令寄存器中,在较佳实施例的情况中N为5。图9为解压缩过程的示意图。指令来自存储器1201,即来自主存储器104或指令高速缓冲存储器105之一。在1203解压缩之前,指令必须在1201解开混洗,这将在下面进一步说明。在1203解压缩之后,指令便能进入CPU1204。位混合
当指令为诸如512位双字长时,高速缓冲存储器结构变复杂了。为了简化芯片的配置,混合指令的位是有利的。这里混合(swizzle)与混洗(shuffle)两词用来表示同一事物。以下是混合位的算法。
for(k=0;k<4;k=k+1)
for(i=0;i<8;i=i+1)
for(j=0;j<8;j=j+1)
begin
word_shuffled[k*64+j*8+i]=
word_unshuffled[(4*i+k)*8+j]
end其中i、j与k为整数下标;word_shuffled为用于存储混洗的字的位的矩阵;而word_unshuffled则为用于存储未混洗的字的位的矩阵。
在这一方法中,在数组“word_shuffled”中写入一位的下标为从数组“word_unshuffled”中读出该位处的下标的三位逻辑旋转。(在n位逻辑旋转中将下标的位向高位位置移位n位并将下标的n个最高位放在n个最低位位置上)。为此后描述的情况选择了n=3位旋转的特定选择,其中从高速缓冲存储器中读取位的空间次序为从8(=2n,n=3)个不同存储体中的循环位交错。
高速缓冲存储器结构
图6a示出在VLIW指令的高效处理中有用的高速缓冲存储器结构的输入端上的操作。这一高速缓冲存储器包含16个各2k字节的存储体601~616。这些存储体共用一条输入总线617。这些高速缓冲存储器分成两个栈。左边的栈称作“低的”而右边的栈则称作“高的”。
高速缓冲存储器每次只能在一个存储体中取输入,从而每次只有4个字节。寻址确定正在填充哪一存储体中的哪4个字节。对于要存储在高速缓冲存储器中的各512位的字,各存储体中存储4个字节。所示的各存储体中的阴影部分表示用于加载一个给定的字的各存储体的对应部分。这些阴影部分只是为了说明。任何给定的字都可加载进这些存储体的对应部分的任何组中。
按照上述算法混合之后,混合的字的4个顺序字节部分按照次序608、616、606、614、604、612、602、610、607、615、605、613、603、611、601、609加载进存储体中。加载混合的字的4字节部分的次序是用表示存储体的框中的罗马数字表示的。
图6b示出如何从高速缓冲存储器中读出混合字。图6b中只示出低栈的存储体的阴影部分。高的部分是类似的。各阴影部分601a~608a具有32位。这些位是用所示的连接加载在称作bus256low的输出总线上的,即以下述次序:608a~位0,607a~位0,…,601a~位0;608a~位1,607a~位1,…,601a~位1;…;608a~位31,607a~位31,…,601a~位31。利用这些连接自动将字解开混合到其正确的位次序。
线路束620、621、…、622一起构成输出bus256low。这些线路不交叉地通过高速缓冲存储器到输出端。
在输出端上,高速缓冲存储器看上去象图7。在控制单元704通过保证这些位在上面规定的输出次序的移位网络703的控制下从栈低701与栈高702中读出这些位。以这一方式,不用束620、621、…622与类似的线路交叉便能保证512位字的整个输出。
总结:本发明提供了在计算机处理器中使用的指令高速缓冲存储器,其包括:
用于存储一个指令流的各个位的装置,这些位是预混洗的;以及
用于将这些位从存储装置多路传输到总线上以便解开这些位的混洗的装置,该多路传输装置包括从存储装置引导到总线上的多条线路,这些线路不互相交叉。指令流最好是双字格式;而该高速缓冲存储器包括第一栈用于存储来自双字格式的第一字,以及包括第二栈用于存储来自双字格式的第二字。
最好将栈组织成存储体,并且对于输出总线上的一个输出字节的每一位有一个存储体。多路复用器装置可进行操作从各存储体传送一位以便建立一个输出字节。
高速缓冲存储器最好是用来存储n条指令的,其中n为一整数变量,而各存储体包含来自该n条指令中各条的至少一个相应的位。各存储体包含一个输出字的各字节的RAM列。将这些RAM列组织成m个组,其中m为表示输出字中的字节数的整数,各相应组包含该输出字的各位的相应RAM列,单个组中没有两个RAM列在同一存储体中。该多路复用器装置包括m列多路复用器,各列多路复用器可进行操作将来自各自的组中的各RAM列的一位多路传输到输出字中。
在一个实施例中,指令高速缓冲存储器包括8个存储体的第一与第二栈,各存储体包括1位64个RAM单元的8个RAM,RAM列被组织成8个RAM列的组,第一个栈用于存储双字输出的较低阶位,第二栈用于存储双字输出的较高阶位。多路传输装置进行操作将来自各自的组中的各RAM列的一位多路传输到输出字中。
高速缓冲存储器最好包括第一与第二总线,第一总线用于输出输出字的较低阶位而第二总线则用于输出输出字的较高阶位。作为位混洗的结果,第一与第二总线的线路可无交叉地位于处理器的同一平面上。
为了为计算机处理器生成指令流,提供了存储在计算机存储介质中的用于生成混合指令的计算机软件,包括:-用于接收由编译程序与/或连接程序产生的经过编译与连接的目标模块的代码,这一目标模块是存储在计算机存储介质中的;以及-用于混合该经过编译与连接的软件以产生第二目标模块的代码,该第二目标模块适合于在采用其输出总线线路不交叉的高速缓冲存储器结构从高速缓冲存储器读取时被解开混合。用于混合的代码最好生成存储在计算机存储介质中的散布表,用于存储所混洗的指令的位相对于这些位的出处指令的位置。
以这一方法,本发明提供了存储在计算机存储介质中的位流,该位流至少包含供在计算机处理器上执行并存储在计算机存储介质中的一个指令的一部分,该部分包含许多位,这些位是在混洗次序中的,该混洗的次序允许计算机处理器的简化芯片配置。作为示例,该指令具有512位。