CN1329303A - 处理器中指令的预测执行 - Google Patents

处理器中指令的预测执行 Download PDF

Info

Publication number
CN1329303A
CN1329303A CN01121184A CN01121184A CN1329303A CN 1329303 A CN1329303 A CN 1329303A CN 01121184 A CN01121184 A CN 01121184A CN 01121184 A CN01121184 A CN 01121184A CN 1329303 A CN1329303 A CN 1329303A
Authority
CN
China
Prior art keywords
mentioned
register
prediction
state
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN01121184A
Other languages
English (en)
Inventor
奈杰尔·彼德·托法姆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SROYOUNG Ltd
Original Assignee
SROYOUNG Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SROYOUNG Ltd filed Critical SROYOUNG Ltd
Publication of CN1329303A publication Critical patent/CN1329303A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

一个能够以预测方式执行指令的处理器包含一系列预测寄存器(135),一个控制信息保存单元(131)和多个操作单元(133)。该系列(135)的各个预测寄存器均可在至少第一和第二状态之间切换并且均可被分配了一或多个预测执行的指令。控制信息保存单元(131)保存分别对应于预测寄存器的控制信息项,并且各个操作单元也单独对应于一个预测寄存器。各个操作单元具有一个被连接到控制信息保存单元(131)的第一控制输入和一个第二控制输入。

Description

处理器中指令的预测执行
本发明涉及处理器中指令的预测执行。具体地,本发明涉及微处理器流水线循环中灵活的指令排序和循环控制。
在高性能计算中,对于预测指令执行的需求源于目标机器(例如微处理器)通常需要高速率指令执行的软件流水线循环环境。执行时间经常被应用程序内的循环结构占用。为了允许进行高速指令执行,处理器可以包含多个单执行单元,其中每个单元均能够以彼此并行的方式执行一或多个指令。
多个这样的执行单元可用于提供由多个单独级段构成的软件流水线。各个软件流水线级段与具体执行单元没有固定的物理对应关系。实际上,当编译应用程序中的一个循环结构时,由不同执行单元根据一个软件流水线调度计划预定执行构成一个单次循环迭代的机器指令。这个调度计划被分成连续的级段并且以这样的方式调度指令的执行,即允许不同执行单元在连续迭代的起始之间的一个选定循环起始间隔内重叠执行多个迭代。因而,当一次迭代i的第一个级段结束并且该迭代进入第二个级段时,从下一个迭代i+1的第一个级段开始执行迭代i+1。因而,迭代i+1的第一个级段中的指令的执行与迭代i的第二个级段中的指令的执行是并行的。
在这种软件流水线循环中,在一个部分完成状态下通常总存在一个循环的若干个迭代。因此,各个执行单元可以处理来自从一个循环到下一个循环的不同迭代的指令,并且执行单元总是可以处理来自不同迭代的相应指令。各个循环内计算的各个数值也可以有若干个在线副本。为了区分这些数值并且识别其与当前迭代的对应关系,必须在循环执行中精心选定的时刻上改变一个寄存器中保持的各个数值的名称。编译器已知这些重命名指针,并且编译器还根据计算各个数值的迭代确定各个指令内访问各个数值所需的寄存器的名称。
利用这种软件流水线方案,在执行软件流水线循环中的某些时刻可能存在一个以规则间隔启动的新迭代。在其它时间可能存在某些以规则间隔启动的迭代和以规则间隔结束的其它迭代,并且在其它时间可以只存在即将完成的迭代。这种由若干执行单元并行执行若干个重叠软件流水线循环的方案需要精心控制这些软件流水线循环的启动和停止。这种控制必须发生在运行时刻,因而重要的是为保证有效和正确的操作而建立的控制机制绝不向已经处于时间要求非常严格的活动状态的处理器提出过多的时间要求。所以期望控制软件流水线循环中指令排序所用的时间尽可能地少。
根据本发明的第一个方面,提供了一个能够以预测方式执行指令的处理器,其中包含:一系列预测寄存器,每个寄存器均可在至少第一和第二状态之间切换并且均可被分配给一或多个预测执行的指令;保存分别对应于上述系列的上述预测寄存器的控制信息项的控制信息保存装置;和多个分别对应于上述预测寄存器的操作单元,上述操作单元均具有一个第一控制输入和一个第二控制输入,其中第一控制输入被连接到上述控制信息保存装置以便接收对应于其单元自身的对应预测寄存器的控制信息项,而第二控制输入也被连接到上述控制信息保存装置以便接收对应于另一个上述预测寄存器的控制信息项,并且上述操作单元可以执行一个状态确定操作,其中根据接收的控制信息项确定其自身的上述预测寄存器的上述状态,上述多个操作单元可以彼此并行操作以便分别执行这种状态确定操作。
根据本发明的第二个方面,提供了一个能够以预测方式执行指令的处理器,其中包含:一系列预测寄存器,每个寄存器均可在至少第一和第二状态之间切换并且均可被分配给一或多个预测执行的指令;将上述系列的一或多个预测寄存器指定成各自的移位寄存器的移位寄存器指定装置;和与上述预测寄存器相连以便执行一个移位操作的移位装置,在上述移位操作中,对于被移位寄存器指定装置指定成移位寄存器的各个预测寄存器,上述系列以前的寄存器的状态被传送到有关的寄存器中,不对上述系列中任何未指定成这种移位寄存器的寄存器执行这种传送。
现在参照附图,其中:
图1示出了一个实现本发明的处理器的各个部分;
图2图解了一个简单指令循环的示例性符号数据流图;
图3示出了一个对应于图2的符号数据流图的内部编译器树形结构表示;
图4是一个服从模数调度约束的指令调度表的表格;
图5示出了一个包含静态和动态寻址区域的示例性寄存器文件;
图6A和6B示出了一个表格,上述表格图解了一个循环的若干次迭代的虚拟,逻辑和物理寄存器数量之间的关系;
图7示出了一个循环的若干次迭代的示例性编译指令序列;
图8示出了当在运行时刻把逻辑寄存器映射到物理寄存器之后图7的序列的一个例子;
图9示出了根据取指槽口(issue slot)划分图7的序列的例子;
图10是图解一个软件流水线循环的不同阶段的示意图;
图11是图解图10的循环的预测控制的图例;
图12是更详细地示出图1的循环控制单元的一个可能结构的模块图;
图13示出了控制信息保存单元和预测寄存器文件的一个可能结构;
图14是更详细地示出图13的操作单元部分的模块图;
图15示出了图14的状态确定单元的一个可能实现;
图16示出了图15中执行写操作的状态确定电路;
图17示出了图15中执行一个初始化操作的状态确定电路;
图18示出了图15中执行移位操作的状态确定电路;和
图19示出了图15中执行一个停止操作的状态确定电路。
图1示出了一个实现本发明的处理器的各个部分。在这个例子中,处理器是一个为软件流水线和循环寄存器重命名提供硬件支持的超长指令字(VLIW)处理器。处理器1包含一个取指单元10,一个调度表存储单元12,一个循环控制单元13,各自的第一,第二和第三执行单元14,16和18,和一个寄存器文件20。取指单元10具有三个分别连接到第一,第二和第三执行单元14,16和18的取指槽口IS1,IS2和IS3。一个第一总线22把所有3个执行单元14,16和18连接到寄存器文件20。一个第二总线24把第一和第二单元14和16(而不是这个例子中的第三执行单元18)连接到存储器26,在这个例子中上述存储器是一个外部随机访问存储器(RAM)设备。可选地,存储器26可以是处理器1内部的RAM。
虽然图1示出了把执行单元连接到寄存器文件24和存储器26的共享总线22和24,但应当理解各个执行单元可以具有其自身的,针对寄存器文件和存储器的独立连接。
处理器1执行一个系列的处理周期。在各个处理周期中,取指单元10可以在各个取指槽口IS1-IS3中分别提交一个指令。根据调度表存储单元12中存储的软件流水线调度表(如下所述)提交指令。
下面会结合控制循环建立和停止的任务详细描述循环控制单元13。首先结合图1的处理器描述软件流水线循环的一般概念和操作。
取指单元10在不同取指槽口提交的指令分别被执行单元14,16和18执行。在这个例子中,各个执行单元可以同时执行不止一个指令,因而在一个以前提交到有关的执行单元的指令完成执行之前可以开始执行一个新的指令。
为了执行指令,各个执行单元14,16和18通过第一总线22访问寄存器文件20。因而执行单元14,16和18可以读写寄存器文件20中包含的寄存器所保存的数值。并且,第一和第二执行单元14和16通过第二总线24访问外部存储器25以便允许读写存储在外部存储器26的存储器位置上的数值。在这个例子中,第三执行单元18不访问外部存储器26,所以只能处理寄存器文件20中包含的数值。
参照下列用C编程语言编写,通常在许多线性代数软件包中出现的简单循环可以说明涉及图1的处理器的指令排序和寄存器重命名概念:
for(i=0;i<m;i++)
dy(i)=dy(i)+da x dx(i)
在这个循环中,一个数组dy的每个元素dy(i)(i=0,1,…m-1)被加上常量da与另一个数组dx的一个对应元素dx(i)的乘积。
针对为软件流水线和循环寄存器重命名提供硬件支持的超长指令字(VLIW)处理器编译这个循环的过程通常从产生一个如图2所示的符号数据流图开始。
符号数据流图说明如何在循环期间使用数据和加工数据的操作符,上述数据和操作符如何可用于显现循环内部的时间相关性以及确定任何可以增加循环的时间效率的时间优化。
例如,结点D5中的"加"操作首先需要访问dy(i)的值(结点D4),访问da和dx(i)的值(分别在结点D1和D2上)并且相乘(结点D3)。操作(D1,D2,D3)显然可以同时执行,或者可以和操作D4重叠,使得操作D5所需的任何数值均在该操作开始时已经可用。接着在结点D5的dy(i)中存储结点D5的"加"操作的结果。结点D7到D9实现在每次迭代结束时对数组变量"i"的递增。
数组dx和dy会存储在外部存储器26(图1)中的存储器位置上,因而在图1的数据流图中对这些数组的引用必须被转换成对应的存储器访问操作。因而,各个数组dx和dy需要至少一个指向外部存储器26中存储数组元素的存储位置的指针。每个这样的指针均被保存在寄存器文件20的一个寄存器中。
虽然可以使用指向其存储器中位置的类似指针处理常量da,但由于该数值在循环过程中不发生改变,所以在循环执行期间直接在寄存器文件20中其自身的寄存器内保存该数值会更加方便和快速。
编译代码框中示出的示例性循环的过程的下一个步骤将是执行各种优化以便把图2中示出的数据流图转换成更接近实际机器指令的形式。在这个过程期间,编译器通常会确定在循环内部改变什么数值并且什么数值保持不变。例如,在这种情况下,在循环期间根本不改变"da"的值。数组引用被转换成指针访问,并且在目标机器支持的情况下使用自动增量寻址模式。
图3中图解了所得到的内部树形结构编译器表示。图中示出了单个的机器操作T1-T6,及其依赖关系(如箭头所示),并且各个箭头被附上一个整数,该整数表示完成箭头指向的操作所需的处理器周期数量。
下面是对图2所示的各个机器操作的含义的简要解释。
ld A,B:把存储器位置B的内容加载到寄存器A中
mul A,B,C:寄存器B的内容与寄存器C的内容相乘并且结果被存储在寄存器A中。
add A,B,C:寄存器B的内容与寄存器C的内容相加并且结果被存储在寄存器A中。
st A,B:把寄存器A的内容存储在存储器位置B上。
其中图3的括号中示出了一个寄存器,所使用的这个寄存器中存储的地址指向存储器位置上的内容。寄存器名称之后的符号"++"表示该寄存器的内容在被用于一个具体操作之后被自动递增。
图3所示的指令T1-T6与图2中的符号数据流图的对应结点D1-D6密切相关。为中间数值分配虚拟寄存器编号(标识符)v0-v3,而其它数值被分配寄存器编号(标识符)r1-r3。虚拟寄存器编号不是最终的寄存器分配,只是图2所示的数据流图中箭头的临时标签(下面会更详细地解释)。
下面是对图3所示的各个寄存器标识符的使用的简要描述。
r0:当前dx的指针
r1:da
r2:当前dy的第一指针
r3:当前dy的第二指针
v0:dx的临时标签
v1:da*dx的临时标签
v2:dy的临时标签
v3:dy+da*dx的临时标签
例如,在指令T2中,寄存器r0指向的存储器位置的内容被加载到寄存器vo中并且寄存器r0中存储的数值(指针)接着被递增。由于寄存器r0中存储的数值是一个针对当前dx的指针,这表示一次对应于图2的结点D2,针对数值dx(i)的访问。由于数组引用已经被转换成指针访问,通过递增指令T2中指向dx的指针和指令T4和T6中两个指向dy的指针来执行代码框的线路1中对变量i的递增操作。
任何指令对之间的最长路径定义了执行循环的一次迭代所需的最短时间。这被称为"调度表长度"并且被正式定义成最长(临界)路径上延迟的总和加1。所以在这个例子中,调度表长度为10个周期。在一个周期中自动递增的寄存器可以再次用地下一个周期。
这里描述的所有后续编辑级段均是特定于软件流水线方式的。软件流水线的第一个阶段是确定循环开始间隔(简单称作"II"),循环开始间隔是循环的连续迭代的起始之间的间隔。循环开始间隔取决于可用资源与执行的指令数量和数据流图中出现的任何周期相比较的结果。
例如,图1的处理器具有3个取指槽口IS1-IS3和3个执行单元14,16和18,其中只有第一和第二执行单元14和16能够访问外部存储器26。执行单元也可以是为执行不同任务而单独优化的"专用"单元。例如,可能只有某些执行单元能够执行某些类型的指令。
在当前的例子中,在考虑到可用资源的情况下假定循环开始间隔II被确定为两个处理器周期。并且,假定只有第三个执行单元18拥有执行加法和乘法指令所必需的资源(例如一个算术和逻辑单元ALU)。
下一个步骤是建立一个服从所谓的模数调度约束的调度表。图4中示出了一个示例性的调度表。这样一个调度表被存储在图1示出的处理器1的调度表存储单元12中。在图4的调度表中,第一取指槽口只处理"ld"指令,第二取指槽口只处理"st"指令,而第三取指槽口处理算术操作符"mul"和"adds"。
模数调度约束规定,对于各个取指槽口,当且仅当在时间j没有指令被调度时才可以在时间i调度一个指令,其中j模II等于i。对于每II个周期开始一次新的迭代的情况,这保证在一个具体周期内不会要求从一个具体的取指槽口提交不止一个指令。
模数调度表说明了如何调度构成循环的一次迭代的5个指令T2-T6。具体地,表格的列3-5示出了调度表中提交各个指令的周期,发生提交的软件流水线级段和借以提交指令的取指槽口(即执行指令的执行单元)。正如后面参照图5-8详细解释的,最终4列提供了逻辑寄存器编号,并且阴影部分被用来图解数值的生命周期。
如表中所示,由于存在模数调度约束,相同取指槽口内调度的两个指令不可能相距两个周期的倍数。这样,一旦已经计划在周期0中从取指槽口1提交第一个加载指令T2,则必须在一个不同于取指槽口1的取指槽口,在这种情况下为取指槽口3中调度下一个指令,即将在周期2中提交的乘法指令T3。在这个例子中由于只有第三执行单元18能够执行乘法指令,所以选择取指槽口3。类似地,一旦已经计划在周期3中从取指槽口1提交第二个加载指令T4,则必须在一个不同预定取指槽口1的取指槽口,在这种情况下仍为取指槽口3中调度下一个指令,即准备在周期5中提交的加法指令T5。要求在周期9中提交第五个指令,即存储指令T6。由于存在模数约束,不能在取指槽口1或取指槽口3中提交该指令,并且必须指定取指槽口2提交该指令。
应当理解,图4表格中的调度表只涉及一次迭代。每II个周期便根据相同的调度表启动另一次迭代。这样,在当前迭代处于级段1时,前一次迭代会处于级段2,处于级段2的迭代的前一次迭代会处于级段3,处于级段3的迭代的前一次迭代会处于级段4,而处于级段4的迭代的前一次迭代会处于级段5。在所有的迭代中通过相同的取指槽口计划提交指令,因而每II个周期各个取指槽口提交相同的指令。
如果目标机器具有一组轮转式(逻辑)寄存器s0,s1,s2,…,sr,则可以分配这些寄存器使之取代如最右4列所示的虚拟寄存器。通过图4可以发现分配给v0的寄存器从级段1中的s0变成级段2中的s1。这是由于每当穿过一个流水线边界并且开始一次新迭代时重命名机制便有效地把寄存器名称切换成另一个名称。这允许将在迭代i中计算的v0的值与在迭代i+1和i-1中计算的v0的值区分开来。
这就对访问寄存器的硬件提出了以规则间隔切换寄存器的要求。如果寄存器名称和寄存器内容之间的绑定是固定的,则只能通过针对移位寄存器文件范围内所有的i将si物理复制到si+1来实现切换。这样无疑是代价高昂的,因而取而代之的方法是在需要一次移位操作时可以轮转寄存器名称与寄存器位置的绑定。所以上述寄存器s0-sr不是最终的物理寄存器编号,而是在运行时刻被转换(映射)成物理寄存器编号的逻辑寄存器编号。
许多软件流水线循环也需要在寄存器中能够得到若干在循环过程中不变的数值。在循环过程中不变的数值是在循环内部使用但从不需要在循环内部重新计算的数值。一个例子是在上述循环例子中的数值"da"。这种数值必须被存储在循环执行期间不进行寄存器重命名的寄存器(静态命名寄存器)中。在这个例子中,虽然不是在循环过程中不发生改变的数值,但指向数组dx和dy的指针也可以被存储在静态命名寄存器中。因此,一个用于这种环境的寄存器文件的最优形式仍然具有一个保存循环过程可变数值的可重命名部分和一个针对循环过程不变数值和其它适当数值的静态命名部分。
图5中图解了这种寄存器文件的一个例子。
图5所示的示例性寄存器文件120由N个寄存器构成。其中,低于编号K的寄存器是静态命名寄存器,而高于编号N-K的寄存器为动态命名(可重命名)寄存器。静态命名寄存器构成寄存器文件的一个静态命名部分120S,而可重命名寄存器构成寄存器文件的一个可重命名部分120R。
各个指令通过一个逻辑寄存器编号规定其寄存器操作数。这是一个范围为0到N-1的m位二进制整数,其中m=[log2(N)]。图5的寄存器文件要求映射电路实现一种从逻辑寄存器标识符(编号)到物理寄存器标识符(地址)的双射映射。各个物理寄存器地址P也是一个范围为0到N-1的m位二进制整数,并且直接标识一个实际的硬件寄存器。
如果一个指令将一个逻辑寄存器编号R指定为其操作数中的一个,并且R的范围为0到K-1并且包含K-1,则物理寄存器编号与该操作数的逻辑寄存器编号相同。然而,如果R的范围为K到N-1,则由P指定该操作数的逻辑寄存器编号,使得:
P=K+|R-K+OFFSET|N-K    …(1)
在这种表示中,|y|x表示y模x。OFFSET是一个映射偏移数值(整数),每当寄存器被重命名时该数值单调加(或减)一。
现在参照图6A和6B所示的表格更详细地说明这种从逻辑寄存器编号R到物理寄存器编号P的映射。图6B的表格是图6A示出的表格的延续部分。该表格示出了适用于如上所述的相同例子的寄存器重命名方案,其中含有图6A中图解的前两次迭代和图6B中图解的后两次迭代。
在这个例子中,假定R的值等于4(由于存在4个静态命名寄存器r0-r3)。假定N的值足够大以致不影响提供例子的执行。如图6A和6B中的第二列所示,映射偏移数值OFFSET被初始化成数值G,并且每当穿过一个流水线边界时便被减一。
图6A的迭代0的第一列中示出的指令序列与图4中被分成3列(取指槽口1-3)的指令序列相同。静态命名寄存器被分配了逻辑寄存器编号r0-r3。循环过程可变寄存器被指定临时寄存器编号(标签)v0-v3。对各个迭代使用相同的临时标签设置,因而随着迭代间隔II(在这种情况下为两个周期)的推移各个迭代的第一列示出了相同的指令序列。
在编译时,如图6A和6B中各个迭代内部以v0-v3打头的对应列所示,临时虚拟寄存器编号v0-v3被转换成逻辑寄存器编号。例如,编译器为迭代0的周期0和1中的虚拟寄存器编号v0分配逻辑寄存器编号r4。在运行时刻使用前面从R映射到P的等式(1)把这个逻辑寄存器编号转换成物理寄存器编号。在这种情况下,R=4,K=4并且"offset"=6,因此被映射的物理寄存器编号会等于10。因此在这个例子中逻辑寄存器编号r4在运行时刻被映射成物理寄存器编号p10。
当穿过一个流水线边界时,为了在穿过边界之后标识相同的寄存器,编译器必须使用一个比穿过之前使用的逻辑寄存器编号多1的逻辑寄存器编号,因而在运行时刻,当在各个流水线边界也对映射进行轮转时,正确的物理寄存器会从一个级段传递到另一个级段。例如,考虑迭代0中的虚拟寄存器编号v0,当从周期1到周期2穿过流水线边界时,逻辑寄存器编号从r4递增到r5,因而考虑到OFFSET已经减少到5这一事实,在第二级段中访问的是相同的物理寄存器编号(p10)。
图7示出了编译器为图6A和6B示出的各个迭代0-3的指令序列分配逻辑寄存器编号的结果。图8示出了在运行时刻执行把逻辑寄存器编号映射成物理寄存器编号的寄存器映射所产生的影响。
观察被分配给图6A和6B的表格中标记为v0-v3的各个变量的物理寄存器编号可以发现,由于分配给变量的物理寄存器在一次迭代和下一次迭代中是不同的,所以可以区分一次迭代中一个变量的值和一次相邻迭代中一个变量的值。所以保证了流水线循环的正确操作。
有时候,对于上述从逻辑寄存器编号R映射到物理寄存器P的映射等式(1),当重命名轮转寄存器时可以递增或递减OFFSET。如果是递增,则每当OFFSET递增时一个具体物理寄存器的逻辑寄存器编号便会减一。同样地,如果OFFSET递减,则逻辑寄存器编号增加。
在我们共同待决的英国专利申请0004582.3号中描述了适合于执行上述映射的映射电路,这里参考引用了该申请的全部内容。
图9示出了处理器1的取指单元10的各个取指槽口IS1-IS3针对前面参照图6-8描述的相同4次迭代提交的指令序列。图9中示出的指令对应于图7中使用在映射到图8所示的物理寄存器编号之前由编译器分配的逻辑寄存器编号的指令。相对于各个取指槽口中的各个还示出了该指令所属的迭代和流水线调度级段。
通过图9可以发现,在取指槽口1上,在前II个周期期间,当循环牌其初始级段时,只提交迭代0的"ld"指令。当处理到达周期2(在完成迭代0的第一流水线级段之后)时,与迭代0的第二流水线级段同时开始迭代1的第一流水线级段。所以,由于建立了图4的初始调度表,第一执行单元14从周期2到7在执行调度表的级段1的"ld"指令和执行调度表的级段2的"ld"指令之间交替轮换,其中每个连续" ld"指令对的两个"ld"指令分别来自于不同的迭代。这种交替执行连续进行,直到周期8,在这个例子中此时由于迭代3之后没有其它的迭代并且循环开始停止,所以在取指槽口1上没有提交指令。
在图9的取指槽口3中可以发现类似的模式,其中第三执行单元18从周期4到9在调度表的级段2的"mul"指令和调度表的级段3的"add"指令之间交替执行指令。在循环开始期间,在周期0和3之间只在周期2提交一个"mul"指令。类似地,在循环停止期间,在级段3(周期10和11)提交一个单独的"add"指令。
由于这个具体例子中调度表的构造方式,在取指槽口2中每II个周期提交一个单独的指令(一个"st"指令),其中在周期9开始并且在周期15结束。
图10图解了一个从(a)循环的一次迭代的单一指令序列,通过(b)产生由上述5个级段构成的流水线循环调度表,到(c)重叠执行流水线循环的7个迭代的三段过程。图10(c)通过图表概述了前面针对图9描述的循环迭代的开始和停止。如图10(c)所示,每当穿过一个流水线边界时便开始一次新的迭代,其中产生一个从第一次迭代到最后(第七)迭代的迭代重叠步骤结构。
这7个重叠迭代的执行可以被分成3个概念性阶段:"开始"阶段,"核心"阶段和"结束"阶段。开始阶段完全由启动的迭代构成,其中每II个周期开始一个新迭代。核心阶段由正在完成的迭代和正在开始的迭代构成,其中每II个周期完成一个迭代并且每II个周期开始一个新迭代。最终,结束阶段完全由正在完成的迭代构成,其中每II个周期完成一个迭代。
对如图9和10所示的软件流水线循环的启动和停止的控制要求在运行时刻对流水线级段进行系统的允许和禁止控制以保证正确的循环操作。由图1中示出的处理器1的循环控制单元13执行这个任务。
现在参照图11描述控制迭代开始和完成的一个可能方案。该方案能够以系统的方式允许(在开始和核心阶段)和禁止(在核心和结束阶段)流水线级段。该方案可用于任何通过一组通用预测寄存器支持预测执行的处理器。各个预测寄存器包括一个单独的位并且可以存储一个状态("真"或"假")。具有预测寄存器的处理器通常使用这些预测寄存器允许或禁止一个软件流水线循环调度表内部的指令。
图11中示出的重叠迭代(均包括5个级段)对应于图10中图解的迭代。图11中还图解了一组5个流水线级段预测寄存器P1-P5。这些预测寄存器P1-P5分别对应于流水线循环调度表内部的流水线级段1-5并且在循环执行期间预测寄存器中存储的各个状态在一个级段和下一个级段中可以不同。这些预测寄存器被保留在处理器1的循环控制单元13内。
软件流水线调度表中的各个指令被标上一个预测编号,这种编号是一个对应于预测寄存器P1-P5中的一个的标识符。例如,在图11的例子中,流水线调度表的级段1-5中的指令会分别被标上预测寄存器标识符P1-P5。
当取指单元10提交一个指令时,首先访问循环控制单元13以确定对应于该指令(由指令标签标识)的预测寄存器的状态是真还是假。如果对应预测寄存器的状态为假,则指令被自动转换成一个NOP指令。如果对应预测寄存器状态为真,则正常执行该指令。
所以,在这个方案中流水线级段i中的所有指令均被标上预测标识符Pi。为了使方案正确操作,对于所有有关的i值,在循环执行期间必须使预测寄存器Pi的状态每当应当允许流水线级段i时一定为真。这提供了一个允许和禁止级段以便控制循环执行的机制。
图11说明了如何在循环执行期间改变各个软件流水线级段的预测寄存器状态。在循环开始之前,各个预测寄存器P1-P5被设置到状态0(假状态)。在第一次迭代开始之前,状态1(真状态)被载入第一个预测寄存器P1,从而允许各个迭代的第一级段内包含的所有指令。所有其它预测寄存器P2-P5保持状态0,因而在前II个周期内不执行第二到第五流水线级段中包含的任何指令。
在开始第二个迭代之前,状态1也被载入第二个预测寄存器P2,从而允许循环调度表的第二级段内包含的所有指令。预测寄存器P1仍然具有状态1,因而在第二批II个周期期间也执行第一级段内包含的指令。由于仍然不需要第三到第五流水线级段内包含的任何指令,所以预测寄存器P3-P5仍然保持状态0。
在开始阶段内,各个后续的预测寄存器依次改变到状态1,从而以系统的方式允许各个流水线级段直到所有5个预测寄存器保持到状态1并且允许所有的级段。这就标明了核心阶段的起始,其中正在不同的迭代中执行来自所有流水线级段的指令。在整个核心阶段期间所有预测寄存器均具有状态1。
在结束阶段内,必须以一种系统的方式从级段1到级段5禁止流水线级段。所以,在各个流水线级段边界之前,从P1开始状态0依次接连被载入到各个预测寄存器P1-P5中。所以以一种系统的方式禁止了流水线级段,从而保证了循环的正确停止。
通过图11所示的预测寄存器可以发现一种动态模式,而这种动态模式可以被挖掘利用。一个以前考虑到的方案利用一个简单移位寄存器实现移位预测寄存器文件。移位寄存器中的每个位表示一个预测数值并且预测数值被存储在移位寄存器文件中。
通过这种方案,一个"1"或"0"在开始各个新迭代之前被移位到最右的寄存器中。最初,移位预测寄存器会包含数值00000。接着在第一次迭代之前1会被移入预测寄存器的移位组的右端并且新的数值会变成00001。这就进入了流水线级段1,但在这II个周期内级段2-5仍然被禁止。这种模式持续IC次循环迭代(IC=迭代计数),在这种情况下IC为7。当已经开始IC次循环时,循环进入结束阶段并且循环控制器在各个迭代按正确顺序退出流水线级段之前开始把零移入移位预测寄存器文件。
这种方案提供了合理的流水线级段控制尺度,并且其实现可能是简单的。然而,如上所述,各个软件流水线调度表中流水线级段的数量取决于代码结构和可用资源(例如可以同时提交的指令数量)。因而这需要在选择实际分配到流水线级段控制功能的预测寄存器方面有某些灵活度。另外,通过下面描述可以发现,在某些环境中具有以灵活方式改变和/或访问预测寄存器的能力是比较有利的。
图12是示出用于基于本发明一个实施例的处理器的循环控制单元13的各个部分的模块图。处理器可以是图1中示出的处理器1。循环控制单元13包括一个控制信息部分130,一个预测操作部分132和一个预测部分134。控制信息部分130包含一个保存控制信息项的控制信息保存单元131,预测操作部分132包含一个操作单元部分133,而预测部分134包含一个预测寄存器文件135。预测操作部分132与处理器1的取指单元10以及控制信息部分130和预测部分134通信。另外,控制信息部分130与处理器1的调度表存储单元12通信。
在一个循环的执行期间,对于各个将要执行的指令,取指单元10从调度表存储单元12检索出指令并且检查被附加到该指令上的预测寄存器标识符(如上所述)。接着取指单元10请求循环控制单元13的预测操作部分132确定是正常执行该指令还是把该指令自动转换成一个NOP操作。预测操作部分132接着访问包含一个预测寄存器当前状态记录的预测部分134以确定有关的预测寄存器状态是真还是假。预测操作部分132接着向取指单元10返回这个真或假状态。
在这个实施例中,由控制信息部分134和预测操作部分132并且通过访问预测部分134来执行初始化,移位,循环停止和终止检测。现在参照图13更详细地描述控制信息保存单元131和预测寄存器文件135的使用。后面会更详细地描述预测操作部分132。
在图13中,控制信息保存单元131包括一个n位寄存器(此后称作"循环屏蔽"寄存器),该寄存器被用来标识n-3个(或更少)被用作进行循环控制的移位预测寄存器的预测寄存器(P3到Pn-1)的一个移位子集136。循环屏蔽寄存器131保存n个位(控制信息项),这些位分别对应于预测寄存器文件135中的n个预测寄存器。
如果预测寄存器Pi将被包含在移位预测寄存器集合136中,则循环屏蔽寄存器131中的对应位i被设置成数值"1"。反之,如果预测寄存器Pi不被包含在移位预测寄存器集合136中,则循环屏蔽寄存器131中的对应位i被设置成数值"0"。循环屏蔽寄存器131通常会包含一个由1构成,从位3以上的任何位置开始并且最大长度为n-3的单独连续序列。
最好两个预测寄存器,例如P0和P1分别被永久设置到两个可能的状态0和1上。这些寄存器这里被称作预置寄存器139。当已知总是执行一个具体的指令时这种处理是有用的。这种指令可以被标记为预置寄存器P1(已知总是具有状态"1")。另一种情况是有必要把一个具体的预测寄存器初始化成状态0。将预置寄存器P0永久设置成状态0允许通过预测寄存器P0到有关预测寄存器的简单复制来完成这种初始化。
一个在这里被称作种子寄存器137的附加预测寄存器被用来控制循环的启动和终止。所以预置寄存器239和种子寄存器137不能被包含在移位寄存器集合136中。在这个例子中其它预测寄存器138是在预测寄存器文件上执行的不受影响的日常操作。
被附加到各个指令上的预测寄存器标识符最好直接标识预测寄存器文件135内部的一个预测寄存器。如果有32个预测寄存器,则预测寄存器标识符可以具有被包含在指令内部的5位字段的形式。
在这个例子中,一个具体流水线级段中所有指令的标识符均是相同的,因而根据对应的预测寄存器数值统一对其加以允许或禁止。然而可以有不止一个与一个具体级段相关的预测寄存器(例如具有if/then/else或比较指令)。
在图13中图解了循环屏蔽寄存器131和预测寄存器文件135中的预测寄存器内的各个位(控制信息项)之间的关系。在这个例子中,循环屏蔽寄存器131的位14到25被设置成1,并且所有其它的位被设置成0。
控制信息部分130也包含被用来初始化循环屏蔽寄存器131中的控制信息项的电路(未示出)。根据从处理器1的调度表存储单元12获得的信息执行这种初始化操作。这种信息会包含流水线级段的数量(因而也包含循环控制所需的预测寄存器的数量)。
在循环执行期间,预测操作部分132根据控制信息部分130提供的信息(通过访问循环屏蔽寄存器131中的控制信息项)以一种预定方式初始化和改变预测寄存器P0到Pn-1。现在更详细地描述这些对预测寄存器文件135的更新。
在开始各个后续的循环迭代之前,执行一个移位操作,其中移位子集的各个预测寄存器的内容就是从紧临其右的预测寄存器接收的内容。紧接在移位子集右边的预测寄存器(图13中的P13)是种子寄存器137。因而,在各个移位操作中,移位寄存器子集136的第一个预测寄存器(P14)的内容被设置成种子寄存器("种子")的内容。
例如,参照图11,在循环执行的开始和核心阶段内,种子寄存器137会被预置成状态"1",而在结束阶段内,种子寄存器137会被预置成状态"0"以便执行循环停止操作。当进行移位时,种子被复制到最右边的寄存器(P14)但种子自身保持不变。
在循环排序期间在预测寄存器文件135上进行的4个主要操作是:初始化,移位,停止和完成检测。在适当时处理器1会促使进行这些操作。操作根据循环屏蔽寄存器131中的控制信息项以特定方式逐个修改预测寄存器文件135的内容。
在这个实施例中由预测操作部分132内部的操作单元部分133执行上述操作。现在参照图14-15描述操作单元部分133。
图14是更详细地示出图12的操作单元部分的模块图。操作单元部分133包含多个单独的操作单元OU2-OUn-1,这些操作单元分别对应于图13的上述预测寄存器P2到Pn-1。每个操作单元均包含一个状态确定单元300。各个操作单元OUi具有一个相连的第一控制输入C1(i)以便从控制信息保存单元(循环屏蔽寄存器)接收对应于其单元自身的相应预测寄存器Pi的控制信息项。各个操作单元OUi具有一个相连的第二控制输入C2(i)以便从控制信息保存单元(循环屏蔽寄存器)接收另一个控制信息项,在这个实施例中该控制信息项是对应于紧接在单元自身的对应预测寄存器Pi后面的预测寄存器Pi+1的控制信息项Li-1
各个操作单元还具有一或多个状态输入,每个状态输入均被连接到预测寄存器文件135以便接收一个指示某个预定预测寄存器的状态(内容)的状态信息项P。在这个实施例中,各个操作单元OUi具有一个第一状态输入S1(i)和一个第二状态输入S2(i),其中第一状态输入接收其单元自身的对应预测寄存器Pi的状态信息项,而第二状态输入接收紧接在单元自身的对应预测寄存器Pi前面的预测寄存器Pi-1的状态信息项。
状态确定单元300执行一个状态确定操作,其中根据接收的控制信息项和一或多个接收的状态信息项确定其自身的对应预测寄存器Pi的状态。在一个输出Pout(i)上可以得到新状态Pi′,最好由操作单元OU2-OUn-1彼此并行操作以便分别执行这种状态确定操作。
各个操作单元可以执行不止一个状态确定操作。通过各个具有不止一个这种状态确定单元300的操作单元可以实现这种操作,其中每个状态确定单元均能够执行一个不同的状态确定操作。可选地,可以为各个操作单元提供一个状态确定单元340,上述状态确定单元可以有选择地执行不止一个状态确定操作。在这种情况下,最好为操作单元提供一个选择输入SEL(i),在该输入上接收一或多个被用来确定操作单元执行的状态确定操作的类型的选择信号。在这个实施例中,可以选择的状态确定操作包含上述初始化,移位和停止操作[I,S,D]。在这个实施例中,由于不涉及确定任何预测寄存器的状态,所以完成检测操作不是一个可用的状态确定操作。但是在另一个实施例中,根据需要操作单元可以执行完成检测操作。
在描述状态确定单元300的一个可能实施例之前,现在依次参照前面结合图13描述的循环屏蔽寄存器131和预测寄存器文件135对上述4个操作加以描述。
通过执行下列用伪码表示的逻辑操作可以实现在开始软件流水线循环之前进行的预测寄存器文件135的初始化操作:
对于所有从2到n-1的i:
Pi’= Li AND(Pi OR Li+1)
这些逻辑操作导致预测寄存器文件137的移位寄存器子集136内的各个预测寄存器被重新设置到状态0(因为对于那些寄存器 Li=0)。除种子寄存器之外的所有其它预测寄存器均不受影响(由于 Li AND Pi=Pi)。在尚未被设置到状态1的情况下,种子寄存器137被设置到状态1(由于Li=0并且Li+1=1,所以Pi′=1)。种子寄存器137被设置到状态1准备开始循环,其中需要从移位寄存器子集136的右端开始将种子寄存器的内容顺序移位到移位寄存器子集中。
在开始各个迭代之前,必须将移位寄存器子集136内预测寄存器的状态向左移位一个寄存器。这导致针对所有其对应循环屏蔽位Li被置位的预测寄存器Pi进行一次有选择的,从Pi-1到Pi的复制。通过下列伪码可以表示这种操作:
对于所有从2到n-1的i:
Pi’=( Li AND Pi)OR(Li AND Pi-1)
第一个括号对内包含的逻辑表达式 Li AND Pi在Li中存储的数值为0的情况下仅仅导致Pi的现有状态保持不变。第二个括号对内包含的逻辑表达式Li AND Pi-1在Li中存储的数值为1的情况下(即寄存器Pi被包含在移位寄存器子集136内)导致Pi-1中存储的状态被复制到Pi。通过这种方式,对于图13所示的例子,种子寄存器P13和移位寄存器P14-P24中存储的各个状态被向左移位一个寄存器。种子寄存器137的状态不受左边的影响,并且丢弃(改写)移位寄存器子集左端的寄存器P25的现有状态。预测寄存器P26的状态不受影响。
为了开始停止循环,必须首先清除种子寄存器137。通过观察循环屏蔽寄存器131中的位模式可以确定种子寄存器137的位置,从而对循环屏蔽寄存器131的一对连续位进行定位,其中Li为0而Li+1为1。通过下列伪码可以表示这个清除种子寄存器的动作:
对于所有从2到n-1的i:
Pi’=Pi AND(Li OR  Li+1)
除了上述3个状态确定操作之外,最好能够把特定预测寄存器确定成执行产生一或多个布乐结果的比较操作的目标寄存器。因此,还期望有一个把状态0或状态1设置到一个单独的预测寄存器中的装置提供另一个状态确定操作(写操作)。通过为各个操作单元OUi提供一个接收数据信号V的数据输入DATA(i)并且使用另一个被提供到选择输入SEL(i)的选择信号(写使能)可以实现这种操作。
通过使用标准逻辑设计技术产生一个被用作各个操作单元OU中的状态确定单元300的有限状态机可以实现完成上述全部4个状态确定操作的电路。针对Pi下一个状态的计算的输入将是一组用于选择4个可用状态确定操作之一的选择信号I,S,D,W,两个控制信息项Li和Li+1,两个指示预测寄存器Pi和Pi-1的现有状态的状态信息项和数据信号D。这种状态确定单元的逻辑复杂度可以只有三级段逻辑门那么多。
图15中示出了实现本实施例中状态确定单元300的一个例子。状态确定电路300包括6个反相器(非门)3101-3106,7个与门3201-3207和一个或门330。
第一个反相器3101在其输入上接收停止选择信号D,并且其输出被连接到第二个与门3202的一个输入上。第二个反相器3102在其输入上接收控制信息项Li并且其输出分别被连接到第一,第二,第五和第六与门3201,3202,3205和3206的一个输入上。第三个反相器3103在其输入上接收初始化选择信号I,并且其输出被连接到第三和第四与门3203和3204的各个输入上。第四个反相器3104在其输入上接收控制信息项Li+1,并且其输出被连接到第一个与门3201的一个输入上。第五个反相器3105在其输入上接收移位选择信号S,并且其输出被连接到第三个与门3203的一个输入上。第六个反相器3106在其输入上接收选择信号W,并且其输出分别被连接到第一到第六与门3201到3206的一个输入上。
除了上述从反相器3101到3106接收的输入之外,与门3201至3207还接收以下输入。第一,第二,第三和第六与门3201,3202,3203和3206均将状态信息项Pi当作另外的输入来接收。第三个与门3203将控制信息项Li当作另外的输入来接收。第四个与门3204将状态信息项Pi-1,控制信息项Li和选择信号S当作另外的输入来接收。第五个与门3205将选择信号I当作一个输入来接收,并且将控制信息项Li+1当作另外的输入来接收。第六个与门3206将选择信号S当作另外的输入来接收。第七个与门3207将数据信号V和写选择信号W当作输入来接收。
7个与门3201-3207的各个输出均被连接到或门330的各个输入。在或门330的输出上获得预测寄存器Pi的新状态Pi′。
现在描述图15的状态确定电路的操作。如上所述,电路可以执行下列4个操作:初始化,移位,停止和写入。
如图16所示,当要执行一个写操作时,选择信号(写使能信号)W被设置成数值1并且数据信号V被设置到将被写入预测寄存器Pi的状态上。在图16中,与其它3个选择信号D,I和S相连的与门因均通过第六个反相器3106接收到一个输入W=0,该输入禁止了上述与门,因而上述信号可以取任意的数值,但尽管如此,上述其它3个选择信号D,I和S均被设置成数值0。第七个与门3207的输出与数据信号V相同,并且从或门330输出的新状态Pi′就是数据信号V。接着预测寄存器Pi的这个新状态Pi′通过预测部分134内的电路(未示出)被载入到预测寄存器文件135内包含的预测寄存器中。
虽然在图15中各个操作单元OU接收其自身的独立写选择信号W及其自身的独立数据信号V,但应当理解可以可选地将信号W和V中的一个或全部提供给所有操作单元共用。
如图17所示,当要执行一个初始化操作时,初始化选择信号I被设置成数值1,而3个其它选择信号D,S和W均被设置成数值0。通过下式可以描述或门330的输出Pi′:
Pi’=(PiAND  Li+1 AND  Li)OR(Pi AND  Li)OR(Li+1 AND  Li)
= Li AND([Pi AND  Li-1]OR Pi OR Li+1)
= Li AND(Pi OR Li+1)
由于([A OR B]OR A)≡A。Pi′的这个表达式与前面针对初始化操作的描述中指定的表达式相同。
如图18所示,当要执行一个移位操作时,移位选择信号S被设置成数值1,而3个其它选择信号D,I和W均被设置成数值0。通过下式可以描述或门330的输出Pi′:
Pi’=(PiAND  Li+1 AND  Li)OR(Pi AND  Li)OR(Pi-1 AND Li)
=(Pi AND  Li)AND( Li+1 OR 1)OR(Pi-1 AND Li)
=(Pi AND  Li)OR(Pi-1 AND Li)
Pi′的这个表达式与前面针对移位操作的描述中指定的表达式相同。
如图19所示,当要执行一个停止操作时,停止选择信号D被设置成数值1,而3个其它选择信号I,S和W均被设置成数值0。通过下式可以描述或门330的输出Pi′:
Pi’=(Pi AND  Li+1 AND  Li)OR(Pi AND Li)
=Pi AND([ Li+1 AND  Li]OR Li)
=Pi AND( Li+1 OR Li)
由于([A OR  B] OR B)≡(A OR B)。Pi′的这个表达式与前面针对停止操作的描述中指定的表达式相同。
通过对各个预测寄存器的状态Pi和对应于有关的预测寄存器的控制信息项Li的值执行一个与操作,即循环屏蔽寄存器131和预测寄存器文件135的位与操作可以检测结束阶段的完成(完成检测)。如果得到的与操作结果全部为假,则循环已经终止。通过下列伪码可以表示这种测试:
end=0
对于所有从2到n-1的i:
end= end OR(Li AND Pi)
如果此过程之后“ end”的值为0,则已经检测到结束阶段的完成。
可以为各个操作单元OUi提供一个完成检测电路(例如一个把Pi,Li和另一个被用来选择完成检测操作的选择信号当作输入来接收的三输入与门)以便针对其对应的预测寄存器执行与操作。接着各个与操作的结果会被输出到另一个会产生 end信号的完成检测电路(例如一个n输入或非门)。
在本实施例中,操作单元能够执行不止一个不同种类的状态确定操作,但这并不是本发明的一个必要特征。类似地,状态确定操作不必是上述特定操作(初始化,移位,停止和写入)。操作单元可以被用来以彼此并行的方式执行任何适当的状态确定操作。控制信息项也不必被用来表示对应的预测寄存器是否属于一个移位子集。控制信息项可被用于任何适当的,诸如区分预测寄存器的目的。
控制信息项不仅限于二进制数值0和1。各个信息项可以是一个符号并且具有两个或更多的位,因而各个信息项可以表示不止两个数值。
应当理解,在上述实施例中,多个单独的操作单元能够以彼此并行的方式执行各个状态确定操作。在本发明的另一方面,彼此并行操作的操作单元不是一个必要特征。在本发明的其它方面,控制信息项被用来将预测寄存器文件的一或多个预测寄存器指定成各自的移位寄存器。因而在一个移位操作中,对于各个被指定成这种移位寄存器的预测寄存器,前面的寄存器的状态被传送到有关的寄存器中,而对于未被指定成这种移位寄存器的寄存器则不进行任何这种传送。在这种情况下,不必由彼此并行工作的操作单元执行移位操作。指定的移位寄存器可以顺序执行移位操作。
实现本发明的这个方面的电路也可以能够执行上述其它种类的操作,例如初始化,停止和写操作,但这不是必要的。如果可以进行这种操作,也不必由不同操作单元并行执行这些操作。例如,在停止操作中,可以顺序检查循环屏蔽寄存器131中的控制信息项以便找到种子寄存器的位置。
此外,在本发明的这个方面,循环屏蔽寄存器可以被某些其它灵活指定预测寄存器文件中的哪些预测寄存器将是移位寄存器的方案所替代。例如,指定电路可以是一对控制寄存器,其中一个寄存器指示第一个被指定成移位寄存器的预测寄存器的位置(例如图13中的P14),另一个控制寄存器指示上次指定的寄存器(P25)。可选地,取代指示上次寄存器的方式是存储移位子集中的寄存器数量。可以有其它变化。
虽然前面的描述涉及一个能够以软件流水线方式执行的VLIW处理器,但应当理解本发明适用于不具有这些特性的处理器。一个实现本发明的处理器可以被包含成用于多媒体应用,网络路由器,视频移动电话,智能汽车,数字电视,语音识别,3D游戏等等的高集成度"单片系统"(SOC)中的处理器"核心"。

Claims (23)

1.一个能够以预测方式执行指令的处理器,其中包含:
一系列预测寄存器,每个寄存器均可在至少第一和第二状态之间切换并且均可被分配给一或多个预测执行的指令;
保存分别对应于上述系列的上述预测寄存器的控制信息项的控制信息保存装置;和
多个分别对应于上述预测寄存器的操作单元,上述操作单元均具有一个第一控制输入和一个第二控制输入,其中第一控制输入被连接到上述控制信息保存装置以便接收对应于其单元自身的对应预测寄存器的控制信息项,而第二控制输入也被连接到上述控制信息保存装置以便接收对应于另一个上述预测寄存器的控制信息项,并且上述操作单元可以执行一个状态确定操作,其中根据接收的控制信息项确定其自身的上述预测寄存器的上述状态,上述多个操作单元可以彼此并行操作以便分别执行这种状态确定操作。
2.如权利要求1所述的处理器,其中对于除上述系列的最后一个预测寄存器之外的各个上述预测寄存器,上述另一个预测寄存器是紧接在上述系列的上述自身的预测寄存器之后的寄存器。
3.如权利要求1或2所述的处理器,其中各个上述操作单元还具有至少一个被连接起来以便接收一个状态信息项的状态输入,并且能够根据上述状态信息项设置上述其自身的预测寄存器的状态,其中上述状态信息项指示上述系列的预定一个上述预测寄存器的上述状态。
4.如权利要求3所述的处理器,其中对于各个上述操作单元,上述状态信息项指示上述单元自身的预测寄存器的上述状态。
5.如权利要求3或4所述的处理器,其中各个上述操作单元具有这种被连接起来以便分别接收这种状态信息项的第一和第二状态输入,并且能够根据上述状态信息项设置上述其自身的预测寄存器的状态,其中上述状态信息项指示两个不同的上述预测寄存器的各个状态。
6.如权利要求5所述的处理器,其中对于各个上述操作单元,上述两个预测寄存器是上述单元自身的预测寄存器和在上述系列中位于上述自身的预测寄存器之前的预测寄存器。
7.如前面任何权利要求所述的处理器,其中在使用处理器时可以改变控制信息项。
8.如前面任何权利要求所述的处理器,其中各个上述操作单元可以有选择地执行多个这种不同的状态确定操作中的任何一个操作。
9.如如权利要求8所述的处理器,其中各个上述操作单元具有一个接收一或多个选择信号的选择输入,并且根据为其提供的上述一或多个选择信号选择被操作单元执行的上述状态确定操作。
10.如前面任何权利要求所述的处理器,其中各个上述控制信息项可以在至少第一和第二数值之间变化。
11.如权利要求10所述的处理器,其中全部上述状态确定操作或其中之一是一种初始化操作,在该操作中各个操作单元在对应于上述其自身的预测寄存器的控制信息项具有上述第一数值时将该预测寄存器设置到上述第二状态上。
12.如权利在求11所述的处理器,其中在上述初始化操作中各个上述操作单元在对应于上述其自身的预测寄存器的控制信息项具有上述第二数值,并且对应于上述系列中位于上述自身的预测寄存器之后的预测寄存器的控制信息项具有上述第一数值时,将上述其自身的预测寄存器设置到上述第一状态上。
13.如权利要求10-12中任何一个所述的处理器,其中全部上述状态确定操作或其中之一是一种移位操作,在上述移位操作中每个指定的操作单元根据位于上述系列中上述自身的预测寄存器之前的预测寄存器的上述状态设置其自身的预测寄存器的上述状态。
14.如权利要求13所述的处理器,其中在对应于单元上述自身的预测寄存器的上述控制信息项具有上述第一数值时指定各个操作单元进行上述移位操作。
15.如权利在求10到14中的一个所述的处理器,其中全部上述状态确定操作或其中之一是一个停止操作,在上述停止操作中各个上述操作单元在对应于上述其自身的预测寄存器的控制信息项具有上述第二数值,并且对应于上述系列中位于上述自身的预测寄存器之后的预测寄存器的控制信息项具有上述第一数值时,将上述其自身的预测寄存器设置到上述第二状态上。
16.如权利要求10到15中任何一个所述的处理器,其中全部上述状态确定操作或其中之一是一种写操作,在上述写操作中每个指定的操作单元将其上述自身的预测寄存器设置到从上述第一和第二状态中选出的一个状态上。
17.如权利要求16所述的处理器,其中各个操作单元具有一个接收指示上述选择状态的数据信号的数据输入。
18.如权利要求10到17中任何一个所述的处理器,其中还包含在其对应控制信息项具有上述第一数值的每个预测寄存器均具有上述第二状态时能够确定一个预定处理器操作已经完成的完成检测装置。
19.如权利要求18所述的处理器,其中上述完成检测装置包括多个单独的完成检测电路,各个操作单元均包含上述多个完成检测电路中的一个电路,并且各个上述完成检测电路均能够根据单元上述自身的对应预测寄存器的上述状态和对应于该预测寄存器的上述控制信息项为其具体的操作单元产生一个检测结果。
20.如前面任何权利要求所述的处理器,其中各个上述操作单元均包含对各个上述状态确定操作产生作用的组合逻辑电路。
21.能够以预测方式执行指令的处理器,其中包含:
一系列预测寄存器,每个寄存器均可在至少第一和第二状态之间切换并且均可被分配给一或多个预测执行的指令;
将上述系列的一或多个预测寄存器指定成各自的移位寄存器的移位寄存器指定装置;和
和与上述预测寄存器相连以便执行一个移位操作的移位装置,在上述移位操作中,对于被移位寄存器指定装置指定成移位寄存器的各个预测寄存器,上述系列以前的寄存器的状态被传送到有关的寄存器中,不对上述系列中任何未指定成这种移位寄存器的寄存器执行这种传送。
22.如权利要求21所述的处理器,其中在处理器被使用时上述移位寄存器指定装置保存分别对应于上述系列的上述预测寄存器的目标信息项,各个这样的信息项指示其对应的预测寄存器是否上述移位寄存器中的一个。
23.如权利要求22所述的处理器,其中在使用处理器时可以改变上述目标信息项。
CN01121184A 2000-06-13 2001-06-13 处理器中指令的预测执行 Pending CN1329303A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0014432A GB2363480B (en) 2000-06-13 2000-06-13 Predicated execution of instructions in processors
GB0014432.9 2000-06-13

Publications (1)

Publication Number Publication Date
CN1329303A true CN1329303A (zh) 2002-01-02

Family

ID=9893558

Family Applications (1)

Application Number Title Priority Date Filing Date
CN01121184A Pending CN1329303A (zh) 2000-06-13 2001-06-13 处理器中指令的预测执行

Country Status (5)

Country Link
US (1) US6944853B2 (zh)
EP (1) EP1164471A3 (zh)
JP (1) JP2002024011A (zh)
CN (1) CN1329303A (zh)
GB (2) GB2363480B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1312579C (zh) * 2003-12-17 2007-04-25 英特尔公司 用于超前执行下的结果推测的方法和装置
CN100363888C (zh) * 2004-03-02 2008-01-23 松下电器产业株式会社 用于控制信息处理设备的内部状态的装置和方法
CN100377078C (zh) * 2004-02-04 2008-03-26 威盛电子股份有限公司 修正管线作业微处理器中分支指令预测错误的装置

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7069545B2 (en) * 2000-12-29 2006-06-27 Intel Corporation Quantization and compression for computation reuse
EP1552411A2 (en) * 2002-10-08 2005-07-13 Koninklijke Philips Electronics N.V. Integrated circuit and method for exchanging data
JP3974063B2 (ja) * 2003-03-24 2007-09-12 松下電器産業株式会社 プロセッサおよびコンパイラ
US20040210886A1 (en) * 2003-04-15 2004-10-21 Sverre Jarp Optimized switch statement code employing predicates
US20050147036A1 (en) * 2003-12-30 2005-07-07 Intel Corporation Method and apparatus for enabling an adaptive replay loop in a processor
US7143270B1 (en) 2004-01-30 2006-11-28 Hewlett-Packard Development Company, L.P. System and method for adding an instruction to an instruction set architecture
US7673294B2 (en) * 2005-01-18 2010-03-02 Texas Instruments Incorporated Mechanism for pipelining loops with irregular loop control
CN100520714C (zh) 2005-01-25 2009-07-29 Nxp股份有限公司 多线程处理器
US8438003B2 (en) * 2007-04-12 2013-05-07 Cadence Design Systems, Inc. Methods for improved simulation of integrated circuit designs
US8561026B2 (en) * 2007-11-27 2013-10-15 International Business Machines Corporation Method, apparatus and computer program for facilitating the improvement of a user interface
US9262140B2 (en) * 2008-05-19 2016-02-16 International Business Machines Corporation Predication supporting code generation by indicating path associations of symmetrically placed write instructions
US20090327674A1 (en) * 2008-06-27 2009-12-31 Qualcomm Incorporated Loop Control System and Method
KR101645001B1 (ko) 2009-02-18 2016-08-02 삼성전자주식회사 Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법
US8769500B2 (en) * 2010-10-29 2014-07-01 Fujitsu Limited Node computation initialization technique for efficient parallelization of software analysis in a distributed computing environment
US9465613B2 (en) 2011-12-19 2016-10-11 International Business Machines Corporation Instruction predication using unused datapath facilities
US9632779B2 (en) 2011-12-19 2017-04-25 International Business Machines Corporation Instruction predication using instruction filtering
US9244677B2 (en) 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus
US9304771B2 (en) 2013-02-13 2016-04-05 International Business Machines Corporation Indirect instruction predication
EP2972781A4 (en) * 2013-03-15 2016-10-19 Intel Corp METHOD AND SYSTEMS FOR VECTORIZING SCALAR COMPUTER PROGRAM GRINDINGS WITH GRINDING DEPENDENCIES
KR20140122564A (ko) * 2013-04-10 2014-10-20 삼성전자주식회사 프로세서에서 레지스터의 물리 주소 산출 장치 및 방법
WO2014193381A1 (en) * 2013-05-30 2014-12-04 Intel Corporation Dynamic optimization of pipelined software
JP6008265B2 (ja) * 2013-05-30 2016-10-19 インテル・コーポレーション パイプライン化されたスケジュールにおけるエイリアスレジスタ割り当て
US10579378B2 (en) * 2014-03-27 2020-03-03 Intel Corporation Instructions for manipulating a multi-bit predicate register for predicating instruction sequences
WO2015179865A1 (en) * 2014-05-23 2015-11-26 The George Washington University System and method for uncovering covert timing channels
US10705841B2 (en) 2015-06-24 2020-07-07 International Business Machines Corporation Instruction to perform a logical operation on conditions and to quantize the Boolean result of that operation
US10698688B2 (en) 2015-06-24 2020-06-30 International Business Machines Corporation Efficient quantization of compare results
US10620952B2 (en) 2015-06-24 2020-04-14 International Business Machines Corporation Conversion of boolean conditions

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69330889T2 (de) * 1992-12-31 2002-03-28 Seiko Epson Corp., Tokio/Tokyo System und Verfahren zur Änderung der Namen von Registern
US5628021A (en) * 1992-12-31 1997-05-06 Seiko Epson Corporation System and method for assigning tags to control instruction processing in a superscalar processor
US5748936A (en) * 1996-05-30 1998-05-05 Hewlett-Packard Company Method and system for supporting speculative execution using a speculative look-aside table
US5958048A (en) * 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
US5826070A (en) * 1996-08-30 1998-10-20 International Business Machines Corporation Apparatus and method for maintaining status flags and condition codes using a renaming technique in an out of order floating point execution unit
US5859999A (en) * 1996-10-03 1999-01-12 Idea Corporation System for restoring predicate registers via a mask having at least a single bit corresponding to a plurality of registers
US6286135B1 (en) * 1997-03-26 2001-09-04 Hewlett-Packard Company Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
US6338137B1 (en) * 1998-05-29 2002-01-08 Texas Instruments Incorporated Data processor having memory access unit with predetermined number of instruction cycles between activation and initial data transfer
US6301705B1 (en) * 1998-10-01 2001-10-09 Institute For The Development Of Emerging Architectures, L.L.C. System and method for deferring exceptions generated during speculative execution
US6772106B1 (en) * 1999-08-20 2004-08-03 Hewlett-Packard Development Company, L.P. Retargetable computer design system
US6598155B1 (en) * 2000-01-31 2003-07-22 Intel Corporation Method and apparatus for loop buffering digital signal processing instructions
US6505345B1 (en) * 2000-01-18 2003-01-07 Intel Corporation Optimization of initialization of parallel compare predicates in a computer system
US6721875B1 (en) * 2000-02-22 2004-04-13 Hewlett-Packard Development Company, L.P. Method and apparatus for implementing a single-syllable IP-relative branch instruction and a long IP-relative branch instruction in a processor which fetches instructions in bundle form
US6637026B1 (en) * 2000-03-01 2003-10-21 Intel Corporation Instruction reducing predicate copy
US6658471B1 (en) * 2000-06-29 2003-12-02 International Business Machines Corporation Method and system for zero overhead software performance measurement instrumentation

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1312579C (zh) * 2003-12-17 2007-04-25 英特尔公司 用于超前执行下的结果推测的方法和装置
CN100377078C (zh) * 2004-02-04 2008-03-26 威盛电子股份有限公司 修正管线作业微处理器中分支指令预测错误的装置
CN100363888C (zh) * 2004-03-02 2008-01-23 松下电器产业株式会社 用于控制信息处理设备的内部状态的装置和方法

Also Published As

Publication number Publication date
GB2367406B (en) 2002-06-05
EP1164471A3 (en) 2004-06-16
GB2363480A (en) 2001-12-19
GB0130781D0 (en) 2002-02-06
EP1164471A2 (en) 2001-12-19
US6944853B2 (en) 2005-09-13
JP2002024011A (ja) 2002-01-25
GB2363480B (en) 2002-05-08
GB0014432D0 (en) 2000-08-09
GB2367406A (en) 2002-04-03
US20020091996A1 (en) 2002-07-11

Similar Documents

Publication Publication Date Title
CN1329303A (zh) 处理器中指令的预测执行
CN1129843C (zh) 使用组合的数据处理器系统和指令系统
KR0122529B1 (ko) 슈퍼스칼라 프로세서 시스템에서 복수의 명령어를 단일 사이클 동안 디스패치하기 위한 방법 및 장치
JP3280449B2 (ja) コンパイル装置
CN1101019C (zh) 数据序列产生方法及设备、转换方法及计算机
US20100070958A1 (en) Program parallelizing method and program parallelizing apparatus
US20020092005A1 (en) System and method for optimizing operations via dataflow analysis
CN1308274A (zh) 在处理器中传送指令结果及处理器的编译方法
US20020138714A1 (en) Scoreboard for scheduling of instructions in a microprocessor that provides out of order execution
CN1742257A (zh) 基于识别寻址模式的双目的寄存器的数据预测机制
JPH04229326A (ja) スカラ命令の並列実行を得る方法およびシステム
CN1532693A (zh) 处理器和编译器
US10296316B2 (en) Parallelization method, parallelization tool, and in-vehicle apparatus
US6334137B1 (en) Method and system for controlling parallel execution of jobs
US20020083423A1 (en) List scheduling algorithm for a cycle-driven instruction scheduler
US7552313B2 (en) VLIW digital signal processor for achieving improved binary translation
US5557797A (en) Scheduling method for automatically developing hardware patterns for integrated circuits
US5450588A (en) Reducing pipeline delays in compilers by code hoisting
CN1183462C (zh) 可变流水线级数的数据处理装置
CN1194321C (zh) 高速信息检索系统
CN1310386A (zh) 映射电路和方法
US20120233445A1 (en) Multi-Thread Processors and Methods for Instruction Execution and Synchronization Therein and Computer Program Products Thereof
Bauer et al. Run-time instruction set selection in a transmutable embedded processor
CN1143213C (zh) 高速处理循环的编译器和处理器
CN1372190A (zh) 对处理器中循环的处理

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication