数据处理装置、数据处理程序及记录了数据处理程序的记录介质的制作方法

文档序号:6655461阅读:511来源:国知局
专利名称:数据处理装置、数据处理程序及记录了数据处理程序的记录介质的制作方法
技术领域
本发明涉及一种从主存储装置读取指令行以及/或者值,并将进行运算处理的结果写入主存储装置处理的数据处理装置。
背景技术
一直以来,对于包括CPU(Central Processing Unit中央处理器)的微处理器,大家一直在进行着有关运算速度的高速化技术的研究开发。作为高速度化的技术,可以举出例如流水线操作、超标量体系结构(superscalar)、无序执行以及寄存器重命名技术等。
流水线操作技术是将指令的执行处理分解为几个阶段,并对多个指令进行流水线作业式的同时处理的技术。超标量体系结构技术是准备两组以上的指令执行电路,同时并行执行多个指令的技术。无序执行技术是忽视指令的记述顺序而从若干个连续的指令当中找到能够先执行的指令并对其进行先行处理的技术。寄存器重命名技术是,例如在CISC(Complex Instruction Set Computer复杂指令集计算机)型号的芯片里,通过保持与历来芯片的指令互换性的同时增加通用寄存器的数量,来增大进行并行处理的概率的技术。
像这样,谋求微处理器的运算速度的高速化时,将指令并行而执行是非常重要。但是在程序当中包括有根据某个指令的结果执行不同指令这样的依赖关系,换句话说包括有分支指令,大部分都会是这种情况。包括在这种这样的有分支指令的情况下时,如果通过并行处理进行先行处理的话,则发生存在以下的问题根据由于分支结果使得先行处理的内容变为无效的情况,从而存在运算速度高速化的效果也会变小的问题。
于是,在程序中存在分支时,降低由于预测分支对象而先行处理变为无效的概率并提高并行处理的效果的技术,所谓的有关分支预测的研究被大量地进行着。
但是,根据分支预测投机性地进行先行处理时,一般会遇到以下问题第一个问题是,因为需要经常验证预测是否必要,故不能减少先行指令列的执行时间本身;第二个问题是,由于需要对基于错误预测的一连串的全部先行运算结果进行无效化,故要增加能够一次性地进行投机性的先行处理的指令数量,需要相应的硬件成本;第三个问题是,指令之间的依赖关系越多,进行多重的先行处理的必要性就越大,并且预测正当性的验证处理、以及基于错误预测的处理的无效化处理就会变得极其复杂。
另一方面,作为与分支预测技术不同的高速化技术,也有人提出称为值再利用的技术。该值再利用技术是如下的技术将关于程序一部分的输入值和输出值登录在再利用表中,对同样的位置进行再次执行时,如果输入值是登录在再利用表中的值,则输出被登录的输出值。作为根据这种值再利用的效果,可以举出以下效果(1)输入值如果和登录在再利用表中的输入值一致,则不需要验证执行结果。(2)只根据输入值和输出值总数来决定硬件成本,并可以省略的指令列的长度不被限制。(3)指令之间的依赖关系的多少,不会影响再利用机构的复杂程度。(4)能够削减冗长的加载/储存指令的同时,也能实现与此相伴的消耗功率的削减。
在非专利文献(信息处理学会论文志高性能计算系统,HPS5,pp.1-12,Sep.(2002),“根据函值再利用以及并行事先执行的高速化技术”(中岛康彦、绪方胜也、正西申悟、五岛正裕、森真一郎、北村俊明、富田真治)(发行日2002年9月15日)中,记载了关于程序中的函数进行值再利用的技术。该现有技术中,利用了输入模块一般按照ABI(Application Binary Interface应用二进制接口)做成的事实,特别是利用了SPARC(Scalable Processor ARChitecture可缩放处理机体系结构)ABI。从而,通过特定该ABI中的函数的输入输出来实现值再利用。即不需要加入因用于值再利用的编译的专用指令,从而能够适用现有的输入模块。
还有,通过动态性地掌握了函数的多重构造,将函数内局部寄存器和栈上的局部变量从再利用中的输入输出值去除,由此使得效率提高。特别是对于函数,和函数的复杂程度无关地,使得最多6个寄存器输入、最多4个寄存器输出、以及不包括局部变量的最小限度的主存储器值登录所产生的再利用和事先执行变为可能。以下关于现有技术进行详细的说明。
首先,将单一的函数作为对象,明确一下什么是输入、什么是输出,并对用于进行1等级再利用所需要的机构进行说明。在程序中,函数一般都形成有多重结构。将函数A(Function-A)调出函数B(Function-B)的结构图表示在如图46(a)中。
全局变量(Globals)能成为函数A的输入输出(Ain/Aout)以及函数B的输入输出(Bin/Bout)。函数A的局部变量(Locals-A)不是函数A的输入输出,但通过指针可以成为函数B的输入输出。还有,从函数A到函数B的参数(Args)可以成为向函数B的输入,而从函数B到函数A的返回值(Ret.Vat.)可以成为从函数B的输出。另外,函数B的局部变量(Locals-B)不包括在函数A和函数B的输入输出中。
为了不依赖前后关系而再利用函数B,在执行函数B时,必须只将函数B的输入输出Bin/Bout作为输入输出进行登录。在此,将执行如图46(a)所示的程序结构时的主存储器中的内存印象图表示在图46(b)中。在这个内存印象图中,不包括Bin/Bout的区域只有Locals-B。所以,为了识别Bin/Bout,必须要分别确定Globals和Locals-B的分界、以及Locals-B和Locals-A的分界。对于前者,一般利用OS(Operating System操作系统)决定执行时的数据大小和栈大小的上限,而能够根据OS设定的界限(LIMIT)来确定Globals和Locals-B的分界。对于后者,能够通过利用B被调出之前的栈指针的值(SP in A)来确定Locals-B和Locals-A的分界。
接着,关于识别给出的主存储器地址是全局变量、或者是哪个函数的局部变量的方法进行说明。假设装入输入模块满足在SPARC ABI中所规定的以下条件。另外,%fp意味着帧指针,%sp意味着栈指针。
(1)%sp以上的区域中,%sp+0~63为寄存器退避区域、%sp+68-91为参数退避区域,都不是函数的输入和输出。
(2)返回结构体时,隐含参数(Implicit Arg.)被存储在%sp+64-67。
(3)明示参数(Explicit Arg.)被放在寄存器%o0-5和%sp+92以上的区域。首先,为了区别全局变量和局部变量,一般利用OS决定执行时的数据大小和栈空间的上限,并假设如下事项(1)全局变量被放在LIMIT未满的区域。
(2)%sp是不会变为LIMIT以下,而LIMIT~%sp的区域为无效。
将在满足以上条件的情况下函数A调用函数B时的内存印象图中的参数和帧的概要表示在图47中。以下,参照该图,对于区别A的局部变量和B的局部变量的方法进行说明。
在该图中,(a)表示A在执行中的状态。LIMIT未满的粗框部分中存储有指令(Instructions)和全局变量(Global Vars.),而有效的值被存储在%sp以上。在%sp+64中,结构体的起始地址作为B将结构体作为返回值时的隐含参数而被存储。对B明示的参数的最开始6个字母是被存储在寄存器%o0~5,第七个字母以后的字母被存储在%sp+92以上。将基址寄存器作为%sp的操作数%sp+92出现时,该区域是参数的第七个字母也就是B的局部变量。另一方面,操作数%sp+92不出现时,该区域是A的局部变量。这样,在(a)的状态中,能够通过验证操作数来区别A的局部变量和B的局部变量。
另一方面,(b)表示B执行中的状态。参数可以变为输入、返回值变为变为输出、全局变量和A的局部变量可以变为输入输出。但是,B有时导入可变长参数,故一般不能判断%fp+92以上的区域变为A的局部变量区域还是变为B的局部变量区域。
要区别局部变量,首先在(a)的时刻,将检测出参数的第七个字母以后的函数调用作为再利用对象,关于没有检测出第七个字母以后的函数调用,之前要记录%sp+92的值。另外,因为估计使用第七个字母以后的函数调用的出现的频率较低,所以认为由于限制为将使用第七个字母以后的函数作为再利用对象而产生的性能下降会比较轻微。
基于以上的准备,可知(b)的主存储器参照地址,当预先记录了的%sp+92值以上时为A的局部变量,而小时为B的局部变量。B执行时,除去B的局部变量的同时,将全局变量和A的局部变量登录到再利用表中。
再利用时,因为B的局部变量从输入输出被除去,所以B的局部变量的地址不需要一致。因此,不管上下关系如何,只要输入是一致的,就能够进行再利用。但是,对于B所参照的全局变量和A的局部变量,需要地址以及数据的两者与再利用表中的内容完全一致。即,在执行B之前,怎么样才包罗应该进行比较的主存储器地址成为关键问题。
B所参照的全局变量和A的局部变量的地址,其实就是基于将在B中生成的地址定数和全局变量/参数作为起源的指针的地址。所以,首先参数选择参数完全一致的再利用表中的登录对象后,通过参照全部的有关主存储器地址而进行一致性比较,能够包罗B应该参照的主存储器地址。然后,只有所有的输入都一致时,才能够再利用登录结束的输出(返回值、全局变量以及A的局部变量)。
为了实现函数的再利用,作为再利用表设置函数管理表(RF)和输入输出记录表(RB)。将为了再利用一个函数而需要的硬件结构表示在图48中。要能够再利用多个函数,需要准备多个组的该结构。
在该表中,RF和RB中被保持的V表示登录信息是否有效的标识,LRU(least recently used最近最少使用算法)表示登录信息替换的提示。RF,除了上述的V和LRU以外,保持函数的起始地址(Start)和应该参照的主存储器地址(Read/Write)。RB,除了上述的V和LRU以外,保持函数调用之前的%sp(SP)、参数(Args.)(V有效登录信息、Val.值)、主存储器值(MaskRead/Write地址的有效字节,Value值)、以及返回值(ReturnValues)(V有效登录信息,Val.值)。
假设返回值存储在%i0~1(末端函数中改读成%o0~1)或者%f0~1中,并假设使用%f2~3的返回值(扩张倍精度的浮点数)在程序中不存在。由于由RF总括管理Read地址、由RB管理Mask和Value,故能够实现通过CAM(content-addressable memory可按内容寻址的存储器)同时对Read地址的内容和RB的多个登录信息进行比较的结构。
要再利用单一函数,首先,在函数执行时,一边除去局部变量,一边向再利用表上登录有关参数、返回值、全局变量以及上位函数的局部变量的输入输出信息。在此,将先执行读出的参数寄存器作为函数的输入输出而登录,并将向返回值寄存器的写入作为函数的输出而登录。其它的寄存器参照没必要登录。主存储参照也同样,对于先执行读出的地址作为输入而登录,并将写入作为输出而登录。
在从函数返回的期间调用下一个函数时,或者,如果应该进行登录的输入输出超过再利用表的容量、检测出参数有第七个字母、以及执行中途系统调用和发生插队等骚乱没有发生时,执行返回函数指令的时刻,正在登录中的输入输出表登录信息变为有效。
以下,参照图48进行说明,调用函数之前,(1)检索函数的起始地址,(2)选择参数完全一致的登录信息,(3)参照有关主存储器地址,即参照所有的至少有一个Mask是有效的Read地址,(4)进行一致性比较,所有输入都一致时,(5)通过写返还登录结束的输出(返回值,全局变量和A的局部变量),能够省略函数的执行。
在这里,作为指令区间的一个例,对于当图49中所示的指令区间通过图48中所示的RF和RB结构被执行时的例进行说明。在该图中,PC表示该指令区间被开始时的PC值。即,指令区间的前头的地址为1000。另外,图50,表示图49所示的指令区间被执行时登录在RB中的输入地址和输入数据以及输出地址和输出数据简略化,图51表示在RB中的实际登录情况。
在第一行的指令中(以下,简称为第一指令),地址定数A1设定在寄存器R0。而在第二指令中,从将寄存器R0的内容作为地址的主存储器中读取的4个字节数据(00110000)被存储在寄存器R1中。此时,地址A1、掩码地址(FFFFFFFF)(在掩码地址中,F表示有效字节、0表示无效字节)、数据(00110000)作为输入登录在RB中的Input侧的第一列,寄存器号码R1、掩码地址(FFFFFFFF)以及数据(00110000)作为输出登录在RB的Output侧的第一列。
在第三指令中,地址定数A2设定在寄存器R0中。在第四指令中,从将寄存器R0的内容作为地址的主存储器加载的一个字节数据(02)被存储在寄存器R2中。此时,地址A2、掩码地址(FF000000)、以及数据(02)作为输入登录在RB中的Input侧的第二列。此时,关于地址A2中的剩下3字节,存储表示Don’t Care的意思的“-”。寄存器号码R2、掩码地址(FFFFFFFF)、以及数据(00000002)作为输出登录在RB中的Output侧的第二列中。
在第五指令中,从地址(A2+R2)加载的1字节数据(22)被存储在寄存器R2中。因为地址R2的值是(02),所以地址(A2+R2)和数据(22)作为输入追加登录在RB中的Input侧的第二列。此时,在地址(A2+R2)的部分进行登录,而与地址(A2+01)和地址(A2+03)相对应的部分,还是表示Don’tCare的意思为“-”。即,成为对应于地址A2的掩码地址(FF00FF00)。寄存器号码R2、掩码地址(FFFFFFFF)、以及数据(00000022)作为输出被覆盖在RB中的Output侧的第二列。
在第六指令中,地址定数A3设定在寄存器R0中。在第七指令中,从将寄存器R0的内容作为地址的主存储器加载的一个字节数据(33)被存储在寄存器R3中。这时,地址A3、掩码地址(00FF0000)、以及数据(33)作为输入被登录在RB的Input侧的第三列。寄存器号码R3、掩码地址(FFFFFFFF)以及数据(00000033)作为输出被登录在RB中的Output侧的第三列。
在第八指令中,从地址(R1+R2)加载的1字节数据(44)被存储在寄存器R4中。这时,因为地址R1和地址R2在指令区间的内部变为被覆盖的寄存器的地址,所以地址R1和地址R2不会变为指令区间的输入。另一方面,因为由地址(R1+R2)所产生的地址A4是指令区间的输入,所以地址A4、掩码地址(00FF0000)、以及数据(44)作为输入被登录在RB中的Input侧的第四列中。寄存器号码R4、掩码地址(FFFFFFFF)、以及数据(00000044)作为输出被登录在RB中的Output侧的第四列中。
在第九指令中,从寄存器R5读出值,并对读出值加上1的结果再次被存储在寄存器R5。这时,寄存器R5、掩码地址(FFFFFFFF)、以及数据(00000100)作为输入被登录在RB中的Input侧的第五列。并且寄存器号码R5、掩码地址(FFFFFFFF)、以及数据(00000101)作为输出被登录在RB的Output侧的第五列。
如以上所述,执行指令时从存储器/寄存器中进行读取时,进行以下处理。
(1)检索RB中的Output侧,如果被读出的地址/寄存器号码已被登录,则该地址/寄存器序号不被登录在Input侧而结束。
(2)如果不是RB中的Output侧,则检索出RB中的Input侧,而如果被读出的地址/寄存器号码如果已被登录,则地址/寄存器序号不被登录而结束。
(3)如果也不是RB中的Input侧,则在RB中就会新追加登录信息,并该地址/寄存器号码和值被登录。
还有,执行指令时向存储器/寄存器进行写入时进行以下处理。
(1)检索出RB中的Output侧,如果被读出的存储器/寄存器号码已被登录,则值被更新而结束。
(2)如果不在RB中的Output侧,则新追加登录信息而读出的地址/寄存器号码和值被登录。
另外,在专利文献(特开2004-258905号公报(
公开日2004年9月16日))中,公开了在进行如上述的再利用的结构中设置多个处理器并进行并行事先执行的结构。作为进行该并行事先执行时地输入的预测方法,公开了根据最后出现的参数和最近出现的2组参数间的差分进行跨步预测的方法。
如果进行如上的输入预测,上述的输入项目能继续单调变化的时候,能够根据事先预测了的结果有效地进行再利用。
但是,在上述的现有技术中,在RB中的各个登录信息,只要有一个项目的内容不同,就需要分别作为别的登录信息而进行登录。因此,使得RB中的存储器上的利用效率较差。而且,如果要执行的函数的输入模式、和包括在RB中的各个已登录信息中的输入模式当中,只要有一个不同,就无法进行再利用。
还有,图52是表示了反复执行图49所示的指令区间时,登录在RB输入侧的历史的例。在该例中,每次Time发生1~4变化时指令区间都被执行,每当指令区间被执行时,地址A2的值变为(02)、(03)、(04)、(05),与此同时其它的输入要素的值也在发生变化。
另外,在各个历史之间被表示的diff,表示对应的输入要素的值的变化量。上述现有输入预测利用该diff来进行预测。图53表示了基于该现有输入预测的预测结果。
例如,像循环控制变量,对于单调变化的地址(上述例中对应于地址A2)内容能够进行正确预测。但是,指令区间中含有数组元素时,即使数组元素中的下标单调变化,数组元素值一般也不一定单调变化。如图52所示的例中,从地址A2加载的值相当于数组元素的下标,将该下标作为地址来使用的主存储器参照,地址发生变化,因此作为历史而被登录的输入要素的数量本身发生变化。在这种状况下,因为同一列的变化中消失规律性,所以,如与图53中的地址A3相对应的列中所示那样,预测准确率就会变得极其差。
进行输入预测的时候,关于内容未发生变化的地址的值进行预测,会成为浪费硬件资源的事情。而且,值的变化中没有规律性时,只能将差分假设为0来进行预测,但,由于进行勉强的预测,反而,有时使准确率下降。如图53所示的例中,对于与A2+4相对应的地址,应该预测掩码位置本身的变化,但是对掩码地址位置的变化也要进行预测是困难的。这时,可知不进行预测而直接参照主存储器值是最好的方法。
以上的问题都是因为同等地处理被登录的全部地址而产生的问题。
本发明是为了解决以上问题而进行的发明,其目的在于,提供能够在进行再利用的基础上更加准确地将输入输出组登录在指令区间存储装置的数据处理装置。
本发明是为了解决以上问题而进行的发明,其目的在于,提供如下的数据处理装置通过比较简单的结构,能够在进行再利用的基础上更加准确地将输入输出组登录在指令区间。

发明内容
本发明是为了解决以上问题而进行的发明,其第一个目的在于,提供能够在进行再利用的基础上将更加准确的输入输出组登录在指令区间存储器的数据处理装置。
还有,本发明的第二个目的在于,从主存储装置读出指令列以及/或者值并进行将运算处理的结果写入主存储装置的处理的数据处理装置中,通过提高预测准确率,提供能实现更加有效的指令区间的事先执行的数据处理装置。
本发明中的数据处理装置,为了解决以上的问题,进行从主存储装置中读取指令区间、且将运算处理的结果写入主存储装置的处理,其特征在于,包括第一运算装置,其基于从上述主存储装置读取的指令区间来进行运算;寄存器,其当由上述第一运算装置对上述主存储装置进行读出以及写入时被使用;输入输出生成装置,其生成输入输出组,该输入输出组由当通过上述第一运算装置来进行对指令区间的运算时的输入模式和输出模式构成;指令区间存储装置,其存储由上述输入输出生成装置所生成的输入输出组,上述第一运算装置,在执行指令区间时,如果该指令区间的输入模式与存储在上述指令区间存储装置中的输入模式一致,则进行将输出模式输出到寄存器以及/或者主存储装置的再利用处理,该输出模式与上述输入模式相对应地存储在上述指令区间存储装置中,上述输入输出生成装置,包括依赖关系存储部分,其表示包括在输出模式中的各个输出要素将包括在输入模式中的哪一个输入要素作为起源;输入输出组设定装置,其基于上述依赖关系存储部分中所存储的信息来设定由包括一个以上的上述输出要素的输出模式、和包括一个以上的上述输入要素的输入模式构成的输入输出组。
上述的结构以如下方式构成第一运算装置在执行指令区间时,该指令区间的输入模式、和存储在上述的指令区间存储装置的输入模式一致时,进行将与该输入模式相对应地存储在上述指令区间存储装置的输出模式输出到寄存器以及/或者主存储装置的再利用处理。而且,存储在指令区间存储装置中的输入模式和输出模式,通过输入输出生成装置来生成。
输入输出生成装置,以如下方式构成根据包括在输出模式中的各个输出要素将包括在输入模式中的哪个输入要素作为起源的信息,设定由包括一个以上的输出要素的输出模式和包括一个以上的输入要素的输入模式构成的输入输出组,并生成被设定的一个以上的输入输出组。从而,与简单地将某个指令区间被执行时的输入模式和输出模式登录在指令区间存储装置的情况相比,使得进行再利用基础上将更加准确的输入输出组登录在指令区间存储装置变得更可能。因此能够提高进行再利用时得检索效率。
另外,在上述的构成中,本发明的数据处理装置,可以由以下的方式构成上述输入输出组设定装置,当成为某个第一输出要素的起源的输入要素组全部包括在成为其它的第二输出要素的起源的输入要素组时,设定将成为第二输出要素的起源的输入要素组作为输入模式、且将第一输出要素和第二输出要素作为输出模式的输入输出组。
在上述结构中,成为某个第一输出要素起源的输入要素组,全部包括在成为其它第二输出要素起源的输入要素组时,可以将这些集中为一个输入输出组。因此,能够删除冗长的输入输出组,从而能够防止向指令区间存储装置登录冗长的输入输出组。
在上述的构成中,本发明的数据处理装置,可以由以下的方式构成上述输入输出组设定装置,在成为某个第一输出要素的起源的输入要素组和成为其它的第二输出要素起源的输入要素组之间,不存在共同的输入要素时,分别设定第一输入输出组、以及第二输入输出组,其中,上述第一输入输出组将成为第一输出要素起源的输入要素组作为输入模式、且将第一输出要素作为输出模式;上述第二输入输出组将成为第二输出要素起源的输入要素组作为输入模式、且将第二输出要素作为输出模式。
根据以上的构成,在两个输入输出组中,不存在共同的输入要素时,分别作为不同的输入输出组而被设定。在这里,所谓不存在共同的输入要素,是指各个输入输出组相互不具有依赖关系。即,在进行再利用时,在以前执行了的指令区间的输入模式和输出模式当中仅有一部分一致时,也能够进行再利用,从而,能够提高可以进行再利用的概率。
还有,在上述的构成中,本发明的数据处理装置,可以由以下的方式构成上述依赖关系存储部分,由将上述各输出要素作为行成分、且将上述各输入要素作为列成分的二维排列存储器构成,该二维行排列存储器的各存储器要素,保持有与该存储器要素的行成分相对应的输出要素是否将与该存储器要素的列成分相对应的输入要素作为起源的信息。
上述结构中,输出模式中包括的各输出要素将包括在输入模式中的哪个输入要素为起源的信息,由二维排列存储器来表示。从而,对于二维排列存储器的各存储器要素,例如,通过存储1或者0的这种单纯的处理就能够将以上的信息存储的同时,例如,通过关于各存储器要素进行逻辑运算来能够很容易地掌握各行成分之间的关系等。
还有,本发明的数据处理装置,在上述的构成中,可以由以下的方式构成由上述的第一运算装置来进行指令区间运算时,从寄存器以及/或者主存储装置进行了读取时,上述的输入输出生成装置,进行以下处理,(1)进行了读取的寄存器以及/或者主存储装置的地址,作为输出要素登录在依赖关系存储部分时,对于由与该输出要素相对应的依赖关系存储部分的行成分构成的暂定行列,进行临时存储,(2)进行了读取的寄存器以及/或者主存储装置的地址,没有作为输出要素登录在依赖关系存储部分而作为输入要素登录在依赖关系存储部分时,临时存储暂定行列,该暂定行列,将与上述输入要素相对应的依赖关系存储部分的列所对应的存储器的要素设定为1、且将其它存储器要素设定为0,以及(3)进行了读取的寄存器以及/或者主存储装置的地址,作为输出要素和输入要素均没被登录在依赖关系存储部分时,将该地址和值作为输入要素来登录在依赖关系存储部分的同时,临时存储暂定行列,该暂定行列,将与上述输入要素相对应的依赖关系存储部分的列所对应的存储器的要素设定为1、且将其它存储器要素设定为0,向寄存器以及/或者主存储装置中进行写入时,上述的输入输出生成装置,(4)当进行了写入的寄存器以及/或者主存储装置的地址作为输出要素已被登录时,将与被登录的输出要素相对应的输出值更新成进行了写入的值的同时,将与已被登录的输出要素相对应的依赖关系存储部分的行成分,置换成在该时刻已被临时存储了的全部暂定行列的逻辑或,之后,对临时被存储的暂定行列进行初始化,以及(5)进行了写入的寄存器以及/或者主存储装置地址,没有作为输出要素被登录时,将该地址和值作为输出要素登录在依赖关系存储部分的同时,将与该输出要素相对应的依赖关系存储部分的行成分,置换成在该时刻已被临时被存储了的全部暂定行列的逻辑或,之后,对临时被存储的暂定行列进行初始化。
通过进行如上述的处理,某个指令区间被执行时的输入输出关系,即,能够将关于包括在输出模式中的各输出要素将包括在输入模式中的哪个输入要素作为起源的信息准确地存储在依赖关系存储部分的二维排列存储器中。
还有,在上述的构成中,本发明的数据处理装置,可以由以下的方式构成上述输入输出组设定装置,包括行间逻辑与比较部分,该行间逻辑与比较部分进行上述二维排列存储器中的各行成分之间的逻辑与运算,上述输入输出组设定装置,在依赖关系存储部分中,抽出某个第一行成分的反转、和某个第二行成分的逻辑与全部成为0的行成分组,并将被抽出的行成分组当中的包括输入要素组最多的行成分以外的行成分,设定为输入输出组的对象以外。
在上述的构成中,通过进行各行成分的逻辑与运算,将含有最多输入要素组的行成分以外的行成分,设定为输入输出组以外的对象。由于该处理,某个成为第一输出要素起源的输入要素组,全部包括在成为其它第二输出要素起源的输入要素组时,将这些集中为一个输入输出组。从而,删除冗长的输入输出组变为可能,故能够防止向指令区间存储装置登录冗长的输入输出组。
还有,在上述的构成中,本发明的数据处理装置,可以由以下的方式构成上述输入输出组设定装置,包括行间逻辑与比较部分,该行间逻辑与比较部分进行上述二维行列存储器中的各行成分之间的逻辑与运算,上述输入输出组设定装置,在依赖关系存储部分中,将对于其它任何行成分的逻辑与全部成为0的行成分,分别设定为输入输出组。
在上述的构成中,通过进行各行成分的逻辑与运算,将对于其它的行成分是独立关系的行成分作为输入输出组来设定。通过该处理,使得共同的输入要素不存在,换句话说,可以抽出互相不存在依赖关系的输入输出组,因此,在进行再利用时,以前被执行的指令区间的输入模式以及输出模式当中的只有一部分一致时,也能够进行再利用。
另外,本发明的数据处理装置,如以上所述,可以由以下的方式构成上述第二运算装置,关于由上述第一运算装置来进行处理的指令区间,基于估计以后被输入的预测输入值而进行该指令区间的运算,并将该结果登录在上述指令区间存储装置中。这种情况时,通过第二运算装置,关于在该时刻由第一运算装置来进行处理的指令区间,进行基于预测输入值的运算,并将该结果存储到指令区间存储装置中。从而,接着出现相同的指令区间并进行与预测输入值相同的输入时,就能够对存储在指令区间存储装置的值进行再利用。例如,在输入值好像单调变化的指令区间中,预测输入值准确的可能性较高,从而根据上述的结构的效果变得高。
在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述的输入输出组设定装置,包括输出侧组存储部分,其存储各输出要素所属的输入输出组的信息;输入侧组存储部分,其存储各输入要素所属的输入输出组的信息;临时存储部分,其,在生成输入输出组的过程中,当上述依赖关系存储部分发生变更时,存储已被变更的输出要素和输入要素的依赖关系;组临时存储部分,其,在生成输入输出组的过程中,当上述依赖关系存储部分发生变更时,存储已被变更的输入输出组的信息。
上述的结构,由以下方式构成第一运算装置执行指令区间时,该指令区间的输入模式,与存储在上述指令区间存储装置中的输入模式一致时,进行如下再利用处理将与该输入模式相对应地存储在上述指令区间存储装置中的输出模式,输出到寄存器以及/或者主存储装置。于是,存储在指令区间存储装置中的输入模式和输出模式,由输入输出生成装置来生成。
输入输出生成装置,由以下方式构成根据表示输出模式里含有的各输出要素是将包括在输入模式中的哪个输入要素作为起源的要素的信息,设定由包括一个以上输出要素的输出模式、和包括一个以上的输入要素的输入模式构成的输入输出组,并生成被设定的一个以上的输入输出组。从而,某个指令区间被执行时,与单纯地将输入模式和输出模式登录在指令区间存储装置时的情况相比,使得进行再利用的基础上将更加准确的输入输出组登录在指令区间存储装置中变为可能。于是,使得进行再利用时的检索效率提高。
在这里,输入输出组设定装置包括输出侧组存储部分、输入侧组存储部分、临时存储部分、以及组临时存储部分。即,通过临时存储部分,能够认知输入输出组的生成处理的过程中的依赖关系的历史,并且,通过组临时存储部分,能够认知输入输出组的生成处理过程中的输入输出组的历史。另外,根据这些信息,通过设定输出侧组存储部分和输入侧组存储部分,确认输出侧组存储部分和输入侧组存储部分,从而,仅通过这些就能够容易地进行输入输出组的设定处理。于是,不用进行复杂的运算处理,而通过较小规模的运算装置就能够设定输入输出组。
还有,在上述的构成中,本发明的数据处理装置,可以由以下的方式构成上述的输入输出组设定装置,还包括组管理部分,该组管理部分,在生成输入输出组过程中,存储对于上述输出要素以及/或者上述输入要素已经被分配的输入输出组信息。
根据上述的结果,通过组管理部分在进行输入输出组生成处理的过程中能够认知已经被使用的输入输出组。于是,能够更容易地进行输入输出组的设定处理。
在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述依赖关系存储部分,由将上述各输出要素作为行成分、且将上述各输入要素作为列成分的二维行列存储器构成,并且,该二维行列存储器的各存储器要素,保持有与该存储器要素的行成分相对应的输出要素是否将与该存储器要素的列成分相对应的输入要素作为起源的信息。
上述结构由以下方式构成将包括在输出模式中的各输出要素是输入模式中包括的是哪个输入要素作为起源的要素的信息,由二维行列存储器来表示。于是,对于二维行列存储器的各存储器要素,例如,通过存储1或者0的简单处理来能够将上述信息存储的同时,例如,通过关于各存储器要素进行逻辑运算来能够容易地掌握各行成分之间的关系。
还有,在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述临时存储部分,用于存储上述依赖关系存储部分中的多个行的存储器要素的逻辑或,上述组临时存储部分,用于存储上述输出侧组存储部分中的多个行的存储器要素的逻辑或、以及/或者与上述输入侧组存储部分中的多个输入要素相对应的存储器要素的逻辑或。
上述结构中,临时存储部分,以存储依赖关系存储部分中的多个存储器要素的逻辑或的方式构成。于是,在生成输入输出组的过程中,上述的依赖关系存储部分发生变更时,能够通过比较简单的结构来实现用于存储被变更的输出要素和输入要素的依赖关系的临时存储部分。另外,组的临时存储部分,以存储输出侧组存储部分以及/或者输入侧序号存储部分的存储器要素的逻辑或的方式构成。于是,在生成输入输出组的过程中,当上述依赖关系存储部发生变更时,能够通过比较简单的结构来实现用于存储被变更的输入输出组的信息的组临时存储部分。
另外,在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述输入输出组设定装置,还具有条件分支存储部分,该条件分支存储部分,在生成输入输出组过程中,检测出了条件分支指令时,存储该条件分支指令所依赖的输入要素的信息。
根据上述结构,能够将有关条件分支输入要素的信息存储在条件分支存储部分。因此,即使执行指令区间时发生条件分支,也能够准确地认知输出输入的依赖关系。
还有,在上述的结构中,本发明的数据处理装置,可以由以下方式构成由上述的第一运算装置来进行指令区间运算时,从寄存器以及/或者主存储装置进行了读取时,上述的输入输出生成装置进行以下处理,(1)进行了读取的寄存器以及/或者主存储装置的地址,作为输出要素登录在依赖关系存储部分时,将与该输出要素相对应的依赖关系存储部分的行成分、和上述临时存储部分各要素的逻辑或存储在该临时存储部分的同时,将与该输出要素相对应的输出侧组存储部分的行成分、和上述组临时存储部分的各要素的逻辑或存储在该组临时存储部分,(2)进行了读取的寄存器以及/或者主存储装置的地址,没有作为输出要素登录在依赖关系存储部分,而作为输入要素登录在依赖关系存储部分时,将与该输入要素相对应的依赖关系存储部分的列所对应的存储器要素设定为1、且将其它的存储器要素设定为0的信息存储在上述临时存储部分的同时,将与该输入要素相对应的输入侧组存储部分的各要素、和上述组临时存储部分的各要素的逻辑或存储在该组临时存储部分,以及(3)进行了读取的寄存器以及/或者主存储装置的地址,作为输出要素和输入要素均没被登录在依赖关系存储部分时,将该地址和值作为输入要素登录在依赖关系存储部分的同时,将与该输入要素相对应的依赖关系存储部分的列所对应的存储器要素设定为1、且将其它的存储器要素设定为0的信息存储在上述临时存储部分,向寄存器以及/或者主存储装置进行了写入时,上述的输入输出生成装置,(4)进行了写入的寄存器以及/或者主存储装置的地址,作为输出要素被登录了时,将与被登录的输出要素相对应的输出值更新为进行了写入的值的同时,将与已被登录了的输出要素相对应的依赖关系存储部分的行成分,置换成在该时刻已被临时存储了的、存储在上述临时存储部分中的信息的同时,根据存储在上述组临时存储部分中的信息,对与该输出要素相对应的输出侧组存储部分的信息、以及与该输出要素所依赖的各输入要素相对应的输入侧组存储部分的信息进行更新,以及(5)进行了写入的寄存器以及/或者主存储装置地址,没有作为输出要素被登录了时,将该地址和值作为输出要素登录在依赖关系存储部分的同时,将与该输出要素相对应的依赖关系存储部分的行成分,置换成在该时刻已被临时存储了的、存储在上述临时存储部分中的信息的同时,根据存储在上述组临时存储部分的信息,对与该输出要素相对应的输出侧组存储部分的信息、以及与该输出要素所依赖的各输入要素相对应的输入侧组存储部分的信息进行更新。
通过进行如上述的处理,某个指令区间被执行时的输入输出关系,即,将关于包括在输出模式中的各输出要素是将包括在输入模式中的哪个输入要素作为起源的要素的信息,能够准确地存储在依赖关系存储部分的二维行列存储器的同时,能够准确地进行输入输出组的设定。
在上述结构中,本发明的数据处理装置,可以由以下的方式上述指令区间存储装置,包括将多个上述输入模式作为树结构来存储的输入模式存储装置,其中,上述树结构将应该进行一致性比较的项目看作节点。
根据上述构成,关于多个的输入模式中共同的项目,能够作为一个节点来存储,故能够减少输入模式存储装置中的存储内容的冗长性。从而,可以减少指令区间存储装置所需要的存储容量,因此,能够降低数据处理装置本身的成本。
而且,输入模式存储装置,例如由联想检索装置构成时,因为过去的输入模式被分组而被登录的可能性较高,所以能够提高同时对多个输入模式进行检索的可能性。即,能够提高更有效地享受作为一般的联想检索装置的特性的长延迟、且高总处理能力的优点。另外,因为过去的输入模式被分组而被登录的可能性变高,故能提高再利用时的输入模式的准确率。
还有,在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述输入模式存储装置,通过使得上述输入模式当中的应该进行一致性比较的项目的值、和下次应该进行比较的项目对应而进行存储来实现上述树结构。
这种情况时,关于应该进行一致性比较的项目,可以按照顺序进行一致性比较,故能够实现存储输入模式,该输入模式将应该进行一致性比较的项目视为节点的树结构。
另外,在上述的结构中,本发明的数据处理装置由以下的方式构成上述输入模式存储装置,包括联想检索装置和附加存储装置,上述联想检索装置,包括一个以上的检索对象行列,该检索对象行列具有行该项目的键的键存储区域,上述的附加存储装置,在与上述检索对象行列相对应的每个对应行列中,具有存储下次应该进行联想检索的项目的检索项目指定区域。
这时,如果应该进行一致性比较的项目的值被输入到联想检索装置中,则值和键一致的检索对象行列进行单一匹配,根据与进行了单一匹配的检索对象行列相对应的附加存储装置中的对应行列,确定下次应该进行联想检索的项目。
在这里,各输入模式作为将应该进行一致性比较的项目视为节点的树结造而被存储,所以,在联想检索装置中,关于某个项目一致的检索对象,上述那样变为一个(单一匹配)。在市面上普遍地销售仅有单一匹配机构的联想检索存储器,但通过与单一匹配相同的性能能够报告多重匹配的联想检索存储器在市面上没有普遍地被销售。即,根据以上的结构,能够将市面上销售的联想检索存储器作为联想检索装置来利用,从而能够在更短的时间内以低成本实现本发明的数据处理装置。
为了解决以上的问题,本发明的数据处理装置,进行从主存储装置读取指令区间、且将进行了运算处理的结果写入主存储装置中的处理,其特征在于,包括第一运算装置,其基于从上述主存储装置读取的指令区间来进行运算;寄存器,其当由上述第一运算装置对上述主存储装置进行读出以及写入时被使用;输入输出存储装置,其存储作为多个的指令区间的执行结果的输入模式和输出模式,上述的第一运算装置,在执行指令区间时,如果该指令区间的输入模式和存储在上述输入输出存储装置的输入模式相一致,则进行将输出模式输出到寄存器以及/或者主存储装置的再利用处理,该输出模式与上述输入模式相对应地存储在上述的输入输出存储装置中,同时,还包括登录处理装置,其将由上述第一运算装置执行的指令区间的执行结果存储在上述输入输出存储装置时,对于包括在输入模式中的输入要素当中的应该进行预测的输入要素、和没有必要进行预测的输入要素进行区别,并将该区别信息登录在上述输入输出存储装置中;预测处理装置,其基于上述的区别信息,对于存储在上述的输入输出存储装置的输入要素当中的应该进行预测的输入要素的值的变化进行预测;第二运算装置,其基于由上述预测处理装置所预测的输入要素,事先执行相应的指令区间,并且,将由上述第二运算装置执行的指令区间的事先执行结果存储在上述输入输出存储装置中。
在上述的结构由以下的方式构成在输入输出存储装置中,存储有作为多个的指令区间的执行结果的输入模式和输出模式,在执行指令区间时,当该指令区间的输入模式和存储在输入输出存储装置中的输入模式一致时,进行再利用。并且,由预测处理装置来预测存储在输入输出存储装置的输入要素的以后的变化,并根据该预测结果,第二运算装置进行指令区间的事先执行。
在这里,像上述现有技术那样,如果简单地进行输入要素的预测,则预测的准确率会降低,从而存在基于预测的事先执行效果变得非常低的问题。与此相对,根据上述结构,首先,通过登录处理装置,区别包括在输入模式的输入要素中的应该进行预测处理的输入要素和没必要进行预测处理的输入要素。而且,预测处理装置,以如下方式构成,对于被判断出应该由登录处理装置来进行预测的输入要素进行预测。从而,提高预测的准确率变为可能,故能够实现更加有效的指令区间的事先执行。之后,出现相同指令列并进行与预测输入值相同的输入时,通过进行这样的事先执行,能够对于存储在指令列存储装置中的值进行再利用。
还有,在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述的登录处理装置,对于用于输入的上述寄存器的各个地址,作为栈指针或帧指针而被使用时,以及对于该地址的写入指令为常数组指令时,对于相应地址设定作为区别信息的常数标识,除了上述情况外,对于相应地址重新设定上述常数标识。
根据以上构成,用于输入的寄存器的地址当中,对于地址固定、且值被预测为单调变化的地址可以设定常数标识。因此,通过对于根据设定有常数标识的寄存器的地址的输入要素进行预测,能够提高预测的准确率。
在上述的构成中,本发明的数据处理装置,可以由以下的方式构成上述的登录处理装置,当输入要素第一次存储在上述输入输出存储装置时,对于该输入要素的地址,作为区别信息重新设定变更标识,并且,输入要素已存储在上述的输入输出存储装置之后,对于相应地址执行了存储指令时,对相应地址设定变更标识。
根据以上结构,输入输出装置中被存储,但之后一次也没进行了写入操作的地址,变为变更标识被再设定了的状态。这样的地址中被存储的内容就没有发生变化,所以对该地址就没有必要进行预测。即,通过在输入要素的地址中设置上述那样的变更标识,能够对有必要进行预测的地址进行预测。从而,可以有效地利用用于预测处理的硬件资源。
在上述的构成中,本发明的数据处理装置,可以由以下的方式构成上述的登录处理装置,当输入要素第一次存储在上述输入输出存储装置时,对于该输入要素的地址作为区别信息重新设定历史标识,而且,对于该地址执行加载指令时,如果在生成该地址的寄存器地址中设定有上述常数标识,则对于该地址设定历史标识。
根据以上的结构,对于输入输出存储装置中被存储的输入要素的地址执行加载指令时,在生成该地址的寄存器地址上设置有上述常数标识时,对于该地址设定历史标识。在这里,所谓设定有常数标识的寄存器地址,如上述那样,是指地址固定、且被预测为值单调变化的地址。因此,估计关于基于这样的寄存器地址而生成的地址进行预测的预测准确率会变高。即,通过设定了上述那样的历史标识,就能够适当地设定应该进行预测的地址。
另外,作为历史标识,对各地址可以建立按照文字的标识,以掩码的形式来实现历史标识也可以,该掩码,在由多个字节数据形成的地址当中表示作为历史存储对象的字节位置。
在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述的登录处理装置,当输入要素第一次存储在上述输入输出存储装置中时,对于该输入要素的地址,作为区别信息重新设定变更标识,并且,输入要素已存储在上述输入输出存储装置之后,对于相应地址执行了存储指令时,对相应地址设定变更标识,同时,上述的预测处理装置,关于存储在上述输入输出存储装置中的输入要素的地址当中的设定有上述的变更标识、且设定有历史标识的地址,进行输入要素变化的预测。
在这里,所谓设定有变更标识的地址,如上述,是指能够期待基于预测进行的效果的地址。还有,所谓设定有历史标识的地址,如上所述,是指能够期待预测准确率较高的地址。从而,根据上述的结构,只对于估计基于预测进行的效果较高的地址进行预测。这样,可以更加有效地利用用于预测处理的硬件资源。
另外,在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述的预测处理装置,只对于存储在上述输入输出存储装置中输入要素当中的、该输入要素的历史中值的变化量为非0的输入要素,进行输入要素值的变化预测。
根据以上的构成,只对于在历史中的值的变化量非0的输入要素,进行输入要素的值变化的预测。在此,所谓历史中的值的变化量为0的输入要素,是指估计不会发生变化的输入要素,所以没有必要对该输入要素进行预测。即,根据上述结构,能够只对有必要进行预测的地址进行预测。从而,能够有效地利用用于预测处理的硬件资源。
在上述的构成中,本发明的数据处理装置,可以由以下的方式构成上述登录处理装置,将由上述第一运算装置执行的指令区间的执行结果存储在上述输入输出存储装置时,对于包括在输入模式中的输入要素当中的应该进行预测的输入要素、和不需要进行预测的输入要素进行区别,并将该区别信息登录在上述的输入输出存储装置的同时,对于存储在上述输入输出存储装置中的输出模式中的输出要素当中的执行相应指令区间时已进行了存储的部分,进行存储次数的计数,并将该计数值存储在上述输入输出存储装置中,并且,上述的第二运算装置,根据由上述预测处理装置来预测的输入要素,对相应指令区间进行事先执行的同时,等待根据上述的计数值对相应输入要素进行的存储的次数,并从主存储进行读取来进行相应的指令区间的事先执行。
在上述结构中,登录处理装置,对于存储在输入输出存储装置中的输出模式中的输出要素当中的、该指令区间执行时被进行存储的输出要素,计其存储次数,并将该计数值存储在输入输出存储装置。而且,预测处理装置,由以下的方式构成等待基于上述计数值对相应的输入要素进行的存储次数的之后,从主存储器进行读取并进行相应的指令区间的事先执行。因此,对于例如,值的变化不恒定的输出要素进行预测变为困难,这时,如上述那样,通过等待被存储的存储次数之后从主存储器进行读取,能够在设定了适当的输入要素的值的情况下进行事先执行。
由以上的结构,可以更加准确的实现事先执行。通过进行这样的事先执行,当下次出现同样的指令列、进行和预测输入值同样的输入时,能够将再利用存储在输入输出存储装置的值的可能性提高一层。
另外,在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述的输入输出存储装置,包括输入输出记录区域,该输入输出记录区域临时记录作为由上述第一运算装置执行的指令区间的执行结果的输入模式和输出模式,而且上述的输入输出记录区域,具有对于各输出要素存储进行了存储的次数的存储计数器。
由上述结构,输入输出存储装置中设有输入输出记录区域,该输入输出记录区域中,设置有对于各输出要素存储进行存储的次数的存储计数器。因此,由第一运算装置执行指令区间时,执行该指令区间时,能够准确的记录对各输出要素进行的存储次数。
在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述的输入输出存储装置,具备历史存储区域,该历史存储区域对由上述的第一运算装置进行运算的每个指令区间存储过去执行结果的历史信息,而且,上述的登录处理装置,将记录在上述输入输出记录区域的执行结果存储在在上述历史存储区域的同时,对于记录在上述输入输出记录区域中的执行结果的输入模式中包括的输入要素当中的、与作为上次的执行结果登录在历史存储区域的输出要素具有相同地址的输入要素,将对应的上次的输出要素的存储计数器作为对于该输入要素的存储计数器而登录。
根据以上结构,首先,记录在输入输出记录区域的执行结果按顺序存储在每个指令区间中被设置的历史存储区域存储区域。之后,从输入输出记录区域向历史存储区域存储的输入模式中所包括的输入要素当中,对于与在历史存储区域中作为上次的执行结果被登录的输出要素相同地址的输入要素,对应的上次输出要素的存储计数器,作为对该输入要素的存储计数器来被登录。在这里,存储在历史存储区域的输入要素当中,与作为上次的执行结果的输出要素相同地址的输入要素,成为受到上次执行结果影响的输入要素。即,通过对于这样的输入要素设定如上述那样设定存储计数器,对相应输入要素进行预测时,能够准确的设定应该等待的存储的次数。
在上述的结构中,本发明的数据处理装置,可以由以下的方式构成,上述的输入输出存储装置,包括预测值存储区域,该预测值存储区域存储由上述预测处理装置预测的输入要素,上述的预测处理装置,关于存储在上述的历史存储区域中的输入要素当中的、在执行历史中的值的变化量恒定的输入要素进行值的预测并存储在上述预测值存储区域中。
根据上述结构,首先,在输入输出存储装置中设置有预测值存储区域。而且,预测处理装置,关于执行历史中的值的变化量为恒定的输入要素,进行值的预测并存储在预测值存储区域。在这里,历史中的指令区间的执行结果之间的值变化量(差分)为恒定的输入要素,其变化量以后也恒定的可能性较高,故可以根据这个进行预测。通过将这样进行预测的结果存储在预测值存储区域中,就能够设定预测准确的可能性较高的预测值。
还有,在上述的结构中,本发明的数据处理装置,可以由以下方式构成上述的输入输出存储装置,包括需要等待的地址存储区域,该需要等待的地址存储区域等待存储次数之后存储应该从主存储器中进行读取的输入要素,而且,上述的预测处理装置,关于存储在上述历史存储区域中的输入要素当中的、执行历史中的地址没有发生变化、且执行历史中的值的变化量不恒定的输入要素,将上述的存储计数器以及作为基于预测距离的值的等待计数器存储在上述需要等待的地址存储区域中。
根据以上结构,首先,在输入输出存储装置中设置有需要等待的地址存储区域。而且,预测处理装置,关于在执行历史中地址不发生变化并执行历史中的值变化量不恒定的输入要素,将上述的存储计数器、以及作为基于预测距离的值的等待计数器存储在需要等待的地址区域中。在这里,预测距离,表示该指令区间以后被重复执行时的从现在时刻的执行次数。所谓在执行历史中地址不发生变化、且执行历史期间的值的变化量为不恒定的输入要素,是指每当指令区间反复被执行时对于相应地址进行存储。从而,上述那样,通过基于存储计数器和预测距离而设定等待计数器,能够设定适当的应该等待的次数。
在上述的结构中,本发明的数据处理装置,可以由以下的方式构成上述的输入输出存储装置,包括需要等待的地址存储区域,该需要等待的地址存储区域等待存储的次数之后存储应该从主存储中进行读取的输入要素,而且,上述的预测处理装置,关于存储在上述历史存储区域中的输入要素当中的、执行历史中的地址本身发生变化、且各个地址的值也因发生存储而发生变化的输入要素,将作为基于上述存储计数器的值的等待计数器存储在上述需要等待的地址存储区域中。
根据以上结构,首先,在输入输出存储装置中设置有需要等待的地址存储区域。而且,预测处理装置,关于在执行历史中地址本身发生变化、且各个地址的值也因存储的发生而发生变化的输入要素,将作为基于上述的存储计数器的值的等待计数器存储在上述需要等待的地址存储区域中。所谓在执行历史中地址自身发生变化、且各个地址的值也因存储的发生而发生变化的输入要素,是指每当指令区间反复被执行时地址发生变化、且值的变化量也不恒定的。从而,上述那样,通过只基于存储计数器而设定等待计数器,能够设定适当的应该等待的次数。
另外,在上述的结构中,本发明的数据处理装置,可以由以下方式构成第二运算装置从主存储装置中读取值时,在上述的预测值存储区域中,存储计数器值没有被设定,并且,预测值为有效时将该预测值作为读取值,如果存储计数器比0还大,则等到存储计数器变为0,而在存储计数器变为0的那一时刻进行值的读取。
还有,在上述的构成中,本发明的数据处理装置,可以由以下方式构成第二运算装置,向主存储装置中写入值时,对其它的第二运算装置通知写入地址和值的同时,接受该通知的其它第二运算装置,在预测值存储区域中登录有相同地址时,从该输入要素的存储计数器仅减去1而存储写入值,存储计数器已经为0时,不做任何进行。


图1是表示本发明的第一实施方案的数据处理装置所具备的指令区间存储部分的概要结构的图。
图2是表示上述数据处理装置的概要结构的方框3是表示上述指令区间存储部分的联想检索动作的具体例的图。
图4(a)以树结构来表示在图4(b)中的联想检索动作的图。
图4(b)是表示上述指令区间存储部分的联想检索动作的其它具体例的图。
图5(a)以树结构的表示在图5(b)中的联想检索动作的图。
图5(b)是表示上述指令区间存储部分的联想检索动作的其它具体例的图。
图6是表示函数和循环作为嵌套结构状态的一个例子的图。
图7是表示在在函数的嵌套结构中内侧结构的寄存器输入输出成为外侧结构的寄存器输入输出的影响范围的图。
图8是表示在比较例中的RF和RB的概要结构的图。
图9是表示在比较例中的检索动作例的图。
图10是表示作为第二结构例的RW的概要结构的图。
图11是表示指令区间一个例子的图。
图12是表示在RW的第一结构例中的存储器概要结构的图。
图13是表示通过RW的第一结构例所生成的输入输出组作为树结构而被登录的状态的图。
图14是表示通过RW的第二结构例所生成的输入输出组作为树结构而被登录的状态的图。
图15是表示指令区间一个例子的图。
图16是表示作为是第一结构例的RW的存储器的概要结构的图。
图17是表示通过RW的第一结构例所生成的输入输出组作为树结构而被登录的状态的图。
图18是表示在图16中所示的输入输出组中对互相独立的输入组和输出组分别给予组序号的状态的图。
图19是表示根据组序号将图17中表示的树结构分割为多个树结构的状态的图。
图20是表示作为第三结构例的RW的概要结构的图。
图21是表示作为第四结构例的RW的概要结构的图。
图22是表示指令区间的其它例的图。
图23是表示根据组序号生成的多个树结构被存储的上述指令区间存储部分中的联想检索动作的具体例的图。
图24是表示通过本发明其它实施方案的数据处理装置所备有的RF/RB来实现的再利用表的图。
图25是表示上述数据处理装置的概要结构的方框图。
图26是表示指令被解码的结果为函数调用指令时的处理流程的流程图。
图27是表示指令被解码的结果为函数返回指令时的处理流程的流程图。
图28是表示指令被解码的结果为反向分支成立时的处理流程的流程图。
图29是表示指令被解码的结果为反向分支未成立时的处理流程的流程图。
图30是表示RW与RF和RB的关系的图。
图31是表示某个指令区间被执行时的RB中的实际登录状况的图。
图32是表示某个指令区间反复被执行时作为历史被登录在RB的例子的图。
图33是表示预测处理部分根据预测对地址A2和地址A5的值进行预测时作为预测登录信息记录在RB中的输入要素状态的图。
图34是表示本发明其它实施方案的数据处理装置所备的指令区间存储部分的RF和RB的概要结构的图。
图35是表示上述数据处理装置的概要结构的方框图。
图36(a)是表示指令区间一个例子的图。
图36(b)是简要表示图36(a)中所示的指令区间被执行时登录在RB中的输入地址以及输入数据、和输出地址以及输出数据的图。
图36(c)是表示接着图36(a)所示的指令区间而进行的第二次循环处理例的图。
图36(d)是简要表示登录在图36(c)中的RB的输入地址以及输入数据、和输出地址以及输出数据的图。
图36(e)是表示接着图36(c)所示的指令区间而进行的第三次循环处理例的图。
图36(f)是简要表示登录在图36(e)中的RB的输入地址以及输入数据、和输出地址以及输出数据的图。
图37图是表示图36(a)所示的指令区间被执行时的RB中的实际登录状况的图。
图38(a)是表示图36(a)所示的指令区间反复被执行时作为历史被登录在RB的例子的图。
图38(b)是表示预测处理部分对地址A1的值进行预测处理时作为预测登录信息记录在RB的输入要素状态的图。
图39是表示根据通过参考例进行的预测来进行的第二次和第三次循环处理中的事先执行结果的图。
图40(a)是表示RB中的输入输出记录行的例子的图。
图40(b)是表示历史存储行的例子的图。
图41(a)是表示图36(a)所示的指令区间反复被执行时的历史存储行的登录例的图。
图41(b)是表示预测处理部分根据图41(a)所示的历史来进行以下表示的预测处理时的预测值存储区域和需要等待的地址存储区域的例子的图。
图42是表示基于预测值进行事先执行时的执行例的图。
图43是表示指令区间存储部分的第二结构例的概要的图。
图44是表示图43所示的指令区间存储部分的联想检索动作的具体例的图。
图45是表示适用第二结构例时的数据处理装置的概要结构的图。
图46(a)是概念性地表示函数A调用函数B的结构的概念图。
图46(b)是表示执行图46(a)所示的程序结构时的主存储器中的内存印象图的图。
图47是表示函数A调用函数B时的在内存印象图中的参数和帧的概要的图。
图48是表示再利用一个函数所需要的现有的再利用表的图。
图49是表示指令区间一个例子的图。
图50是简要表示图49所示的指令区间被执行时的登录在RB中的输入地址以及输入数据、和输出地址以及输出数据的图。
图51是表示RB中的实际登录状况的图。
图52是表示图49所示的指令区间反复被执行时登录在RB的输入侧的历史例的图。
图53是表示根据现有输入预测的预测结果的图。
具体实施方案<实施方案1>
参照附图,对本发明的1实施方案进行如下说明。
(数据处理装置的构成)将本实施方案的数据处理装置的概要结构表示在图2中。如该图所示,该数据处理装置,包括MSP(Main Stream Processor主数据流处理器)1A、SSP(Shadow Stream Processor影射数据流处理器)1B、作为再利用表的指令区间的存储部分(指令区间存储装置)2、以及主存储器(主存储装置)3而构成,而且进行如下处理读取存储在主存储器3中的程序数据等而进行各种运算处理,并将运算结果写入主存储器3处理。另外,该图所示的结构为包括一个SSP1B的结构,但也可以是包括两个以上的结构。并且,该图所示的结构为具有SSP1B的结构,但也可以是不具有SSP1B的结构。对于具有SSP1B时的作用和效果,在后面进行说明。
指令区间存储部分2是存储器装置,其存储用于再利用程序中的函数和循环等指令区间的数据。关于该指令区间部分2的详细情况,在后面进行说明。
主存储器3是作为MSP1A和SSP1B的工作区域的存储器,例如由RAM(Random Access Memory随机存取存储器)等构成。例如从硬盘等外部存储装置、外部的I/O(input/output)装置等外部装置向主存储器3读取程序和数据等,而MSP1A和SSP1B,根据被读出到主存储器3中的数据进行运算。另外,基于MSP1A的运算结果被写入到主存储器3中,并该运算结果被送出到上述的外部装置中。
MSP1A,包括作为再利用存储装置的RW(输入输出生成装置)4A、运算器(第一运算装置)5A、寄存器6A、以及Cache7A而构成。还有,SSP1B,同样地,包括作为再利用存储装置的RW(第二运算装置)4B、运算器(第二运算装置)5B、寄存器6B、以及Cache/Local7B而构成。
RW4A和4B是再利用窗口,其将正在执行、且登录的RF(附加存储装置)以及RB(联想检索装置)(在后面进行说明)的各行列作为形环结构的栈而保持。该RW4A和4B,作为实际的硬件结构,通过由控制线的集合构成,该控制线激活指令区间存储部分2中的特定行列。另外,详细内容在后面进行说明,RW4A和4B,进行如下的处理关于执行了指令区间生成输入输出模式,并将该生成了的输入输出组作为执行结果登录到指令区间存储部分2。
运算器5A和5B,根据保持在寄存器6A和6B的数据进行运算处理,被称为ALU(arithmetic and logical unit运算器)。寄存器6A和6B是保持用于由运算器5A和5B进行的运算的存储装置。另外,本实施方案中,运算器5A和5B和寄存器6A和6B,是遵照SPARC构成方式的。Cache7A和7B作为主存储器3、MSP1A以及SSP1B之间的高速缓冲存储器而发挥功能。另外,在SSP1B中,Cache7B中包括作为局部存储器的Local7B。
(指令区间存储部分的结构)图1表示通过本实施方案的指令区间存储部分2来实现的再利用表。如该图所示,指令区间执行部分2,包括RB、RF、RO1(第二输出模式存储装置)、以及RO2(第一输出模式存储装置)而构成。
RB,包括Value(值存储区域),其存储作为应该进行比较的值的寄存器值或者主存储器输入值;以及Key(键存储区域),其存储键序号,并包括多个由Value和key组合的行列。
RF,包括终端标识E,其表示下次应该进行比较的寄存器序号或者主存储器地址不存在;需要比较的标识C,其表示下次应该进行比较的寄存器序号或者主存储器地址的内容被更新;R/M,其表示下次应该进行比较的对象是寄存器还是主存储器;Adr.(检索项目指定区域),其表示下次应该进行比较的寄存器序号或者主存储器地址;UP(父节点存储区域),其表示之前参照的行列序号的;Alt.(需要比较项目指定区域),其比下次应该进行比较的寄存器序号或者主存储器地址更优先地表示应该进行比较的寄存器序号或者主存储器地址;以及DN(需要比较的键指定区域),其表示优先地进行比较时所需要的键,而且,这些与RB中的各行列相对应地被设置。
RO1和RO2用于存储输出值,该输出值,是当根据RB和RF的检索结果判断出再利用可能时向主存储器以及/或者寄存器输出的输出值。RO1,与RF的各行列1对1对应地存储输出值和应该输出的地址。RO2,存储当仅用RO1不能存储全部输出值时没被存储的输出值和应该输出的地址。需要从RO2也读取输出值时,在RO1的相应行中表示有RO2中的输出值被存储的指针,使用该指针从RO2中读取输出值。
另外,RB和RF,分别由CAM(content-addressable memory可按内容寻址的存储器)和RAM(Random Access Memory随机存取存储器)构成。一般来说,如果给出地址就可以参照存储在该地址中的值的存储器,被称为RAM的存储器。另一方面,上述的所谓CAM是指被称为联想存储器的存储器,如果给出应该检索的内容就可以选择和该内容相一致的行。通常情况,将CAM和RAM做成组合来使用。
在这里,举例说明CAM和RAM的联合动作。在CAM中作为登录信息登录有[5,5,5,5,5]、[1,3,1,1,1,]、[1,3,3,5,2]、[6,6,6,6,6]等数字列,而RAM中与CAM的各数据列相对应地登录有[5,5]、[1,1]、[1,2]、[6,6]等数据。在这里,作为应该检索的数据列,如果将[1,3,3,5,2]输入到CAM,则一致的登录信息变为ON,并登录在RAM中的相应数据[1,2]被进行输出。通过与该具体例相同的结构和动作来实现上述RB和RF。
(比较例)在这里,作为比较例,对于如图8所示结构的RF和RB的动作进行说明。如该图所示,RF保持有状态表示标识V,其表示登录信息是否有效;LRU,其表示登录信息是否要替换的提示;F/L,其区别函数和循环;Start,其表示指令区间起始地址;End,其表示指令区间结束地址;Read,其表示关于应该参照的主存储器输入地址的信息;以及Write,其表示关于应该参照的主存储器输出地址的信息。
另外,RB中保持有状态表示标识V,其表示登录信息是否有效;LRU,其表示登录信息是否要替换的提示;SP,其表示调用指令区间之前的栈指针%sp;循环的结束地址(End);taken/not,其表示循环结束时分支方向;作为寄存器输入值的参数(Args.)(V有效登录信息,Val.值)和参数以外的寄存器输入值以及条件码(Regs.,CC);主存储器输入有效字节Mask;主存储器输入值Value,主存储器输出有效字节Mask;主存储器输出值Value;以及,作为寄存器输出值的返回值Return Values和返回值以外的寄存器输出值和条件码Regs.,CC(V有效登录信息,Val.值)。
执行函数或者循环时,判断对以前执行的指令区间是否可以进行再利用时,按以下步骤进行判断。首先,(1)检索登录在RF的函数或者循环的登录信息的起始地址Start中是否存在和相应函数或者循环的起始地址相一致的地址,如果存在一致的地址,则(2)登录在RB的相应登录信息中,选择一个或多个的登录信息,该登录信息,是表示有效登录信息的状态表示标识V被设定为登录结束状态的登录信息,并且和该登录信息中的参数args.和Regs.,CC所调用的函数或者循环相对应的值完全一致。而且之后,在选择了的登录信息中,(3)利用有关主存储器地址,即,最少一个Mask为有效的Read地址来按顺序参照主存储器,(4)对相应的函数或者循环的主存储器输入值和登录在RB的主存储器输入值进行比较。于是,当所有的输入一致时,(5)将存储在RB的Return Values写入到寄存器,对于主存储器输出地址,按顺序写入设定有各个有效标识Mask的主存储器输出值Value。通过以上的进行来实现函数或者循环的再利用。
关于如以上那样的比较例中的动作,参照图9进行更具体的说明。首先,对程序计数器(PC)和登录在RF的指令区间的起始地址(Region)进行比较,进而,对寄存器中的内容(Reg.)和登录在RB的寄存器输入值(Args.,Regs.,CC)进行比较。此时,判断出RB的登录信息01~04当中的登录信息03和登录信息04相一致。即,此时,变成多重匹配。
下面,应该关于主存储器地址A1进行比较,但对于主存储器地址A1,因为RF中表示有没有必要进行一致性比较的标识(0),故不进行一致性比较。即,登录信息03和登录信息04作为候补继续被保留着。
下面,关于主存储器地址A2进行比较。在这里,因为RF中表示有需要关于主存储器地址A2进行一致性比较的标识(1),故进行一致性比较。其结果,只有内容为“00”的登录信息03作为候补继续被保留。之后,作为进行一致性比较的项目,有主存储器地址A3和A4,但这两个中的任何一个都表示有表示不需要进行一致性比较的标识,故登录信息03变为需要比较的全部项目一致。从而,作为与登录信息03相对应的输出值的主存储器输出值和寄存器输出值输出到主存储器和寄存器中。
该比较例中的动作重点为如下(a)对登录在RB中的各个值和作为再利用对象的函数或者循环中的对应值进行比较时,应该对RB中的纵向的列按顺序进行一致性确认,但允许存在多个内容一致的登录信息(多重匹配);(b)只要最终选择了一个登录信息就允许检索过程中的多重匹配;(c)对RB中的列进行一致性确认的顺序是任意的,所以,例如可以在刚开始对寄存器输入值进行集中而比较。
还有,该比较例的情况,存在以下问题(d)在RB中,各登录信息中的项目数(横向长度)并不固定,从而不能追加被登录的项目以外的项目,另外,反过来说,与没有使用的项目相对应的存储器区域成为空区域,但不能进行有效的利用;(e)各登录信息,只要有一个项目的内容不同,就需要分别作为不同的登录信息来进行登录,所以使得RB中的存储器的利用效率不高。
另外,在以上的比较例的情况,作为构成RF和RB的存储器,其结构为横向较长的结构。例如,将存储器容量作为2Mbyte时,横向为2Kword,纵向为256个登录信息。
(将输入模式作为树结构而登录的第一结构例)上述比较例中,在RB中的作为各登录信息的横向的行,包括应该进行一致性比较的输入值的全部项目。即,将全部输入模式分别作为一个登录信息来登录在RB。
相对于此,在第一结构例中,将应该进行一致性比较的输入值的项目分割成短单位,并将各个比较部分作为节点、将输入模式作为树结构而登录在RF和RB中。而且,进行再利用时,通过按顺序选择一致的节点,最后判断是否可以进行再利用。换而言之,将在多个输入模式中共同存在的部分集中为一个,使其对应于RF和RB的一行。
通过这些,能够消除冗长性,并能够提高构成指令区间存储部分2的存储器的利用效率。而且,因为输入模式为树结构,故没有必要使一个输入模式对应于作为RB中的一个行的登录信息。从而,可以使应该进行一致性比较的输入值的项目的数量发生变化。
还有,RF和RB中登录有作为树结构的输入模式,因此在进行一致性比较时不进行多重匹配。即,作为指令区间存储部分2,如果是具有单一匹配机构的联想检索存储器就能实现。在这里,相对于仅有单一匹配机构的联想检索存储器普遍地在市面上被销售,能够通过与单一匹配相同的性能报告多重匹配的联想检索存储器没有普遍地在市面上被销售。即,如果根据本第一结构例中的指令区间存储部分2,就可以利用市面上销售的联想检索存储器,从而可以在短时间内、且以低成本实现与实施方案的数据处理装置。
下面,参照图3,对于上述第一结构例中指令区间存储部分2的联想检索动作的具体例进行说明。首先,指令区间的执行被检测时,程序计数器(PC)和寄存器内容(Reg.)被输入到RB中。然后,在RB中,根据联想搜索,被输入的这些值和被登录在RB的Value列中的指令区间起始地址和寄存器值被进行比较,而值相一致的唯一的行(行列)作为候补(匹配行列)被选择。该例中,RB中“01”的行列作为一致列被选择。
下面,作为一致列被选择的行列在RB中的地址“01”,作为编码结果被传到RF,而与键01相对应的RF中的行列被参照。在与键01相对应的RF中的行列,需要比较的标识为“0”、应该进行比较的主存储器地址是A1。即,关于主存储器地址A1,没有必要进行一致性比较。
接着,利用键01,对于RB中的Key的列进行检索。在该例中,在RB中的“03”行列作为匹配行列被选择。然后,作为编码结果键03被传到RF中,并与键03相对应的RF中的行列被参照。在与键03相对应的RF中的行列中,需要比较的标识为“1”、应该进行比较的主存储器地址是A2。即,关于主存储器地址A2,有必要进行一致性比较。在这里,在主存储器3中的主存储器地址A2的值是通过Cache7A而被读出,在RB中,Value是从主存储器3读出的值,并且,Key为“03”的列被检索。在图3所示的例中,Key为“03”的行列有“04”和“05”两个,但因为从主存储器3读出的值为“00”,故“05”的行列作为一致列被选择,并向RF传递作为编码结果的键05。
以上那样的处理反复被进行,在RF中,检测出表示下次应该进行比较的寄存器序号或者主存储器地址不存在的终端标识E时,判断出输入模式全部相一致,从而判断出可以对该指令区间进行再利用。然后,从终端标识E被检测的行列输出“Select Output”信号,并且存储在RO1和RO2中的与该行列相对应的输出值输出到寄存器6A和主存储器3。
如以上所示,在本第一结构例中的根据指令区间存储部分2的联想检索动作,具有以下特征。首先,表示内容一致的匹配行列,因为在RB中仅变为一个行列,所以将检索动作传输给下一个列时传递一个进行了编码的结果就可以。从而,连接RB和RF之间的信号线,可以只需要作为地址的编码结果的一组(N根)线。相对这些,在上述比较例中,因为在RB中多重匹配被允许了,故连接RB中的各个列的信号线,每行列都需要设置(2N根)。即,根据本第一结构例,能够大幅度地减少构成指令区间存储部分2的联想检索存储器中的信号线的数量。
另外,因为检索过程中只有单一匹配被允许,所以应该进行比较的项目的比较顺序,被限定于树结构中的参照顺序。即,对于寄存器值和存储器内容,需要一边按照参照顺序进行混合一边进行比较。
输入模式,通过以应该参照的Key的形式连接各项目,并由树结构登录在RB和RF中。还有,输入模式的项目,由终端标识来表示其终端。因此,使输入模式的项目数量可以发生变化,从而,根据应该登录在再利用表的指令区间的状态,可以灵活的设定输入模式的项目数量。另外,由于输入模式的项目数量不是固定的,所以消除不使用的项目不必要地占用存储区域的情况,从而,能够提高存储器区域的利用率。
还有,因为输入模式以树结构被登录,所以,对于项目内容重复的部分,多个输入模式可以共有一个行列。从而,可以提高存储器区域的利用率。
另外,在如以上结构的情况,作为构成RF和RB的存储器,构造变为纵向长的结构。例如,如果存储器容量设定为2Mbyte,则其横向变为8个字,纵向变为65536列。
(将输入模式作为树结构来登录的第二结构例)上述例中,在图1中所示的RF中,没有利用UP、Alt.、以及DN的项目。即,在上述例中,RF中不需要设定这些项目。与此相对,对于通过利用UP、Alt.、以及DN的项目来进一步使得联想检索动作高速化的第二结构例和其动作,进行如下的说明。
首先,在图4(b)中表示以下情况时的状态只对程序计数器(PC)和寄存器的内容(Reg.)进行比较,这些为一致时,不对主存储器进行比较而能够判断出可以对区间进行再利用。该状态中,首先,在RB的“01”行列中,PC和Reg.登录在Value中,并在RF的“01”列中,终端标识为“E”、需要比较的标识为“0”、应该进行比较的主存储器地址为“A1”、表示父节点序号的UP为“FF”。并且,在RB的“03”行列中,不存在Value值,而Key为“01”,在RF的“03”列中,终端标识为“E”、需要比较的标识为“0”、应该进行比较的主存储器地址为“A2”,表示父节点序号的UP为“FF”。以后,同样地,RB和RF中的“05”行列和“07”行列被登录,并各自终端标识为“E”、需要比较的标识为“0”。
在该状态,如果某指令区间的执行被检测,则PC和Reg.被输入到RB中,并作为匹配行列RB中“01”的行列被选择。之后,作为一致列被选择的行列的RB中的地址“01”,作为编码结果被传到RF,并与键01相对应的RF中的行列被参照。在与键01相对应的RF中的行列中,因为终端标识为“E”,所以可知下次应该进行比较的主存储器地址不存在。另外,因为需要比较的标识为“0”,所以可知对主存储器地址A1不需要进行比较。
从而,如图4(a)的树结构中所示那样,如果确认在S1中PC和Reg.相一致,则如Trl中表示的节点,在主存储器地址A1、A2、A3中不进行比较而输出对应的输出值。
RF和RB处于这种状况时,假设对主存储器地址A2进行了写入。该情况时,登录RF和RB中的输入模式时不需要对主存储器地址A2进行一致性比较,但是由于主存储器地址A2被变更,使得需要对主存储器地址A2进行一致性比较。从而,这时,如图5(b)所示,RF和RB被变更。
首先,内容被变更的主存储器地址A2作为键,对RF中的Adr.的列进行检索。由此,在RF中的“03”的行列被选择。然后,在被选择的“03”的行列中,需要比较的标识设定为“1”的同时,终端标识“E”被删除。
之后,通过参照“03”的行列中的UP,作为父节点的“01”的行列被确认。之后,在“01”行列中,内容被变更的主存储器地址A2,被写入到比下次应该进行比较的主存储器地址更优先地表示应该进行比较的主存储器地址表示为Alt.中,同时,终端标识“E”被删除。并且,在“01”行列中,“03”被写入到表示优先地进行比较时所需要的键的DN中。
如以上所述那样,RF和RB被重写时的联想检索动作为如下。某指令区间被检测时,首先,PC和Reg.被输入到RB中。之后,在RB中,由联想检索,对被输入的这些值和登录在RB的Value列中的指令区间起始地址以及寄存器值进行比较,并在RB中的“01”行列作为匹配行列被选择。
之后,在作为匹配行列被选择的列的RB中的地址“01”,作为编码结果被传递到RF中,并与键01相对应的RF中的行列被参照。在与键01相对应的RF中的行列,需要比较的标识为“0”、且应该比较的主存储器地址为A1。即,关于主存储器地址A1不需要进行一致性比较。
还有,比下次应该进行比较的主存储器地址更加优先地表示应该进行比较的主存储器地址的Alt.中,登录有主存储器地址A2,并确认表示优先地进行比较时所需要的键的DN中登录有“03”。此时,在主存储器3中的主存储器地址A2的值通过Cache7A来被读出,并在RB中,Value为从主存储器3读出的值,并且,Key变为DN中表示的“03”的行列被检索。
图5(b)所示的例中,Key为“03”的行列有“04”和“05”两个行列,但因为从主存储器3读取的值为“00”,所以“05”行列作为匹配行列而被选择,并键05作为编码结果被传递到RF。与键05对应的RF中的行列中,终端标识变为“E”,所以判断出输入模式全部一致,从而判断出对该指令区间能够进行再利用。之后,从检测了终端标识E的行列输出“Select Output”信号,并且,存储在RO1和RO2的、与该行列相对应的输出值输出到寄存器6A和主存储器3中。
根据以上那样进行的联想检索动作的第二结构例,在RF中设置有Alt.,其比下次应该进行比较的主存储器地址更加优先地表示应该进行比较的主存储器地址;以及DN,其表示优先地进行比较时所需要的键,所以,如图5(a)所示的树结构那样,能够跳过基于主存储器地址A1的内容和键01的检索而进行基于主存储器地址A2的内容和键03的检索。所以,能够减少检索动作的的处理步骤,从而能够谋求处理速度的高速化。
(输出值存储装置结构例)上述内容中,对于将指令区间的输入模式登录在RF和RB中并进行联想检索动作的处理进行了说明,在下面,对于输入模式被确认一致后存储作为再利用而被输出的输出值的装置的结构例进行说明。如在以上参照图1进行的说明,在指令区间存储部分2中设置有RO1和RO2,该RO1和RO2,作为再利用被判断出可能时存储向主存储器以及/或者寄存器输出的输出值的输出值存储装置。
输出值,可以根据从RF和RB输出的地址并通过参照存储输出值的RAM等的存储装置来得到。但是,和输入模式同样地,对于输出形式也最好使输出值的项目数量可以发生变化,所以对于输出值的存储方法也需要仔细考虑。
对于输入模式,以树结构登录在RF和RB中。然后,判断出在树结构末端的行列,即在终端标识E被登录的行列中,可以进行再利用。从而,通过向终端标识E被登录的各行列登录存储应该输出的输出值的存储装置中的指针,就可以在进行再利用时进行输出动作。
但是,被确认为输入模式全部一致的时刻,根据存储有输出值的指针而特定在输出值存储装置中的存储位置时,需要根据指针而特定存储位置的变换处理,从而成为使得处理速度下降的原因。
因此,本结构例中,作为输出值存储装置,设置了R01和RO2这两个存储装置。于是,RO1,与RF各列1对1地相对应地存储有输出值和应该输出的地址。即,判断出在登录有终端标识E的RF行列中可以进行再利用时,与该行列对应的RO1行列被选择,并输出值被输出。
但是,像这样,输出值存储装置,与RF的各行列1对1地相对应地存储有输出值和应该输出的地址时,对于在RF中的终端标识E没有被登录的RF行列,在RO1中存储区域被确保。还有,在RO1中与登录有终端标识E的RF的全部行列相对应地存储输出值,所以存在同样的内容在多个位置上被存储的所谓的冗长性。从而,RO1,虽然在高速进行处理的方面上是优秀的,但是在存储器的使用效率上并不好。
为了解除这个问题,设定较少的能登录在RO1的项目数量,即输出值和输出地址的组的数量(在图1的例中为两个)的同时,关于RO1中没登录完的输出值和输出地址的组,登录在RO2中,该RO2以用指针来指示存储区域的方式构成。
在RO2中,因为用指针指示存储区域,所以几乎不产生不被使用的存储器区域。还有,登录多个的输出值和输出地址的组时,可以按顺序用指针进行连接,所以能够使登录可能的输出值和输出地址的组的数量发生变化。进而,能够指示从RO1中的多个行列表示RO2中的相同的存储位置的指针,因此能够以RO1中的多个行列来共有RO2中的存储信息。从而,能够降低RO2中的存储内容的冗长性。
如上所述,通过设定作为输出值存储装置的RO1和RO2该两个装置,当输出值的项目较少时只利用RO1就可以实现高速处理,同时,当输出值的项目较多时利用可以使得项目数量发生变化的RO2。因此,如果根据以上的结构,则可以实现处理的高速性,并可以提高存储器的利用效率。
(对于指令区间存储部分的登录处理)在上述中,关于执行某个指令区间时进行再利用时的动作进行了说明。以下,对于如下情况下的动作进行说明当执行某个指令区间时,判断出不能进行再利用时,将该指令区间的输入输出登录在RF、RB、RO1以及RO2中。
首先,如果某个指令区间被检测,则PC和Reg.的值被输入到RB中。而且,在RB中,通过联想检索,对被输入了的这些值和登录在RB的Value列的指令区间起始地址以及寄存器值进行比较。在这里,如果判断出RB的value列中不存在与输入的值一致的值,则判断出对该指令区间不能进行再利用,从而由运算器5A来进行运算处理。而且,到该指令区间运算处理结束为止所使用的寄存器输入值、主存储器输入值、以及寄存器输出值,登录在RB、RF、RO1中,并根据需要登录在RO2中。在这里,向RB和RF进行登录时,以各项目与一个行列相对应的方式进行登录,使得形成如以上所述的树结构那样的结构。然后,在应该进行登录的输入模式的最后项目被登录的行列中,将RF的终端标识设定为“E”,并结束输入模式的登录。
另一方面,当与被输入的PC和Reg.相一致的值登录在RB的Value列中的时,与上述联想动作同样地,对下次应该进行一致性比较的项目进行一致性比较。就这样,对于登录在RB和RF中的输入模式和在该指令区间中的输入模式继续进行一致性比较,出现的不一致的项目的时刻,以新追加节点的形式将不一致的项目登录在RB和RF。之后,在应该登录的输入模式的最后的项目被登录的行列中,将RF的终端标识设定为“E”,并结束输入模式的登录。
输入模式的登录结束后,在与“E”作为终端标识的RF中的行列相对应的RO1的行列中,进行输出值和输出地址的登录。然后,作为输出值应该进行登录的项目在RO1中登录不完时,使用指针对RO2进行登录。通过以上的进行来完成指令区间的登录处理(指令区间执行时的输入输出组的生成)执行某指令区间时,向指令区间存储部分2登录执行结果,该执行结果相当于在该指令区间执行时,对于对寄存器以及/或者主存储器(以下,简称为寄存器/存储器)被执行的输入输出组。以下,关于怎样生成应该登录在指令区间存储部分2的输入输出组,进行说明。
将输入模式作为树结构来登录的上述的第一以及第二结构例的情况,输入输出组由RW4A和4B来生成,并根据被生成的输入输出组,向RB、RF、RO1以及RO2进行如上述的登录处理。RW4A和4B,监视在执行某指令区间时进行的从寄存器/存储器的读出、以及/或者向寄存器/存储器的写入,并根据这些而生成输入输出组。对于根据该RW4A和4B的输入输出组的生成方法,以下进行说明。另外,在以下的说明中,对RW4A进行了说明,但对RW4B也是相同的。
(RW的第一结构例之一)图12是表示作为第一结构例之一的RW4A的存储器概要结构的图。该图所示那样,RW4A包括PC,其存储指令区间的PC值;RWI,其存储输入地址和输入值;以及RWO存储器,其存储输出地址和输出值。执行某指令区间时的输入输出组被存储在该RW4A的存储器,之后,登录在指令区间存储部分2中。
首先,如果某个指令区间开始执行,则将该PC值存储到RW4A的PC中。之后,如果指令区间按顺序进行执行,则依次进行从寄存器/存储器读出、以及/或者向寄存器/存储器的写入。
指令区间执行时从寄存器/存储器进行读取时,由RW4A来进行以下处理。
(AR1)检索进行了读取的寄存器/存储器的地址是否登录在RWO。如果已登录在RWO,则表明对于作为输出值登录在输入输出组的值已经进行了读取,所以,没有必要作为输入值进行登录。即,不用将该地址向RWI登录而结束。
(AR2)进行了读取的寄存器/存储器的地址,没有登录在RWO时,检索该地址是否登录在RWI。如果已登录在RWI,则表明对于作为输入值登录在输入输出组的值已经进行了读取,所以,没有必要作为输入值再进行登录。即,不用将该地址登录到RWI而结束。
(AR3)进行了读取的寄存器/存储器的地址,既没有登录在RWO中也没有登录在RWI中时,将该地址和值作为输入地址和输入值登录在RWI。
还有,指令区间执行时向寄存器/存储器地址进行了写入时,由RW4A来进行以下处理。
(AW1)检索进行了写入操作的寄存器/存储器的地址是否登录在RWO。如果已登录在RWO,则表明已经对作为输出值登录在输入输出组的值进行了重写,所以,将与被登录的输出地址相对应的输出值更新为进行了写入的值而结束。
(AW2)进行了写入的寄存器/存储器的地址,没有登录在RWO时,将该地址和值作为输出地址和输出值登录在RWO。
由于以上的处理一直进行到该指令区间结束为止,所以,该指令区间的输入输出组由RW4A来生成。而被生成的输入输出组,通过上述的登录处理被登录在指令区间存储部分2。
在这里,作为指令区间的一个例,对于图11所示的指令区间执行时的例进行说明。在该图上,PC表示该指令区间在开始时的PC值。该PC值被存储在RW4A的PC中。
之后,在第一行,进行以下的指令读入存储在寄存器地址R1的值(00001000)的同时,读出主存储器地址(相当于地址A1)的值,该主存储器地址是进行了对上述读入值加上100的运算的结果。该时刻,因为地址R1既没有登录在RWO中也没有登录在RWI中,所以,地址R1和值(00001000)被登录在RWI中。另外,进行地址A1的值(----FF--)被读出并存储在寄存器的地址reg.的指令。该时刻,因为地址A1既没有登录在RWO中也没有登录在RWI中,所以地址A1和值(----FF--)被登录在RWI中。
还有,此时,因为地址reg.没有登录在RWO中,所以地址reg.和值(----FF--)被登录在RWO中。
接着,在第二行,进行从地址reg.读出值并写入主存储器的处理,从而值(----FF--)被写入地址B1。此时,地址reg.被登录在RWO中,故不进行向RWO的登录。另外,地址B1没有登录在RWO中,所以地址B1和值(----FF--)被登录在RWO中。
之后,在第三行,进行以下的指令读入存储在寄存器地址R1中的值(00001000)的同时,读出主存储器地址(相当于地址A2)的值,该主存储器地址是进行了对上述读入值加上200的运算的结果。该时刻,因为地址R1已登录在RWI中,所以不进行向RWI的登录。另外,进行地址A2的值(--01----)被读出并存储在寄存器的地址reg.中的指令。该时刻,因为地址A2既没有登录在RWO中也没有登录在RWI中,所以地址A2和值(--01----)被登录在RWI中。
还有,该时刻,地址reg.已经登录在RWO中,该RWO中的地址reg.的值更新为(--01----)。
接着,在第四行,进行从地址reg.读出值并写入主存储器的处理,从而值(--01----)被写入地址B2中。该时刻,地址reg.已经登录在RWO中,所以不需要向RWO进行登录。还有,地址B2没有登录在RWO中,所以将地址B2和值(--01----)登录在RWO中。
接着,在第五行,进行读出地址A3的值(5678----)并存储在寄存器地址reg.中的指令。该时刻,地址A3既没有登录在RWO中也没有登录在RWI中,所以将地址A3和值(5678----)登录在RWI中。
另外,该时刻,地址reg.已经登录在RWO中,该RWO中的地址reg.的值更新为(5678----)。
最后,在第六行,进行从地址reg.读出值并写入主存储器的处理,从而值(5678----)被写入地址B3。该时刻,地址reg.已经登录在RWO中,所以不需要向RWO进行登录。还有,地址B3没有登录在RWO中,所以将地址B3和值(5678----)登录在RWO中。通过以上的处理来生成图12所示的RW4A的输入输出组。
通过以上的进行而生成的输入输出组,作为如图13中所示的树结构,登录在指令区间存储部分2中。在该树结构中,已经被登录的输入模式作为从根节点到叶节点的一根路径保持在指令区间存储部分2中。以后,为了在执行指令区间之前判断该指令区间的输入模式是否与被登录的输入模式相同,如图3所示,反复进行从根节点按顺序参照记录在节点中的地址并利用联想检索结构来选择与得到的值一致的节点的操作。
(RW的第一结构例之二)图16是表示作为第一结构例之二的RW4A的存储器的概要结构的图。如该图所示,RW4A包括PC,其存储指令区间的PC值;RWI,其存储输入地址和输入值;以及RWO存储器,其存储输出地址和输出值。执行某指令区间时的输入输出组被存储在该RW4A的存储器,之后,被登录在指令区间存储部分2。
首先,如果某个指令区间开始执行,则该PC值被存储到RW4A中的PC。之后,如果按顺序进行指令区间的执行,则从寄存器/存储器进行读出、以及/或者按顺序进行向寄存器/存储器中的写入。
执行指令区间时从寄存器/存储器进行读取时,由RW4A来进行上述的(AR1)、(AR2)、(AR3)处理。还有,指令区间执行时向寄存器/存储器进行写入时,由RW4A来进行上述的(AW1)、(AW2)处理。
由于以上的处理一直进行到该指令区间结束为止,所以该指令区间的输入输出组由RW4A来生成。被生成的输入输出组,通过上述那样的登录处理登录在指令区间存储部分2。
在这里,作为指令区间的一个例,关于执行图15所示的指令区间时的例进行说明。该图中,PC表示该指令区间被开始时的PC值。该PC值被存储在RW4A的PC中。
在第一行的指令(以下,简称为第一指令)中,从存储器的地址A1加载的4个字节数据(00110000),被存储在寄存器中的地址R1中。该时刻,进行了读出的地址A1,既没有登录在RWO中也没有登录在RWI中,所以地址A1和数据(00110000)被登录在RWI中。另外,进行了写入的地址R1,没有登录在RWO中,所以地址R1和数据(00110000)被登录到RWO中。
接着,在第二指令中,从存储器的地址A2加载的一个字节数据(02),被存储在寄存器中的地址R2中。该时刻,进行了读出的地址A2,既没有登录在RWO中也没有登录在RWI中,所以地址A2和数据(02)被登录在RWI中。此时,对于在地址A2中的剩余的3字节,表示Don’t Care的意思的“-”被存储。另外,进行了写入的地址R2,因为没有登录在RWO中,所以地址R2和数据(02)被登录在RWO中。
接着,在第三指令中,从存储器的地址(A2+R2)加载的一个字节数据(22),被存储在寄存器的地址R2中。在这里,存储在地址R2中的数据为(02),所以进行了读出的存储器的地址变为(A2+02)。该时刻,进行了读出的地址(A2+02),既没有登录在RWO中也没有登录在RWI中,所以地址(A2+02)和数据(22)被登录在RWI中。此时,数据(22)被登录在地址A2的4字节中的成为地址(A2+02)的字节部分。即,在第二指令中,在成为地址A2的字节部分中登录有数据(02),所以,在成为地址(A2+01)和地址(A2+03)的字节部分中,继续被存储表示Don’t Care的意思的“一”。
另外,进行了写入的地址R2,已经登录在RWO中,故作为与地址R2对应的输出值,从数据(02)被重写为数据(22)。
接着,在第四指令中,从存储器的地址A3加载的一个字节数据(33),被存储在寄存器地址R3中。该时刻,进行了读出的地址A3,既没有登录在RWO中也没有登录在RWI中,所以地址A1和数据(33)被登录在RWI中。另外,进行了写入的地址R3没被登录在RWO中,所以,地址R3和数据(33)被登录在RWO中。
最后,在第五指令中,从存储器的地址(R1+R2)加载的一个字节数据(44),被存储在寄存器的地址R4中。在这里,地址R1和地址R2,是在指令区间内部被覆盖的寄存器,故不会成为指令区间的输入。另一方面,由(R1+R2)所生成的地址A4成为指令区间的输入。该地址A4,既没有登录在RWO中也没有登录在RWI中,所以地址A4和数据(44)被登录在RWI中。还有,进行了写入的地址R4,没被登录在RWO中,所以地址R4和数据(44)被登录到RWO中。通过以上处理来生成图16所示的RW4A的输入输出组。
通过以上的进行来生成的输入输出组,作为如图17所示的树结构,登录在指令区间存储部分2中。在该树结构中,已经被登录的输入模式作为从根节点到叶节点的一根路径被保持在指令区间存储部分2中。以后,为了在执行指令区间之前判断该指令区间的输入模式是否与已经被登录的输入模式相同,如图3所示,反复进行从根节点按顺序参照记录在节点的地址并利用联想检索机构来选择与得到的值一致的节点的操作。
(树结构联想检索的问题)上述的树结构的情况,对输入模式一个一个地按顺序进行读出并进行联想检索,发现一致的节点之后,对下一个节点进行选择。即,先进行的节点检索完全结束之后才开始对下一个节点进行检索。
在这里,由CAM/RAM构成的联想检索装置,一般具有长延迟、且高性能的特性。即,一般的联想检索装置,从一个检索输入被进行到被输出的期间较长,但具有可以对多个检索输入同时进行处理并输出的特性。相对于此,如以上所述,先进行的节点的检索完全结束之后才开始对下一个节点进行检索时,不能利用联想检索装置中的高性能的功效,从而,不能充分发挥联想检索装置的功效(问题1)。
另外,上述的树结构的情况,指令区间的输入模式按参照顺序作为一根路径来被实现,如果输入模式不是全部一致,则对输出不能进行再利用。在这里,假设如下的例。首先,执行某指令区间时的输入模式中,假设前半部分为模式A1、后半部分为模式A2、对应模式A1的输出为X1、对应模式A2的输出为X2。还有,在执行别的指令区间时的输入模式中,假设前半部分变为模式B1、后半部分为模式B2、对应模式B1的输出为Y1、对应模式B2的输出为Y2。之后,要执行某指令区间时的输入模式中,前半部分为模式A1、后半部分为模式B2时,对于输入模式的前半部分和后半部分可以分别进行再利用,但是在过去作为全部输入模式没有出现相同模式,所以,实际上是无法进行再利用(问题2)。
例如,在图16所示的例中,基于输入组中的地址A1和A2的输入模式和基于地址A3的输入模式,不具有相互依赖关系而是互相独立的。即,关于包括基于地址A1和A2的输入模式而不包括基于地址A3的输入模式的指令区间、以及包括基于地址A3的输入模式而不包括基于地址A1和A2的输入模式的指令区间,即使存在图16所示的输入模式的树结构,也无法进行再利用。
(RW的第二结构例)上述的两个问题,是由于将进行某个调出时刻的指令区间的输入模式以从根节点到叶节点的一根路径来表现而产生的。为了解决这些问题,需要采取以下的措施将输入模式分成组,每个组都构成保持过去的输入模式的树结构,进而,需要通过使得多个树结构的同时探索变为可能来能够有效地利用联想检索装置。例如,将如图13所示的树结构分割为图14所示的多个树结构,使得与从根节点到叶节点的路径对应的每个输入组进行独立的再利用。
还有,例如,对于图16所示的输入输出组,如图18所示,对互相独立的输入组和输出组分别给予组序号。即,对基于地址A1的输入模式、基于地址A2的输入模式、以及基于地址A4的输入模式给予组序号(grpid)0,并对基于地址A3的输入模式给予序号(grpid)2。另外,对基于地址R1的输出模式、基于地址R2的输出模式、以及基于地址R4的输出模式给予组序号(grpid)0,并对基于地址R3的输出模式给予组序号(grpid)2。
接着,根据组序号,将图17所示的树结构分割为如图19所示的多个树结构。这样,可以对不同组的输入模式进行独立的登录,并可以对与从根节点到叶节点的路径相对应的每个输入组进行独立的再利用的同时,可以进行并行检索。
如上述,为了实现树结构的分割,需要各输入组之间不存在数据依赖关系。即,当将某个输入模式分割为组A和组B时,如果组A的输入依赖于组B的输入,或者,组B的输入依赖于组A的输入,那么,即使进行了组分割,对各组能够进行独立的再利用的可能性变为极其低。
要分割不存在数据依赖关系的组,需要在生成输入模式时对数据的依赖关系进行解析。即,RW4A,对数据的依赖关系进行解析之后,将输入模式分割为不存在数据依赖关系的组而生成输入输出组就可以了。
图10表示作为实现上述内容的第二结构例的RW4A的概要结构。如该图所示,RW4A包括PC,其存储指令区间PC值;RWI,其存储输入地址和输入值;RWO,其存储输出地址和输出值;依赖关系存储部分M;行间逻辑与比较部分(输入输出组设定装置)MR;以及组ID存储部分ID。
依赖关系存储部分M,是二维排列存储器,其以各存储器要素中存储有0或者1的方式构成。还有,在依赖关系存储部分M中,各列对应于登录在RWI中的各输入地址和输入值,而各行对应于登录在RWO中的各输出地址和输出值。而且,依赖关系存储部分M,表示各输出地址和输出值将哪个输入地址和输入值作为起源的信息。
行间逻辑与比较部分MR是一种运算部分,其进行存储在依赖关系存储部分M中的各行成分间的逻辑与运算,并设定由包括一个以上输出地址和输出值的输出模式、以及包括一个以上输入地址和输入值的输入模式构成的输入输出组。关于该行间逻辑与比较部分MR的逻辑与运算的详细情况,在后边进行说明。
组ID存储部分的ID是一种存储器,其根据行间逻辑与比较部分MR的逻辑与运算结果,存储向与依赖关系存储部分M的各列对应的输入地址和输入值给出的组ID。关于该组ID的详细情况,在后面进行说明。
如果某指令区间的执行开始,则首先作为在依赖关系存储部分M中各存储器要素的初期值全部被设定为0。之后,该指令区间的PC值被存储在RW4A的PC中。之后,如果指令区间按顺序被执行,则按顺序进行从寄存器/存储器进行读取、以及/或者向寄存器/存储器中写入。
指令区间执行时从寄存器/存储器进行了读取时,由RW4A进行以下处理。
(BR1)检索进行了读取的寄存器/存储器地址是否被登录在RWO中。如果已经登录在RWO中,则表明已经对作为输出值被登录在输入输出组值进行了读取,所以没有必要作为输入值进行登录。即,该地址不必登录在RWI中而结束。
这时,与已经登录在RWO中的地址相对应的依赖关系存储部分M的行成分的各存储器要素的值被取出,而作为暂定行列A(x)被存储,该暂定行列A(x)是只有行成分的一元行列。在这里,x是按照暂定行列A被生成的顺序来给出的序号。该暂定行列A(x),在后述的写入处理结束的时刻被进行初始化。另外,该暂定行列A(x),虽然在图10中没有表示,但被存储在可以存储多个暂定行列A(x)的暂定行列存储存储器中。
(BR2)进行了读取的寄存器/存储器地址,没有被登录在RWO中时,检索该地址是否被登录在RWI中。如果已经登录在RWI中,则表明已经对作为输入值被登录在输入输出组的值进行了读取,所以没有必要进而作为输入值进行登录。即,该地址不必登录在RWI中而结束。
这时,将与RWI中的已经被登录的地址相对应的依赖关系存储部分M的列所对应的存储器要素作为1、将其它的存储器要素作为0的暂定行列A(x)被存储。
(BR3)进行了读取的寄存器/存储器地址,既没有登录在RWO中也没有登录在RWI中时,该地址和值作为输入地址和输入值被登录在RWI中。
此时,与新追加的输入地址和输入值(登录信息)相对应的依赖关系存储部分M的列所对应的存储器要素作为1、且将其它的存储器要素作为0在暂定行列A(x)被存储。
还有,指令区间向寄存器/存储器进行了写入时,由RW4A来进行以下处理。
(BW1)检索进行了写入的寄存器/存储器地址是否被登录在RWO中。如果已经登录在RWO中,则表明已经对作为输出值被登录在输入输出组中的值进行了重写,所以,将与被登录的输出地址相对应的输出值更新为进行了写入的值,而结束操作。
这时,与已经被登录在RWO中的地址相对应的依赖关系存储部分M的行成分,置换成在该时刻已被存储的全部暂定行列A(x)的逻辑或。由此,对于已经登录在RWO中的输出地址/值,作为输出的起源的输入地址/值的模式,由与该输出地址对应的依赖关系存储部分M的行成分来被表示。在完成写入处理以及向暂定行列A(x)的逻辑或的置换以后,暂定行列A(x)全部被进行初始化。
(BW2)进行了写入的寄存器/存储器的地址没有登录在RWO中时,将该地址和值作为输出地址和输出值而登录在RWO中。
此时,新追加的输出地址和输出值(登录信息)所对应的依赖关系存储部分M的行成分,置换成在该时刻已被存储的全部暂定行列A(x)的逻辑或。由此,对于新登录在RWO中的输出地址/值成为输出的起源的输入地址/值的模式,由与该输出地址对应的依赖关系存储部分M的行成分来被表示。在完成写入处理以及向暂定行列A(x)的逻辑或的置换以后,暂定行列A(x)全部被进行初始化。
在这里,作为指令区间的一个例,对于对图11所示的指令区间执行时的例进行说明。在该图中,PC表示开始执行该指令区间时的PC值。该PC值被存储在RW4A的PC中。
之后,在第一行,值(00001000)被存储在寄存器地址R1的同时,读出主存储器地址(相当于地址A1)的值,该主存储器地址是进行了对上述读入值加上100的运算的结果。该时刻,因为地址R1既没有登录在RW0中也没有登录在RWI中,所以,地址R1和值(00001000)被登录在RWI中。
此时,将与地址R1相对应的依赖关系存储部分M的列所对应的存储器要素作为1、且将其它的存储器要素作为0的暂定行列A(1) 被存储。
还有,进行读出地址A1的值(----FF--)并存储在寄存器的地址reg.的指令。该时刻,因为地址A1既没有登录在RWO中也没有登录在RWI中,所以地址A1和值(----FF--)被登录在RWI中。
此时,将与地址A1相对应的依赖关系存储部分M所对应的列的存储器要素作为1、且将其它的存储器要素作为0的暂定行列A(2) 被存储。
还有,该时刻,因为地址reg.没被登录在RWO中,所以地址reg.和值(----FF--)被登录在RWO中。此时,与新追加的地址reg.相对应的依赖关系存储部分M的行成分,在该时刻被置换为已被存储的全部暂定行列A(1)~A(2)的逻辑或 。之后,暂定行列A(x)被进行初始化。
之后,在第二行,进行从地址reg.读出值而写入主存储器的处理,从而值(----FF--)被写入地址B1中。该时刻,因为地址reg.已被登录在RWO中,所以不进行向RWO中的登录。此时,与地址reg.相对应的依赖关系存储部分M的行成分被取出,并暂定行列A(1) 被存储。
还有,因为地址B1没被登录在RWO中,所以地址B1和值(----FF--)被登录在RWO中。
此时,与新追加的输出地址相对应的依赖关系存储部分M的行成分,被置换成在该时刻已被存储的全部暂定行列A(1)的逻辑或 。之后,暂定行列A(x)被进行初始化。
之后,在第三行,进行以下的指令读入存储在寄存器地址R1中的值(00001000)的同时,读出主存储器地址(相当于地址A2)的值,该主存储器地址是进行了对上述读入值加上200的运算的结果。该时刻,因为地址R1已登录在RWI中,所以不进行向RWI的登录。
此时,将与地址R1对应的依赖关系存储部分M的列所对应的存储器要素作为1、且将其它的存储器要素作为0的暂定行列A(1) 被存储。
另外,进行读出地址A2的值(--01----)并存储在寄存器的地址reg.中的指令。该时刻,因为地址A2既没有登录在RWO中也没有登录在RWI中,所以地址A2和值(--01----)被登录在RWI中。
此时,将与地址A2对应的依赖关系存储部分M的列所对应的存储器要素作为1、且将其它的存储器要素作为0的暂定行列A(2) 被存储。
还有,该时刻,地址reg.被登录在RWO中,而该RWO中的地址reg.的值被更新为(--01----)。此时,与被更新的地址reg.相对应的依赖关系存储部分M的行成分,被置换成在该时刻已被存储的全部暂定行列A(1)~A(2)的逻辑或 。之后,暂定行列A(x)被进行初始化。
接着,在第四行,进行从地址reg.读出值而写入主存储器中的处理,从而值(--01----)被写入地址B2中。此时,因为地址reg.已被登录在RWO中,所以不进行向RWO的登录。此时,与地址reg.相对应的依赖关系存储部分M的行成分被取出,并暂定行列A(1) 被存储。
还有,因为地址B2没被登录在RWO中,所以地址B2和值(--01----)被登录在RWO中。
此时,与新追加的输出地址相对应的依赖关系存储部分M的行成分,被置换成在该时刻已被存储的全部暂定行列A(1)的逻辑或 。之后,暂定行列A(x)被进行初始化。
之后,在第五行,进行读出地址A3的值(5678----)并存储在寄存器地址reg.中的指令。该时刻,因为地址A3既没有登录在RWO中也没有登录在RWI中,所以地址A3和值(5678----)被登录在RWI中。
此时,将与地址A3对应的依赖关系存储部分M的列所对应的存储器要素作为1、且将其它的存储器要素作为0的暂定行列A(1) 被存储。
还有,此时,地址reg.被登录在RWO中,而该RWO中的地址reg.的值被更新为值(5678----)。该时刻,与被更新的地址reg.相对应的依赖关系存储部分M的行成分,被置换成在该时刻已被存储的全部暂定行列A(1)的逻辑或 。之后,暂定行列A(x)被进行初始化。
最后,在第六行,进行从地址reg.中读出值而写入主存储器中的处理,从而值(5678----)被写入地址B3中。该时刻,因为地址reg.已被登录在RWO中,所以不进行向RWO的登录。此时,对应于地址reg.的依赖关系存储部分M的行成分被取出,并暂定行列A(1) 被存储。
还有,因为地址B3没被登录在RWO中,所以地址B3和值(5678----)被登录在RWO中。
此时,与新追加的输出地址相对应的依赖关系存储部分M的行成分,被置换成在该时刻已被存储的全部暂定行列A(1)的逻辑或 。之后,暂定行列A(x)被进行初始化。通过以上的处理来生成图10所示的RW4A的输入输出组。
如上述,通过生成依赖关系存储部分M来完成指令区间执行时,能得到以下信息。
(Rs1)在依赖关系存储部分M的行成分中,由1来表示成为对应的输出地址/值的起源的输入地址/值。
(Rs2)在某行成分Ma中被表示1的输入地址/值的组形成一个输入组,而该输入组一致时,能够进行再利用的输出地址/值是与行成分Ma相对应的输出地址/值。
(Rs3)“某行成分Ma的反转”和“某行成分Mb”的逻辑与全部为0时,在Ma中1的模式包括Mb中1的模式。即,属于Ma的输入地址/值的组形成一个输入组的同时,当该输入组一致时可以进行再利用的输出地址/值成为与Ma对应的输出地址/值以及与Mb对应的输出地址/值。
(Rs4)“某行成分Ma”和“某行成分Mb”的逻辑与全部为0时,属于Ma的输入地址/值和属于Mb的输入地址/值是相互独立的。
根据以上的信息,RW4A将输入输出组合分割成多个输入输出组。首先,作为有关上述(Rs3)的处理,在依赖关系存储部分M中,“某一行成分Ma的反转”和“某一行成分Mb”的逻辑与全部成为0的行成分的组通过行间逻辑与比较部分MR而被抽出。被抽出的行成分的组当中,选择包括输入地址/值的组最多的行成分,即其它行成分中的包括全部输入地址/值的行成分作为上位行成分而被选择。然后,删除被抽出的行成分当中的上位行成分以外的下位行成分。通过该处理,能够排除冗长的输入输出组。
接着,在删除下位行成分的状态中,作为有关上述(Rs4)的处理,“某一行成分Ma”和“某一行成分Mb”的逻辑与全部成为0的行成分的组,通过行间逻辑与比较部分MR而被抽出。然后,进一步抽出被抽出的行成分当中的对于其它任何行成分的逻辑与全部成为0的行成分。因为在这里抽出的行成分对于其它的任何行成分也不具有依赖关系,故将其设定为独立行成分,将其它行成分设定为非独立行成分。
独立行成分,通过抽出分别对应的输入地址/值的组以及输出地址/值的组,而被设定为一个输入输出组。另一方面,非独立行成分,通过以下两个处理中的任何一个,而被设定为输入输出组。
第一处理是,将包括在全部非独立行成分中的输入地址/值的组以及输出地址/值的组的总和设定为一个输入输出组的处理。第二处理是,将各个非独立成分直接设定为输入/输出的组的处理。进行第一处理时,因为不需要将输入输出组的数量增加为所需要数量的以上,故能够减少指令区间存储部分2中的存储器使用容量。另一方面,进行第二处理时,虽然存在因输入输出组的数量变得较多而指令区间存储部分2中的存储器使用容量变得较大的问题,但在指令区间存储部分2中,能够增大应该同时进行检索的树结构的数量,从而能够利用联想检索装置中的高处理能力。
如果通过如以上的进行来设定输入输出组,则行间逻辑比较部分MR,根据这些向各输入输出组给予组ID,并将表示登录在RWI中的各个输入地址/值为包括在哪个组ID的输入地址/值的信息存储在组ID存储部分ID中。根据这些,能够通过观察组ID存储部分ID的内容来特定各输入输出组中的输入模式。
如上所述,RW4A生成一个以上的输入输出组,并作为执行结果将生成的输入输出值登录在指令区间存储部分2。通过这样的处理,一个指令区间的执行结果作为一个以上的输入输出组登录在指令区间存储部分2中。从而,通过再利用来执行某一指令区间时,即使以前执行的指令区间的输入模式的只有一部分一致的情况下,也能够提高可以进行再利用的概率。还有,因为能够提高同时应该进行检索的树结构存在多个的概率,故能够利用联想检索装置中的高处理能力,从而能够期待处理速度的提高。
另外,在本实施方案中,由RW4A所生成的输出输入组,以被登录在将输入模式作为树结构而登录的指令区间存储部分2中的方式构成,但并不仅限定于此,即,如果是能够以对指令区间的执行结果可以进行再利用的方式登录由RW4A所生成的输入输出组的指令区间存储部分,则能够适用本实施方案中的RW4A。
(RW的第三结构例)如果根据上述RW的第二结构例,通过行间逻辑与比较部分MR利用依赖关系存储部分M来进行计算,能够将一个指令区间的执行结果作为一个以上的输入输出组而登录在指令区间存储部分2中。但是,指令区间的执行结构中,如果输出地址以及输出值的模式的数量变得多,则依赖关系存储部分M的行数变得多。这种情况下,存在如下问题行间逻辑与比较部分MR的逻辑与运算变得庞大,从而行间逻辑与比较部分MR的电路规模也变得很大。以下所示的RW的第三结构例是为了解决该问题而提出的。
图20示出了作为第三结构例的RW4A的概要结构。如该图所示,RW4A包括PC,其存储指令区间的指令区间PC值;RWI,其存储输入地址以及输入值;RWO,其存储输出地址以及输出值;依赖关系存储部分M;行临时存储部分(临时存储部分)tmp00;输入侧序号存储部分(输入侧组存储部分)rgpid;输出侧序号存储部分(输出侧组存储部分)wgpid;序号管理部分(组管理部分)busy;以及序号临时存储部分(组临时存储部分)tmp01。
依赖关系存储部分M,是将输入侧作成区分符[I]、且将输出侧作为区分符[O]的二维排列的存储器,并以各存储器要素中存储0或1的方式构成。还有,在依赖关系存储部分M中,各列分别与登录在RWI中的输入地址以及输入值的组对应,而各行分别与登录在RWO中的输出地址以及输出值的组对应。而且,依赖关系存储部分M表示各输出地址以及输出值的组将哪个输入地址以及输入值的组作为起源的信息。
行临时存储部分tmp00是临时存储从依赖关系存储部分M读出的行的存储器。输入侧序号存储部分rgpid是存储向各个输入地址以及输入值的组给予的组序号的存储器。输出侧序号存储部分wgpid是存储向各个输出地址以及输出值的组的组序号的存储器。在执行完指令区间时,(1)根据对应的输入侧序号存储部分rgpid中表示有1的比特位置而获得各输入数据所属的组序号,(2)根据对应的输出侧序号存储部分wgpid中表示有1的比特位置而获得各输出数据所属的组序号。
序号管理部分busy是管理组序号的空状况的存储器。序号临时存储部分tmp01是临时存储从输入侧序号存储部分rgpid以及输出侧序号存储部分wgpid读出的组序号信息的存储器。
在开始执行指令区间之前,对依赖关系存储部分M、行临时存储部分tmp00、输入侧序号存储部分rgpid、输出侧序号存储部分wgpid、序号管理部分busy、以及序号临时存储部分tmp01全部被进行初始化而变为0。于是,该指令区间的PC值被存储在RW4A的PC中。之后,如果按顺序执行指令区间,则按顺序从寄存器/存储器进行读出、以及/或向寄存器/存储器进行写入。
在执行指令区间时从寄存器/存储器进行了读出时,由RW4A来进行以下的处理。
(CR1)检索进行了读出的寄存器/存储器的地址是否登录在RWO中。如果登录在RWO中,则表面已经读出了作为输出值的已被登录在输入输出组的值,故不需要作为输入值进行登录。即,并没有将该地址登录在RWI中而结束。
此时,取出与已经登录在RWO中的地址相对应的依赖关系存储部分M的行成分的各个存储器要素的值,而算出与存储在行临时存储部分tmp00中的各要素的逻辑或。将作为计算结果的逻辑或存储在行临时存储部分tmp00中。即,在表示进行了读出的数据起源的行临时存储部分tmp00中存储输入信息。
还有,取出与已经登录在RWO中的地址相对应的输出侧序号存储部分wgpid的行成分的各要素的值,而算出与存储在序号临时存储部分tmp01中的各要素的逻辑或。将作为该运算结果的逻辑或存储在序号临时存储部分tmp01中。即,在表示进行了读出的数据所属组的序号临时存储部分tmp01中存储输入信息。
(CR2)进行了读出的寄存器/存储器的地址没有登录在RWO中时,检索该地址是否登录在RWI中。如果已经登录在RWI中时,则表面已经读出了作为输入值已被登录在输入输出组的值,故不需要作为输入值还进行登录。即,并没有将该地址登录在RWI中而结束。
此时,将行临时存储部分tmp00中的与输入侧的已登录位置[I]相对应的存储器要素的比特作为1。即,新生成表示进行了读出的数据的起源的行临时存储部分tmp00。
还有,读出与在行临时存储部分tmp00中比特被设定为1的存储器要素的列位置相对应的输入侧序号存储部分rgpid,而算出与存储在序号临时存储部分tmp01中的要素的逻辑或。将作为该运算结果的逻辑或存储在序号临时存储部分tmp01中。即,输入信息被存储在表示进行了读出的数据所属的组的序号临时存储部分tmp01中。
(CR3)进行了读出的寄存器/存储器的地址既没有登录在RWO也没有登录在RWI中时,将该地址和值作为输入地址和输入值登录在RWI中。
此时,将行临时存储部分tmp00中的、与新登录的位置[I]相对应的存储器要素的比特作为1。即,新作成表示进行了读出的数据的起源的行临时存储部分tmp00。
还有,在执行指令区间时向寄存器/存储器进行了写入时,由RW4A来进行以下的处理。
还有,读出与在行临时存储部分tmp00中的比特被设定为1的存储要素的列位置相对应的输入侧序号存储部分rgpid,而算出与存储在序号临时存储部分tmp01中的要素的逻辑或。将作为该运算结果的逻辑或存储在序号临时存储部分tmp01中。即,将输入信息存储在表示进行了读出的数据所属的组的序号临时存储部分tmp01中。
(CW1)检索进行了写入的寄存器/存储器的地址是否登录在RWO中。如果已经登录在RWO中时,则表面已经进行了作为输出值已被登录在输入输出组的值的重写,故将与被登录的输出地址相对应的输出值更新为进行了写入的值而结束。
此时,与RWO中的已被登录的地址相对应的依赖关系存储部分M的行成分的各个存储要素的值,被重写成该指令区间执行时所生成的行临时存储部分tmp00中被存储的各要素的值。即,进行了写入的数据的起源被置换为行临时存储部分tmp00的值。
在这里,检查序号临时存储部分tmp01的各要素的值。之后,如果序号临时存储部分tmp01的所有要素为0,则序号临时存储部分tmp01的列位置被设定为1,该序号临时存储部分tmp01与在序号管理部分busy中的作为空组序号的一个列位置相对应。具体地讲,在序号管理部分busy的各要素中,将与相当于最靠左边的0的列位置相对应的序号临时存储部分tmp01的列位置被设定为1。另外,此时,与在序号临时存储部分tmp01中被设定为1的列位置相对应的序号管理部分busy的列位置被设定为1。
另一方面,在序号临时存储部分tmp01要素中存在1时,与最靠左边的1相对应的列位置被确认为应该使用的组序号。之后,序号临时存储部分tmp01的全部要素当中的留下最靠左边位置的1、且将剩下的要素作为0的值,分别被写入到输出侧序号存储部分wgpid中的已登录位置[O],以及行临时存储部分tmp00的相应位置为1的输入侧序号存储部分rgpid的相应位置中。
进而,分别对序号临时存储部分tmp01的全部要素中的除去最靠左边位置的1而剩下的值、和输入侧序号存储部分rgpid全体以及输出侧序号存储部分wgpid全体进行比较,而求出各要素的逻辑与。之后,逻辑与的结果,对于保持有变成1的要素的输入侧序号存储部分rgpid和输出侧序号存储部分wgpid的列位置,通过将相应要素再设定为0来设定在序号临时存储部分tmp01的全体中留下在最靠左边位置的1、且将其它作为0的值。
(CW2)进行了写入的寄存器/存储器的地址没有登录在RWO中时,将该地址和值作为输出地址和输出值登录在RWO中。
此时,与新追加的输出地址和输出值(登录信息)相对应的依赖关系存储部分M的行成分的各存储器要素的值,被重写为存储在执行该指令区间时被生成的行临时存储部分tmp00中的各要素的值。即,将写入了数据的起源置换成行临时存储部分tmp00的值。
在这里,与上述的CW2同样,检查序号临时存储部分tmp01的各要素的值。之后,序号临时存储部分tmp01的全部要素都为0时,与序号管理部分busy中的作为空组序号的一个列位置相对应的序号临时存储部分tmp01的列位置被设定为1。具体地讲,与在序号管理部分busy的各要素当中相当于最靠左边的0的列位置相对应的序号临时存储部分tmp01中的列位置被设定为1。另外,此时,与在序号临时存储部分tmp01中被设定为1的列位置相对应的序号管理部分busy中列位置被设定为1。
另一方面,在序号临时存储部分tmp01的要素中存在1时,与最靠左边的1相对应的列位置被确认为应该使用的组序号。之后,序号临时存储部分tmp01的所有的要素当中,留下最靠左边的位置的1、且将剩余的要素作为0的值,分别被写入到输出侧序号存储部分wgpid中的已登录位置[O]、以及行临时存储部分tmp00的相应位置为1的输入侧序号存储部分rgpid相应位置中。
进而,分别对序号临时存储部分tmp01的全部要素当中除去最靠左边位置的1而剩下的值、和输入侧序号存储部分rgpid全体以及输出侧序号存储部分wgpid全体进行比较,而求出各要素的逻辑与。之后,逻辑与的结果,对于保持有变成1的要素的输入侧序号存储部分rgpid和输出侧序号存储部分wgpid的列位置,通过将相应要素再设定为0来设定在序号临时存储部分tmp01的全体当中剩下在最靠左边位置的1、且将其它作为0的值。
由以上步骤,完成指令区间的执行时,得到以下信息。
(1)各输入数据所属的组序号,根据对应的输入侧序号存储部分rgpid中表示有1的比特位置而得到。
(2)各输出数据所属的组序号,根据对应的输出侧序号存储部分wgpid中表示有1的比特位置而得到。
在这里,作为指令区间的一个例,对执行图15所示的指令区间时的例进行说明。在该图上,PC表示该指令区间被开始了时的PC值。而该PC值被存储在RW4A的PC中。
在第一指令中,从存储器中的地址A1加载的4个字节数据(00110000),被存储在寄存器地址R1中。该时刻,因为进行了读出的地址A1既没被登录在RWO也没被登录在RWI中,所以地址A1和数据(00110000)被登录在RWI的第一列位置。
另外,同时,1在被设定在行临时存储部分tmp00的第一列位置,而行临时存储部分tmp00变为“1000”。
还有,从行临时存储部分tmp00中设定有1的第一列位置所对应的输入侧序号存储部分rgpid的第一列位置读出的值“0000”,被写入到序号临时存储部分tmp01中。在序号临时存储部分tmp01的全部要素为0时,序号管理部分busy的各要素被确认。之后,序号管理部分busy“0000”的各要素当中,相当于最靠左边的0的第一列位置,作为下次应该进行利用的空组序号而被确认。之后,序号管理部分busy以及序号临时存储部分tmp01的第一列位置中分别被设定1。其结果,序号管理部分busy变为“1000”,序号临时存储部分tmp01变为“1000”。
另外,进行了写入的地址R1,因为没被登录在RWO中,所以地址R1和数据(00110000)被登录在RWO的第一行中。与此同时,行临时存储部分tmp00的全部要素“1000”被写入到依赖关系存储部分M的第一行中。另外,序号临时存储部分tmp01中的全部要素“1000”,被写入到-输出侧序号存储部分wgpid的第一行中。还有,同样序号临时存储部分tmp01的全部要素“1000”,被写入到行临时存储部分tmp00中的变为1的列中的输入侧序号存储部分rgpid的第一列位置中。
接着,在第二指令中,从存储器中的地址A2加载的一个字节数据(02),被存储在寄存器地址R2中。该时刻,因为进行了读出的地址A2,既没有登录在RWO也没有登录在RWI中,所以地址A2和数据(02)被登录在RWI的第二列中。此时,对于在地址A2中的剩余的3字节,被存储表示Don’t Care的意思的“-”。
另外,同时,1被设定在行临时存储部分tmp00的第二列位置中,而行临时存储部分tmp00变为“0100”。
还有,从行临时存储部分tmp00中设定有1的第二列位置所对应的输入侧序号存储部分rgpid的第二列位置读出的值“0000”,被写入到序号临时存储部分tmp01中。序号临时存储部分tmp01的全部要素为0时,序号管理部分busy的各要素被确认。之后,序号管理部分busy“1000”的各要素当中,相当于最靠左边的0的第二列位置,作为下次应该进行利用的空组序号而被确认。之后,序号管理部分busy和序号临时存储部分tmp01的第二列位置中分别被设定1。其结果,序号管理部分busy变为“1100”,序号临时存储部分tmp01变为“0100”。
另外,进行了写入的地址R2,因为没被登录在RWO中,所以地址R2和数据(02)被登录在RWO的第二行中。与此同时,行临时存储部分tmp00的全部要素“0100”被写入到依赖关系存储部分M的第二行中。另外,序号临时存储部分tmp01的全部要素“0100”,被写入到输出侧序号存储部分wgpid的第二行中。还有,同样地,序号临时存储部分tmp01的全部要素“0100”,被写入到在行临时存储部分tmp00中变为1的列中的输入侧序号存储部分rgpid的第二列位置中。
接着,在第三指令中,从存储器的地址(A2+R2)加载的一个字节数据(22),被存储在寄存器地址R2中。这时候,因为地址R2是在指令区间内部被覆盖的寄存器,所以地址R2不会变为指令区间的输入。
另一方面,因为地址R2中存储的数据为(02),所以进行了读出的存储器的地址变为(A2+02)。这时候,因为进行了读出的地址(A2+02),既没有登录在RWO也没有登录在RWI中,所以地址(A2+02)和数据(22)被追加登录在RWI的第二列中。
此时,数据(22)被登录在地址A2的4字节当中的变为地址(A2+02)的字节部分中。即,在第二指令中,因为在变为地址A2的字节部分中登录有数据(02),所以在变为地址(A2+01)和地址(A2+03)的字节部分中,继续存储表示Don’t Care的意思的“-”。
另外,同时,1被设定在行临时存储部分tmp00的第二列位置中,而行临时存储部分tmp00变为“0100”。
还有,对应于从地址R2的读出,在依赖关系存储部分M当中,从与地址R2相对应的第二行位置读出的值“0100”,被写入到行临时存储部分tmp00中。进而,输出侧序号存储部分wgpid当中,从与地址R2相对应的第二行位置读出的值“0100”被写入到序号临时存储部分tmp01中。
还有,从行临时存储部分tmp00中的设定有1的第二列位置所对应的输入侧序号存储部分rgpid的第二列位置读出的值“0100”,作为逻辑或被写入到序号临时存储部分tmp01中。序号临时存储部分tmp01中存在比特为1的要素时,相当于最靠左边的1的第二列位置,被认知为下次应该进行利用的空组序号。
另外,进行了写入的地址R2,已被登录在RWO中,所以作为与地址R2相对应的输出值,从数据(02)被重写成数据(22)。与此同时,行临时存储部分tmp00的全部要素“0100”被写入到依赖关系存储部分M的第二行中。另外,序号临时存储部分tmp01的全部要素“0100”,被写入到输出侧序号存储部分wgpid的第二行中。还有,同样地,序号临时存储部分tmp01的全部要素“0100”,被写入到行临时存储部分tmp00中变为1的列中的输入侧序号存储部分rgpid的第二列位置中。
接着,在第四指令中,从存储器的地址A3加载的一个字节数据(33),被存储在寄存器中的地址R3中。该时刻,进行了读出的地址A3,既没有登录在RWO也没有登录在RWI中,所以地址A3和数据(33)被登录在RWI的第三列中。
另外,同时,1被设定在行临时存储部分tmp00的第三列位置中,而行临时存储部分tmp00变为“0010”。
还有,从行临时存储部分tmp00中的设定有1的第三列位置所对应的输入侧序号存储部分rgpid的第三列位置读出的值“0000”,被写入到序号临时存储部分tmp01中。序号临时存储部分tmp01的全部要素为0时,序号管理部分busy的各要素被确认。之后,序号管理部分busy“1100”的各要素当中,相当于最靠左边的0的第三列位置,作为下次应该进行利用的空组序号而被认知。之后,序号管理部分busy和序号临时存储部分tmp01的第三列位置中分别被设定1。其结果,序号管理部分busy变为“1110”,而序号临时存储部分tmp01变为“0010”。
另外,进行了写入的地址R3,因为没有登录在RWO中,所以地址R3和数据(33)被登录在RWO的第三行中。与此同时,行临时存储部分tmp00全部要素“0010”被写入到依赖关系存储部分M的第三行中。另外,序号临时存储部分tmp01的全部要素“0010”被写入到输出侧序号存储部分wgpid的第三行中。还有,同样地,序号临时存储部分tmp01的全部要素“0010”,被写入到在行临时存储部分tmp00中变为1的列中的输入侧序号存储部分rgpid的第三列位置中。
最后,在第五指令中,从存储器中的地址(R1+R2)加载的一个字节数据(44),被存储在寄存器地址R4中。在这里,因为地址R1和地址R2是在指令区间内部被覆盖的寄存器,所以不会成为指令区间的输入。另一方面,由(R1+R2)所生成的地址A4变为指令区间的输入。因为这个地址A4,既没有登录在RWO也没有登录在RWI中,所以地址A4和数据(44)被登录在RWI的第四列中。
另外,同时,1被设定在行临时存储部分tmp00的第四列位置中,而行临时存储部分tmp00变为“0001”。
另外,对应于从地址R1和地址R2的读出,依赖关系存储部分M当中,从与地址R1和地址R2相对应的第一行位置和第二行位置读出的值“1000”、值“0100”、以及行临时存储部分tmp00的值“0001”的逻辑或“1101”,被写入到行临时存储部分tmp00中。进而,输出侧序号存储部分wgpid当中,从与地址R1和地址R2相对应的第一行位置和第二行位置读出的值“1000”和值“0100”的逻辑或“1100”被写入到序号临时存储部分tmp01中。
另外,从与最初在行临时存储部分tmp00中设定有1的第四列位置相对应的输入侧序号存储部分rgpid的第四列位置读出的值“0000”、和被存储在序号临时存储部分tmp01的值“1100”的逻辑或“1100”,被写入到序号临时存储部分tmp01中。序号临时存储部分tmp01中存在比特为1的要素时,相当于最靠左边的1的第一列位置,作为下次应该进行利用的空组序号而被认知。
另外,进行了写入的地址R4,因为没被登录在RWO中,所以地址R4和数据(44)被登录在RWO的第四行中。与此同时,行临时存储部分tmp00的全部要素“1101”被写入到依赖关系存储部分M的第四行中。还有,序号临时存储部分tmp01的全部要素“1100”当中,留下最靠左边的1、且将其它作为0的“1000”,被写入到输出侧序号存储部分wgpid的第四行中。还有,同样地,序号临时存储部分tmp01的全部要素“1100”当中,留下最靠左边的1、且将其它作为0的“1000”,被写入到在行临时存储部分tmp00中变为1的列中的输入侧序号存储部分rgpid的第一、二、四列位置中。
进而,将在序号临时存储部分tmp01的全部要素“1100”当中除去最靠左边位置的1而剩下的“0100”,与输入侧序号存储部分rgpid的全部要素和输出侧序号存储部分wgpid的全部要素进行比较,对于保持有逻辑与为1的比特的输入侧序号存储部分rgpid和输出侧序号存储部分wgpid的登录信息,通过相应比特再设定为0,在序号临时存储部分tmp01的全体“1100”当中留下位于最靠左边位置的1、且其它设定为0的值“0100”被设定。
通过以上步骤,对于输入组A1-D1、A2-D2、以及A4-D4,对应的输入侧序号存储部分rgpid的列位置中被表示组0,对于输出组R1、R2、以及R4,对应的输出侧序号存储部分wgpid的行位置中被表示组0。另一方面,对于输入组A3-D3,对应的输入侧序号存储部分rgpid的列位置中被表示组序号2,对于输出组R3,对应的输出侧序号存储部分wgpid的行位置中被表示组2。
(RW的第四结构例)某指令区间中包括条件分支指令时,参与生成使用于条件分支的条件码的资源,变为参与条件分支指令执行后的全部指令的执行。于是,需要考虑到条件分支指令的组分割技术。以下所示的RW的第四结构例,就可以实现这些。
图21作为第四结构例表示RW4A的概要结构。如该图所示,RW4A包括PC,其存储指令区间的指令区间PC值;RWI,其存储输入地址以及输入值;RWO,其存储输出地址以及输出值;依赖关系存储部分M;行临时存储部分tmp00;输入侧序号存储部分rgpid;输出侧序号存储部分wgpid;序号管理部分busy以及序号临时存储部分tmp01,加之,将追随条件分支指令的执行时的依赖关系的扰乱作为目的,包括条件分支存储部分(条件分支存储部分)tmpcc。
条件分支存储部分tmpcc是存储有关条件分支的输入组的存储器。不管条件分支成立/不成立,执行分支指令后的指令本身依赖于与条件码生成有关的全输入。
上述的RW的第三结构例中,每个指令都对行临时存储部分tmp00进行初始化处理,与此相对,在RW的第四结构例中,将条件分支存储部分tmpcc的值复制到行临时存储部分tmp00中而作为行临时存储部分tmp00初始化。
图21所示的例,表示图22中所示的指令区间被执行时的情况。在图22所示的指令区间中,从第一指令到第四指令,与图15所示的指令区间相同。
在第五指令中,地址R3的值被检查。之后,在第六指令中,根据第五指令的检查结果进行条件分支。在这里,第五和第六指令依赖于地址R3的值,所以执行时,依赖关系存储部分M的第三行被复制到条件分支存储部分tmpcc中。之后,第七指令被执行之前,存储在条件分支存储部分tmpcc中的“0010”被复制到行临时存储部分tmp00中。
第七指令中,从地址(R1+R2)加载的一个字节数据(44),被存储在寄存器的地址R4中。在这里,因为地址R1和地址R2是在指令区间内部被覆盖的寄存器,所以不会成为指令区间的输入。另一方面,由(R1+R2)所生成的地址A4成为指令区间的输入。因为该地址A4,既没有登录在RWO也没有登录在RWI中,所以地址A4和数据(44)被登录在RWI的第四列中。
另外,同时,1被设定在行临时存储部分tmp00的第四列位置中,行临时存储部分tmp00变为“0011”。
另外,对应于从地址R1和地址R2的读出,依赖关系存储部分M当中,从与地址R1和地址R2相对应的第一行位置和第二行位置读出的值“1000”、值“0100”、以及行临时存储部分tmp00的值“0011”的逻辑或“1111”,被写入到行临时存储部分tmp00中。进而,输出侧序号存储部分wgpid当中,从与地址R1和地址R2相对应的第一行位置和第二行位置读出的值“1000”和值“0100”的逻辑或“1100”被写入到序号临时存储部分tmp01中。
另外,从与最初在行临时存储部分tmp00中设定有1的第三列位置以及第四列位置相对应的输入侧序号存储部分rgpid的第三列位置以及第四列位置读出的值“0010”、以及“0000”的逻辑或“0010”、和被存储在序号临时存储部分tmp01的值“1100”的逻辑或“1110”,被写入到序号临时存储部分tmp01中。序号临时存储部分tmp01中存在比特为1的要素时,相当于最靠左边的1的第一列位置,作为下次应该进行利用的空组序号而被认知。
另外,进行了写入的地址R4,因为没被登录在RWO中,所以地址R4和数据(44)被登录在RWO的第四行中。与此同时,行临时存储部分tmp00的全部要素“1111”被写入到依赖关系存储部分M的第四行中。还有,序号临时存储部分tmp01的全部要素“1110”当中,留下最靠左边的1、且将其它作为0的“1000”,被写入到输出侧序号存储部分wgpid的第四行中。还有,同样地,序号临时存储部分tmp01的全部要素“1110”当中,留下最靠左边的1、且将其它作为0的“1000”,被写入到在行临时存储部分tmp00中变为1的列中的输入侧序号存储部分rgpid的第一、二、三、四列位置中。
进而,将序号临时存储部分tmp01的全部要素“1110”当中的除去最靠左边位置的1而剩下的“0110”,与输入侧序号存储部分rgpid的全部要素和输出侧序号存储部分wgpid的全部要素进行比较,对于保持有逻辑与为1的比特的输入侧序号存储部分rgpid和输出侧序号存储部分wgpid的登录信息,通过相应比特被再设定为0,在序号临时存储部分tmp01的全体“1110”当中留下位于最靠左边位置的1、且其它设定为0的值“1000”被设定。
通过以上步骤,对于输入组A1-D1、A2-D2、A3-D3、以及A4-D4,对应的输入侧序号存储部分rgpid的列位置中被表示组0,而对于输出组R1、R2、R3、和R4,对应的输出侧序号存储部分wgpid的行位置中被表示组0。即,通过条件分支指令的执行,地址R4的输出所依赖的输入数据,变为全部输入组A1-D1、A2-D2、A3-D3、以及A4-D4。
(基于组分割的再利用表的设定)
如上所述,如果根据RW的第三和第四结构例,则对于各输入组和各输出组分配所属的组序号。根据这个,对每个成为同一组的输入组,能够构成如图19所示的独立的树结构。根据该树结构,如图23所示,各输入组被存储在RB和RF的联想检索装置中。例如,图3所示的例中,只有作为初始检索键的FF被使用,但如上述,通过向各输入组给予组序号,使得利用多个初始检索键(F0、F1、F2、...)变为可能。由此,能够同时开始多个检索。图23所示的例中,对于组序号为0和2的独立树结构的起始键,初始检索键F0和F2被设定。
(寄存器值的详细内容)作为寄存器的输入输出值,能举参数、返回值(Args.)、以及参数和返回值以外的寄存器和条件码(Regs.,CC)等例子。本实施方案中,SPARC构成方式的寄存器当中使用了通用寄存器%g0-7、%o0-7、%10-7、%i0-7、浮点寄存器%f0-31、条件码寄存器ICC、浮点条件码寄存器FCC(详细内容后述)。这里面,末端函数(leaffunction)的输入变为通用寄存器%o0-5,输出变为通用寄存器%o0-1或%f0-1,还有,非末端函数的输入变为通用寄存器%i0-5,输出变为通用寄存器%i0-1或%f0-1,并且,输入被登录在arg
,而输出被登录在rti
或%rtf
。在SPARC-ABI的规定中,这些以外的寄存器不会成为函数的输入输出,所以关于函数,作为寄存器输入输出值,Args.被登录在RB以及RO1/RO2中。
另一方面,在SPARC-ABI的规定中,关于循环的输入输出,因为无法特定被使用的寄存器的种类,所以要特定循环的输入输出,关于全部种类的寄存器都需要登录在RB中。由此,关于循环,作为寄存器输出值,相当于Regs.,CC的%g0-7、%o0-7、%10-7、%i0-7、%f0-31、ICC、FCC被登录。
(多重再利用)在级别1利用了如上述的再利用机构时,从图46(a)所示的例来说,能够分别对作为末端函数的B和在函数B内部的循环C等进行再利用。与此相对,对某函数只执行一次,使得对包括该函数内部中被包括的函数和循环的全部指令区间都能够进行再利用,这样进行登录的结构是多重再利用。例如,对上述的例来说,如果根据多重再利用,只执行函数A一次,使得对位于嵌套关系的A、B、C的全部指令区间进行再利用。以下,对实现多重再利用所需要的性能扩展进行说明。
在图6中,作为一个例表示函数A和函数D的概念性的构造。该图所示的例中,函数A的内部存在循环B,而循环B的内部存在循环C,而在循环C中函数D被调出。而且,函数D的内部存在循环E,而循环E的内部存在循环F。
图7是表示在图6所示的函数A、D以及循环B、C、E、F嵌套结构中,内侧结构的寄存器输入输出(粗框单元区域)变为外侧结构的寄存器输入输出的影响范围(箭头)。例如,在循环F内部作为输入而被参照的%i0~5既是对于循环E和函数D的输入,进而也是对于调出函数D的循环C和循环B的输入(但是改读为%o0~5)。另一方面,对于函数A%o0~5相当于局部函数,所以%i0~5(%o0~5),不会变为对于函数A的寄存器输入。即,%i0~5(%o0~5)的影响范围到循环B为止。从另一角度来看,在函数D的内部%i0~5被参照时,即使循环B不直接参照%o0~5,也需要将%o0~5作为循环B的输入值进行登录。对于在循环F内部被输出的%i0~1也是同样。
因为浮点寄存器不被包括在寄存器窗口中,所以被输出的%f0~1变为包括函数A的全部层的输出。另一方面,其它的寄存器的输入输出,不会超出函数而产生影响。即,在循环F内部的输入输出,即作为寄存器输入的%i6~7、%g,l,o、%f0~31、%icc、%fcc、以及作为寄存器输出的%I2~7、%g,l,o、%f2~31、%icc、%fcc的影响范围到循环E为止。对主存储器的输入输出,如前面所述,通过将与调出函数之前的%sp(SP)的进行比较的方法适用于嵌套的全部层来能够特定影响范围。
在这里,如果根据上述的RW4A、RW4B、和指令区间存储部分2的结构,能够对多个的指令区间的输入输出分别进行记录,从而能够实现多重再利用。
(并行事先执行)以上所述的函数和循环的多重再利用中,同一参数出现的间隔比较长时、以及参数继续单调变化时,变得完全没有效果。即,同一参数出现的间隔比RB登录信息的存在时间更长时,即使某函数或者循环登录在RB中,关于该被登录的函数或者循环同一参数下次出现时,该函数或者循环已经从RB登录信息中消失了,从而无法进行再利用。另外,参数继续单调变化时,即使相应的函数或者循环被登录在RB中,因为参数不同而不能进行再利用。
与此相对,除了设置作为进行多重再利用的处理器的MSP1A之外,还设置多个作为通过事先执行指令区间来使RB登录信息变得有效的处理器的SSP1B,通过这些能够谋求进一步的高速化。
用于进行并行事先执行机构的硬件结构,是如图2所示的结构。如该图所示,RW4A和4B、运算器5A和5B、寄存器6A和6B、高速缓冲存储器7A和7B,按每个处理器独立而被设置,另一方面,指令区间存储部分2、以及主存储器3以共有全部的处理器。在该图中,虚线表示MSP1A和SSP1B向指令区间存储部分2登录输入输出的路径。
在这里,作为实现并行事先执行的课题,能举以下的两点(1)怎样保持主存储器的一贯性,(2)怎样预测输入。以下,对这些课题的解决方法进行说明。
(有关主存储器一贯性问题的解决方法)首先,对于上述的问题(1)怎样保持主存储器的一贯性进行说明。特别是,当根据预测了的输入参数执行指令区间时,写入主存储器中的值在MSP1A和SSP1B是不同的。为了解决该问题,如图2所示,SSP1B,对成为向RB的登录对象的主存储器参照使用指令区间存储部分2,而且对其它的局部参照使用对每个SSP1B设置的作为局部存储器的local7B,而不需要向Cache7B和主存储器3中进行写入。另外,MSP1A对主存储器3进行写入时,对应的SSP1B的高速缓冲存储器列被进行无效化。
具体地讲,向指令区间存储部分2的登录对象当中,对于事先进行读出的地址参照主存储器3,并与MSP1A同样地将地址和值登录在RB中。之后,通过参照指令区间存储部分2而并不参照主存储器3来能够避免因从其它的处理器的覆盖而发生的矛盾。对于局部参照,先执行读出是,相当于对变数不进行初始化而使用,而且值可以不恒定,从而不需要参照主存储器3。
另外,作为局部存储器的Local7B的容量为有限而函数帧(function frame)的大小超过Local7B的容量等无法继续执行时,停止事先执行。还有,因为事先执行的结果没有写入到主存储器3中,所以无法使用事先执行结果来进一步进行下次的事先执行。
(输入的预测方法)然后,对于上述的问题(2)怎样预测输入进行说明。事先执行时,需要根据指令区间存储部分2使用历史预测将来的输入并传递给SSP1B。为此,对存储在指令区间存储部分2中的各输入模式分别设置小处理器,使得与MSP1A和SSP1B独立而求出输入预测值。
具体地讲,根据最后出现的参数(B)和最近出现的2组的参数的差分(D),进行跨步预测。另外,认为MSP1A已经开始基于B+D的指令区间的执行。SSP1B有N个时,将要准备的输入预测值设定在从B+D×2到B+D×(N+1)的范围。
如果进行以上的输入预测,则上述的输入参数继续单调变化时,能够根据在事先预测了的结果有效地进行再利用。
<实施方案2>
下面将参照

本发明的另一个实施方案。
(数据处理装置的结构)图25表示了本实施方案的数据处理装置的概略结构。如该图所示,数据处理装置,以包括MSP1A、SSP1B、以及作为再利用表的RF/RB(指令列存储装置)2’、以及主存储器(主存储装置)的方式而构成,是将存储在主存储器3中的程序数据读取而进行各种运算处理并进行将计算结果写入到主存储器3中的处理的装置。另外,在该图所示的结构中,具有一个SSP1B的结构,但可以采用具有两个以上的结构。
RF/RB2’是存储器装置,该存储器装置存储为了再利用程序中的函数和循环的数据,RF/RB2’以包括RB登录处理部分(登录处理装置)2A以及预测处理部分(预测处理装置)2B的方式构成。后面将对于该RF/RB2’的详细内容、以及RB登录处理部分2A和预测处理部分2B的详细内容进行说明。
主存储器3是作为MSP1A和SSP1B的工作区域的存储器,例如由RAM等构成。例如,程序、数据等从硬盘等外部存储装置被将读出到主存储器3,而MSP1A和SSP1B根据被读出到主存储器3的数据进行运算。
MSP1A以包括RW(再利用存储装置)4A、运算器(第一运算装置)5A、寄存器6A以及Cache7A的方式而构成。并且,同样地,SSP1B以包括RW(再利用存储装置)4B、运算器(第二运算装置)5B、寄存器6B以及Cache/Local7B的方式而构成。
RW4A和4B是再利用窗口(window),是将正在执行、且正在登录的RF和RB中(后面将进行说明)的每个登录信息作为环状结构的栈来保持的再利用窗口。作为实际的硬件结构,RW4A和4B由在激活RF/RB2’中的特定的登录信息的控制线的集合而构成。
运算器5A和5B是根据存储在寄存器6A和6B中的数据而进行运算处理的运算器,其被称为ALU。寄存器6A和6B是保持为了通过运算器5A和5B来进行运算的数据的存储装置。另外,在本实施方案中,运算器5A和5B以及寄存器6A和6B符合SPARC结构。Cache7A和7B,作为主存储器3、MSP1A以及SSP1B之间的高速缓冲存储器而发挥作用。另外,在SSP1B中,Cache7B中包括作为局部存储器的Local7B(RF/RB的结构)图24示出了根据由本实施方案的RF/RB2’实现的再利用表。如该图所示,RF,存储有多个登录信息,而且对于每个登录信息,保持有V,其表示该登录信息是否有效;LRU,其表示替换该登录信息提示;Start,其表示函数的起始地址;Read/Write,其表示应该参照的主存储器的地址;以及F/L,其用来区分函数和循环。
还有,RB,与存储在RF中的登录信息相对应地存储有多个登录信息,并对于每个登录信息保存有V,其表示登录信息是否有效;LRU,其表示替换该登录信息的提示;SP,其表示调出函数或循环之前的栈指针%sp;参数(Args.)(V有效的登录信息,Val.值);主存储器值(C-FLAGRead地址的变更标识,P-MaskRead地址的历史掩码,MaskRead/Write地址的有效字节,Value值);返回值(Return Values)(V有效的登录信息,Val.值);循环的结束地址(End);taken/not,其表示循环结束时的分支方向;以及除了参数和返回值以外的寄存器和条件码(CC,Regs)。还有,RB,保持有与一个以上的寄存器地址相对应地存储常数标识(Const-FLAG)的存储器区域。另外,关于常数标识(Const-FLAG)的详细内容在后面进行说明。
接下来详细说明上述RF和RB的各项。如上所述,V表示登录信息是否有效,具体地讲,未登录时存储“0”,正在登录时存储“2”,登录结束了的时候存储“1”。例如,确保RF或RB时,如果有未登录的登录信息(V=0),则使用其。如果没有未登录的登录信息,则从登录结束的登录信息(V=1)选择LRU为最小的登录信息而进行覆盖。因为登录中的登录信息(Y=2)正在使用中,故不能进行覆盖。
上述LRU表示以一定时间间隔向右移位的移位寄存器中的数字“1”的个数。对RF的情况来讲,该移位寄存器关于相应登录信息已经进行了为了再利用的登录或尝试了再利用时,“1”被写入到左端。从而,该登录信息如果频繁使用,LRU就变为较大的值,而如果在一定时间内没有使用,LRU的值就变为0。另一方面,对RB的情况来讲,该登录信息被进行了再利用时,“1”被写入到移位寄存器中。从而,该登录信息,如果频繁使用,LRU就变为较大的值;而如果在一定时间内没有使用,则LRU的值变为0。
接着,关于上述RB中的主存储器值的掩码Mask进行说明。通常,如果对地址和数据进行一个字节一个字节的管理,则可以达到管理的目的。但是,实际上,通过以4字节为单位管理数据就能够以高速进行高速缓冲存储器的参照。因此,RF中,将主存储器地址变为4的倍数来存储。另一方面,将管理单位作为4字节时,需要表示在4个字节中哪个字节是有效的,以便能够仅加载一个字节部分。即,掩码是表示4个字节中的哪个字节是有效字节的4比特数据。例如,如果从地址C001加载的一个字节部分的结果,值为E8时,地址C000被登录在RF中、“0100”被登录在RB的Mask中、“00E80000”被登录在Value中。另外,对于Read地址中的变更标识(C-FLAG)和历史掩码(P-Mask)的详细内容,后面将进行说明。
接着对除了上述的参数和返回值以外的寄存器和条件码(Regs.,CC)进行说明。在本实施方案中,在SPARC结构寄存器之中利用了通用寄存器%g0-7、%o0-7、%10-7、%i0-7、浮点寄存器%f0-31、条件码寄存器ICC以及浮点条件码寄存器FCC(后面进行详细说明)。在这些寄存器当中,末端函数的输入变为通用寄存器%o0-5、输出变为通用寄存器%o0-1;非末端函数的输入变为通用寄存器%i0-5、输出变为通用寄存器%i0-1,并且,输入登录在arg
中、输出登录在rti
中。根据SPARC-ABI的规定,除这些以外的寄存器不作为函数的输入和输出,因此,对于函数来说,RB中参数(Args.)的项是充分的。
另一方面,根据SPARC-ABI的规定,关于循环的输入输出,不可能特定要使用的寄存器的种类,故要确定循环的输入输出,需要关于全部种类的寄存器都登录在RB中。因此,%g0-7、%o0-7、%10-7、%i0-7、%f0-31、ICC、以及FCC都被登录在RB的Regs.,CC中。
如上所述,在RF/RB2’中,Read地址由RF进行总括管理,而Mask和Value由RB来进行管理。由此,能够实现以下结构通过CAM来一次性地对Read地址的内容和RB的多个登录信息进行比较。
(再利用处理的概要)接着,分别对于函数和循环的情况,说明再利用处理的概要。
首先,关于函数时的情况进行说明。从当前函数返回之前调用下一个函数时,或者应该进行登录的输入输出超出再利用表的容量、检测出参数的第七个字、以及中途发生系统调用或中断等干扰没有发生时,在执行返回指令的时刻,使得正在登录的输入输出表登录信息变得有效。
以下,参照图24进行说明,函数调用之前,(1)检索以便检查登录在RF的登录信息中的函数的起始地址中是否存在与相应函数的起始地址一致的地址。如果存在一致的地址,(2)选择登录在RB的有关相应函数的登录信息中的参数与要调用的函数的参数完全一致的登录信息。然后,(3)在RF中参照相关的主存储器地址,即至少一个Mask为有效的全部Read地址,(4)与登录在RB中的内容进行一致性比较。如果所有的输入为一致时,(5)通过将已经登录在RB中的输出(返回值,全局变量,A的局部变量)写回到主存储器3中,来省略了函数的执行,即能够实现函数的再利用。
接着,对于循环时的情况进行说明。循环结束以前执行函数返回,或者前述的干扰发生等,循环的输入输出登录没有中断时,在检测到与正在登录的循环相对应的反向分支指令时刻,使得正在登录的输入输出表登录信息变得有效,从而结束该循环登录。
进而,反向分支指令成立时,判断下一个循环是否可再利用。即,如果参照图24进行说明,则进行反向分支之前,(1)检索以便检查登录在RF的登录信息中的循环的起始地址中是否存在与相应的起始地址一致的地址。如果存在一致的地址,(2)选择登录在RB的有关相应循环的寄存器输入值、与要调用的循环的寄存器输入值完全一致的登录信息。然后,(3)在RF中参照相关的主存储器地址,(4)与登录在RB中的内容进行一致性比较。如果所有的输入为一致时,(5)通过将已经登录在RB中的输出(寄存器以及主存储器输出值)写回到主存储器3中,来省略了循环的执行,即,能够实现循环的再利用。
如果执行了再利用,则根据登录在RB中的分支方向,进而关于下一个循环反复进行同样的处理。另一方面,如果下一个循环不能再利用,就以常规方式执行下一个循环,并开始向RF和RB登录。
(指令区间执行时的处理流程)接着,对于指令被解码的情况下的具体的处理流程进行说明。以下,对于指令被解码的结果为函数调用指令的情况、函数返回指令的情况、反向分支成立的情况、反向分支不成立的情况、以及其它指令的情况,分别进行处理的流程的说明。
(函数调用指令的情况)下面将参照图26示出的流程图说明在指令被解码结果是函数调用指令的情况下的处理。首先,在步骤1(此后,称为S1)中,判断是否检测到了参数的第七个字。如果在S1中是YES,即如果判断出检测到了参数的第七个字,则使得登录在RW中的正在登录中的全部RB登录信息变得无效,并且移到S6,以使程序计数器前进到函数的起始位置,而结束处理。
另一方面,如果在S1中是NO,即判断出没有检测到参数的第七个字,则进行检索该函数调用以及输入值是否登录在RF以及RB中(S2)。如果在S2中是YES,即判断出该函数调用以及输入值已登录在RF以及RB中,则处理将转到后面所述的步骤S7。
如果在S2中是NO,即判断出函数调用以及输入值没有登录在RF以及RB中,则尝试确保用于该函数的RF登录信息和RB登录信息,判断(1)是否存在现有的RF登录信息;(2)除了在登录操作中不能排除的RF登录信息以外,是否存在能够使用的RF登录信息;或者(3)除了在登录操作中不能排除的RB登录信息以外,是否存在能够使用的RB登录信息(S3)。
如果在S3中是NO,即,判断为不存在可用的RF和RB登录信息,则不开始登录而使登录在RW中的RB全部变得无效(S5),从而清空RW。另一方面,如果在S3中是YES,即判断出存在可用的RF和RB登录信息,则确保用于该函数的RF登录信息和RB登录信息,并登录在RW中(S4)。这里,登录在RW中时,如果登录在RW中的RW登录信息溢出,则删除最早的RW登录信息,使相应的RB变得无效。在S3或S4执行之后,使程序计数器前进到函数起始位置(S6),而结束处理。
另一方面,如果在S2中是YES,即判断出函数调用以及输入值(S2)登录在RF以及RB中,则该函数可以再利用。即,从RB中求出输出值的同时,并将该输出值写入到寄存器和主存储器3中(S7)。然后,判断正在登录的函数/循环是否已经登录在RW中(S8)。如果已经登录,将从进行再利用函数的RB登录信息内容中的需要的登录信息追加到登录在RW中的登录信息中(S9)。在这里,从RW的TOP开始按顺序进行登录,如果中途RB溢出,以后,使到RW的BOTTOM为止的RB变得无效,并从RW删除。此后,使程序计数器前进到下一个指令(S10),而结束处理。
(函数返回指令的情况)下面将参照图27示出的流程图说明在指令被解码结果是函数返回指令的情况下的处理。在S11中,从RW的TOP按顺序检索而检测到对应于函数的RF/RB为止,判断是否检测到关于循环的RB(S12)。在这里,如果检测到了关于循环的RB(在S12的是YES),则使相应的RB全部变得无效的同时,从RW中删除(S13)。
另一方面,在RW的检索中,判断是否检测到了对应于该函数的RF/RB(S14)。如果检测到了对应于该函数的RF/RB(在S14的中为YES),则使相应的RB登录信息有效的同时,并从RW中删除(S15)。
此后,执行返回指令(S16),而结束处理。
(反向分支成立的情况)下面将参照图28示出的流程图说明在指令被解码结果是反向分支成立的情况下的处理。首先,从RW的TOP按顺序检索,判断是否检测到对应于函数的RB(S21)。如果在S21中是YES,即,如果检测到了对应于函数的RB,则处理将转到后面所述的步骤S24。
另一方面,如果在S21中是NO,即如果没有检测到对应于函数的RB,其次,则判断该反向分支指令本身的地址是否与RB中的循环结束地址一致(S22)。如果在S22中是NO,即如果判断出该反向分支指令本身的地址与RB中的循环结束地址不一致,则处理将转到后面所述的S24。
如果在S22是“YES”,即如果该反向分支指令本身的地址与RB中的循环的结束地址一致,则使从RW的TOP到上述RB之前的全部RB变得无效(S23),并从RW中删除。而且,使RB登录信息有效并设定成taken=1,并从RW中删除。
接着,在S24,判断下一个循环的起始地址和输入值是否登录在RF和RB中。如果在S24中是YES,即如果下一个循环的起始地址和输入值登录在RF和RB中,则处理将转到后面所述的S30。
另一方面,如果在S24中是NO,即如果下一个循环的起始地址和输入值没有登录在RF和RB中,则尝试确保为了下一个循环的RF登录信息和RB登录信息,并判断(1)是否存在现有的RF登录信息;(2)除了在登录操作中不能排除的RF登录信息以外,是否存在能够使用的RF登录信息;或者(3)除了在登录操作中不能排除的RB登录信息以外,是否存在能够使用的RB登录信息(S25)。
如果在S25中是NO,即如果判断出不存在可用的RF和RB登录信息,则就不开始登录而使所有登录在RW中的RB完全变得无效(S26),从而清空RW。此后,在S29中,使程序计数器前进到条件分支的前方,而结束处理。
另一方面,如果在S25中是YES,即如果判断出存在可用的RF和RB登录信息,则确保该可用的RF和RB登录信息,并将确保的RF和RB登录在RW中(S27)。还有,将循环结束地址(反向分支指令本身的地址)登录在RB中。在此,如果向RW进行登录时RW溢出,则删除最早的RW登录信息(S28),而使与其对应的RB变得无效。此后,在S29中,使程序计数器移到条件分支的前方,而结束处理。
另一方面,如果在前述S24的中是YES,则下一个循环可以进行再利用,因此从RB求出输出值,并将该数值写入到寄存器和主存储器3中(S30)。在此,判断正在登录中的函数/循环是否已经登录在RW中(S31),如果已经登录,将从进行了再利用的循环的RB登录信息的内容中的必要的登录信息追加到登录在RW中的登录信息中(S32)。此时,从RW的TOP按顺序开始进行登录,如果中途RB溢出,则以后,使到RW的BOTTOM为止的RB变得无效,并从RW删除。
此后,程序计数器并没有根据下一个循环的起始位置而根据该RB中的taken的值,如果taken=1,则移到本指令;如果taken=0,则移到存储在RB中的循环结束地址。然后,结束处理。
(反向分支不成立的情况)下面将参照图29示出的流程图说明在指令被解码的结果是反向分支不成立的情况下的处理。首先,从RW的TOP按顺序进行检索(S41),并判断出是否检测到了对应于函数的RB(S42)。如果在S42中是YES,即如果判断出检测到了对应于函数的RB,则在S46中使程序计数器前进到下一个指令,而结束处理。
如果在S42中是NO,即如果判断出没有检测到对应于函数的RB,则判断出该反向分支指令本身的地址与RB中的循环结束地址是否一致(S43)。如果在S43中是NO,即如果判断出没有检测出对应于该反向分支指令的地址的RF/RB,则在S46中使程序计数器前进到下一个指令,而结束处理。
另一方面,如果S43中是YES,即如果判断出检测出了对应于该反向分支指令的RF/RB,则使从RW的TOP到该RB之前的全部RB都变得无效(S44),并从RW删除。另外,使该RB登录信息变得有效,并设定成taken=0,并从RW删除(S45)。此后,在S46中使程序计数器前进到下一个指令,而结束处理。
(其它指令的情况)接着,下面将说明当指令被解码结果是上述以外的其它指令的情况。如果是其它的指令,则执行寄存器R/W、主存储器R/W。此时,如果RW不为空,由以下步骤将寄存器R/W和主存储器R/W登录在RW中被登录的RB中。下面分别对以下的情况进行说明(1)通用寄存器READ的情况;(2)通用寄存器WRITE的情况;(3)浮点寄存器READ的情况;(4)浮点寄存器WRITE的情况;(5)条件码寄存器ICC-READ的情况;(6)条件码寄存器ICC-WRITE的情况;(7)浮点条件码寄存器FCC-READ的情况;(8)浮点条件码寄存器FCC-WRITE的情况;(9)主存储器READ的情况;(10)主存储器WRITE的情况。
(1)通用寄存器READ的情况;首先,从RW的TOP到BOTTOM为止按顺序进行检索。于是,(1-1)当该RB为末端函数、且%o0-6时或该RB为非末端函数、且%i0-6时,如果arg
.V=0,则变更为arg
.V=1,并将读出数据记录在arg
.Val中。接着,进一步对RW进行检索。如果该RB是函数,则结束处理。另一方面,如果该RB不是函数(是循环),如果arg
.V=0,则变更为arg
.V=1,并将读出数据记录在arg
.Val中,而结束处理。
另一方面,(1-2)RB为循环时,(a)如果在%g0-7是grr
.V=0,则变更为grr
.V=1,并将读出数据记录在grr
.Val,而结束处理。(b)如果在%o0-7是agr
.V=0,则变更为agr
.V=1,并将读出数据记录在agr
.Val,而结束处理。(c)如果在%10-7是lrr
.V=0,则变更为lrr
.V=1,并将读出数据记录在lrr
.Val,而结束处理。(d)如果在%i0-7是irr
.V=0,则变更为irr
.V=1,并将读出数据记录在irr
.Val,并使处理前进到下一个RW登录信息。
(2)通用寄存器WRITE的情况;首先,对从RW的TOP到BOTTOM按顺序进行检索。此后,(2-1)当该RB是末端函数、且%o0-5时或该RB是非末端函数、且%i0-5时,如果arg
.V=0,则为了表示以后的读出并不是输入而变更为arg
.V=2。进而,关于%o0-1/%i0-1,变更为rti
.V=1,并将写入数据记录在rti
.Val。此后,进一步对RW进行检索,如果该RB是函数,则结束处理。另一方面,RB不是函数(是循环)时,如果是arg
.V=0,则为了表示以后的读出并不是输入而变更为arg
.V=2、rti
.V=1,并将写入数据记录在rti
.Val,而结束处理。
另一方面,(2-2)如果该RB是循环,(a)如果在%g0-7是grr
.V=0,则变更为grr
.V=2,并将读出数据记录在grr
.Val,而结束处理。(b)如果在%o0-7是agr
.V=0,则变更为agr
.V=2,并将读出数据记录在agr
.Val,而结束处理。(c)如果在%10-7是lrr
.V=0,则变更为1rr
.V=2,并将读出数据记录在lrr
.Val,而结束处理。(d)如果在%i0-7是irr
.V=0,则变更为irr
.V=2,并将读出数据记录在irr
.Val,并使处理前进到下一个RW登录信息。
(3)浮点寄存器READ的情况;首先,对从RW的TOP到BOTTOM按顺序进行检索。然后,(3-1)如果该RB是函数,则不进行任何处理而结束处理。另一方面,(3-2)该RB是循环时,如果是frr
.V=0,则变更为frr
.V=1,并将读出数据记录在frr
.Val,而结束处理。
(4)浮点寄存器WRITE的情况;首先,对从RW的TOP到BOTTOM按顺序进行检索。然后,(4-1)如果该RB是函数、且%f0-1,则变更为rtf
.V=1,并将写入数据记录在rtf
.Val。进一步对RW进行检索。如果是frr
.V=0,则为了表示下面的读出并不是输入而变更为frr
.V=2、rtf
.V=1,并将写入数据记录在rtf
.Val,而结束处理。
另一方面,(4-2)该RB是循环时,如果是frr
.V=0,则变更为frr
.V=2、frw
.V=1,并将写入数据记录在frw
.Val,而结束处理。
(5)条件码寄存器ICC-READ的情况;首先,对从RW的TOP到BOTTOM按顺序进行检索。然后,(5-1)该RW是函数时,不进行任何处理而结束处理。另一方面,(5-2)该RB是循环时,如果是icr.V=0,则变更为irc.V=1,并将读出数据记录在icr.Val,而结束处理。
(6)条件码寄存器ICC-WRITE的情况;首先,对从RW的TOP到BOTTOM按顺序进行检索。然后,(6-1)该RW是函数时,不进行任何处理而结束处理。另一方面,(6-2)该RB是循环时,如果是icr.V=0,则变更为icr.V=2、icw.V=1,并将写入数据记录在icw.Val,而结束处理。
(7)浮点条件码寄存器FCC-READ的情况;首先,对从RW的TOP到BOTTOM按顺序进行检索。然后,(7-1)该RB是函数时,不进行任何处理而结束处理。另一方面,(7-2)该RB是循环时,如果是fcr.V=0,则变更为fcr.V=1,并将读出数据记录在fcr.Val,而结束处理。
(8)条件码寄存器ICC-WRITE的情况;首先,对从RW的TOP到BOTTOM按顺序进行检索。然后,(8-1)该RB是函数时,不进行任何处理而结束处理。另一方面,(8-2)该RB是循环时,如果是fcr.V=0,则变更为fcr.V=2、fcw.V=1,并将写入数据记录在fcw.Val,而结束处理。
(9)主存储器READ的情况;首先,对从RW的TOP到BOTTOM按顺序进行检索。于是,如果作为WRITE数据向RB完成了登录,则使用该值。另一方面,如果不是上述情况而作为READ数据向RB完成了登录,则使用该值。如果没有完成向其中任何之一的登录,则通过高速缓冲存储器从主存储器3进行读入。
接着,再次对从RW的TOP到BOTTOM按顺序进行检索。然后,(a)如果地址是登录在RB中的sp+64,则是结构体指针的读出,因此,如果arg0.V=0,则变更为arg0.V=1,并将读出数据记录在arg0.Val。(b)与上述的(a)的情况不同,如果地址为LIMIT以上、且不到sp+92,则是不需要登录的区域,因此不进行任何处理。(c)如果不是上述的(b)的情况,则检查作为WRITE数据是否完成了登录,如果是,则是已经被覆盖之后的READ,因此不进行任何处理。(d)如果不是上述的(c)情况,则检查作为READ数据是否完成了登录,如果是,则已经完成了登录,因此不需要进行登录,从而不进行任何处理。(e)如果不是上述的(d)的情况,则需要作为READ数据进行登录,因此将主存储器READ地址确保在RF中,并作为READ数据进行登录。如果将主存储器地址没能确保在RF中,则不能进行登录,因此使与从RW登录信息到BOTTOM相对应的全部RB登录信息变得无效。
(10)主存储器WRITE的情况首先,通过高速缓冲存储器写入到主存储器3。然后,如果基址寄存器是14(%sp)、且偏移量为92以上,则存储检测出参数的第七个字的信息。
之后,对从RW的TOP到BOTTOM按顺序进行检索。然后(a)如果地址是登录在RB中的sp+64,则是结构体指针的读出,因此,如果arg0.V=0,则变更为arg0.V=2。(b)与上述的(a)的情况不同,如果地址为LIMIT以上、且不到sp+92,则是不需要登录的区域,因此不进行任何处理。(c)如果不是上述的(b)的情况,则检查作为WRITE数据是否完成了登录,如果是,则地址已经完成了登录,因此将该内容更新为新的WRITE数据。(d)如果不是上述的(c)的情况,则需要作为WRITE数据进行登录,因此将主存储器WRITE地址确保在RF中,并作为WRITE数据进行登录。如果将主存储器地址没能确保在RF中,则不能进行登录,因此使与从RW登录信息到BOTTOM相对应的全部RB登录信息变得无效。
(包括循环的多重再利用)如果在级别1使用上述再利用机构,在图46(a)示出的例中,能够分别对作为末端函数的函数B和函数B中的循环C等进行再利用。与此相对,多重再利用,是通过对某函数仅进行一次执行来进行登录,使得对包括在该函数内部的包括函数和循环的全部指令区间能够进行再利用。例如上面的例中,如果根据多重再利用,通过对函数A仅进行一次执行来使得对具有嵌套关系的A、B和C的全部指令区间能够进行再利用。下面,将说明实现多重再利用所需要的性能扩展。
函数A和D的概念上的结构,如同在图6所示的结构。还有,在图6所示的函数A、D以及循环B、C、E、F的嵌套结构中,关于内侧的结构的寄存器输入输出(粗框单元区域)变为外侧的结构的寄存器输入输出的影响范围(箭头),表示在上述图7中。
由于上述原因,要实现多重再利用,需要使RF和RB与函数和循环的嵌套结构建立关联关系的结构。如图30所示,通过装备再利用窗口(RW),将当前正在执行、且正在登录的RF和RB的各登录信息(在图中表示为A、B和C)作为栈结构而保持。当执行函数或循环时,关于登录在RW中的全部登录信息,根据以上所记载的方法对寄存器以及主存储器参照进行登录。
此时,关于某个登录信息,根据(1)超过可以登录的项数、(2)检测参数的第七个字、(3)检测系统调用而判断出不能进行再利用时,利用RW来特定对应于该登录信息的RB以及更高的RB,而能够中断登录。
另外,尽管RW的深度有限,但是,当超过可以一次性登录的多重程度而检测出函数或循环时,通过从外侧的指令区间按顺序中断登录并将更内侧的指令区间添加到登录对象来能够追随嵌套关系的动态变更。而且,如果在执行和登录中(例如A)发现了可再利用的指令区间(例如D),则能够通过将登录结束的输入输出直接追加到正在登录中的登录信息来实现超过RW的深度的A的多重再利用。
(并行事先执行)如实施方案1所示,除了设置作为进行多重再利用的处理器的MSP1A之外,还设置多个作为通过事先执行指令区间来使RB登录信息变得有效的处理器的SSP1B,通过这些能够谋求进一步的高速化。
为了进行并行事先执行机构的硬件结构,表示在上述图25中。如该图所示,RW4A和4B、运算器5A和5B、寄存器6A和6B以及高速缓冲存储器7A和7B,按各个处理器独立而被设置,另一方面,RF/RB2’和主存储器3,以由所有的处理器来共享。在该图中,虚线表示MSP1A以及SSP1B向RF/RB2’登录输入输出的路径。
在这里,在实现并行事先执行中的课题,能举(1)如何保持主存储器的一贯性、以及(2)如何预测输入。下面将说明这些课题的解决方法。
(关于主存储器的一贯性课题的解决方法)首先,下面将说明上述课题(1)如何保持主存储器的一贯性。当根据专门预测的输入参数执行指令区间是,写入主存储器3的值在MSP1A和SSP1B是不同的。为了解决该问题,如图25所示,SSP1B,对成为向RB的登录对象的主存储器参照使用RF/RB2’,而且,对其它局部参照使用设置在每个SSP1B中的座位局部存储器的Local7B,而不需要向Cache7B和主存储器3的写入。另外,如果MSP1A向主存储器3进行了写入,则使相应的SSP1B的高速缓冲存储器行列变得无效。
具体而言,在向RB登录的对象当中,对于事先进行读出的地址参照主存储器3,并与MSP1A同样地将地址和值登录在RB中。此后,通过参照RB而不是参照主存储器3,能够防止由于从其它处理器的覆盖而发生的冲突,关于局部参照,先执行读出是相当于对变量没有进行初始化而使用,而值可以不恒定,所以不需要参照主存储器3。
另外,作为局部存储器的Local7B的容量为有限,因此,函数帧的大小超过Local7B的容量等不能继续执行时,要中断事先执行。而且,由于事先执行的结果未写入主存储器3,所以不可能利用事先执行结果来进一步进行下一个事先执行。
(预测机构)下面将说明问题(2)如何预测输入。在进行事先执行时,需要根据RB的使用历史来预测未来的输入并传递给SSP1B。为此,在RF/RB2’中设置有预测处理部分2B。该预测处理部分2B,由设置在RF的每个登录信息中的小处理器构成,并与MSP1A和SSP1B独立而算出输入预测值。
如上所述,现有的输入预测中,由于同等地处理了登录在RB的输入侧的全部地址,因此,其结果,使准确率降低。为了解决该问题,需要对预测准确的可能性较高的地址和预测准确的可能性较低的地址进行区别的同时,注意到值的变化而将必要的最小数量的地址作为预测对象。
所谓能期待预测准确的地址,是指地址恒定、且值单调变化的地址。这样的地址包括标识所参照的全局变量、以及将栈指针或帧指针作为基址寄存器来参照的局部变量(帧内变量)。
为了识别这些地址,在执行加载指令时的地址计算所参照的寄存器中设置常数标识(Const-FLAG)。对于作为栈指针或帧指针而使用的寄存器,无条件地设定常数标识。对于其它寄存器,在执行了设定常数的指令时设定常数标识(Const-FLAG)。
接着,在过去参照了的地址当中,对于一次也没有进行写入的地址,因为能保证内容没有发生变化,所以对这样的地址不需要进行预测。从而,为了区别这样的地址,设置表示进行了写入操作的变更标识(C-FLAG)。当作为输入要素的地址第一次记录到RF/RB中时,重新设定与该地址相对应的变更标识(C-FLAG),而登录后,对于该地址执行了存储指令时设定变更标识(C-FLAG)。
还有,设置历史掩码(P-Mask),该历史掩码表示是否将作为输入要素的地址作为历史存储对象。当将作为输入要素的地址第一次记录在RF/RB中时,重新设定与该地址相对应的历史掩码(P-Mask)(历史标识)。于是,在执行加载指令时,如果设定有与生成该地址的寄存器相对应的的常数标识(Const-FLAG),则历史掩码(P-Mask)当中成了加载对象的字节位置被设定。
对上述的常数标识(Const-FLAG)、变更标识(C-FLAG)、以及历史掩码(P-Mask)的设定的控制,由设置于RF/RB2’的RB登录处理部分2A来进行。该RB登录处理部分2A,由小处理器构成,并通过进行如上述的判断来设定常数标识(Const-FLAG)、变更标识(C-FLAG)、以及历史掩码(P-Mask)。
(指令区间的执行执行例)在此,作为指令区间的一个例,对于图49所示的指令区间通过图24所示的RF以及RB结构来被执行时的情况进行说明。该图中,PC表示该指令区间开始时的PC值。即,指令区间的前头的地址是1000。还有,图31示出了当执行图49示出的指令区间时RB中的实际登录情况。
在第一指令中,地址常数A1设定在寄存器R0。由于该指令为设定常数的指令,所以设定与寄存器R0相对应的常数标识(Const-FLAG)。
在第二指令中,从将寄存器R0内容作为地址的主存储器3加载的4字节数据(00110000)存储在寄存器R1。在这种情况下,地址A1、掩码(FFFFFFFF)和数据(00110000),作为输入登录在RB中的Input侧的第一列,而寄存器序号R1、掩码(FFFFFFFF)和数据(00110000)作为输出登录在RB中的Output侧的第一列。
另外,由于设定有与作为地址而使用的寄存器R0相对应的常数标识(Const-FLAG),所以与地址A1相对应的历史掩码(P-Mask)被设定。在此,成为对象的数据(00110000)是4字节数据,所以,与此相对,与地址A1相对应的历史掩码(P-Mask)中被设定(FFFFFFFF)。而且,由于在寄存器R1中常数不会被设定,所以设定与寄存器R1相对应的常数标识(Const-FLAG)。
在第三指令中,地址常数A2被设定在寄存器R0中。由于该指令为设定常数的指令,所以与寄存器R0相对应的常数标识(Const-FLAG)被设定。
在第四指令中,从将寄存器R0内容作为地址的主寄存器3加载的1字节数据(02)被存储在寄存器R2。在这种情况下,地址A2、掩码(FF000000)和数据(02)作为输入被登录在RB的Input侧的第二列。此时,对于地址A2中的剩下的3个字节,表示Don’t Care的意思的“-”被存储。寄存器序号R2、掩码(FFFFFFFF)和数据(00000002)作为输出登录在RB中的Output侧的第二列。
还有,由于设定有与作为地址而使用的寄存器R0相对应的常数标识(Const-FLAG),所以与地址A2相对应的历史掩码(P-Mask)被设定。在此,因为成为对象的数据(02)是1字节数据,所以,与此相对,(FF000000)被设定在与地址A2相对应的历史掩码(P-Mask)。而且,由于在寄存器R2中常数不会被设定,所以设定与寄存器R2相对应的常数标识(Const-FLAG)。
在第五指令中,从地址(A2+R2)加载的1字节数据(22)被存储在寄存器R2。由于地址R2的值是(02),所以将地址(A2+02)和数据(22)作为输入追加登录在RB中的Input侧的第二列。此时,地址(A2+02)的部分进行登录,而与地址(A2+01)以及(A2+03)相对应的部分,继续保持表示Don’t Care意思的“-”。即,与地址A2相对应的掩码变为(FF00FF00)。寄存器序号R2、掩码(FFFFFFFF)和数据(00000022),作为输出被覆盖在RB中的Output侧的第二列。
还有,由于重新设定有与作为地址而使用的寄存器R2相对应的常数标识(Const-FLAG),所以与地址(A2+02)相对应的历史掩码(P-Mask)不被设定。即,与地址A2相对应的历史掩码(P-Mask)仍然是(FF000000)。而且,由于在寄存器R2中常数不会被设定,所以重新设定与寄存器R2相对应的常数标识(Const-FLAG)。
在第六指令中,地址常数A3被设定在寄存器R0中。由于该指令是设定常数的指令,所以与寄存器R0相对应的常数标识(Const-FLAG)被设定。
在第七指令中,从地址为寄存器R0的内容的主寄存器3加载的1字节数据(33)被存储在寄存器R3。在这种情况下,地址A3、掩码(00FF0000)和数据(33)作为输入被登录在RB的Input侧的第三列。寄存器序号R3、掩码(FFFFFFFF)以及数据(00000033)作为输出被登录在RB的Output侧的第三列。
还有,由于设定有与作为地址而使用寄存器R0相对应的常数标识(Const-FLAG),所以与地址A3相对应的历史掩码(P-Mask)被设定。在此,成为对象的数据(33)是1字节数据,所以,与此相对,(00FF0000)被设定在与地址A3对应的历史掩码(P-Mask)。而且,由于在寄存器R3中常数不会被设定,所以与寄存器R3相对应的常数标识(Const-FLAG)重新被设定。
在第八指令中,从地址(R1+R2)加载的1字节数据(44)被存储在寄存器R4。此时,由于地址R1和R2成为在指令区间的内部被覆盖的寄存器的地址,所以地址R1和R2不会成为指令区间的输入。另一方面,由于由地址(R1+R2)所生成的地址A4是指令区间的输入,所以地址A4、掩码(00FF0000)以及数据(44)作为输入被登录在RB的Input侧的第四列。而且,寄存器序号R4、掩码(FFFFFFFF)以及数据(00000044)作为输出被登录到RB的Output侧的第四列。
还有,由于重新设定有与作为地址而使用的寄存器R1以及寄存器R2相对应的常数标识(Const-FLAG),所以与地址A4相对应的历史掩码(P-Mask)不被设定。即,与地址A4相对应的历史掩码(P-Mask)变为(00000000)。而且,由于在寄存器R4中常数不会设定,所以与寄存器R4相对应的常数标识(Const-FLAG)重新被设定。
在第九指令中,从寄存器R5读出值,将对该值加上1的结果存储在寄存器R5中。在这种情况下,寄存器R5、掩码(FFFFFFFF)以及数据(00000100)作为输入被登录在RB的Input侧的第五列。而且,寄存器序号R5、掩码(FFFFFFFF)以及数据(00000101)作为输出被登录在RB的Output侧的第五列。此时,由于在寄存器R5中常数不会被设定,所以与寄存器R5相对应的常数标识(Const-FLAG)重新被设定。
此后,假设关于地址A2和A3执行存储指令,并对地址A2和地址A3设定了变更标识(C-FLAG)。
以上结果,变更标识(C-FLAG)被设定、且历史掩码(P-Mask)被设定的掩码位置,只变为地址A2的第一字节和地址A3的第二字节。仅对应于该掩码位置的地址、掩码和值,作为预测对象、且作为按每个命令区间保持输入历史的历史信息被记录在RB的登录信息中。另外,关于登录在RB的输入模式中的寄存器,无条件地作为预测对象、且作为历史被记录。
图32示出了图49所示的指令区间反复被执行时作为历史被登录在RB中的例,如该图所示,在RB中,(FF000000)作为历史掩码(P-Mask)存储在地址A2的列中、(00FF0000)作为历史掩码(P-Mask)存储在地址A3的列中、(FFFFFFFF)作为历史掩码(P-Mask)存储在地址R5的列中。而且,随着Time1~4的变化期间,与各个地址中的历史掩码(P-Mask)相对应的值进行变化。表示在各个历史之间的diff,表示对应的输入要素的值的变化量(差分)。该diff,由预测处理部分2B来算出。
在该图所示的例中,关于地址A2和地址R5的列,Time1~4的变化期间的diff全部变为01。因此,预测与这些地址相对应的值对每个单位时间都增加01。另一方面,关于地址A3的列,Time1~4的变化期间,diff有时变为00有时变为02。因此,得知对地址A3很难进行预测。
由于上述结果,预测处理部分2B,在历史中,关于具有恒定的差分的地址,假设此后该差分继续保持恒定而进行预测的同时,而关于差分不恒定或是差分为0的地址不进行预测。
图33示出了当预测处理部分2B根据上述的预测关于执行地址A2和R5的值进行预测时,作为预测登录信息记录在RB中的输入要素的状态。该图中,关于地址(A2+4)和地址A3,没有计算出预测值而通过直接参照主存储器3来获得。
如果这样算出了输入要素的预测值,则通过SSP1B根据该预测输入要素执行指令区间来计算出输出要素,而该预测输出要素作为预测登录信息存储在RB中。此后,由MSP1A来执行指令区间并输入了与作为登录信息存储在RB中的预测输入要素相同的输入值时,通过输出与此对应的预测输出要素来实现再利用。
(RF/RB的第二结构例)接着,说明RF/RB’的第二结构例。作为第二结构例的RF/RB2’的结构与实施方案1中的图1所示的指令区间存储部分2相同。即,作为第二结构例的RF/RB2’包括RB、RF、RO1(第二输出模式存储装置)以及RO2(第一输出模式存储装置)而构成。各结构和操作与上述内容相同,因此省略其说明。
(第二结构例中的预测机构)在第二结构例中,执行指令区间时的输入输出模式临时存储在RW4A和4B中。在此,在上述第一结构例中,执行指令区间时的输入输出模式直接登录在RB中,因此,通过对于RB各行的指针来实现RW4A和4B。与此相对,第二结构例中的RF和RB都是由树结构构成,因此,RW4A和4B不能直接指向RB的行。即,在第二结构例中,RW4A和4B作为临时存储指令区间执行时的输入输出模式的实质性的存储器而发挥作用,而不是作为对于RB各行的指针而发挥作用。
还有,在第二结构例中,作为临时存储器区域,设置有如图24所示的RF和RB,该临时存储器区域存储反复执行了指定的指令区间时的输入模式的历史登录信息。但是,在这种情况下,RB中登录信息的行,由作为存储历史登录信息的历史存储行的几个行组成。
如果指令区间被执行,则其输入要素按顺次存储在RW4A和4B中,全部的输入要素齐全并通过进行运算来确定输出要素之后,该输入输出模式被存储在上述历史存储行中,同时被存储在如上述的树结构的输入输出模式的存储机构中。
另外,指定的指令区间反复被执行时,按顺序被存储在历史存储行,在指定数目的历史被存储的时刻,如上述由预测处理部分2B来进行预测,而根据预测由SSP1B来执行的结果被存储在如上述的树结构的输入输出模式存储机构中。
<实施方案3>
下面将参照

本发明的另一个实施方案。
(数据处理装置的结构)图35示出了本实施方案的数据处理装置的概要结构。如该图所示,该数据处理装置,包括MSP1A、SSP1B、以及作为再利用表的指令区间存储部分(输入输出存储装置)2、以及主存储器(主存储装置)3而构成,并进行以下的处理通过读出存储在主存储器3中的程序数据等来进行各种运算处理,并将处理结果写入主存储器3。另外,尽管该图中示出了具有一个SSP1B的结构,但可以采用具有两个以上SSP1B的结构。
指令区间存储部分2是存储为了对程序中的函数以及循环进行再利用的数据的存储装置,其包括RF、RB、RB登录处理部分(登录处理装置)2A以及预测处理部分(预测处理装置)2B而构成。后面对有关该指令区间存储部分2的RF和RB的详细内容、以及RB登录处理部分2A和预测处理部分2B的详细内容进行说明。
主存储器3,是作为MSP1A和SSP1B的工作区域的存储器,例如由RAM等来构成。例如,从硬盘等外部存储装置将程序、数据等读出到主存储器3,而MSP1A和SSP1B根据被读出到主存储器3的数据进行运算处理。
MSP1A包括RW(再利用存储装置)4A、运算器(第一运算装置)5A、寄存器6A、Cache7A以及通信部分9A而构成。另外,SSP1B包括RW(再利用存储装置)4B、运算器(第二运算装置)5B、寄存器6B、Cache/Local7B、判断部分8B以及通信部分9B而构成。
RW4A和4B,是再利用窗口,其将当前正在执行、且登录的RF和RB的各个登录信息作为环状结构的栈来保持。在实际的硬件结构中,该RW4A和4B由激活指令区间存储部分2的特定登录信息的控制线的集合而构成。
运算器5A和5B,根据保持在寄存器6A和6B中的数据进行运算处理,其被称为ALU。寄存器6A和6B是用来保持通过运算器5A和5B来进行运算所需要的数据的存储装置。另外,在本实施方案中,运算器5A和5B以及寄存器6A和6B符合SPARC结构。Cache7A和7B,作为主存储器3和MSP1A以及SSP1B之间的高速缓冲存储器而发挥功能。另外,在SSP1B中,Cache7B包括作为局部存储器的Local7B。
判断部分8B是模块,该模块,当后述的事先执行开始后的主存储器读出被进行时,判断从RB的输入输出记录行(后述)、预测值存储区域(后述)、等待用地址存储区域(后述)以及Cache/Local7B当中的哪一个读出值。后面将对该判断处理的详细内容进行说明。该判断部分8B是由SSP1B中设有的小处理器来实现的。
通信部分9A和9B是模块,该模块,当通过MSP1A或SSP1B进行主存储器写入操作时,将该信息通报给其它全部的SSP1B…或MSP1A。该通信部分9A和9B是由MSP1A或SSP1B中被设有的小处理器来实现的。
(RF/RB的结构)图34示出了本实施方案的在指令区间存储部分2中的RF和RB的概要结构。如该图所示,RF,存储有多个登录信息,并对于各个登录信息保持有V,其表示该登录信息是否有效;LRU,其表示取代该登录信息的提示;Start,其表示函数的起始地址;Read/Write,其表示应该参照的主存储器地址;以及F/L,其区别函数和循环。
还有,RB,与存储在RF中的登录信息相对应地存储有多个登录信息,并对于各个登录信息保持有V,其表示该登录信息是否有效;LRU,其表示取代该登录信息的提示;SP,其表示调用函数或循环之前的栈指针%sp;参数(Args.)(V有效的登录信息,Val.值);主存储器值(C-FLAGRead地址的变更标识、P-MaskRead地址的历史掩码、MaskRead/Write地址的有效字节、Value值、S-CountRead/Write地址的存储计数器);返回值(Return Values)(V有效的登录信息、Val.值);循环的结束地址(End);taken/not,其表示循环结束时的分支方向;以及除了参数和返回值以外的寄存器和条件码(Regs.,CC)。还有,RB保持有存储器领域,其与一个以上的寄存器地址相对应地存储常数标识(Const-FLAG)。另外,关于关常数标识(Const-FLAG)的详细内容,后面将进行说明。
接下来更加详细说明上述RF和RB中的各项目。如以上所述,上述V,表示登录信息是否有效,具体地讲,未登录时存储“0”、正在登录时存储2、登录结束时存储“1”。例如,确保RF或RB时,如果有未登录的登录信息(V=0),则使用它;如果没有未登录的登录信息,则从登录结束的登录信息(V=1)中选择具有LRU最小的登录信息而进行覆盖。正在登录的登录信息(V=2)正在被使用,所以不能进行覆盖。
上述LRU,表示按一定时间间隔向右移位的移位寄存器中的“1”的个数。对RF来说,该移位寄存器,关于相应的登录信息,进行了为了再利用的登录或尝试了再利用时,“1”被写入左端。从而,如果相应登录信息频繁被使用,则LRU变为较大的值;如果在一定期间没被使用,则LRU的值则变为0。另一方面,对RB来说,相应登录信息被进行再利用时“1”被写入移位寄存器。从而,如果相应登录信息频繁被使用,则LRU变为较大的值;而如果在一定期间没被使用,则LRU的值变为0。
接着关于上述RB中的主存储器值的Mask进行说明。通常,通过对地址和数据1字节1字节地进行管理就可以达到正确的管理,但是,实际上,通过以4字节为单位管理数据来能够高速进行高速缓冲存储器参照。因此,在RF中将主存储器地址作为4的倍数来进行存储。另一方面,将管理单位做成4个字节时,有必要显示4个字节中哪个字节是有效的,以便能够应付仅加载一个字节的情况。即,Mask是表示在4个字节当中哪个字节是有效字节的4比特数据。例如,从地址C001加载一个字节的结果,值为E8时,地址C000被登录在RF中、“0100”被登录在RB的Mask中、且“00E80000”被登录在Value中。另外,关于Read地址的变更标识(C-FLAG)和历史掩码(P-Mask)以及Read/Write地址的存储计数器(S-Count)的详细内容,后面将进行说明。
下面将说明除了上述的参数和返回值以外的寄存器和条件码(Regs.,CC)。在本实施方案中,SPARC结构寄存器当中,利用通用寄存器%g0-7、%o0-7、%10-7、%i0-7、浮点寄存器%f0-31、条件码寄存器ICC以及浮点条件码寄存器FCC(后面将说明详细内容)。在这些寄存器中,末端函数的输入是通用寄存器%o0-5、输出是通用寄存器%o0-1,还有,非末端函数的输入是通用寄存器%i0-5、输出是通用寄存器%i0-1,而且,输入被登录在arg
中、输出被登录在rti
中。根据SPARC-ABI的规定,除此之外寄存器不作为函数的输入和输出。因此,关于函数,RB中的参数(Args.)的项是足够的。
另一方面,根据SPARC-ABI的规定,关于循环的输入和输出,不能特定要使用的寄存器的种类,因此,要特定循环的输入输出,需要关于所有种类的寄存器登录在RB中。从而,%g0-7,、%o0-7、%10-7,、%i0-7、%f0-31、ICC以及FCC被登录在RB的Regs.,CC中。
如上所述,在指令区间存储部分2中,Read地址由RF来总括管理,而Mask和Value由RB来管理。由此,能够实现通过CAM来一次性地比较Read地址的内容与RB的多个登录信息的结构。
另外,如图35所示,本实施方案的RB中设有输入输出记录行(输入输出记录区域)、作为每个区间信息的历史存储行(历史存储区域)、预测值存储区域、需要等待地址存储区域、以及预测执行结果记录行。这些输入输出记录行、历史存储行、预测值存储区域、需要等待地址存储区域、以及预测执行结果记录行,以大致遵照图34所示的RB中的登录信息的形式来被实现,然而,各个的存储形式稍有不同。对这些存储形式的详细内容在后面进行说明。
(再利用处理的概要)函数和循环的每种情况中的再利用处理的概要,因为与在实施方案2(再利用处理的概要)中说明的内容相同,所以这里省略该说明。
(指令区间的执行时的处理流程)当指令被解码时的具体处理流程也与实施方案2中(指令区间的执行时的处理流程)说明的内容相同,因此在此省略该说明。还有,关于指令被解码的结果为函数调用指令时、函数返回指令时、反向分支成立时、反向分支不成立时、以及其它指令时的情况,各自的处理流程也与前述实施方案2中的说明内容相同。
(包括循环的多重再利用)关于包括循环的多重再利用,也与实施方案2中(包括循环的多重再利用)说明的内容相同,因此在此省略其说明。
(并行事先执行)如上所述,除了设置作为进行多重再利用的处理器的MSP1A之外,还设置多个作为通过事先执行指令区间来使RB登录信息变得有效的处理器的SSP1B,通过这些能够谋求进一步的高速化。
上述图35中示出了用于进行并行事先执行机构的硬件结构。如该图所示,RW4A和4B、运算器5A和5B、寄存器6A和6B以及高速缓冲存储器7A和7B独立而设置在每个处理器的同时,所有的处理器共享指令区间存储部分2和主存储器3。
在此,实现并行事先执行中的问题是(1)如何保持主存储器的一贯性,以及(2)如何预测输入。下面将说明这些课题的解决方法。
(关于主存储器一贯性的课题的解决方法)首先,下面将说明(1)如何保持主存储器的一贯性。在根据专门预测的输入参数执行指令区间的情况下,要写入主存储器3的值在MSP1A和SSP1B是不同的。为了解决该问题,如图35所示,SSP1B,对成为向RB的登录对象的主存储器参照使用指令区间存储部分2,r而且,对其它局部参照使用作为设置在每个SSP1B的局部存储器Local7B,而不需要写入Cache7B和主存储器3。另外,当MSP1A向主存储器3进行写入时,对应的SSP1B的高速缓冲存储行列变得无效。
具体地讲,在向RB的登录对象当中,对先进行读出的地址参照主存储器3,并与MSP1A同样地将地址和值登录在RB中。此后,通过参照RB而不是参照主存储器3来能够避免由于从其它个处理器的覆盖而发生的矛盾。关于局部参照,先进行读出相当于使用未初始化的变量,而该值可以不恒定,所以不必参照主存储器3。
另外,作为局部存储器的Local7B的容量为有限,因此,函数帧的大小超过Local7B的容量等不能继续执行时,要结束事先执行。另外,由于事先执行的结果不会被写入主存储器3,所以不可能利用事先执行结果来进一步进行下一个事先执行。
(预测机构的参考例)
接着,将说明问题(2)如何预测输入。要进行事先执行时,需要根据RB的使用历史来预测未来的输入并传递给SSP1B。为此,指令区间存储部分2中设置有预测处理部分2B。该预测处理部分2B由设置在RF的每个登录信息的小处理器构成,并与MSP1A和SSP1B独立而求出输入预测值。
如上所述,现有的输入预测中,由于同等地处理登录在RB的输入侧的全部地址,所以其结果使预测的准确率下降。为了解决该问题,有必要区别预测准确的可能性较高的地址与预测不准确的可能性较高的地址的同时,也要注意值的变化而只将需要的最少数量的地址作为预测对象。
所谓能够期待预测准确的地址,是指地址恒定、且值单调变化的地址。这样的地址,包括标识所参照的全局变量、以及将栈指针或帧指针作为基址寄存器而参照的局部变量(帧内变量)等。
为了识别这些地址,在执行加载指令时地址计算所参照的寄存器中设置常数标识(Const-FLAG)。将常数标识无条件设定在作为栈指针或帧指针而使用的寄存器中。关于其它寄存器,执行常数设定指令时设定常数标识(Const-FLAG)。
接着,在过去已经参照的地址中,关于一次也没有进行写入的地址,能确保内容没有发生变化,所以关于这样的地址,不必进行预测。因此,为了区别这样的地址,设置表示进行了写入的信息的变更标识(C-FLAG)。将作为输入要素的地址第一次记录到RF/RB中时,重新设定对应于该地址的变更标识(C-FLAG),登录以后,对该地址执行存储指令时设定变更标识(C-FLAG)。
还有,设置表示是否将作为输入要素的地址作为历史存储对象的历史掩码(P-Mask)。将作为输入要素的地址第一次记录到RF/RB中时,重新设定与该地址相对应的历史掩码(P-Mask)(历史标识)。而且,在执行加载指令时,如果设定有与生成该地址寄存器相对应的常数标识(Const-FLAG),则设定历史掩码(P-Mask)当中成为加载对象的字节位置。
以上的对常数标识(Const-FLAG)、变更标识(C-FLAG)以及历史掩码(P-Mask)的设定的控制,由设置在指令区间存储部分2的RB登录处理部分2A来进行。该RB登录处理部分2A由小处理器构成,并且通过进行如上述的判断来设定常数标识(Const-FLAG)、变更标识(C-FLAG)以及历史掩码(P-Mask)。
(指令区间例)在此,作为指令区间的一个例,关于图36(a)所示的指令区间被执行时的例进行说明。在该图中,PC表示该指令区间开始时的PC值。即,指令区间的起始位置的地址是1000。该指令区间具有循环结构,并由11个指令构成。另外,图36(b)简要示出了当执行上述指令区间时登录在RB中的输入地址和输入数据以及输出地址和输出数据。
在第一行指令(此后,简称为第一指令)中,地址常数A1被设定在寄存器R1。在第二指令中,利用寄存器R1的内容将地址A1的内容(00010004)加载到寄存器Rx。
在第三指令中,地址常数A2被设定在寄存器R2。在第四指令中,利用寄存器R2的内容将地址A2的内容(80000000)加载到寄存器Ry。
在第五指令中,将地址A3(00010000)的内容(0000AAAA)加载到寄存器Rz,该地址A3将从寄存器Rx的内容中减去4而得出的值作为地址。在第六指令中,设定对寄存器Rx内容加上4而得到的值(00010008)。
在第七指令中,利用寄存器R1的内容,将寄存器Rx的内容(00010008)存储在地址A1中。在第八指令中,值(40000000)设定在寄存器Ry,该值是将寄存器Ry的内容(80000000)向右移位一比特而得到的值。
在第九指令中,利用寄存器R2,将寄存器Ry的内容(40000000)存储在地址A2中。在第十指令中,值(4000AAAA)被设定在寄存器Rz,该值是将寄存器Ry的内容与寄存器Rz的内容相加而得到的值。
在第十一指令中,利用寄存器Rx,将寄存器Rz的内容(4000AAAA)存储在地址A4中。在第十二指令,处理被分支到作为循环的起始地址的地址1000。
图36(c)示出了紧随第十二指令之后进行的第二次循环处理的例。图36(d)简要示出了这种情况下登录在RB中的输入地址和输入数据、以及输出地址和输出数据。而且,图36(e)示出了紧随第二次循环处理之后进行的第三次循环处理的例。图36(f)简要示出了这种情况下登录在RB中的输入地址和输入数据、以及输出地址和输出数据。
如上所述,在第一次循环中,地址A1的值(00010004)、地址A2的值(80000000)以及地址(00010000)的值(0000AAAA)成为输入,而寄存器Rx的值(00010008)、寄存器Ry的值(40000000)、寄存器Rz的值(4000AAAA)、地址A1的值(00010008)、地址A2的值(40000000)以及地址(00010004)的值(4000AAAA)成为输出。
还有,在第二次循环中,地址A1的值(00010008)、地址A2的值(40000000)以及地址(00010004)的值(4000AAAA)成为输入,而寄存器Rx的值(0001000C)、寄存器Ry的值(20000000)、寄存器Rz的值(6000AAAA)、地址A1的值(0001000C)、地址A2的值(20000000)以及地址(00010008)的值(6000AAAA)成为输出。
在上述处理中,应该注意的问题是在第一次循环和第二次循环之间的数据的依赖关系。第一依赖关系是关于常数地址A1的第一次循环的第七指令、和第二次循环的第二指令的依赖关系。在该依赖关系中,常数地址A1的值的变化量为增量4,从而变化量为恒定。
第二依赖关系是有关常数地址A2的第一次循环的第九指令、和第二次循环的第四指令的依赖关系。在该依赖关系中,常数地址A2的值向右移位了1比特,因此其变化量不恒定。
第三依赖关系是关于进行变化的地址A4的第一次循环的第十一指令、和第二次循环的第五指令的依赖关系。在该依赖关系中,地址A4的地址变化量为增量4,从而地址变化量为恒定,而且,值的变化量不恒定。
为了通过循环之间的并行处理来对这样的循环结构进行高速化,需要动态性地掌握数据的依赖关系并对没有依赖关系的部分进行有效的并行处理。
(根据参考例的指令区间的执行例)接着,关于通过上述参考例中的RF和RB的结构来执行图36(a)中所示的指令区间的情况。图37示出了在执行图36(a)中所示的指令区间时的RB中的实际登录状态。
在第一指令中,地址常数A1被设定在寄存器R1。由于该指令是设定常数的指令,所以与寄存器R1相对应的常数标识(Const-FLAG)被设定。
在第二指令中,使用寄存器R1的内容,将地址A1的内容(00010004)加载到寄存器Rx。在这种情况下,地址A1、掩码(FFFFFFFF)以及数据(00010004)作为输入被登录在RB的Input侧的第一列,并寄存器序号Rx、掩码(FFFFFFFF)以及数据(00010004)作为输出被登录在RB的Output侧的第一列。另外,此时刻作为寄存器序号Rx的输出而被登录的值,在以后的处理中被重写,所以该值不同于图37中所示的值。
还有,由于设定有与作为地址而使用的寄存器R1相对应的常数标识(Const-FLAG),所以与地址A1相对应的历史掩码(P-Mask)被设定。在此,因为成为对象的数据(00110000)是4字节数据,所以,与此相应,在与地址A1相对应的历史掩码(P-Mask)中被设定(FFFFFFFF)。而且,由于在寄存器Rx中常数不会被设定,所以与寄存器Rx相对应的常数标识(Const-FLAG)重新被设定。
在第三指令中,地址常数A2被设定在寄存器R2中。由于该指令是设定常数的指令,所以与寄存器R2相对应的常数标识(Const-FLAG)被设定。
在第四指令中,利用寄存器R2的内容将地址A2的内容(80000000)加载到寄存器Ry。在这种情况下,地址A2、掩码(FFFFFFFF)以及数据(80000000)作为输入被登录在RB的Input侧的第二列,而寄存器序号Ry、掩码(FFFFFFFF)以及数据(80000000)作为输出被登录在RB的Output侧的第二列。另外,此时刻作为寄存器序号Ry的输出而被登录的值,在以后的处理中被重写,因此该值不同于图37中所示的值。
还有,由于设定有与作为地址而使用的寄存器R2相对应的常数标识(Const-FLAG),所以与地址A2相对应的历史掩码(P-Mask)被设定。在此,因为成为对象的数据(80000000)是4字节数据,所以,与此相应,在与地址A1相对应的历史掩码(P-Mask)中被设定(FFFFFFFF)。而且,由于在寄存器Ry中常数不会被设定,所以与寄存器Ry相对应的常数标识(Const-FLAG)重新被设定。
在第五指令中,将地址A3(00010000)的内容(0000AAAA)加载到寄存器Rz,该地址将从寄存器Rx的内容减去4的值作为地址。在这种情况下,地址A3、掩码(FFFFFFFF)以及数据(0000AAAA)作为输入被登录在RB的Input侧的第三列,而寄存器序号Rz、掩码(FFFFFFFF)以及数据(0000AAAA)作为输出被登录在RB的Output侧的第三列。而且,此时刻作为寄存器序号Rz的输出而被登录的值,在以后的处理中被重写,所以该值不同于图37中所示的值。
而且,由于重新设定有与作为地址而使用的寄存器Rx相对应的常数标识(Const-FLAG),所以(00000000)被设定在与地址A3相对应的历史掩码(P-Mask)。而且,由于在寄存器Rz中常数不会被设定,所以与寄存器Rz相对应的常数标识(Const-FLAG)重新被设定。
在第六指令中,将对寄存器Rx的内容加上4而得到的值(00010008)设定在寄存器Rx。在此,寄存器Rx已经被登录在RB的Output侧,所以不会被登录在RB的Input侧。于是,与登录在RB的Output侧的寄存器Rx相对应的值被更新为(00010008)。
在第七指令中,利用寄存器R1的内容将寄存器Rx的内容(00010008)存储在地址A1中。在此,寄存器Rx已经被登录在RB的Output侧,所以不会被登录在RB的Input侧。地址A1、掩码(FFFFFFFF)以及数据(00010008)作为输出被登录在RB的Output侧的第四列。还有,RB的Input侧中已经登录有地址A1,所以与地址A1相对应的变更标识(C-FLAG)(在图中用“change”表示)被设定。
在第八指令中,将值(40000000)设定在寄存器Ry,该值是将寄存器Ry(80000000)的内容向右移位1比特而得到的值。在此,寄存器Ry已经被登录在RB的Output侧,所以不会被登录在RB的Input侧。于是,与登录在RB的Output侧的寄存器Ry相对应的值被更新为(40000000)。
在第九指令中,利用寄存器R2的内容将寄存器Ry的内容(40000000)存储在地址A2中。在此,寄存器Ry,已经被登录在RB的Output侧,所以不会被登录在RB的Input侧。地址A2、掩码(FFFFFFFF)以及数据(40000000)作为输出被登录在RB的Output侧的第五列。还有,RB的Input侧中已经登录有地址A2,所以与地址A2相对应的变更标识(C-FLAG)(在图中用“change”表示)被设定。
在第十指令中,将对寄存器Ry的内容加上寄存器Rz的内容而得到的值(4000AAAA)设定在寄存器Rz中。在此,寄存器Ry和寄存器Rz,已经被登录在RB的Output侧,所以不会被登录在RB的Input侧。于是,与登录在RB的Output侧的寄存器Rz相对应的值被更新为(4000AAAA)。
在第十一指令中,利用寄存器Rx将寄存器Rz的内容(4000AAAA)存储在地址A4中。在此,寄存器Rx,已经被登录在RB的Output侧,所以不会被登录在RB的Input侧。地址A4、掩码(FFFFFFFF)以及数据(4000AAAA)作为输出被登录在RB的Output侧的第六列。
在第十二指令中,处理被分支到作为循环的起始地址的地址(1000)。在检测到反向分支时刻,对分支对象和开始登录的指令区间起始地址(1000)进行比较,如果一致,则该指令区间的输入输出的登录结束。
上述结果,变更标识(C-FLAG)被设置,并且历史掩码(P-Mask)被设定的位置变成地址A1和地址A2。与该掩码位置相对应的地址、掩码以及数值作为预测对象、且作为按每个指令区间保持过去的输入历史的历史信息被记录在RB的登录信息中。另外,虽然在上述例中没有出现,但,关于登录在RB的输入模式中的寄存器,无条件地作为预测对象、且作为历史被进行记录。
图38(a)示出了如图36(a)所示的指令区间反复被执行时作为历史而被登录在RB的例。如该图所示,在RB中,(FFFFFFFF)作为历史掩码(P-Mask)被存储在地址A1的列、以及(FFFFFFFF)作为历史掩码(P-Mask)被存储在地址A2的列。之后,循环数在1~4发生变化的期间,与各地址中的历史掩码(P-Mask)相对应的值发生变化。表示在各历史信息之间的diff,表示对应的输入要素的值的变化量(差分)。该diff,由预测处理部分2B来算出。
在该图所示的例中,关于地址A1的列,循环数在1~4发生变化的期间,diff全部变为04。因此,能估计为与该地址相对应的值在每一个循环都增加04。另一方面,关于地址A2的列,循环数在1~4发生变化的期间,diff的值变得不恒定。因此,很难预测地址A2。
由于上述结果,预测处理部分2B,在历史信息中,对于差分为恒定的地址,假设该差分此后也继续恒定而进行预测的同时,对于差分不恒定、或者差分为0的地址不进行预测。
图38(b)示出了预测处理部分2B根据上述预测关于地址A1的值进行预测时作为预测登录信息登录在RB中的输入要素的状态。该图中,关于地址A2和地址A7~A10,没有计算出预测值而通过直接参照主存储器3而获得。
这样计算出输入要素的预测值后,通过SSP1B根据该预测输入要素执行指令区间来计算出输出要素,并将该预测输出要素作为预测登录信息存储在RB中。此后,由MSP1A来执行指令区间,当输入了与作为预测登录信息存储在RB中的预测输入要素相同的输入值时,通过输出与其对应的预测输出要素来实现再利用。
(参考例中的问题)例如,如循环控制变量那样,能够对于单调变化的地址(对应于上述例中的地址A1)内容进行正确的预测。但是,在指令区间包括数组元素时,即使数组元素的下标单调变化,数组元素的值也一般并不一定单调变化。在图36(a)所示的例中,从地址A1加载的值相当于数组元素的下标,而将该下标作为地址而使用的主存储器参照(地址A3~A10)的地址发生变化,所以预测的准确率就会变得极其差。在循环之间不存在数据依赖关系的情况下,通过直接参照高速缓冲存储器就能够维持并行处理效果,但,例如,如图36(a)中所示的程序例那样,在循环之间存在依赖关系的情况下,不能获得根据上述那样预测的效果。图39示出了根据参考例的预测在循环处理的第二次和第三次中进行的事先执行的结果。如该图所示,出现了值不确定的地址和值与实际值不同的地址,从而得知预测效果较差。
(预测机构)
对参与向RB的输入输出模式的登录的地址,能进行如下的分类。
(1)第一类地址是其内容不发生变化的常数地址。该第一类地址,因为其内容不发生变化,所以不必在再利用时将其内容与过去值进行比较,从而这类地址是不需要预测内容的地址。
(2)第二类地址是其内容的变化量恒定的常数地址。该第二类地址,因为其内容的变化量为恒定,所以是可以进行预测的地址。在上述例中,地址A1相当于第二类的地址。
(3)第三类地址是其内容的变化量不恒定的常数地址。该第三类地址,因为预测较困难,所以有必要等待写入。在上述例中,地址A2相当于第三类的地址。
(4)第四类地址是虽然地址本身发生变化,但是各个地址的内容不发生变化的地址。即,是不发生存储的地址,从结果来看,是内容不发生变化的地址。由于该第四类地址的内容不发生变化,所以不必在再利用时将其内容与过去值进行比较,从而对这类地址是不需要预测内容的地址。
(5)第五类地址是地址本身发生变化、且各个地址的内容也因发生存储而发生变化的地址。该第五类的地址,不能期待内容的变化量恒定而预测比较困难,所以有必要等待写入。在上述例中,地址A3~A10相当于第五类的地址。
本实施方案的预测机构,在执行指令区间时,能够除去上述第一类和第四类地址并对第二类、第三类以及第五类地址进行动态分类。另外,关于第五类地址,在进行事先执行的多个处理器(MSP1A和SSP1B)之间进行数据的等待。为了实现这个目的,在上述参考例的RB中,设置有称为存储计数器(S-Count)的项。图40(a)示出了RB中输入输出记录行的例。图40(b)示出了历史存储行的例。
首先,在RB,作为由MSP1A或SSP1B记录指令区间执行中的输入输出模式的行的输入输出记录行中,作为输出要素的地址,即在Write地址中设置有存储计数器(S-Count)。另外,输入输出存储行,分别对应于MSP1A和SSP1B而被设置。
这个存储计数器(S-Count),表示由MSP1A或SSP1B来对相应地址进行存储的次数。即,每当由MSP1A或SSP1B来对相应地址进行一次存储时,RB登录处理部分2A就将相应的登录信息的存储计数器(S-Count)增加1。
另外,在RB中,在作为存储与各个指令区间相对应的历史登录信息的行的历史存储行中,在Write地址中设置有存储计数器(S-Count)。执行反向分支指令时,当结束指令区间的输入输出登录到输入输出记录行时,登录在该输入输出记录行中的内容被追加到对应于该指令区间的历史存储行。在这种情况下,登录在输入输出记录行的各输出要素的Address、Mask以及存储计数器(S-Count)被登录在历史存储行的Write侧。
还有,在RB的历史存储行中,作为输入要素的地址,即Read地址中也设置有存储计数器(S-Count)。登录在RB的输入输出记录行中的输入要素当中,设定变更标识(C-FLAG),并且,将设定有历史掩码(P-Mask)的输入要素追加到对应于该指令区间的历史存储行。此时,将登录在输入输出记录行中的Address、历史掩码(P-Mask)以及Value登录在历史存储行的Read侧。而且,登录在RB的输入输出记录行中的输入要素的全部的地址当中,与历史存储行的Write地址中包括的地址一致的地址,被追加到对应于该指令区间的历史存储行中,其中,上述历史存储行中存储有该指令区间的上次执行时的输入输出模式。在这种情况下,输入输出记录行中被登录的相应的输入要素的Address、历史掩码(P-Mask)和存储计数器(S-Count)被登录在历史存储行的Read侧。在这里,被登录的存储计数器(S-Count)的值,变为与相应的输入要素的地址一致的历史存储行的Write地址中的存储计数器(S-Count)的值,该历史存储行中存储有上次指令区间执行时的输入输出模式。
(地址的分类方法)以下说明根据以上那样结构的RB如何对上述第二类、第三类以及第五类的地址进行分类。图41(a)示出了在反复执行图36(a)所示的指令区间时的历史存储行中的登录例,图41(b)示出了预测处理部分2B根据图41(a)所示的历史信息进行如下的预测处理时的预测值存储区域、以及需要等待地址存储区域的例。
登录在与各指令区间相对应的历史存储行中的输入要素中设定有历史掩码(P-Mask)时,预测处理部分2B计算出Address的变化量和Value的变化量。Address的变化量恒定时,预测处理部分2B,将估计以后的变化量也恒定的外插值作为对应于相应输入要素的预测Address存储在预测值存储区域。另一方面,在Address的变化量不恒定时,预测处理部分2B将最后出现的Address作为相应输入要素的预测地址而存储在预测值存储区域中。
在Value的变化量恒定的情况下,预测处理部分2B,将估计以后的变化量也会恒定的外插值作为对应于相应输入要素的预测Value而设定。之后,在RB的预测值存储区域中,存储相应的Address、Mask和Value。由以上的处理,实现了有关上述的第二类地址的预测机构。另外,在图41(a)和41(b)所示例中,在地址A1中,Address的变化量为0、且恒定,Value的变化量为04、且恒定,根据这个,地址A1作为第二类的地址被登录在预测值存储区域中。
另一方面,在Value的变化量不恒定的情况下,预测处理部分2B在RB的需要等待地址存储区域中存储相应的Address和Mask的同时,向存储计数器(S-Count)(等待计数器)存储对从预测距离减去1的值乘上与历史存储行的相应输入要素相对应的存储计数器(S-Count)值而得到的值。另外,所谓预测距离,表示相应指令区间在此后反复被执行时从现在时刻开始的执行次数。通过如以上设定需要等待地址存储区域中的存储计数器(S-Count),能够准确地设定需要等待的存储次数。由此,实现了关于上述第三类地址的预测机构。另外,在图41(a)和41(b)中所示例中,地址A2,根据历史掩码(P-Mask)被设定、且Value的变化量不恒定的情况作为第三类地址被登录在需要等待地址存储区域中。
另外,在上述例中,预测处理部分2B,向存储计数器(S-Count)(等待计数器)存储对从预测距离减去1的值乘上与历史存储行的相应输入要素相对应的存储计数器(S-Count)值而得到的值,但也可以进行以下处理。即,预测处理部分,向RB的预测值存储区域存储相应的Address和Mask的同时,向存储计数器(S-Count)存储与历史存储行的相应的输入要素相对应的存储计数器(S-Count)值并可以存储特定SSP1B的信息,该SSP1B根据预测距离只短1的上次的预测值而开始了事先执行。这样,通过只有收到从全部SSP1B的执行通知当中的相应的SSP1B的执行通知时才减少存储计数器的值,能够准确地设定应该等待的存储次数。
在历史掩码(P-Mask)没有设定在登录在与各指令区间对应的历史存储行中的输入要素中的情况下,预测处理部分2B,与上述同样的方式计算出Address的变化量和Value的变化量。Address的变化量恒定时,预测处理部分2B,将估计此后的变化量也会恒定的外插值作为对应于相应输入要素的预测Address存储在需要等待地址存储区域中。另一方面,Address的变化量不恒定时,预测处理部分2B,将最后出现的Address作为相应输入要素的预测Address存储在需要等待地址存储区域。
因为不能期待Value的变化量恒定,所以,预测处理部分2B向RB的需要等待地址存储区域存储相应的Address和Mask的同时,向存储计数器(S-Count)存储与历史存储行的相应输入要素相对应的存储计数器(S-Count)值。另外,在这种情况下,由于地址在变化,因此当设定存储计数器(S-Count)时,不需要考虑预测距离。由此,实现了有关上述第五类地址的预测机构。在图41(a)和41(b)中所示例中,地址A7~A10,根据没有设定历史掩码(P-Mask)、且Value的变化量不恒定的情况作为第五类地址登录在需要等待地址存储区域中。
(通过MSP/SSP的事先执行)下面将说明基于预测值存储行的MSP1A/SSP1B的事先执行,该预测值存储行,如上述,通过预测处理部分2B的处理来生成。由SSP1B的事先执行开始启动后,进行如下的从主存储器中的读出操作。
首先,参照Cache/Local7B的同时,进行下述处理。
最初,SSP1B中的判断部分8B判断对应于相应的SSP的输入输出记录行中的与成为读出对象的主存储器地址相同的地址,是否登录在Write侧。如果已经登录,则将已登录的Value作为成为读出对象的主存储器地址的Value而读出。
如果没有登录在Write侧,SSP1B中的判断部分8B则判断对应于相应的SSP的输入输出存储行中的与判断成为读出对象的主存储器地址相同的地址是否登录在Read侧的Value中。如果已经登录,则将已登录的Value作为成为读出对象的主存储器地址的Value而读出。
如果没有登录在Read侧,SSP1B中的判断部分8B则判断与成为读出对象的主存储器地址相同的地址是否登录在预测值存储区域中。如果已经登录,则将已登录的Value作为成为读出对象的主存储器地址的Value而读出。如果没有登录在预测值存储区域中,SSP1B的判断部分8B则判断与成为读出对象的主存储器地址相同的地址在是否登录在需要等待地址存储区域中。已经登录时,如果存储计数器(S-Count)值大于0,则要保留主存储器的读出,直到存储计数器(S-Count)的值变为0,并在Value设定了有效的值之后参照Value。在以上的任何一个参照中,如果都没有成为读出对象的主存储器地址,则从Cache/Local7B读入关于相应地址的值。
另外,在通过MSP1A/SSP1B开始事先执行后进行如下的主存储器中的写入操作。
通过MSP1A或SSP1B执行存储指令时,通过通信部分9A或者通信部分9B将该信息通知给其它全部的SSP1B...或者MSP1A。在各SSP1B中,需要等待地址存储区域中登录有与被通知的地址相同的地址时,将该地址的存储计数器(S-Count)只减去1而向Value存储写入值。但是,当存储计数器(S-Count)已经是0的时候,不做任何进行。
以上述方式,通过SSP1B进行预测事先执行的结果被存储在RB的预测执行结果存储行中。
(指令区间的执行例)参照图42,对于如上述生成预测值以后根据预测值进行事先执行时的例进行如下说明。在这里,预测值是根据反复执行了四次循环处理结果而生成的。另外,该例中假设使用两个SSP1B来进行执行。该两个SSP1B分别称为SSP#1和SSP#2。
首先,MSP1A开始执行第五次循环,同时SSP#1和SSP#2在分别接收到第六次循环和第七次循环的预测值以后也开始执行。SSP#1,在为了SSP的预测值存储区域中保持地址A1和值(00010018),并在需要等待地址存储区域中保持地址A2和作为存储计数器(S-Count)值的(0001)、以及地址A8和作为存储计数器(S-Count)值的(0001)。同样,SSP#2,在为了SSP的预测值存储区域中保持地址A1和值(0001001C),并在需要等待地址存储区域中保持地址A2和作为存储计数器(S-Count)值的(0002)、以及地址A9和作为存储计数器(S-Count)值的(0001)。
SSP#1,在第二指令中,利用寄存器R1将地址A1的内容加载到寄存器Rx。此时,按照上述主存储器读出顺序,从为了SSP的预测值存储区域获得地址A1的值(00010018)。另外,在第四指令,利用寄存器R2将地址A2的内容加载到寄存器Ry。此时,按照上述主存储器读出顺序,从需要等待地址存储区域认知地址A2的存储计数器(S-Count)的值是(0001),并执行等待。
SSP#2,在第二指令中,利用寄存器R1将地址A1的内容加载到寄存器Rx。此时,按照上述主存储器读出顺序,从为了SSP的预测值存储区域获得地址A1的值(0001001C)。另外,在第四指令中,利用寄存器R2将地址A2的内容加载到寄存器Ry。此时,按照上述主存储器读出顺序,从需要等待地址存储区域认知地址A2的存储计数器(S-Count)的值是(0001),并执行等待。
此后,MSP1A执行第九指令并将地址A2和存储值(04000000)通知给SSP#1和SSP#2。在SSP#1,需要等待地址存储区域当中,地址A2的存储计数器(S-Count)的值只被减去1而变为0,并存储值(04000000)被存储在Value中。由此,结束等待状态并完成第四指令的执行。在SSP#2,需要等待地址存储区域当中,地址A2的存储计数器(S-Count)的值只被减去1而变为1,并存储值(04000000)被存储在Value中,但是,继续维持等待状态。
SSP#1,在第五指令中,利用寄存器Rx将地址A8的内容加载到寄存器Rx。此时,按照上述主存储器读出顺序,从需要等待地址存储区域确认地址A8的存储计数器(S-Count)的值是(0001),并执行等待。
此后,MSP1A执行第十一指令并将地址A8和存储值(7C00AAAA)通知给SSP#1和SSP#2。在SSP#1,需要等待地址存储区域当中,地址A8的存储计数器(S-Count)的值只被减去1而变为0,并存储值(7C00AAAA)被存储在Value中。由此,结束等待状态并完成第五指令的执行。在SSP#2,因为在需要等待地址存储区域中没有相应的地址,所以什么也不被执行而继续维持等待状态。
此后,SSP#1执行第九指令,并通知部分9B将地址A2和存储值(02000000)通知给全部的SSP1B(SSP#2)。在SSP#2,需要等待地址存储区域当中,地址A2的存储计数器(S-Count)的值只被减去1而变为0,并存储值(02000000)被存储在Value中。由此,结束等待状态并完成第四指令的执行。
进而,SSP#1执行第十一指令,并通知部分9B将地址A9和存储值(7E00AAAA)通知给全部的SSP1B(SSP#2)。在SSP#2,需要等待地址存储区域当中,地址A9的存储计数器(S-Count)的值只被减去1而变为0,并存储值(7E00AAAA)被存储在Value中。由此,结束等待状态并完成第五指令的执行。
(RF/RB的第二结构例)接着,参照图43对指令区间存储部分2的第二结构例进行说明。如该图所示,指令区间存储部分2包括RB、RA、RO1(第二输出模式存储装置)以及RO2(第一输出模式存储装置)而构成。
RB,具有Value(值存储区域),其存储作为应该进行比较值的寄存器值或者主存储器输入值;以及Key(键存储区域),其存储键序号,并具有多个Value和Key的组合行列。
RA具有终端标识E,其表示下次应该比较的寄存器序号或者主存储器地址不存在;需要比较标识,其表示下次应该比较的寄存器序号或者主存储器地址的内容被更新;R/M,其表示下次应该比较的对象是寄存器还是主存储器;Adr.(检索项目指定区域),其表示下次应该比较的寄存器序号或者主存储器地址;UP(父节点存储区域),其表示上次参照的行列序号;Alt.(需要比较项目指定区域),其比下次应该比较的寄存器序号或者主存储器地址更优先表示应该进行比较的寄存器序号或者主存储器地址;以及DN(需要比较的键指定区域),其表示优先进行比较时所需要的键,而且,这些与RB的各行列相对应地被设置。
RO1和RO2用于当根据RB和RA的检索结果判断出再利用能够被进行时,存储向主存储器以及/或者寄存器输出的输出值。RO1,与RA的各行列一对一对应地存储输出值和应该输出的地址。RO2,当只用RO1存储不下输出值时,存储没被存储的输出值和应该输出的地址。当从RO2也需要读出输出值时,在RO1的相应行列中表示有指针,该指针存储有RO2的输出值,而利用该指针从RO2中读出输出值。另外,RB和RA分别由CAM和RAM构成。
(第二结构例中的联想检索操作)下面将说明第二结构例中的联想检索操作。在图34所示的结构中,RB中的作为各登录信息的横行,包括全部的应该进行一致性比较的输入值项目。即将全部的输入模式分别作为一个行而登录在RB中。
相对于此,在第二结构例中,将应该进行一致性比较的输入值的项目划分为短单位,并将各个比较单位作为节点而获取,并且将输入模式作为树结构登录在作为地址管理表的RA和RB中。之后,进行再利用的时候,通过按顺序选择一致的节点,最终判断是否可以进行再利用。换句话说,将多个的输入模式中的共同的部分集合成一个并使其与RA和RB的一行相对应。
这样就能够消除冗长性,并能够提高构成指令区间存储部分2的存储器的利用效率。而且,由于输入模式具有树结构,所以不必使一个输入模式与作为RB中的一个行的登录信息相对应。因此,能够使应该进行一致性比较的输入值的项目数量可发生变化。
另外,因为RA和RB将输入模式作为树结构而登录,所以在进行一致性比较时,没有执行多重匹配。即,如果作为指令区间存储部分2是具有单一匹配机构的联想检索存储器,则可以实现。在这里,仅具有单一匹配机构的联想检索存储器普遍地在市场上被销售,但通过与单一匹配相同的性能能够报告多重匹配的联想检索存储器在市面上没有普遍地被销售。即,由第二结构例,可以使用市场上销售的联想检索存储器,从而能够在短时间内、且以低成本实现本实施方案的数据处理装置。
接着,参照图44对指令区间存储部分2中的联想检索操作的具体例进行说明。首先,如果检测出指令区间的执行,则程序计数器(PC)和寄存器的内容(Reg.)则被输入到RB。之后,在RB中,由联想检对已被输入的值、和登录在RB的Value列中的指令区间起始地址以及寄存器值进行比较,并作为候选(匹配行列)选择值一致的唯一的行(行列)。在该例中,作为匹配行列选择RB中的行“01”。
接着,作为匹配行列被选择的行列在RB中的地址“01”,作为编码结果被传递到RA,而与键01相对应的RA中的行列被进行参照。在与键01相对应的RA中的行列中,需要比较标识为“0”,并应该比较的主存储器地址为A1。即,关于主存储器地址A1,没有必要进行一致性比较。
然后,利用键01对RB中的Key的列进行检索。在该例中,作为匹配行列选择RB中“03”的行列。之后,作为编码结果键03被传递到RA,而与键03相对应的RA中的行列被进行参照。在与键03相对应的RA中的行列中,需要比较标识为“1”,并应该比较的主存储器地址为A2。即,关于主存储器地址A2需要进行一致比较。这里,主存储器3中的主存储器地址A2的值通过Cache7A而被读出,在RB中,Value是从主存储器3中读出的值,并且,Key为“03”的行被检索。在图44所示的例中,Key为“03”的行列有“04”和“05”两个,因为从主存储器3中读出的值是“00”,所以“05”的行列作为匹配行列被选择,并作为编码结果的将键05传递给RA。
重复执行如上述的处理,在RA中,当检测出了表示下次应该比较的寄存器序号或者主存储器地址不存在的终端标识E时,判断出输入模式全部一致,并判断出对相应的指令区间可以进行再利用。然后,“Select Output”信号从检测出终端标识E的行列中被输出,并且存储在RO1和RO2中的与该行相对应的输出值被输出至寄存器6A和主存储器3。
如上所述,第二结构例中的联想检索动作具有下述特性。首先,表示内容一致的匹配行列在RB中只成为一个行列,所以在将检索动作向下一列传递时只传递一个编码结果就可以了。因此,连接RB和RA之间的信号线可以是作为地址的编码结果的一组(N根)线。与此相对,在上述图1所示的例中,因为在RB允许多重匹配,因此连接RB中的各个列的信号线,需要对每行列进行设置(2N根)。即,如果根据第二个结构例,则能够大幅度地减少构成指令区间存储部分2的联想检索存储器中的信号线的数量。
另外,由于在检索进行时只允许单一匹配,所以应该进行比较的项目的比较顺序,限定于树结构中的参照顺序。即,对于寄存器值和存储器内容,需要一边按参照顺序进行混合一边进行比较。
输入模式,通过将各项目以叫做应该参照的Key的形式互相连接,以树结构登录在RB和RA中。另外,输入模式的项目,由终端标识来表示其终端。从而,能够改变输入模式的项目数量,因此能够根据应该登录在再利用表的指令区间的状态灵活地设定输入模式的项目数量。另外,由于输入模式的项目数量不固定,所以可以消除未利用的项目不必要地占用存储器区域的情况,从而提高了存储器区域的利用效率。
还有,因为输入模式以树结构被登录,所以对于项目内容重复的部分,多个输入模式能够共享一个行列。从而能够提高存储器区域的使用效率。
另外,采用如以上的结构时,作为构成RA和RB的存储器,其结构变为纵向长的结构。例如该存储器的容量是2Mbyte时,横向是8字,纵向是65536列。
(联想检索操作的其它例)在上述例中,在图43所示的RA中,没有使用项目UP、Alt.、以及DN。即,上述例的RA中,不必设定这些项目。与此相对,通过利用UP、Alt.、以及DN的项目能够使联想检索动作的速度更快。另外,该联想检索动作的其它例,因为与在实施方案1中(将输入模式作为树结构登录在第二结构例中)说明的内容一样,所以在此省略该说明。另外,本实施方案的RA对应于实施方案1中的RF。
(输出值的存储装置)确认输入模式一致后,关于存储作为再利用而输出的输出值的存储装置,因为也与实施方案1(输出值存储装置的结构例)中进行的说明内容相同,所以在此省略其说明。
(对指令区间存储部分的登录处理)
当某个指令区间执行时,判断出不能进行再利用时,关于将该指令区间的输入输出登录在RA、RB、RO1、以及RO2中时的动作,因为也与实施方案1(对指令区间存储部分的登录处理)中进行的说明内容相同,所以在此省略其说明。
(第二结构例中的预测机构)图45示出了适用第二结构例时的数据处理装置的概要结构。与图35所示的结构不同的点有在RW4A和RW4B中设置有输入输出记录行;在指令区间存储部分2中,RF中设置有作为每个区间信息的历史存储行、预测值存储区域、以及需要等待地址存储区域;以及设定有上述第二结构例中的RB、RA和W1。另外,W1相当于上述RO1和RO2。除此以外的结构,因为与图35中所示的结构相同,所以在此省略其说明。
在第二结构例中,作为临时存储执行指令区间时的输入输出模式的场所的输入输出记录行,变为如上述的RW4A和RW4B。这里,在上述第一结构例中,执行指令区间时的输入输出模式已经直接登录在RB,因此RW4A和RW4B通过对RB的各行的指针已经被实现了。与此相对,第二结构例中,因为RA和RB以树结构构成,所以RW4A和RW4B不能直接指向RB的行。即,在第二结构例中,RW4A和RW4B不作为对于RB各行的指针来发挥功能,而作为临时存储执行指令区间时的输入输出模式的实质性的存储器来发挥功能。
另外,虽然图43中没有示出,但在第二结构例中也,作为存储在反复执行指定的指令区间时的输入模式的历史登录信息、以及预测登录信息的临时存储器区域,如图34所示的RF和RB作为RF而被设置。但是,在这种情况下,RB中的登录信息的行,由作为存储历史登录信息的历史存储行、预测值存储区域、以及需要等待地址存储区域的多个行构成。
如果指令区间被执行,则其输入要素按顺序被存储在RW4A和RW4B中,全部的输入要素齐全并通过进行运算来确定输出要素之后,该输入输出模式被存储在上述历史存储行中的同时,被存储在如上述的树结构的输入输出模式存储机构中。
另外,指定的指令区间,反复被执行时,按顺序被存储在历史存储行,而在指定数量的历史被存储的那一时刻,如上述,由预测处理部分2B来进行预测,并根据预测由SSP1B将执行的结果存储在如上述的树结构的输入输出模式的存储机构中。
(本发明的应用例)假设有能够由“LIMIT”等来区别全局变量区域和栈区域的程序执行环境,则为了将本发明的数据处理装置也要适用于其它指令设定结构中而需要一种装置,其区别栈帧上的变量是上位/下位函数中的哪个局部变量。尤其是,当存储参数的寄存器不够而将参数存储在栈时,在被调用的函数侧不能进行该区别。
在本实施方案提到的SPARC处理器中,将参数的最开始6个字存储在通用寄存器中,并通过利用使用6个字以上的参数的函数的出现频率不高;在参数溢出到栈的时刻,使得再利用无法进行的这两点,实现了函数/循环的再利用。与SPARC处理器同样,在具有32个以上的通用寄存器的众多RISC处理器中,也能够通过同样的判断来实现如本发明的函数/循环的再利用。
产业上利用的可能性如上所述,本发明的数据处理装置,能够适用于SPARC处理器。还有,与SPARC处理器同样,也可以适用于具有32个以上的通用寄存器的众多RISC处理器。另外,还可以适用于具有这样的处理器的游戏机、移动电话机以及信息家电等。
权利要求
1.一种数据处理装置,进行从主存储装置中读取指令区间、且将运算处理的结果写入主存储装置的处理,其特征在于,包括第一运算装置,其基于从上述主存储装置读取的指令区间来进行运算;寄存器,其当由上述第一运算装置对上述主存储装置进行读出以及写入时被使用;输入输出生成装置,其生成输入输出组,该输入输出组由当通过上述第一运算装置来进行对指令区间的运算时的输入模式和输出模式构成;指令区间存储装置,其存储由上述输入输出生成装置所生成的输入输出组,上述第一运算装置,在执行指令区间时,如果该指令区间的输入模式与存储在上述指令区间存储装置中的输入模式一致,则进行将输出模式输出到寄存器以及/或者主存储装置的再利用处理,该输出模式与上述输入模式相对应地存储在上述指令区间存储装置中,上述输入输出生成装置,包括依赖关系存储部分,其表示包括在输出模式中的各个输出要素将包括在输入模式中的哪一个输入要素作为起源;输入输出组设定装置,其基于上述依赖关系存储部分中所存储的信息来设定由包括一个以上的上述输出要素的输出模式、和包括一个以上的上述输入要素的输入模式构成的输入输出组。
2.如权利要求1所述的数据处理装置,其特征在于,上述输入输出组设定装置,当成为某个第一输出要素的起源的输入要素组全部包括在成为其它的第二输出要素的起源的输入要素组时,设定将成为第二输出要素的起源的输入要素组作为输入模式、且将第一输出要素和第二输出要素作为输出模式的输入输出组。
3.如权利要求1所述的数据处理装置,其特征在于,上述输入输出组设定装置,在成为某个第一输出要素的起源的输入要素组和成为其它的第二输出要素起源的输入要素组之间,不存在共同的输入要素时,分别设定第一输入输出组、以及第二输入输出组,其中,上述第一输入输出组将成为第一输出要素起源的输入要素组作为输入模式、且将第一输出要素作为输出模式;上述第二输入输出组将成为第二输出要素起源的输入要素组作为输入模式、且将第二输出要素作为输出模式。
4.如权利要求1所述的数据处理装置,其特征在于,上述依赖关系存储部分,由将上述各输出要素作为行成分、且将上述各输入要素作为列成分的二维排列存储器构成,该二维行排列存储器的各存储器要素,保持有与该存储器要素的行成分相对应的输出要素是否将与该存储器要素的列成分相对应的输入要素作为起源的信息。
5.如权利要求4所述的数据处理装置,其特征在于,由上述的第一运算装置来进行指令区间运算时,从寄存器以及/或者主存储装置进行了读取时,上述的输入输出生成装置,进行以下处理,(1)进行了读取的寄存器以及/或者主存储装置的地址,作为输出要素登录在依赖关系存储部分时,对于由与该输出要素相对应的依赖关系存储部分的行成分构成的暂定行列,进行临时存储,(2)进行了读取的寄存器以及/或者主存储装置的地址,没有作为输出要素登录在依赖关系存储部分而作为输入要素登录在依赖关系存储部分时,临时存储暂定行列,该暂定行列,将与上述输入要素相对应的依赖关系存储部分的列所对应的存储器的要素设定为1、且将其它存储器要素设定为0,以及(3)进行了读取的寄存器以及/或者主存储装置的地址,作为输出要素和输入要素均没被登录在依赖关系存储部分时,将该地址和值作为输入要素来登录在依赖关系存储部分的同时,临时存储暂定行列,该暂定行列,将与上述输入要素相对应的依赖关系存储部分的列所对应的存储器的要素设定为1、且将其它存储器要素设定为0,向寄存器以及/或者主存储装置中进行写入时,上述的输入输出生成装置,(4)当进行了写入的寄存器以及/或者主存储装置的地址作为输出要素已被登录时,将与被登录的输出要素相对应的输出值更新成进行了写入的值的同时,将与已被登录的输出要素相对应的依赖关系存储部分的行成分,置换成在该时刻已被临时存储了的全部暂定行列的逻辑或,之后,对临时被存储的暂定行列进行初始化,以及(5)进行了写入的寄存器以及/或者主存储装置地址,没有作为输出要素被登录时,将该地址和值作为输出要素登录在依赖关系存储部分的同时,将与该输出要素相对应的依赖关系存储部分的行成分,置换成在该时刻已被临时被存储了的全部暂定行列的逻辑或,之后,对临时被存储的暂定行列进行初始化。
6.如权利要求4所述的数据处理装置,其特征在于,上述输入输出组设定装置,包括行间逻辑与比较部分,该行间逻辑与比较部分进行上述二维排列存储器中的各行成分之间的逻辑与运算,上述输入输出组设定装置,在依赖关系存储部分中,抽出某个第一行成分的反转、和某个第二行成分的逻辑与全部成为0的行成分组,并将被抽出的行成分组当中的包括输入要素组最多的行成分以外的行成分,设定为输入输出组的对象以外。
7.如权利要求4所述的数据处理装置,其特征在于,上述输入输出组设定装置,包括行间逻辑与比较部分,该行间逻辑与比较部分进行上述二维行列存储器中的各行成分之间的逻辑与运算,上述输入输出组设定装置,在依赖关系存储部分中,将对于其它任何行成分的逻辑与全部成为0的行成分,分别设定为输入输出组。
8.如权利要求1~7的任意一项所述的数据处理装置,其特征在于,进一步包括至少一个第二运算装置,上述第二运算装置,关于由上述第一运算装置来进行处理的指令区间,基于估计以后被输入的预测输入值而进行该指令区间的运算,并将该结果登录在上述指令区间存储装置中。
9.如权利要求1所述的数据处理装置,其特征在于,上述的输入输出组设定装置,包括输出侧组存储部分,其存储各输出要素所属的输入输出组的信息;输入侧组存储部分,其存储各输入要素所属的输入输出组的信息;临时存储部分,其,在生成输入输出组的过程中,当上述依赖关系存储部分发生变更时,存储已被变更的输出要素和输入要素的依赖关系;组临时存储部分,其,在生成输入输出组的过程中,当上述依赖关系存储部分发生变更时,存储已被变更的输入输出组的信息。
10.如权利要求9所述的数据处理装置,其特征在于,上述的输入输出组设定装置,还包括组管理部分,该组管理部分,在生成输入输出组过程中,存储对于上述输出要素以及/或者上述输入要素已经被分配的输入输出组信息。
11.如权利要求9所述的数据处理装置,其特征在于,上述依赖关系存储部分,由将上述各输出要素作为行成分、且将上述各输入要素作为列成分的二维行列存储器构成,并且,该二维行列存储器的各存储器要素,保持有与该存储器要素的行成分相对应的输出要素是否将与该存储器要素的列成分相对应的输入要素作为起源的信息。
12.如权利要求11所述的数据处理装置,其特征在于,上述临时存储部分,用于存储上述依赖关系存储部分中的多个行的存储器要素的逻辑或,上述组临时存储部分,用于存储上述输出侧组存储部分中的多个行的存储器要素的逻辑或、以及/或者与上述输入侧组存储部分中的多个输入要素相对应的存储器要素的逻辑或。
13.如权利要求9所述的数据处理装置,其特征在于,上述输入输出组设定装置,还具有条件分支存储部分,该条件分支存储部分,在生成输入输出组过程中,检测出了条件分支指令时,存储该条件分支指令所依赖的输入要素的信息。
14.如权利要求12所述的数据处理装置,其特征在于,由上述的第一运算装置来进行指令区间运算时,从寄存器以及/或者主存储装置进行了读取时,上述的输入输出生成装置进行以下处理,(1)进行了读取的寄存器以及/或者主存储装置的地址,作为输出要素登录在依赖关系存储部分时,将与该输出要素相对应的依赖关系存储部分的行成分、和上述临时存储部分各要素的逻辑或存储在该临时存储部分的同时,将与该输出要素相对应的输出侧组存储部分的行成分、和上述组临时存储部分的各要素的逻辑或存储在该组临时存储部分,(2)进行了读取的寄存器以及/或者主存储装置的地址,没有作为输出要素登录在依赖关系存储部分,而作为输入要素登录在依赖关系存储部分时,将与该输入要素相对应的依赖关系存储部分的列所对应的存储器要素设定为1、且将其它的存储器要素设定为0的信息存储在上述临时存储部分的同时,将与该输入要素相对应的输入侧组存储部分的各要素、和上述组临时存储部分的各要素的逻辑或存储在该组临时存储部分,以及(3)进行了读取的寄存器以及/或者主存储装置的地址,作为输出要素和输入要素均没被登录在依赖关系存储部分时,将该地址和值作为输入要素登录在依赖关系存储部分的同时,将与该输入要素相对应的依赖关系存储部分的列所对应的存储器要素设定为1、且将其它的存储器要素设定为0的信息存储在上述临时存储部分,向寄存器以及/或者主存储装置进行了写入时,上述的输入输出生成装置,(4)进行了写入的寄存器以及/或者主存储装置的地址,作为输出要素被登录了时,将与被登录的输出要素相对应的输出值更新为进行了写入的值的同时,将与已被登录了的输出要素相对应的依赖关系存储部分的行成分,置换成在该时刻已被临时存储了的、存储在上述临时存储部分中的信息的同时,根据存储在上述组临时存储部分中的信息,对与该输出要素相对应的输出侧组存储部分的信息、以及与该输出要素所依赖的各输入要素相对应的输入侧组存储部分的信息进行更新,以及(5)进行了写入的寄存器以及/或者主存储装置地址,没有作为输出要素被登录了时,将该地址和值作为输出要素登录在依赖关系存储部分的同时,将与该输出要素相对应的依赖关系存储部分的行成分,置换成在该时刻已被临时存储了的、存储在上述临时存储部分中的信息的同时,根据存储在上述组临时存储部分的信息,对与该输出要素相对应的输出侧组存储部分的信息、以及与该输出要素所依赖的各输入要素相对应的输入侧组存储部分的信息进行更新。
15.如权利要求1或9所述的数据处理装置,其特征在于,上述指令区间存储装置,包括将多个上述输入模式作为树结构来存储的输入模式存储装置,其中,上述树结构将应该进行一致性比较的项目看作节点。
16.如权利要求15所述的数据处理装置,其特征在于,上述输入模式存储装置,通过使得上述输入模式当中的应该进行一致性比较的项目的值、和下次应该进行比较的项目对应而进行存储来实现上述树结构。
17.如权利要求16所述的数据处理装置,其特征在于,上述输入模式存储装置,包括联想检索装置和附加存储装置,上述联想检索装置,包括一个以上的检索对象行列,该检索对象行列具有存储应该进行一致性比较项目的值存储区域、和存储识别该项目的键的键存储区域,上述的附加存储装置,在与上述检索对象行列相对应的每个对应行列中,具有存储下次应该进行联想检索的项目的检索项目指定区域。
18.一种数据处理装置,进行从主存储装置读取指令区间、且将运算处理的结果写入主存储装置中的处理,其特征在于,包括第一运算装置,其基于从上述主存储装置读取的指令区间来进行运算;寄存器,其当由上述第一运算装置对上述主存储装置进行读出以及写入时被使用;输入输出存储装置,其存储作为多个的指令区间的执行结果的输入模式和输出模式,上述的第一运算装置,在执行指令区间时,如果该指令区间的输入模式和存储在上述输入输出存储装置的输入模式相一致,则进行将输出模式输出到寄存器以及/或者主存储装置的再利用处理,该输出模式与上述输入模式相对应地存储在上述的输入输出存储装置中,同时,还包括登录处理装置,其将由上述第一运算装置执行的指令区间的执行结果存储在上述输入输出存储装置时,对于包括在输入模式中的输入要素当中的应该进行预测的输入要素、和没有必要进行预测的输入要素进行区别,并将该区别信息登录在上述输入输出存储装置中;预测处理装置,其基于上述的区别信息,对于存储在上述的输入输出存储装置的输入要素当中的应该进行预测的输入要素的值的变化进行预测;第二运算装置,其基于由上述预测处理装置所预测的输入要素,事先执行相应的指令区间,并且,将由上述第二运算装置执行的指令区间的事先执行结果存储在上述输入输出存储装置中。
19.如权利要求18所述的数据处理装置,其特征在于,上述的登录处理装置,对于用于输入的上述寄存器的各个地址,作为栈指针或帧指针而被使用时,以及对于该地址的写入指令为常数组指令时,对于相应地址设定作为区别信息的常数标识,除了上述情况外,对于相应地址重新设定上述常数标识。
20.如权利要求18或19所述的数据处理装置,其特征在于,上述的登录处理装置,当输入要素第一次存储在上述输入输出存储装置时,对于该输入要素的地址,作为区别信息重新设定变更标识,并且,输入要素已存储在上述的输入输出存储装置之后,对于相应地址执行了存储指令时,对相应地址设定变更标识。
21.如权利要求19所述的数据处理装置,其特征在于,上述的登录处理装置,当输入要素第一次存储在上述输入输出存储装置时,对于该输入要素的地址作为区别信息重新设定历史标识,而且,对于该地址执行加载指令时,如果在生成该地址的寄存器地址中设定有上述常数标识,则对于该地址设定历史标识。
22.如权利要求21所述的数据处理装置,其特征在于,上述的登录处理装置,当输入要素第一次存储在上述输入输出存储装置中时,对于该输入要素的地址,作为区别信息重新设定变更标识,并且,输入要素已存储在上述输入输出存储装置之后,对于相应地址执行了存储指令时,对相应地址设定变更标识,同时,上述的预测处理装置,关于存储在上述输入输出存储装置中的输入要素的地址当中的设定有上述的变更标识、且设定有历史标识的地址,进行输入要素变化的预测。
23.如权利要求18或21所述的数据处理装置,其特征在于,上述的预测处理装置,只对于存储在上述输入输出存储装置的输入要素当中的、该输入要素的历史中的值的变化量为非0的输入要素,进行输入要素值的变化预测。
24.如权利要求18所述的数据处理装置,其特征在于,上述登录处理装置,将由上述第一运算装置执行的指令区间的执行结果存储在上述输入输出存储装置时,对于包括在输入模式中的输入要素当中的应该进行预测的输入要素、和不需要进行预测的输入要素进行区别,并将该区别信息登录在上述的输入输出存储装置的同时,对于存储在上述输入输出存储装置中的输出模式中的输出要素当中的执行相应指令区间时已进行了存储的部分,进行存储次数的计数,并将该计数值存储在上述输入输出存储装置中,并且,上述的第二运算装置,根据由上述预测处理装置来预测的输入要素,对相应指令区间进行事先执行的同时,等待根据上述的计数值对相应输入要素进行的存储的次数,并从主存储进行读取来进行相应的指令区间的事先执行。
25.如权利要求24所述的数据处理装置,其特征在于,上述的输入输出存储装置,包括输入输出记录区域,该输入输出记录区域临时记录作为由上述第一运算装置执行的指令区间的执行结果的输入模式和输出模式,而且上述的输入输出记录区域,具有对于各输出要素存储进行了存储的次数的存储计数器。
26.如权利要求25所述的数据处理装置,其特征在于,上述的输入输出存储装置,具备历史存储区域,该历史存储区域对由上述的第一运算装置进行运算的每个指令区间存储过去执行结果的历史信息,而且,上述的登录处理装置,将记录在上述输入输出记录区域的执行结果存储在在上述历史存储区域的同时,对于记录在上述输入输出记录区域中的执行结果的输入模式中包括的输入要素当中的、与作为上次的执行结果登录在历史存储区域的输出要素具有相同地址的输入要素,将对应的上次的输出要素的存储计数器作为对于该输入要素的存储计数器而登录。
27.如权利要求26所述的数据处理装置,其特征在于,上述的输入输出存储装置,包括预测值存储区域,该预测值存储区域存储由上述预测处理装置预测的输入要素,上述的预测处理装置,关于存储在上述的历史存储区域中的输入要素当中的、在执行历史中的值的变化量恒定的输入要素进行值的预测并存储在上述预测值存储区域中。
28.如权利要求26所述的数据处理装置,其特征在于,上述的输入输出存储装置,包括需要等待的地址存储区域,该需要等待的地址存储区域等待存储次数之后存储应该从主存储器中进行读取的输入要素,而且,上述的预测处理装置,关于存储在上述历史存储区域中的输入要素当中的、执行历史中的地址没有发生变化、且执行历史中的值的变化量不恒定的输入要素,将上述的存储计数器以及作为基于预测距离的值的等待计数器存储在上述需要等待的地址存储区域中。
29.如权利要求26所述的数据处理装置,其特征在于,上述的输入输出存储装置,包括需要等待的地址存储区域,该需要等待的地址存储区域等待存储的次数之后存储应该从主存储中进行读取的输入要素,而且,上述的预测处理装置,关于存储在上述历史存储区域中的输入要素当中的、执行历史中的地址本身发生变化、且各个地址的值也因发生存储而发生变化的输入要素,将作为基于上述存储计数器的值的等待计数器存储在上述需要等待的地址存储区域中。
30.一种数据处理程序,其特征在于,权利要求1~29中的其中之一项中记载的数据处理装置所包括的各个装置所进行的处理,由计算机来执行。
31.记录了权利要求30所述的数据处理程序的能够由计算机读取的记录介质。
全文摘要
依赖关系存储部分M,表示各输出地址和输出值将哪个输入地址和输入值作为起源。行间逻辑与比较部分MR,进行存储在依赖关系存储部分M中的各行要素之间的逻辑与计算,并设定由输出模式和输入模式构成的输入输出组,其中,所述输出模式包括一个以上的输出地址和输出值,所述输入模式包括一个以上的输入地址和输入值。由此,能够提供在进行再利用的基础上将更准确的输入输出组登录在指令区间存储装置中的数据处理装置。
文档编号G06F9/40GK1993673SQ20058001054
公开日2007年7月4日 申请日期2005年3月25日 优先权日2004年3月29日
发明者中岛康彦 申请人:国立大学法人京都大学, 独立行政法人科学技术振兴机构
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1