专利名称:时间-固定处理器中零开销的分支和循环的制作方法
技术领域:
本发明通常涉及在数字处理方面的改进,并且更特别地涉及一种在并行处理器中用于支持条件分支以及循环的方法、设备和编译器。
背景技术:
可编程处理器用于根据指令中编码的程序信息来将输入数据转换成输出数据。所得到的输出数据取决于输入数据、程序信息,以及取决于在时间上任何给定时刻处理器的瞬时状态。在传统的处理器中,这个状态是由例如存储在寄存器中的临时数据值以及所谓的标志组成的。在计算期间,这些标志一般被用来设置特定的舍入(rounding)模式,以便影响某些操作的语义,或改变程序流程,仅举几个例子。标志一般存储在特定的标志寄存器中,在该寄存器中,在每个能够改变一个或多个标志的指令之后,标志都会被重写。一般情况下,在处理器内部,在任何给定的时间点对于同一标志存在多个值是不可能的。
当前对提高高性能计算的要求已经导致引入几种解决方案,其中某种形式的并行处理,即并行性,已经被引入到处理器体系结构中来。两个已经被采纳的主要概念是多线程概念,其中程序的几个线程是并行执行的,还有就是超长指令字(VLIW)概念。对于VLIW处理器来说,多指令被封装成一条长指令,即所谓的VLIW指令。VLIW处理器利用多个独立的执行单元来并行执行这些多指令。该处理器允许在程序中采用指令级并行,从而一次执行多于一条的指令。由于这种形式的并行处理,所以处理器的性能得到了提高。为了在VLIW处理器上运行软件程序,该软件程序必须被翻译成一组VLIW指令。通过优化并行性,编译器试图使执行程序所需的时间最小化。在分配给单VLIW指令的多条指令要能够并行执行的约束以及在数据相关性的约束下,编译器将多条指令组合成一条VLIW指令。在VLIW指令中对并行指令的编码导致代码尺寸的剧烈增加。就所需的存储容量和所需的存储带宽这两个方面来讲,大的代码尺寸导致程序存储器成本的增加。在现代VLIW处理器中采用不同的措施来减少代码尺寸。一个重要的例子就是,在数据固定VLIW处理器中,将空操作(NOP)的操作用紧凑格式来表示,即在附于VLIW指令前面的特殊报头中,通过单比特对NOP操作进行编码,从而产生压缩的VLIW指令。
为了控制处理器的数据流水线中的操作,通常会在计算机体系结构中使用两种不同的机制数据-固定编码和时间-固定编码,正如在“Embedded software in real-time signal processing systemsdesign technologies”,G.Goossens,J.van Praet,D.Lanneer,W.Geurts,A.Kifli,C.Liem and P.Paulin,Proceedings of theIEEE,vol.85,no.3,March 1997中所公开的那样。对于数据-固定编码来说,作为处理器指令集的一部分的每条指令,当其遍历数据流水线时,它控制必须对特定数据项执行的一个完整序列的操作。一旦该指令已经从程序存储器中取出并进行解码,处理器控制器硬件就要确保所组成的操作(composing operation)在正确的机器周期中执行。对时间-固定编码来说,作为处理器指令集的一部分的每条指令,控制必须在单机器周期内执行的一整套操作。这些操作可以应用于遍历数据流水线的几个不同的数据项。在这样的情况下,编程器或编译器的任务就是建立和维护数据流水线。所得到的流水线调度在机器代码程序中是完全可见的。时间-固定编码通常被用于专用处理器,因为它以较大的代码尺寸的代价节省了对在指令中存在的控制信息进行延迟所需的硬件开销。对于数据-固定处理器来说,无需使用转移操作就可以实施操作的条件执行。然而,对于常规的时间-固定处理器来说,不使用转移操作是不可能进行操作的条件执行的。在以前的申请(EP申请号03101038.代理人的案卷号PHNL030384EPP)中,公开了一种无需使用转移操作就允许操作的条件执行的时间-固定处理器。
标志及其被存储和更新的方式的原理的不足在于,它们导致了处理器中所谓的副作用(side effect),即在程序中不是清晰可见的行为。代之以,副作用导致了一种隐含的行为,其中在程序的不同部分中相同的操作会表现出不同的语义,这取决于早期进行的操作。如果标志的更新能够更好地受程序控制的话,则会使程序更有效率。例如,如果在减法的零输出时发生分支,那么就会用到以零标志作为条件的分支。然而在那样的情况下,在减法操作和分支操作之间不会安排改变零标志的操作。因为一般情况下很多操作会更新标志,因此该减法操作必须经常恰好安排在分支操作之前。这些种类的约束严重地限制了程序中调度的自由度,从而将更有效的调度潜在地排除在外。通常会认为标志会使创建强大的高级语言的编译器要困难得多,所述高级语言比如是C编程语言。特别是在并行处理器中,象VLIW处理器,标志强加了额外的问题,因为如果多个操作可以并行执行的话,不清楚的是应该允许哪个操作对标志寄存器进行更新。理想的是,适于编译器的VLIW处理器仅表现出最小数量的副作用。通过消除传统的标志的概念,可以消除很多这样的副作用。例如,通过使用特殊的操作码就可以实现特殊的舍入模式或者其它的特殊操作语义,举例来说,用于带进位加法的特殊addc指令,其作为紧跟在标准add指令的数据输入之后的第三数据输入。这样,将标志作为数据来对待。然而,剩余的问题是分支的实现,这些分支通常是用标志来处理的,例如,用零标志来确定相等时分支。
本发明的目的在于,无需使用标志就能够在处理器、特别是在并行处理器中使用分支和循环。
发明内容
该目的是利用在程序计数器控制下被安排执行一组指令的处理系统来实现的,该处理系统包括执行单元;用于存储数据的第一寄存器文件,该第一寄存器文件可由执行单元进行访问;用于存储该组指令的程序存储器;用于存储程序计数器的值的第二寄存器文件,该第二寄存器文件可由执行单元进行访问,以及其中执行单元被安排用来有条件地执行将程序计数器的值写到第二寄存器文件中的专用指令。该计算装置可以包括加法器、乘法器、用于执行逻辑操作、查找表操作、存储器访问等的装置,所述逻辑操作例如是AND、OR、XOR等。
在指令的正常的顺序执行期间,程序计数器的值每周期递增。然而,在指令执行期间,为了指向下一个要执行的目标指令,分支和循环要求程序计数器能够转到不同于其增量的值。通过有条件地执行专用指令,在条件为真的情况下,允许执行单元将程序计数器的值写到第二寄存器文件中。如果条件不是真,则程序计数器的值就不写到第二寄存器文件中。在第一种情况中,程序计数器将指向下一个要执行的分支或循环目标指令。在第二种情况中,程序计数器能够照常递增,而不执行分支或循环操作。结果,在不需要标志的情况下,允许条件分支和循环。
US 6,366,999描述了一种在超长指令字处理器中支持条件执行的方法和设备。由执行指令所产生的条件状态被保存在所谓的算术条件标志(ACF)中。ACF既在条件分支中使用,又在条件执行中使用。此外,ACF包括这样的状态信息,即该状态信息作为指令执行的结果被设置或者作为状态信息的布尔组合的结果被设置。这些ACF可以由条件指令进行指定和使用,因此使条件分支的使用最小化。然而,它没有公开在不使用标志的情况下如何在处理器中执行条件分支,也没有公开如何实现这样的处理器。
本发明的一个实施例的特征在于,进一步安排执行单元对分支条件进行计算,并随后利用该计算的结果作为监视信号(guard),以有条件地执行第一专用指令,用于将程序计数器的值写到第二寄存器文件中。分支条件可以事先计算出来,并且利用专用指令来实施将程序计数器的值有条件地回写到第二寄存器文件中。
本发明的一个实施例的特征在于,进一步安排执行单元执行第二专用指令,该第二专用指令至少具有第一自变量和第二自变量,第二自变量是程序计数器的值,其中,安排第二专用指令依据第一自变量的值将程序计数器的值写到第二寄存器文件中。第一自变量可以是分支条件的值或者任何其它的数据值。原则上,任何类型的操作和任何类型的执行单元都可以这样改变程序计数器值,并因此能够实施条件分支或循环。
在从属权利要求中描述了本发明的进一步实施例。还要求了一种根据本发明的方法以及编译器程序产品,该方法用来对所述处理系统进行编程,以及当所述编译器程序产品在计算机系统上运行时,所述编译器程序产品被安排用来实施所述对处理系统进行编程的方法中的所有步骤。
图1显示根据本发明的第一VLIW处理器的原理框图。
图2显示根据本发明的第二VLIW处理器的原理框图。
具体实施例方式
参考图1和图2,原理框图说明了一种时间-固定VLIW处理器,其包括多个执行单元EX1和EX2以及分布式寄存器文件,该分布式寄存器文件包括寄存器文件RF1和RF2。可以由执行单元EX1和EX2分别对寄存器文件RF1和RF2进行存取,以用来从寄存器文件中取回输入数据ID。执行单元EX1和EX2还通过通信网络CN以及多路复用器MP1和MP2耦合到寄存器文件RF1和RF2,以用于将结果数据RD1和RD2作为写数据WD1和WD2从所述执行单元传递到分布式寄存器文件。处理器进一步包括寄存器文件RF3,其用来存储程序计数器PC的值。执行单元EX2通过通信网络CN以及多路复用器MP3和MP4耦合到寄存器文件RF3,以用于将结果数据RD2作为写数据WD3写到寄存器文件RF3中。通过在执行单元EX2和寄存器文件RF3之间的直接连接,执行单元EX2还可以从寄存器文件RF3中读取程序计数器PC的值。控制器CTR从寄存器文件RF3中读取程序计数器PC的值。程序计数器的此值指向程序存储器PM中的一个地址,程序存储器中存储的是接下来要执行的指令。利用程序计数器PC的值,控制器CTR将指令IN从程序存储器PM中取出来。指令IN被存储在指令寄存器IR中。接下来,由控制器CTR从指令寄存器IR中取回指令IN,并且该控制器CTR对指令IN进行解码。控制器CTR还利用单元INCR使从寄存器文件RF3中读取的程序计数器PC的值递增,并将递增的程序计数器PC的值发送到多路复用器MP4。通过多路复用器MP4,依据写入允许索引(index)WE3,将递增的程序计数器PC的值或与写数据WD3相对应的程序计数器的值存储到寄存器文件RF3中。如果写入允许索引WE3等于真,则将与写数据WD3相对应的程序计数器的值写到寄存器文件RF3中,否则将递增的程序计数器PC的值写到寄存器文件RF3中。通常,执行的指令包括类RISC操作以及定制的操作,类RISC操作仅需要两个操作数并且仅产生一个结果,定制的操作可以使用多于两个的操作数和/或可以产生多于一个的结果。一些指令可能需要小的或大的立即值作为操作数数据。解码步骤的结果是写选择索引WS1、WS2和WS3,写寄存器索引WR1和WR2,读寄存器索引RR1和RR2,操作有效索引OPV1和OPV2,以及操作码OC1和OC2。通过控制器CTR与多路复用器MP1、MP2和MP3之间的耦合,写选择索引WS1、WS2和WS3被分别提供给多路复用器MP1、MP2和MP3。写选择索引WS1、WS2和WS3被相应的多路复用器使用,以用于从通信网络CN中为必须分别写到寄存器文件RF1、RF2和RF3中的数据WD1、WD2和WD3选择所需的输入通道。写选择索引WS1、WS2和WS3也被相应的多路复用器使用,以用于从通信网络CN中为写入允许索引WE1、WE2和WE3选择输入通道,该写入允许索引用于启动或禁止将数据WD1、WD2和WD3实际写到相应的寄存器文件RF1、RF2或RF3的操作。控制器CTR耦合到寄存器文件RF1和RF2,分别提供写寄存器索引WR1和WR2,以用来从相应的必须被写入数据的寄存器文件中选择一个寄存器。控制器CTR还分别给寄存器文件RF1和RF2提供读寄存器索引RR1和RR2,以用来从相应的寄存器文件中选择一个寄存器,输入数据ID必须分别由执行单元EX1和EX2从该寄存器中读取。寄存器文件RF3仅具有一个寄存器,因此不需要读寄存器索引,也不需要写寄存器索引。控制器CTR也耦合到执行单元EX1和EX2,以用于分别提供操作码OC1和OC2,该操作码定义了执行单元EX1或EX2必须对相应输入数据ID所执行的操作的类型。操作有效索引OPV1和OPV2也分别被提供给执行单元EX1和EX2,并且这些索引指示一个有效操作是否是由相应的操作码OC1或OC2定义的。操作有效索引OPV1和OPV2的值是在VLIW指令的解码期间确定的。解码后,控制器从该程序中获得写选择索引WS1、WS2和WS3,并直接将写选择索引提供给相应的多路复用器MP1、MP2或MP3。
参考图1,控制器CTR耦合到寄存器105。在解码步骤期间,控制器CTR从该程序中得到操作有效索引OPV1和OPV2,并且将这些操作有效索引提供给寄存器105。如果编码的操作是NOP操作,则操作有效索引被设置为假,否则操作有效索引被设置为真。根据相应的执行单元EX1和EX2的流水线,使用寄存器105、107和109对操作有效索引OPV1和OPV2进行延迟。在可选实施例中,依据相应执行单元的流水线深度,可以存在不同数目的寄存器。在由执行单元EX1和EX2执行完分别通过操作码OC1和OC2定义的操作之后,产生了相应的结果数据RD1和RD2以及相应的输出有效索引OV1和OV2。如果相应的结果数据RD1或RD2有效,则输出有效索引OV1或OV2就为真,否则就为假。单元101对延迟的操作有效索引OPV1和输出有效索引OV1执行逻辑与操作,得到了结果有效索引RV1。单元103对延迟的操作有效索引OPV2和输出有效索引OV2执行逻辑与操作,得到了结果有效索引RV2。单元101和103都通过部分连接的网络CN耦合到多路复用器MP1和MP2,以用于将结果有效索引RV1和RV2传递到多路复用器MP1和MP2。只有单元103通过部分连接的网络CN耦合到多路复用器MP3,以用于将结果有效索引RV2传递到多路复用器MP3。由相应的多路复用器MP1和MP2使用写选择索引WS1和WS2从连接网络CN中选择一个通道,通过该通道,结果数据作为写数据WD1或WD2,必须被分别写到相应的寄存器文件中。如果多路复用器MP1或MP2选择了一个结果数据通道,则使用结果有效索引RV1和RV2对写入允许索引WE1和WE2进行设置,用于控制分别将结果数据RD1和RD2写到寄存器文件RF1和RF2中。如果多路复用器MP1或MP2已经选择了与结果数据RD1相对应的输入通道,那么就用结果有效RV1对与那个多路复用器相对应的写入允许索引进行设置;而如果选择了与结果数据RD2相对应的输入通道,那么就用结果有效索引RV2对相应的写入允许索引进行设置。如果多路复用器MP3已经选择了与结果数据RD2相对应的输入通道,就使用结果有效RV2对写入允许索引WE3进行设置,用于控制将写数据WD3存储到寄存器文件RF3中。如果结果有效索引RV1或RV2为真,则通过相应的多路复用器MP1、MP2或MP3将适当的写入允许索引WE1、WE2或WE3设置为真。如果写入允许索引WE1或WE2等于真,则在通过与那个寄存器文件相对应的写寄存器索引WR1或WR2而选定的寄存器中,将结果数据RD1或RD2写到寄存器文件RF1或RF2中。如果写入允许索引WE1或WE2被设置为假,则尽管已经通过相应的写选择索引WS1或WS2选择了一个将数据写入到相应的寄存器文件RF1或RF2的输入通道,但是没有数据会被写到那个寄存器文件中。如果写入允许索引WE3被设置为真,则多路复用器MP4选择与写数据WD3相对应的通道作为输入,并将结果数据RD2写入到寄存器文件RF3中。如果写入允许索引WE3被设置为假,则多路复用器MP4选择与程序计数器PC相对应的通道作为输入,并将程序计数器PC的值写入到寄存器文件RF3中。为了禁止分别通过给定的寄存器文件RF1、RF2和RF3的写端口回写任何结果数据RD1或RD2,可以使用与那个寄存器文件相对应的写选择索引WS1、WS2或WS3从相应的多路复用器MP1、MP2或MP3中选择缺省输入111,在这种情况下,相应的写入允许索引WE1、WE2或WE3被设置为假。
参考图2,控制器CTR耦合到逻辑单元201和205。在解码步骤期间,控制器CTR从该程序中取回操作有效索引OPV1和OPV2,并且将这些操作有效索引分别提供给逻辑单元201和205。如果编码的操作是NOP操作,则操作有效索引被设置为假,否则操作有效索引被设置为真。寄存器文件RF1和RF2分别耦合到单元201和205,并且分别将相应的监视信号GU1和GU2的值从寄存器文件RF1和RF2写到单元201和205中。监视信号GU1和GU2要么是真,要么是假,这取决于在确定代表那个监视信号的数据的值期间的操作的结果。单元201和205对相应的操作有效索引OPV1或OPV2以及相应的监视信号GU1或GU2执行逻辑与操作。根据相应的执行单元EX1和EX2的流水线,使用寄存器209、211和213对得到的索引进行延迟。在执行单元EX1和EX2已经分别执行完经由操作码OC1或OC2定义的操作之后,产生了相应的结果数据RD1和RD2以及相应的输出有效索引OV1和OV2。如果相应的结果数据RD1或RD2是有效的输出数据,那么输出有效索引OV1和OV2就为真,否则就为假。单元203对延迟的索引和输出有效索引OV1执行逻辑与操作,得到了结果有效索引RV1,其中延迟的索引是由监视信号GU1和操作有效索引OPV1产生的。单元207对延迟的索引和输出有效索引OV2执行逻辑与操作,得到了结果有效索引RV2,其中延迟的索引是由监视信号GU2和操作有效索引OPV2产生的。单元203和207通过部分连接的网络CN分别耦合到多路复用器MP1和MP2,以用于将结果有效索引RV1和RV2传递到多路复用器MP1和MP2。只有单元207通过部分连接的网络CN耦合到多路复用器MP3,以用于将结果有效索引RV2传递到多路复用器MP3。由相应的多路复用器MP1和MP2使用写选择索引WS1和WS2从连接网络CN中选择一个通道,通过该通道,结果数据作为写数据WD1或WD2,必须被分别写到相应的寄存器文件中。如果多路复用器选择了一个结果数据通道,则使用结果有效索引RV1和RV2对写入允许索引WE1和WE2进行设置,用于控制将结果数据RD1和RD2分别写到寄存器文件RF1和RF2中。如果多路复用器MP1或MP2已经选择了与结果数据RD1相对应的输入通道,那么就用结果有效RV1对相应于那个多路复用器的写入允许索引进行设置;而如果选择了与结果数据RD2相对应的输入通道,那么就用结果有效索引RV2对相应的写入允许索引进行设置。如果多路复用器MP3已经选择了与结果数据RD2相对应的输入通道,那么就用结果有效索引RV2对写入允许索引WE3进行设置,用于控制将写数据WD3存储到寄存器文件RF3中。如果结果有效索引RV1或RV2为真,就通过相应的多路复用器MP1、MP2或MP3将适当的写入允许索引WE1、WE2或WE3设置为真。如果写入允许索引WE1或WE2等于真,则在通过与那个寄存器文件相对应的写寄存器索引WR1或WR2而选定的寄存器中,将结果数据RD1或RD2写入寄存器文件RF1或RF2中。如果写入允许索引WE1或WE2被设置为假,则尽管已经通过相应的写选择索引WS1或WS2选择了一个将数据写入到相应的寄存器文件RF1或RF2的输入通道,但是没有数据会被写入那个寄存器文件中。如果写入允许索引WE3被设置为真,则多路复用器MP4选择与写数据WD3相对应的通道作为输入,并将结果数据写入寄存器文件RF3中。如果写入允许索引WE3被设置为假,则多路复用器MP4选择与程序计数器PC相对应的通道作为输入,并将程序计数器PC的值写入寄存器文件RF3中。为了禁止分别通过给定的寄存器文件RF1和RF2或寄存器文件RF3的写端口回写任何结果数据RD1或RD2,可以使用与那个寄存器文件相对应的写选择索引WS1、WS2或WS3从相应的多路复用器MP1或MP2中选择缺省输入215,在这种情况下,相应的写入允许索引WE1、WE2或WE3被设置为假。
根据图1和图2的时间-固定VLIW处理器允许对将结果数据回写到寄存器文件RF1、RF2和RF3中进行动态控制。在运行期间,能够确定一个已经执行的操作的结果数据是否必须被回写到寄存器文件RF1、RF2或RF3中。结果,通过这些处理器就能够实施操作的条件执行,同时仍然使用时间-固定编码指令。
下面显示的是一段程序代码的例子,它应该由根据本发明的处理器来执行。每行指的是一条单VLIW指令,它可以包括能够被并行执行的语句,如一条包括指令A0和A1的VLIW指令。在这段程序代码中,字母A0、A1、B0、B1、C0和C1指的是指令,Z和P指的是变量,以及X指的是要么为假、要么为真的条件。L1指的是程序存储器PM的地址。缩写bra指的是分支指令,它是用于条件分支的专用指令。
…A0,A1;Z=bra(X,P);B0,B1;
…L1C0,C1;…这段程序代码可以由根据本发明的处理器如下来执行。参考图1,控制器CTR对VLIW指令进行解码,并将所得到的写选择索引WS1、WS2和WS3发送到相应的多路复用器MP1、MP2和MP3,将写寄存器索引WR1和WR2以及读寄存器索引RR1和RR2发送到相应的寄存器文件RF1和RF2,将操作码OC1和OC2发送到相应的执行单元EX1和EX2,以及将操作有效索引OPV1和OPV2发送到相应的寄存器105。这些操作有效索引OPV1和OPV2都等于“真”。由执行单元EX1或EX2执行一条指令来确定条件X的值。这条指令产生的结果是“真”,并且这个结果被存储在寄存器文件RF2中。参数P的值也被存储在寄存器文件RF2中。参数P的值等于程序计数器的值,用来指示在执行条件分支时应该执行的存储在程序存储器中的指令的地址,即程序存储器地址L1。在编译该程序期间,编译器确保该值被分配给参数P。分支指令bra由执行单元EX2执行。执行单元EX2接收条件X以及参数P的值作为输入数据ID。在执行指令bra期间,由执行单元EX2计算条件X的值,并且如果这个值等于真,就将输出有效索引OV2设置等于真。如果条件X的值等于假,就将输出有效索引OV2设置等于假。在这个例子中,条件X的值等于真,因此输出有效索引OV2的值也就被设置等于真。此外,执行单元EX2将参数P的值赋给参数Z,即参数Z现在等于程序计数器的值,用来指示在执行条件分支时应该执行的存储在程序存储器中的指令的地址。单元103对与指令bra相对应的操作有效索引OPV2和输出有效索引OV2执行逻辑与操作。因为操作有效索引OPV2等于真,则所得到的结果有效索引RV2也就等于真。通过部分连接的网络CN,将以参数Z的值的形式的结果有效索引RV2和结果数据RD2传递到多路复用器MP1、MP2和MP3。利用写选择索引WS3,多路复用器MP3选择与结果数据RD2相对应的通道作为输入通道。多路复用器MP3利用结果有效索引RV2将写入允许索引WE 3设置等于真,并且将参数Z的值写到多路复用器MP4中以作为写数据WD3。因为写入允许索引WE3的值等于真,因此多路复用器MP4选择与WD3相对应的通道作为输入通道。接下来,将参数Z的值,即程序计数器PC的值写到寄存器文件RF3中。结果,存储在寄存器文件RF3中的程序计数器指向程序存储器地址L1,并且在下一个周期,将存储在该地址处的包括指令C0和C1的VLIW指令从程序存储器PM中取出来,并在随后进行解码和执行。
如果条件X等于假,那么将输出有效索引OV2也设置等于假。单元103对与指令bra相对应的操作有效索引OPV2和输出有效索引OV2执行逻辑与操作。尽管操作有效索引OPV2等于真,但是因为输出有效索引OV2等于假,因此所得到的结果有效索引RV2就等于假。通过部分连接的网络CN,将以参数Z的值的形式的结果有效索引RV2和结果数据RD2传递到多路复用器MP1、MP2和MP3。利用写选择索引WS3,多路复用器MP3选择与结果数据RD2相对应的通道作为输入通道。多路复用器MP3利用结果有效索引RV2将写入允许索引WE3设置等于真,并且将参数Z的值写到多路复用器MP4中以作为写数据WD3。然而,因为写入允许索引WE3的值等于假,因此多路复用器MP4选择与程序计数器PC相对应的通道作为输入通道。接下来,取代与条件分支指令bra的参数Z相等的程序计数器的值,而将程序计数器PC递增后的值写到寄存器文件RF3中。结果,在下一个周期,将包括语句B0和B1的VLIW指令从程序存储器PM中取出来,并在随后进行解码和执行。
下面显示另一段程序代码的例子,它应该由根据本发明的处理器来执行。在这段程序代码中,字母A0、A1、B0、B1、C0和C1指的是指令,Z指的是变量,以及X指的是要么为假、要么为真的条件。L1指的是程序存储器PM中的地址。每行指的是一条单VLIW指令,它可以包括能够被并行执行的语句,如一条包括指令A0和A1的VLIW指令。
…A0,A1;if(X)Z=jmp L1;B0,B1;…L1C0,C1;…参考图2,控制器CTR对VLIW指令进行解码,并将所得到的写选择索引WS1、WS2和WS3发送到相应的多路复用器MP1、MP2和MP3,将写寄存器索引WR1和WR2以及读寄存器索引RR1和RR2发送到相应的寄存器文件RF1和RF2,将操作码OC1和OC2发送到相应的执行单元EX1和EX2,以及将操作有效索引OPV1和OPV2发送到相应的单元201和205。这些操作有效索引OPV1和OPV2都等于“真”。由执行单元EX1或EX2执行一条指令来确定条件X的值。这条指令产生的结果是“真”,并且这个结果被存储在寄存器文件RF2中。单元205还接收条件X的值作为相应的监视信号GU2,并对监视信号GU2和操作有效索引OPV2执行逻辑与操作。因为监视信号GU2和操作有效索引OPV2都等于真,因此单元205会产生“真”来作为结果。当由执行单元EX2执行语句Z=jmp L1时,即将程序计数器L1的值赋给参数Z时,逻辑与的结果经由执行单元EX2的寄存器209、211和213进行时钟控制。输出有效索引OV2等于真。单元207将对输出有效索引OV2和由单元205执行逻辑与得到的结果执行逻辑与操作。这个逻辑与的结果将是真,因此结果有效索引RV2就等于真。通过部分连接的网络CN,将结果有效索引RV2以及相应的结果数据RD2的值,即参数Z的值,传递到多路复用器MP1、MP2和MP3。利用写选择索引WS3,多路复用器MP3选择与结果数据RD2相对应的输入通道。随后,利用结果有效索引RV2将写入允许索引WE3设置为真,并将结果数据RD2写到多路复用器MP4中以作为写数据WD3。因为写入允许索引WE3的值等于真,因此多路复用器MP4选择与WD3相对应的通道作为输入通道。接下来,将参数Z的值,即程序计数器PC的值写到寄存器文件RF3中。结果,在下一个周期,将包括指令C0和C1的VLIW指令从程序存储器PM中取出来,并在随后进行解码和执行。
如果条件X等于假,那么监视信号GU2的值也就被设置等于假。单元205对监视信号GU2和操作有效索引OPV2执行逻辑与操作。因为监视信号GU2等于假,因此单元205将产生“假”来作为结果。当由执行单元EX2执行语句Z=jmp L1时,即将程序计数器L1的值赋给参数Z时,逻辑与的结果经由执行单元EX2的寄存器209、211和213进行时钟控制。输出有效索引OV2等于真。单元207对输出有效索引OV2和由单元205执行逻辑与得到的结果执行逻辑与操作。这个逻辑与的结果将是假,因此结果有效索引RV2就等于假。通过部分连接的网络CN,将结果有效索引RV2和相应的结果数据RD2的值,即参数Z的值,传递到多路复用器MP1、MP2和MP3。利用写选择索引WS3,多路复用器MP3选择与结果数据RD2相对应的输入通道。随后,利用结果有效索引RV2将写入允许索引WE3设置为假,并将结果数据RD2写到多路复用器MP4中以作为写数据WD3。然而,因为写入允许索引WE3的值等于假,因此多路复用器MP4选择与程序计数器PC相对应的通道作为输入通道。接下来,取代与参数Z相等的程序计数器的值,将程序计数器PC递增后的值写到寄存器文件RF3中。在下一个周期,将包括指令B0和B1的VLIW指令从程序存储器PM中取出来,并在随后进行解码和执行。
这些实施例表明,在不需要标志的情况下,本发明允许执行条件分支操作。分支条件可以事先计算出来,并且要么被用作监视信号以有条件地执行操作,该操作是将新的程序计数器的值写到寄存器文件RF3中;要么作为条件操作中的自变量,该操作是将新的程序计数器的值写到寄存器文件RF3中。如果分支条件等于真,就将用于程序计数器PC的新值写到寄存器文件RF3中。控制器CTR读取存储在寄存器文件RF3中的程序计数器的值,并利用这个值从程序存储器PM中取出指令。控制器CTR还使程序计数器的值递增。程序计数器递增后的值被发送到多路复用器MP4。是程序计数器PC递增后的值还是与写数据WD3相对应的程序计数器的值必须被写到寄存器文件RF3中,这是由写入允许索引WE3的值来确定的。只要执行单元EX2没有对寄存器文件RF3执行明确的写操作,该程序就会通过顺序执行在程序存储器中列出的指令而简单地进行下去。如果执行单元EX2将新的程序计数器的值写到寄存器文件RF3中,则所写入的程序计数器的值就将改变程序流程,以至于从与所写入值相对应的程序存储器中的地址处继续执行指令。
在可选实施例中,处理系统是数据-固定VLIW处理器。因为作为指令集的一部分的每条指令控制了必须对特定数据项执行的一个完整序列的操作,因此数据-固定VLIW处理直接允许对将结果数据回写到寄存器文件中进行动态控制。因此,数据-固定VLIW处理器还可以实施操作的条件执行。结果,根据本发明,在不需要标志的情况下,这样的处理器也可以实施条件分支和循环。
在一些实施例中,通过寄存器文件RF 3的读端口连接,执行单元EX2可以直接从寄存器文件RF3中读取程序计数器PC的值。这样,执行单元EX2可以实施“程序计数器相对分支”来定位独立代码。例如,可以在从寄存器文件RF3中读取的程序计数器PC上加上一个偏移值,这样就可以创建一个程序计数器相对转移目标地址。在可选实施例中,例如如果不使用程序计数器相对分支的话,那么可以将为了读取程序计数器PC的值而在寄存器文件RF3与执行单元EX2之间的连接保持在未使用的状态,或者可以不存在这种连接。
在可选实施例中,只要编译器或汇编编程器确保在任何给定周期内仅有一个受监视的或条件操作会产生一个有效输出,即仅有一个程序计数器的值被写入寄存器文件RF3中,那就可以并行执行多个受监视的或条件操作,以便更新存储在寄存器文件RF3中的程序计数器的值。只要这些条件不相交,就能够确保这种操作。结果,就可以利用分支目标的并行执行和分支条件的确认来实施例如所谓的选择语句(casestatement)。
为了得到一个在足够高的时钟频率上运行的处理器装置,处理器的控制器可以是流水线的。参考图1和2,在程序存储器PM的输出处存在一个指令寄存器IR,用来存储从程序存储器PM载入的指令IN。结果,在将新的程序计数器的值写入寄存器文件RF3与执行从与那个新值相对应的程序计数器地址中取回的指令之间的延迟为至少两个周期。这个延迟被称为分支延迟,并且它可以是任何非零值,这取决于处理器的流水线程度。除非仍旧允许使用作为分支延迟一部分的周期来执行其它操作,否则分支延迟就会导致执行时间开销,其中作为分支延迟一部分的周期被称为分支盲区(shadow)。这些其它的操作要在程序流程中的改变发生之前执行,这些操作然后会成为由程序表示的原始算法中的操作。在可选实施例中,处理器实施了一个通常称为延迟分支的概念,其中非分支操作也可以在分支盲区中执行。结果,在程序中,在分支实际发生点之前给分支操作安排了一段分支等待时间。这已经显示在下面的程序结构中了,其中每行指的是单VLIW指令,z、x、y、u、d和e指的是变量,pc指的是代表程序计数器值的变量,A指的是程序存储器的地址,add指的是将两个值相加的操作,mul指的是将两个值相乘的操作,jmp指的是分支操作
…pc=jmp A; /*具有等待时间2的分支操作*/z=add x y; /*分支盲区,在其中仍执行add操作*//*指向转移到A发生的位置*/u=mul d e; /*因为已采用的分支,所以该语句被跳过*/…A…/*分支目标*/…在不需要另外的额外硬件的情况下,延迟的分支实际上能够实现零开销分支,如循环堆栈等等,这在大多数常规数字信号处理器中是常见的。
在另一个实施例中,允许在分支盲区中安排分支操作。本发明也支持这个概念,因此该零开销分支概念可以进一步扩展到包括创建循环体的可能性,其中该循环体是由多条指令或者多个比分支等待时间小的周期组成的。例如,这是通过下面的程序结构来实现的,其中假设了两个周期的分支等待时间,并且其中每行指的是单VLIW指令,z、x、y、u、d和e指的是变量,i指的是循环计数器,pc指的是代表程序计数器值的变量,A指的是程序存储器的地址,add指的是将两个值相加的操作,dec指的是减去一个值的操作,mul指的是将两个值相乘的操作,brnz指的是当非零时实施条件分支的操作…z=add x y,i=dec i,pc=brnz i A;Au=mul d e,i=dec i,pc=brnz i A;…在上例中,循环之前是报头(preamble),其中对于一些并行执行的其它操作来说,循环计数器i是递减的,并且当非零时,即循环计数器i不等于0时,在循环起始地址A处开始一个条件分支。地址A处的下一条指令是循环体的开始,其中循环计数器i进一步递减,并且对照0进行检查,以将一个条件分支导入到地址A。这种结构的结果是,在每个从报头开始的周期中,写到寄存器文件RF3中的程序计数器pc的值将与地址A相等,从而可以有效地保持程序计数器pc固定在这个地址处,直到循环计数器i达到零。结果,尽管这个例子中的分支等待时间大于1,但还是创建了一个单指令循环。与上面类似的结构可以为等于或大于2的分支等待时间工作,以及为比那个分支等待时间小的任一包括多条指令的循环体工作。
在另一个实施例中,通信网络CN可以是部分连接的通信网络,即并不是每个执行单元EX1和EX2都耦合到所有的寄存器文件RF1和RF2。如果有大量执行单元的话,就硅面积、延迟以及功耗来讲,完全连接通信网络的总开销将会是相当大的。在设计VLIW处理器期间,根据必须执行的应用程序的范围来决定执行单元耦合到寄存器文件的程度。
在一个不同的实施例中,更多的执行单元能够将新的程序计数器的值写到寄存器文件RF3中。因为可以并行执行多个受监视的或条件操作,因此,通过允许更多的执行单元执行将程序计数器的值写到寄存器文件RF3中的条件执行操作,那些操作的安排可能会导致更有效率的程序。
在另一个实施例中,包括寄存器文件RF1和RF2的分布式寄存器文件是一个单寄存器文件。如果VLIW处理器的执行单元的数目相对较小,则单寄存器文件的开销也相对较小。
在另一个实施例中,VLIW处理器可以具有不同数目的执行单元。特别是,执行单元的数目取决于VLIW处理器必须执行的应用程序的类型。该处理器还可以具有更多连接到所述执行单元的寄存器文件。
在另一个实施例中,执行单元EX1和EX2可以具有多个输入和/或多个输出,这取决于执行单元必须执行的操作的类型,即需要多于两个的操作数和/或产生多于一个的结果的操作。对于每个寄存器文件来说,分布式寄存器文件也可以具有多个读和/或写端口。
与VLIW处理器的情况一样,超标量处理器也包括多条可以并行执行多个操作的发射槽(issue slot)。然而,处理器硬件本身在运行时确定存在哪些操作相关性,并且根据这些相关性确定哪些操作要并行执行,同时确保不会发生资源冲突。这部分中所描述的用于VLIW处理器的实施例的原理也适用于超标量处理器。通常,VLIW处理器可以比超标量处理器具有更多的发射槽。VLIW处理器的硬件比超标量处理器简单,因此产生更好的可伸缩体系结构。特别是,发射槽的数目以及每个发射槽的复杂度将决定利用本发明所能达到的受益程度。
应该注意的是,上述实施例是说明而不是限制本发明,并且在不背离所附的权利要求书的范围的情况下,本领域技术人员将能够设计出许多可选择的实施例。在权利要求书中,置于括号中的任何附图标记都不应被解释为对权利要求的限制。“包括”这个词不排除在权利要求中列出之外的元件或步骤的存在。在元件之前的词“一个”或“一种”并不排除多个这样的元件的存在。在列举了若干装置的设备权利要求中,这些装置中的几个可以用一个硬件项来实现。仅仅在彼此不同的从属权利要求中记载的确定的措施的事实并不表明这些措施的组合不能被有利地利用。
权利要求
1.一种在程序计数器(PC)的控制下被安排用来执行一组指令的处理系统,该处理系统包括-执行单元(EX1、EX2);-第一寄存器文件(RF1、RF2),其用来存储数据,该第一寄存器文件可以由执行单元进行访问;-程序存储器(PM),其用来存储该组指令;-第二寄存器文件(RF3),其用来存储该程序计数器的值,该第二寄存器文件可以由执行单元(EX2)进行访问;并且其中,执行单元(EX2)被安排来有条件地执行用于将该程序计数器的值写到第二寄存器文件中的专用指令。
2.根据权利要求1的处理系统,其中该处理系统进一步包括控制器(CTR);其中,可以通过该控制器对第二寄存器文件进行访问;并且其中,安排该控制器来使用存储在第二寄存器文件中的程序计数器的值,以便从程序存储器中取出指令。
3.根据权利要求2的处理系统,其中,进一步安排该控制器来使程序计数器的值递增,并将程序计数器递增后的值写到第二寄存器文件中。
4.根据权利要求3的处理系统,其中,进一步安排处理系统根据分支条件的计算,要么将由控制器递增的程序计数器的值写到第二寄存器文件中,要么将由执行单元产生的程序计数器的值写到第二寄存器文件中。
5.根据权利要求1的处理系统,其特征在于,进一步安排执行单元(EX2)对分支条件进行计算,并随后将计算的结果用作监视信号(GU2),以便有条件地执行第一专用指令,该第一专用指令用于将程序计数器的值写到第二寄存器文件中。
6.根据权利要求1的处理系统,其特征在于,进一步安排执行单元(EX2)来执行第二专用指令;该第二专用指令至少具有第一自变量和第二自变量,该第二自变量是程序计数器的值;其中,根据第一自变量的值,安排第二专用指令来将程序计数器的值写到第二寄存器文件中。
7.根据权利要求1的处理系统,其中,进一步安排处理系统并行执行多条所述的专用指令,并且其中,在编译步骤期间,确保有条件地执行该多条专用指令中的仅仅一条指令。
8.根据权利要求1的处理系统,其特征在于,该处理系统是数据-固定超长指令字(VLIW)处理器,其中该VLIW处理器进一步包括-多个执行单元(EX1、EX2);-通信装置(CN),其用来耦合多个执行单元和第一寄存器文件。
9.根据权利要求1的处理系统,其特征在于,该处理系统是时间-固定超长指令字(VLIW)处理器,其中该VLIW处理器进一步包括-多个执行单元(EX1、EX2);-通信装置(CN),其用来耦合多个执行单元和第一寄存器文件;并且其中,根据从该组指令中得到的控制信息,进一步安排该VLIW处理器对将来自多个执行单元的一个执行单元中的结果数据传送到第一寄存器文件和第二寄存器文件进行动态控制。
10.根据权利要求8或9的VLIW处理器,其特征在于,寄存器文件是分布式寄存器文件(RF1、RF2)。
11.根据权利要求8或9的VLIW处理器,其特征在于,通信装置是部分连接的通信网络(CN)。
12.一种用于由处理系统执行一组指令的方法,其中,该处理系统包括-执行单元(EX1、EX2);-第一寄存器文件(RF1、RF2),其用来存储数据,其中该第一寄存器文件可以由执行单元进行访问;-程序存储器(PM),其用来存储该组指令;-第二寄存器文件(RF3),其用来存储程序计数器,其中该第二寄存器文件可以由执行单元(EX2)进行访问;-并且其中,该方法包括以下步骤执行用于将程序计数器的值写到第二寄存器文件中的专用指令;使用程序计数器的值,以便从程序存储器中取出指令;执行所述指令。
13.一种编译器程序产品,其被安排用来实施用于对根据权利要求12的处理系统进行编程的方法的所有步骤,其中所述编译器程序产品在计算机系统上运行。
全文摘要
可编程处理器用于根据在指令中编码的程序信息将输入数据转换为输出数据。特别是,所得到的输出数据的值取决于在时间上任一给定时刻的处理器的瞬时状态。这个状态是由例如存储在寄存器中的临时数据值以及所谓的标志组成的。标志的原理的不足在于,标志会在处理器中,特别是并行处理器中导致副作用。然而,当消除传统的标志的概念时,剩余的问题是分支的实施。根据本发明的处理系统包括执行单元(EX1、EX2)、用于存储数据的第一寄存器文件(RF1、RF2)、程序存储器(PM)以及用于存储程序计数器的第二寄存器文件(RF3)。执行单元有条件地执行用于将程序计数器的值写到第二寄存器文件中的专用指令。结果,根据本发明的处理系统在不使用标志的情况下允许条件分支。
文档编号G06F9/30GK1826583SQ200480011548
公开日2006年8月30日 申请日期2004年4月27日 优先权日2003年4月29日
发明者J·A·J·莱坦 申请人:皇家飞利浦电子股份有限公司