专利名称:数据处理装置的制作方法
技术领域:
本发明涉及处理器等数据处理装置,尤其涉及可进行高效的流水
线(pipeline)控制的技术。
背景技术:
以往,在处理器等数据处理装置中,充分利用由工艺微细化的进 展带来的可利用的晶体管数量的持续增加,实现了由电路的大规模化 带来的高性能化。处理器体系结构中,以单指令流为前提的冯诺依曼 型是主流,根据大规模的指令发出遷辑从单指令流中提取最大限的并 行性来进行处理,这是高性能化中不可欠缺的。
例如,现在作为高端处理器的方式,在一般的乱序(Out of Order) 方式中,将单指令流保持在大容量緩存中,检查数据依赖关系,从输 入数据齐备的指令开始执行,在执行后再按照本来的指令流的顺序更 新处理器状态。此时,为了消除因寄存器操作数的反向依赖、输出依 赖引起的指令发出限制,准备大容量寄存器文件,进行寄存器重命名。 结果,后续指令可能比原来更早使用先行执行的结果,有助于提高性 能,但无法在处理器状态更新之前为乱序。这是由于无法进行在暂时 停止程序后进行恢复这样的处理器的基本处理。因此,先行执行的结 果存储在大容量的重排序緩存中,按原来的顺序写回到寄存器文件等 中。如此单指令流的乱序执行是需要大容量緩存和复杂控制的低效率 方式。例如在非专利文献l中,如第25页的图2所示,准备20条目 (entry)的整数发出队列(Integer issue queue ) 、 15条目的浮点发出 队列(Floating-point issue queue )、 80条2组的整数寄存器文件(Integer register file ) 、 72条的浮点寄存器文4牛(Floating-point register file ), 可进行大规模的乱序发出。作为对乱序方式进行记载的其他文献,可列举出专利文献l、 2。 而在逻辑规模相对较小的有序(in order)方式中,不仅是指令发 出逻辑,处理器整体也是同步工作的,这是基本的,因此,需要在某 指令执行停滞时,与是否有依赖关系无关地使后续指令的处理停止。 因此,从处理器各部收集执行可能性的信息,判断作为处理器整体的 执行可能性,将该判断结果传送到处理器各部,来保证处理器整体同 步进行工作。
作为对有序方式进行记载的文献的例子,可举出专利文献3。
非专利文献 1 : R.E.Kessler , " THE ALPHA 21264 MICROPROCESSOR, ,, IEEE Micro , vol.19 , no.2 , pp.24-36 , MARCH-APRIL 1999
专利文献1:日本特开2004- 303026号公报
专利文献2:日本特开平11 - 353177号公报
专利文献3:日本特开2007 - 164354号公才艮
发明内容
近年来,随着工艺微细化的进展,作为电路延迟的主要原因,布 线延迟比门延迟更是主要原因,为了逻辑电路高速化,需要设计考虑 了布线延迟的方式。因此,即使在处理器等数据处理装置中,也需要 构筑最适于这样的微细工艺的流水线结构。所谓考虑了布线延迟的方 式,具体而言是指提高处理的局部性、并可减少信息、数据传送量的 方式。
另外,随着工艺微细化的进展而逐渐减小的功耗,也伴随微细化 的漏电流呈指数函数增大而变得不会被减少。因此,即使因微细化而 能够使用的晶体管增加,随着该晶体管的增加,功耗也会增加,因此, 当如以往那样通过电路的大规模化来提高性能时,则会由于超出性能 提高的功耗增大而使功率效率降低。另外,即使对至此顺利发展的芯 片的功率限制放宽,在服务器系统中也最多为IOOW、在固定式组装 系统中也最多为数w、在面向移动设备的组装系统中也最多数百mW。在这样的功率限制下发挥最高性能的是功率效率最高的芯片。 因此,需要比以往更高效率的方式。
然而,在上述的大规模乱序方式中,需要大规模的硬件,因此无 法提高处理的局部性,也无法提高功率效率。另外,在有序方式中, 由于也需要处理器整体同步工作,因此也难以提高处理的局部性,不 能称之为是考虑了布线延迟的方式。其中,乱序方式在指令执行中不 需要有序方式那样的整体同步,具有处理的局部性。
本发明的目的在于,用有序方式那样的较小规模的硬件来实现如 乱序方式那样不需要整体同步的方式,提高处理的局部性,并提高功 率效率。
本发明的上述及其他目的和新特征,将通过本说明书的记载和附
图而得以明确。
简要说明本申请公开的发明中的代表性技术方案如下。
即, 一种数据处理装置,包括能够分别进行用于指令执行的预定
处理的多个执行资源(EXU、 LSU),能够通过上述多个执行资源进
按照该指令的流程顺序用有序方式进行处理,对于在互不相同的执行 资源中处理的指令,与该指令的流程顺序无关地用乱序方式进行处 理。通过进行这样的处理,使执行资源内的局部处理简单化,能够用 小规模的硬件加以实现,不需要跨执行资源的大范围处理的同步,提 高的处理的局部性和功率效率。
简要说明本申请公开的发明中的代表性技术方案所得到的效果 如下。
即,能够用有序方式那样的较小规模的硬件来实现如乱序方式那 样不需要整体同步的方式,提高处理的局部性,并提高功耗效率。
图1是作为本发明的数据处理装置的一例的处理器的结构例框图。图2是乱序方式的处理器的流水线构造的说明图。 图3是用乱序方式的处理器执行程序时的循环部的工作说明图。 图4是用乱序方式的处理器执行程序时的循环部的工作说明图。 图5是在图4中将载入延迟(latency )从3延长到9时的循环部
的工作-说明图。
图6是上述程序的结构例说明图。
图7是图1所示的处理器中的流水线的结构例说明图。
图8是图1所示的处理器的全局指令队列GIQ和写信息队列WIQ
的结构例框图。
图9是运算指令用屏蔽信号EXMSK的生成逻辑的说明图。
图10是运算指令用屏蔽信号EXMSK的生成逻辑的电路图。
图11是写信息队列WIQ中的运算指令局部(local)选择信号
EXLS的生成逻辑的电路图。
图12是用上述处理器执行上述程序时的循环部的流水线工作的
说明图。
图13是用上述处理器执行上述程序时的循环部的流水线工作的 说明图。
图14是在图13中将载入延迟从3延长到9时的循环部的工作说明图。
图15是用分支流水线执行图14中由运算流水线执行的第3减量 (decrement)测试指令时的循环部的工作i兌明图。
图16是引起反向依赖和输出依赖的流水线工作的说明图。
图17是图1所示的处理器的全局指令队列GIQ和读写信息队列 RWIQ的另一结构例框图。
图18是使用图17的电路结构时的引起反向依赖和输出依赖的流 水线工作的说明图。
具体实施例方式
1. ^表性实施方式首先,说明本申请公开的发明的代表性实施方式的概要。在对代 表性实施方式的概要说明中,加括号参照的附图标记只不过是例示出 在标注了该附图标记的构成要素的概念中所包含的部分。
(1 )本发明的代表性实施方式的数据处理装置10,包括可进行 用于执行各个指令的预定处理的多个执行资源(EXU、 LSU),可通 过上述多个执行资源进行流水线处理。并且,上述执行资源对于由相 同的执行资源处理的指令,按照该指令的流程顺序以有序方式进行处 理,对于由互不相同的执行资源处理的指令,与该指令的流程顺序无 关地以乱序方式进行处理。通过这样的处理,使执行资源内的局部处 理简单化,可用小规模的硬件加以实现,不需要跨执行资源的大范围
处理的同步,^v而^是高处理的局部性和功率效率。
(2) 上述数据处理装置包括可取得(fetch)指令的指令取得单 元(IFU)。此时,上述指令取得单元包括可基于按各执行资源而不 同的作用域的先行指令的寄存器写入信息来检查作为与先行指令的 冒险要因的流程依赖的信息队列(WIQ、 RWIQ)。由此,作为乱序 执行的结果,各执行资源的进展不同,即使在按各执行资源而先行指 令不同的状况下,也可冲全查流程依赖。
(3) 上述信息队列进行控制,以使后续指令的寄存器写入不超 越先行指令的寄存器读出。具体而言,在后续指令的寄存器写入之前, 检查先行指令的寄存器读出序号,若检测出反向依赖关系,则使后续 指令的寄存器写入延迟,使先行指令的寄存器读出先执行。由此,可 保持处于反依向赖关系的指令的执行结果的匹配性。
(4) 可以按上述多个执行资源中的各执行资源而配置局部寄存 器。由此,能够确保寄存器读出的局部性。
器写入。由此,不需要反向依赖检查,并且可减少功耗。
(6 )上述执行资源包括可基于上述指令进行运算执行的运算执 行单元、和可进行数据的载入和存储的载入存储单元。此时,可以在 上述局部寄存器中设置运算指令用的局部寄存器文件和载入存储指令用的局部寄存器文件。为了确保寄存器读出的局部性,上述局部寄 存器文件配置于上述运算执行单元内,上述局部寄存器文件配置在上 述载入存储单元内。
(7) 通过控制以使后续指令的寄存器写入不超越先行指令的寄
存器写入,由此可保持处于反向依赖关系的指令的执行结果的匹配性。
(8) 通过在先行指令的寄存器写入被向同一寄存器的后续指令 的寄存器写入超越时,抑制先行指令的寄存器写入,可保持处于反向
依赖关系的指令的执行结果的匹配性。
2.实施方式的"i兌明
接着,进一步详细说明实施方式。 《本实施方式的比较例》
在此,首先基于图1、图2和图6说明作为实施方式比较例的以 往处理器的结构、工作等。
图6例示出用于说明处理器工作例的第l程序。
如图6 (A)中用C语言记述的那样,第1程序是对具有N个元 素的两个数组a[i]和b[i]进行加法运算,并保存在数组c[i]中的程序。 对用汇编语言记述该第l程序的情况进行说明。在汇编程序中,^支:没 具有算后增量(postincrement)式的载入和存储指令的体系结构。
如图6( B )所示,首先作为初始设定,通过4条直接转移指令"mov #_a, r0" 、 "mov #—b, rl" 、 "mov #—c, r2"和"mov #N, r3,,,分别将3个数组的首地址—a、 _b、 _c和数组的元素数N保存到 寄存器r0、 rl、 r2和r3中。接着,在循环部中,通过算后增量载入 指令"mov @r0 + , r4"和"mov @rl + , r5" , /人r0和rl所指 的数组a和b的地址载入数组元素至r4和r5,同时对r0和rl增量而 使其指向下一数组元素。接着,通过减量(decrement)测试指令"dt r3",对保存在r3中的元素数N进行减量,测试其结果是否是0,若 是0则设置标志,若不是0则清除标志。其后,通过加法运算指令"add r4, r5",对载入到r4和r5中的数组元素进行加法运算,并保存到r5中。然后,通过算后增量存储指令"mov r5, @r2 + ",将数组 元素的加法运算结果的r5的值存储到数组c的元素地址。最后,通过 条件分支指令"bf —L00"检查标志,若被清除,则剩余元素数N还 不是0,因此分支到标签J^00所指的循环的起始。
图2概略例示出乱序方式的处理器的流水线结构。
该流水线结构由所有指令共用的指令高速緩存访问IC1和IC2、 全局指令緩存GIB、运算和载入存储指令用的寄存器重命名REN和 指令发出ISS、运算指令用的局部指令緩存EXIB、寄存器读RR、运 算EX、载入存储指令用的局部指令緩存LSIB、寄存器读RR、载入 存储地址计算LSA、数据高速緩存访问DC1、以及载入指令用的数据 高速緩存访问第2级DC2、存储指令用的存储緩存地址及数据写入 SBA和SBD、分支指令用的分支BR、与寄存器回写(writeback)的 某指令共用的物理寄存器回写WB、以及基于向逻辑寄存器的写回的 指令返回(Return) RET的各级构成。基于算后增量的地址寄存器更 新结果在与地址计算LSA接着的数据高速緩存访问DC1级被回写到 物理寄存器。指令取得为每次4条指令,指令发出可以对于载入存储、 运算、分支的各种类的每种类而在1个周期发出1条指令。
图3例示出用图2例示的乱序方式处理器执行第l程序时的循环 部的流水线工作。
首先,在起始的载入指令"mov @rO+, r4,,的执行中,通过指 令高速緩存访问IC1和IC2、全局指令緩存GIB、寄存器重命名REN、 指令发出ISS、局部指令緩存LSIB、寄存器读RR、地址计算LSA、 数据高速緩存访问DC1和DC2、物理寄存器回写WB、以及指令返 回RET的各级处理来执行指令。在第2载入指令"mov @rl + , r5,, 的执行中,与先行的载入指令发生资源竟争,因此在寄存器重命名 REN后发生1个周期的气泡级(bubble stage) , ^旦其他是与起始载入 指令同样地进行处理的。在第3减量测试指令"dt r3"的执行中, 到指令发出ISS之前进行与第1载入指令同样的处理,其后,进行了 局部指令緩存EXIB、寄存器读RR、运算EX以及物理寄存器回写WB的各级处理后,为了恢复与先行指令的顺序关系,隔着4个周期 的气泡级而执行指令返回RET级的处理。在第4加法运算指令"add r4, r5,,的执行中,对于先行的两条载入指令存在流程依赖,因此, 在寄存器重命名REN后发生4个周期的气泡级,然后通过指令发出 ISS、局部指令緩存EXIB、寄存器读RR、运算EX、物理寄存器回写 WB以及指令返回RET的各级处理来执行指令。在第5算后增量存储 指令"movr5, @r2 + "的执行中,指令取得是每次4条指令,因此, 通过对如下处理执行指令,即该处理为对起始4条指令延迟1个周期 的指令高速緩存访问IC1和IC2、全局指令緩存GIB、以及寄存器重 命名REN之后,与先行的载入指令发生资源竟争,因此发生1个周 期的流水线气泡,其后,指令发出ISS、局部指令緩存LSIB、寄存器 读RR、地址计算LSA、数据高速缓存访问DC1、存储缓存地址及数 据写入SBA和SBD、以及指令返回RET的各级处理。当寄存器r5 在寄存器读RR级要进行读取时,会因流程依赖而等待,但若在存储 緩存数据写入SBD级接收时,则不会等待。在循环最后的条件分支 指令"bf_L00"的执行中,通过紧接全局指令緩存GIB级之后的分 支BR级来处理指令。由于可用1次循环6条指令的小循环将所有指 令保持在全局指令队列GIQ中,因此,通过反复执行保持于全局指令 队列GIQ中的1个循环的指令来实现分支处理。结果,在紧接BR级 之后,执行作为分支前指令的循环起始指令"mov @r0+, r4"的 全局指令队列GIQ级。
以上这样工作的结果,从执行各指令时的寄存器重命名REN级 到返回RET级的循环次数是9~ 11周期。其间,对每一寄存器写分 配不同的物理寄存器,每3个周期开始循环的处理,因此,在第4循 环的中途释放第1循环的物理寄存器。另外,逻辑寄存器R5进行基 于第2载入指令和第4加法运算指令的回写,因此,在l次循环内对 寄存器R5分配2个物理寄存器。结果,对6条逻辑寄存器进行映射 所需的物理寄存器数是每1次循环7条,在第1 4循环中,需要不 同的物理寄存器,合计为28条物理寄存器。图4例示出用乱序方式的处理器执行第1程序时的循环部的工 作。在图2例示的流水线工作的指令发出ISS级或分支BR级中,使 之代表各指令的执行周期。在载入指令中,地址计算LSA、数据高速 緩存访问DC1和DC2这3级视为延迟,在分支指令中,分支BR、 全局指令緩存GIB和寄存器重命名REN级这3级视为延迟,因此, 载入指令和分支指令的延迟是3。首先,在第l周期执行起始的载入 指令"mov@r0+, r4"、第3减量测试指令"dt r3"、和循环最后 的条件分支指令"bf—L00"。在第2周期执行第2载入指令"mov @rl + , r5",在第3周期执行第5算后增量存储指令"mov r5, @r2 + "。并且,在第4周期开始第2循环的处理,成为与第l周期同样 的工作。进一步在第5周期执行第1循环的第4加法运算指令"add r4, r5"和第2循环的第2载入指令"mov @rl + , r5",第6周期 成为与第3周期同样的工作。其后,反复每1次循环3周期的工作。 图5例示出将载入延迟从图4的3延长到9时的循环部的工作。 在处理大规模数据时不收容在高速的小容量存储器中,因此假定较长 的延迟是现实的。随着载入延迟的增加,第4加法运算指令"addr4, r5,,的执行开始比图4延迟了 6周期。结果,从寄存器重命名REN 级到返回RET级的周期数比图3时长6周期,成为15~17周期,在 第6循环的途中释放物理寄存器。因此,对6条逻辑寄存器进行映射 所需的物理寄存器数增加了 2循环的量、即14条,成为共计42条。 如上所述,在以往的乱序方式中,虽然依赖于程序、执行延迟,但需 要逻辑寄存器的4 7倍左右的物理寄存器。 《实施方式》
图1概略例示出作为本发明的数据处理装置一例的处理器的框结构。
图1所示的处理器10未特别限制,但包括指令高速緩存IC、指 令取得单元IFU、数据高速緩存DC、载入存储单元LSU、指令执行 单元EXU和总线接口单元BIU。在指令高速緩存IC附近配置有指令 取得单元IFU,其中包括最初接受所取得的指令的全局指令队列GIQ 、分支处理控制部BRC、保持由锁存在全局指令队列GIQ中的指令生 成的寄存器写信息并管理到寄存器写完成为止的写信息队列WIQ。另 外,在数据高速緩存DC附近配置有载入存储单元LSU,其中包括保 持载入存储指令的载入存储指令队列LSIQ、载入存储指令用的局部 寄存器文件LSRF、载入存储指令用的地址加法运算器LSAG、保持 存储指令的地址和数据的存储緩存SB。指令执行单元EXU包括保持 运算指令的执行指令队列EXIQ、运算指令用的局部寄存器文件 EXRF、运算指令用的运算器ALU。并且,总线接口单元BIU起到处 理器IO与外部总线的接口的作用。
图7概略例示上述处理器10的流水线结构。
首先,具有所有指令共用的指令高速緩存访问IC1和IC2、以及 全局指令緩存GIB级,运算指令用的有局部指令緩存EXIB、局部寄 存器读EXRR、以及运算EX。另外,载入存储指令用的有局部指令 緩存LSIB、局部寄存器读LSRR、地址计算LSA、数据高速緩存访问 DC1的各级,载入指令用的有数据高速緩存访问第2级DC2,存储指 令用的有存储高速緩存地址和数据写入SBA和SBD的各级。分支指 令用的有分支BR的各级,寄存器回写的某指令包括共用的寄存器回 写WB级。
在指令高速緩存访问IC1和IC2级中,指令取得单元IFU从指令 高速緩存IC每次取得4条指令,将其保存在全局指令緩存GIB级的 全局指令队列GIQ中。在全局指令緩存GIB级中,根据保存的指令 生成寄存器写信息,在下一周期保存于写信息队列WIQ。另外,载入 存储、运算以及分支的各种类的指令被每次提取1条指令,在局部指 令緩存LSIB和EXIB、以及分支BR级被分别保存于载入存储单元 LSU的指令队列LSIQ、指令执行单元EXU的指令队列EXIQ以及指 令取得单元IFU的分支控制部BRC。并且,在分支BR级中,接受到 分支指令时,马上开始分支处理。
在运算指令用流水线中,指令执行单元EXU在局部指令緩存
EXIB级,在1个周期中,每次将最大1条指令的运算指令接收到指令队列EXIQ中,每次最大1条指令地进行译码,并且通过指令取得 单元IFU检查写信息队列WIQ,来检测译码中的指令有无对先行指 令的寄存器依赖。在接着的局部寄存器读EXRR级中,若不存在寄存 器依赖则进行寄存器读,若存在依赖则暂停(stall)该级而使之产生 流水线气泡(pipeline bubble )。其后,在运算EX级使用运算器ALU 进行运算,并在寄存器回写WB级中,在寄存器中进行存储。
在载入存储指令用的流水线中,在载入指令緩存LSIB级,载入 存储单元LSU在1个周期中将每次最大1条指令的载入存储指令接 收到指令队列LSIQ中,每次最大1条指令地进行译码,并且通过指 令取得单元IFU检查写信息队列WIQ,来检测译码中的指令有无对 先行指令的寄存器依赖。在接着的局部寄存器读LSRR级中,若不存 在寄存器依赖则进行寄存器读,若存在依赖则暂停(stall)该级而使 之产生流水线气泡。然后,在地址计算LSA级使用地址加法运算器 LSAG进行地址计算。并且,若是载入指令,则在数据高速緩存访问 DCl和DC2级从数据高速緩存DC载入数据,并在寄存器回写WB 级保存于寄存器。若是存储指令,则在数据高速緩存访问DCl级进 行访问的例外检查和数据高速緩存DC的命中/非命中判断,在存储緩 存地址、数据写入SBA和SBD的各级,分别将存储地址和存储数据 写入存储緩存。
图8例示出上述处理器10中的全局指令队列GIQ和写信息队列 WIQ的结构。
如图8所示,全局指令队列GIQ由16指令的指令队列入口( entry) GIQ0 15、指定写入位置的全局指令队列指针GIQP、运算、载入存 储以及随着分支的各种类指令的进展而增进的、指定读出位置的运算 指令指针EXP、载入存储指令指针LSP、分支指令指针BRP、以及对 这些指针进行译码的指令队列指针译码部IQP-DEC构成。
而写信息队列WIQ由写信息译码器WID0~3、 16指令的写入信 息入口 WI0 15、指定新的写入信息设置位置的写信息队列指针 WIQP、指定处于局部指令緩存级EXIB和LSIB中的运算指令和载入存储指令的位置的载入存储指令局部指针LSLP和运算指令局部指针 EXLP、指向载入接下来可利用的载入数据的指令的载入数据写指针 LDWP、以及对这些指针进行译码的写信息队列指针译码部WIP-DEC 构成。
全局指令队列GIQ按照由全局指令队列指针GIQP的译码生成的 全局指令队列选择信号GIQS,将从指令高速緩存IC取得的4条指令 ICO0 3锁存到指令队列条目GIQ0 3、GIQ4 7、GIQ8 11或GIQ12 15 中,在锁存之后的周期,将锁存的4条指令输出至写信息队列WIQ 的写信息译码部WID0 3。同时接收表示取得的4条指令ICO0~3的 有效性的指令高速緩存输出有效信号ICOV,对该信号进行断言 (assert)后锁存于全局指令队列GIQ中。另外,按照由运算指令指 针EXP、载入存储指令指针LSP和分支指令指针BRP这三个指针的 译码而生成的运算指令选择信号EXS、载入存储指令选择信号LSS 和分支指令选择信号BRS,每次提取1条各种类的指令,作为运算指 令EX-INST、载入存储指令LS-INST和分支指令BR-INST进行输出。
在写信息队列WIQ中,首先,写信息_泽码部WID0 3接收锁存 于全局指令队列GIQ中的4条指令,生成这些指令的寄存器写信息。 然后,接收到的指令的有效信号IV被断言后,按照由写信息队列指 针WIQP的译码而生成的写信息队列选择信号WIQS,将所生成的寄 存器写信息锁存于WI0 3、 WI4~7、 WI8~11、或WI12-15中。写信 息队列指针WIQP指向锁存于写信息队列WIQ中的指令中最早的指 令,当从该最早的指令开始,4条指令的寄存器写信息成为不需要而 被删除时,则能够在写信息队列WIQ中产生空闲,可进行新的4条 指令的写信息的锁存。并且,重新锁存了写信息后,则使写信息队列 指针WIQP前进,以指接下来的4条目。
而运算指令局部指针EXLP和载入存储指令局部指针LSLP指定 从此开始执行的指令,从上述最早的指令到这些指针指定的指令之前 的指令为止,是在从此开始执行的指令之前执行的指令,成为流程依 赖的检查对象指令。因此,写信息队列指针译码部WIP-DEC生成用于从写信息队列指针WIQP、运算指令和载入存储指令的局部指针 EXLP和LSLP中选择全部流程依赖的检查对象范围的条目的运算指 令和载入存储指令用屏蔽信号EXMSK和LSMSK。
图9例示出运算指令用屏蔽信号EXMSK的生成逻辑。
输入信号中,写信息队列指针WIQP为2位、运算指令局部指针 EXLP为4位,总计6位,输出的16条指令的写入信息条目WI0-15 所对应的运算指令用屏蔽信号EXMSK为16位。为了容易译码,指 针以2位单位按00、 01、 11、 IO的顺序周期性更新。看到2位中的1 位就知道是否是相邻序号,因此是适于范围信号生成的编码。由于写 信息队列指针WIQP是每隔4个而前进,因此OO、 01、 11、 10时指 向条目0、 4、 8、 12。另外,运算指令局部指针EXLP仅指向运算指 令,跳过其他指令而前进。
右端是64那样对输出信号值标注的序号。为了容易查表,仅在 运算指令用屏蔽信号EXMSK为"1"时进行记载,在为"0"时为空 栏。在#1中,两个指针都为"0" —致,因此表示出不存在先行的指 令,运算指令用屏蔽信号EXMSK全是"0"。写信息队列指针WIQP 保持"0"不变,运算指令局部指针EXLP如弁2 15那样前进时,先行 指令增加,与此相应地,运算指令用屏蔽信号EXMSK被断言。同样, 在#20中,两个指针都为4一致,因此不存在先行的指令,自此开始, 写信息队列指针WIQP保持4不变,运算指令局部指针EXLP如 #21 31、 16 19那样在途中绕回(wraparound)前进时,先行指令增 加,与此相应地,运算指令用屏蔽信号EXMSK纟皮断言。在#32以后 也是同样的。并且,由写信息队列指针WIQP和载入存储指令局部指 针LSLP生成载入存储指令用屏蔽信号LSMSK的逻辑也是相同的。
如上所述,运算指令用屏蔽信号EXMSK生成逻辑乍看似复杂, 但逻辑电路例如如图10所示那样,在2输入NAND换算中为50门 的小规模逻辑即可。EXMSK之上的横线表示逻辑反相。为了比较, 图11例示出由运算指令局部指针EXLP生成运算指令局部选择信号 EXLS的4位译码逻辑。在2输入NAND换算中为28门。4位译码部在控制部中被用于任意处,但上述屏蔽信号生成逻辑仅是2处,尤 其是无障碍的逻辑规模。
根据由如上述那样生成的运算指令用屏蔽信号EXMSK,从图8 所示的写信息队列WIQ的16条目取出在运算指令局部指针EXLP所 指的运算指令之前执行的指令的写信息,并取逻辑和,作为运算指令
用写信息EX-WI进行输出。同样,根据载入存储指令用屏蔽信号 LSMSK,从写信息队列WIQ的16条目取出在载入存储指令局部指针 LSLP所指的载入存储指令之前执行的指令的写信息,并取逻辑和, 作为载入存储指令用写信息LS-WI进行输出。
同时,在全局指令緩存GIB级,用锁存部81、 82对从全局指令 队列GIQ输出的运算指令EX-INST和载入存储指令LS-INST进行锁 存,使之与局部指令緩存LSIB和EXIB级同步,输入到运算指令和 载入存储指令的寄存器读信息译码部EX-RID和LS-RID并进行译码, 生成运算指令和载入存储指令的寄存器读信息EXIB-RI和LSIB-RI。 然后,取写信息EX-WI、 LS-WI和读信息EXIB-RI、 LSIB-RI的每个 寄存器序号的逻辑积的关于所有寄存器序号的逻辑和,分别作为运算 指令和载入存储指令的发出暂停EX-STL和LS-STL。发出暂停 EX-STL和LS-STL经锁存部83、 84而被输出。
上述发出暂停被取反时,发出指令。在本实施方式中,运算指令 的运算和载入存储指令的地址计算在1周期内完成,因此,发出运算
指令和载入存储指令时,其结果从下一周期发出的指令开始可以使 用。因此,若发出指令则写信息队列WIQ内的对应的寄存器写信息 被清除。因此,将运算指令和载入存储指令的发出暂停EX-STL和 LS-STL取反后的信号分别作为运算指令和载入存储指令的寄存器写 信息清除信号EX-WICLR和LS-WICLR。而载入指令的延迟是3,因 此通常等待2周期后,所对应的寄存器写信息被清除。但是,有时由 于高速緩存错误等,为了使载入数据成为可使用状态而需要超过3周 期的周期数。因此,实际上输入与要载入数据成为可使用状态相符的 载入数据寄存器写信息清除信号LD-WICLR来清除对应的寄存器写信息。
例如,也存在如图6所示的程序的算后增量载入指令"mov @r0+, r4,,那样更新两个寄存器的指令。此时,将地址寄存器r0和 载入数据寄存器r4双方的写信息保存于1条指令的条目中。并且, 双方的寄存器成为可使用状态的定时分别是发出指令后的1个周期和 3个周期,是不同的。因此,基于载入存储指令对载入指令的寄存器 写信息清除信号LS-WICLR进行的r0的寄存器写信息清除是按寄存 器序号选择性进行的,保留载入数据寄存器r4的寄存器写信息。而 在基于载入数据寄存器写信息清除信号LD-WICLR进行的r4的寄存 器写信息清除时,其他寄存器写信息已经被清除,因此不需要按寄存 器序号选择性进行,而将载入指令用的条目的寄存器写信息全部清 除。
图12例示出图6所示的程序的上述处理器IO进行的流水线工作。
省略指令高速緩存访问ici和IC2,从全局指令緩存GIB级开始 记述。首先,在起始的载入指令"mov @r0+, r4"的执行中,通过 全局指令緩存GIB、局部指令緩存LSIB、局部寄存器读LSRR、地址 计算LSA、数据高速緩存访问DC1和DC2以及寄存器回写WB的各 级处理来执行指令。
在第2载入指令"mov @rl + , r5"的执行中,由于与先行的载 入指令发生资源竟争,因此在全局指令緩存GIB级中保持2周期后, 与起始载入指令同样地进行处理。
在第3减量测试指令"dt r3"的执行中,通过全局指令緩存GIB、 局部指令緩存EXIB、局部寄存器读EXRR、运算EX和寄存器回写 WB的各级处理来执行指令。
在第4加法运算指令"add r4, r5"的执行中,由于与先行的减 量测试指令发生资源竟争,因此在全局指令緩存GIB级中保持2周期 后,进入全局指令緩存EXIB级,由于相对于先行的两个载入指令存 在流程依赖,因此在局部指令緩存EXIB级中暂停3周期后,通过局 部寄存器读EXRR、运算EX、以及寄存器回写WB的各级处理来执行指令。
在第5算后增量存储指令"mov r5, @r2+"中,由于指令取得 是每次4条指令,因此比先行指令延迟1周期而进入全局指令緩存 GIB级,由于与先行的载入指令发生资源竟争,因此在全局指令緩存 GIB级中保持2周期后,通过局部指令緩存LSIB、局部寄存器读 LSRR、地址计算LSA、数据高速緩存访问DC1以及存储高速緩存地 址和数据写入SBA和SBD的各级处理来执行指令。
在循环最后的条件分支指令"bf_L00"的执行中,通过全局指令 緩存GIB和分支BR的各级处理来执行指令。分支处理与上述的乱序 方式处理器相同,通过反复执行保持于全局指令队列GIQ中的1次循 环的指令来实现。结果,在紧接BR级之后,执行作为分支前指令的 循环起始指令"mov @r0+, r4"的全局指令队列GIQ级。
第2循环也基本上以第1循环的3周期延迟而被执行。其中,在 第3减量测试指令"dtr3"和第4加法运算指令"addr4, r5"的执行 中,由于与第l循环的第4加法运算指令"add r4, r5"发生资源竟 争,因此在全局指令緩存GIB级中被保持为2周期余量。结果,第3 减量测试指令"dtr3"在延迟反映其的2周期余量后被执行,第4加 法运算指令"add r4, r5"的因流程依赖引起的暂停减少2周期而多 余的周期被抵消,与其他指令同样地以第1循环的3周期延迟而被执 行。第3循环以后与第2循环同样地被执行。
接着,说明各指令发出时的流程依赖检查的工作。 图12例示出各周期中的写信息队列WIQ的状态。 在本工作例中,使用从r0到r5的6条寄存器,因此,对这些6 条寄存器进行记载。与图9相同,仅在值为"1"时进行记载,在值 为"0"时为空栏。图中,细双线表示写信息队列指针WIQP所指的 条目,粗线表示运算指令局部指针EXLP所指条目之前的条目,细线 和粗线的双线表示载入存储指令局部指针LSLP所指条目之前的条 目。因此,从细双线到粗线是运算指令的流程依赖检查对象条目,从 细双线到细线和粗线的双线是载入存储指令的流程依赖检查对象条目。细双线位于下方时,范围在条目15绕回到条目0。
运算指令和载入存储指令用写信息EX-WI和LS-WI的状态也与 图9相同,仅在值为"1"时进行记载,在值为"0"时为空栏。并且, 运算指令和载入存储指令用读信息EXIB-RI和LSIB-RI,在由于表示 应进行流程依赖检查的寄存器而被断言之处标注了阴影线。因此,在 标注了阴影线的栏中有"1"时,则发生流程依赖,需要流水线暂停, 因此,对运算指令和载入存储指令的发出暂停EX-STL和LS-STL进 行断言。
首先,在全局指令緩存GIB级将起始4条指令锁存于全局指令队 列GIQ中,传送至写信息队列WIQ中。同时,起始指令作为图8的 LS-INST而被送往局部指令緩存LSIB级,第3指令作为EX-INST而 -陂送往局部指令緩存EXIB级。此时,写信息队列WIQ为空,写信 息队列指针WIQP、运算指令局部指针EXLP、载入存储指令局部指 针LSLP都指向起始条目WIO。
在下一周期中,将起始4条指令的寄存器写信息锁存于写信息队 列WIQ的起始4条目WI0 WI3中,写信息队列指针WIQP指向条目 WI4,运算指令局部指针EXLP指向条目WI2,载入存储指令局部指 针LSLP接着指向起始条目WIO。结果,如图12所示那样,在rO、 rl、 r4、 r5,运算指令用写信息EX-WI被断言,载入存储指令用写信息 LS-WI未被断言。而且,r0和r3分别断言,运算指令和载入存储指 令用读信息EXIB-RI和LSIB-RI在寄存器序号上不重复,因此,运算 指令和载入存储指令的发出暂停EX-STL和LS-STL被断言。
在下一周期中,清除通过执行第l指令和第3指令成为可利用状 态的条目WIO的r0和条目WI2的r3的寄存器写信息。另外,第5 算后增量存储指令"movr5, @r2+"的写信息被重新锁存于条目WI4 中。第6条件分支指令"bf_L100"中没有寄存器写。另外,第7、 ? 指令是循环外指令,在不作为检查对象的状态下由分支取消,无论写 什么都对工作没有影响,因此,为了便于说明,对应的条目WI6、 7 标为空栏。并且,写信息队列指针WIQP指向条目WI8,运算指令局部指针EXLP指向条目WI3,载入存储指令局部指针LSLP指向条目 WIl。结果,如图所示,在rl、 r4、 r5中运算指令用写信息EX-WI 被断言,在r4中载入存储指令用写信息LS-WI被断言。进一步,运 算指令用读信息EXIB-RI的r4和r5被断言,载入存储指令用读信息 LSIB-RI的rl被断言,运算指令用写信息EX-WI和运算指令用读信 息EXIB-RI有重叠,因此,运算指令发出暂停EX-STL被断言。并且, 根据该信号,局部指令緩存EXIB级被暂停。
在下一周期中,清除通过执行第2指令而成为可利用状态的条目 WI1的rl的寄存器写信息。另外,写信息队列指针WIQP接着指向 条目WI8,运算指令局部指针EXLP也接着指向条目WI3,载入存储 指令局部指针LSLP指向条目WI4。结果,如图12所示,在r4、 r5 中运算指令用写信息EX-WI和载入存储指令用写信息LS-WI都被断 言。进而,运算指令用读信息EXIB-RI的r4和r5被断言,载入存储 指令用读信息LSIB-RI的r2被断言,运算指令用写信息EX-WI和运 算指令用读信息EXIB-RI有重叠,因此,运算指令发出暂停EX-STL 被断言。并且,根据该信号,局部指令緩存EXIB级被暂停。
在下一周期中,清除通过执行第5指令而成为可利用状态的条目 WI4的r2的寄存器写信息。另外,第2循环的起始4条指令的寄存 器写信息被锁存于写信息队列WIQ的4条目WI8 WI11中,写信息 队列指针WIQP指向条目WI12,运算指令局部指针EXLP接着指向 条目WI3,载入存储指令局部指针LSLP指向条目WI8。结果,如图 12所示,在r5中运算指令用写信息EX-WI和载入存储指令用写信息 LS-WI都被断言。进而,运算指令用读信息EXIB-RI的r4和r5被断 言,载入存储指令用读信息LSIB-RI的r0被断言,运算指令用写信 息EX-WI和运算指令用读信息EXIB-RI有重叠,因此,运算指令发 出暂停EX-STL被断言。然后,根据该信号,局部指令緩存EXIB级 被暂停。
在下一周期中,清除通过执行第2循环的第l指令而成为可利用 状态的条目WI8的r0的寄存器写信息。另外,第5算后增量存储指令"movr5, @r2+"的写信息被重新锁存于条目WI12中。并且,写 信息队列指针WIQP指向条目WIO,运算指令局部指针EXLP接着指 向条目WI3,载入存储指令局部指针LSLP指向条目WI9。结果如图 所示,运算指令用写信息EX-WI全部被清除,在r4和r5中载入存储 指令用写信息LS-WI被断言。进而,运算指令用读信息EXIB-RI的 r4和r5被断言,载入存储指令用读信息LSIB-RI的rl被断言,在寄 存器序号上没有重叠,因此,运算指令和载入存储指令的发出暂停 EX-STL和LS-STL未^皮断言。
在下一周期中,清除通过执行第2循环的第2指令来成为可利用 状态的条目WI9的rl的寄存器写信息。另夕卜,写信息队列指针WIQP 接着指向条目WIO,运算指令局部指针EXLP指向条目WI10,载入 存储指令局部指针LSLP指向条目WI12。结果如图12所示,在r4 和r5中,运算指令用写信息EX-WI和载入存储指令用写信息LS-WI。 进而,运算指令用读信息EXIB-RI的r3被断言,载入存储指令用读 信息LSIB-RI的r2被断言,在寄存器序号上没有重叠,因此,运算 指令和载入存储指令的发出暂停EX-STL和LS-STL未被断言。
在接下来的3周期中,分别进行与3周期之前同样的工作。不同 之处在于写信息队列WIQ的内容错开8条目。虽然未图示,但其后 分别进行与6周期之前同样的处理。如上所述,由写信息队列WIQ 管理流程依赖,适当地进行指令发出。
图13例示出用本发明实施方式的处理器执行第1程序时的循环 部的工作。
在此,在图12例示的流水线工作的局部指令缓存级LSIB和 EXIB、或分支BR级中,使之代表各指令的执行周期。在载入指令中, 地址计算LSA、数据高速緩存访问DC1和DC2这三级视为延迟,在 分支指令中,分支BR、全局指令緩存GIB级视为延迟,因此,载入 指令和分支指令的延迟分别是3和2。首先,在第l周期执行起始的 载入指令"mov@r0+, r4"和第3减量测试指令"dtr3"。在第2周 期执行第2载入指令"mov @rl + , r5"和循环最后的条件分支指令"bf_L100",在第3周期执行第5算后增量存储指令"movr5, @r2+"。 然后,在第4周期开始第2循环的处理,执行起始的载入指令"mov @r0+, r4"。在第l循环中,执行的第3减量测试指令"dtr3"由于 未超越先行的第1循环的第4加法运算指令"add r4, r5,,而被未执 行。进一步,在第5周期中,除了与第2周期同样的工作之外,还执 行第l循环的第4加法运算指令"add r4, r5",在第6周期中,除 了与第3周期同样的工作之外,还执行第3减量测试指令"dtr3"。 其后,反复1次循环3周期的工作。
图14例示出将载入延迟从图14的3延长到9时的循环部的工作。 随着载入延迟的增加,第4加法运算指令"addr4, r5"的执行比 图4延迟6周期。随之第2循环的第3减量测试指令"dtr3"的执行 也延迟6周期。在本发明的方式中,若执行资源不同,则可用乱序方 式进行处理,因此,运算流水线的执行延迟不会波及其他而维持1次 循环3周期的工作,因载入延迟增加而导致性能降低是比较少的。但 是,这样的工作需要高度的分支预测。尤其是在预测的命中/非命中不 确定时执行条件分支指令,因此会发生分支预测的嵌套(nest),控 制变得复杂。
图15表示在由分支流水线执行图14中在运算流水线中执行的第 3减量测试指令"dtt3"的情况。
若如图15所示那样执行,则第4加法运算指令"addr4, r5"的 执行延迟不会波及,分支条件确定提前,不需要分支预测的嵌套。但 是,在图8所示的电路中,不处理分支流水线上的寄存器读写,因此 需要增加电路。但是,在分支指令中还存在寄存器间接分支,由此优 选也处理寄存器读写。寄存器间接分支用于从分支源起的移动 (displacement)指定分支达不到的长距离分支,因此认为出现频率较 低的程序也较多,用分支流水线处理寄存器读写而导致的成本增加, 未见得会提高性能。
在本实施方式中,在同一执行资源内进行有序执行,因此不会引 起反向依赖和输出依赖的问题。但是,在不同资源之间若不适当处理,则会引起问题。
图16例示出本实施方式中引起反向依赖和输出依赖的流水线工作。
起始的载入指令"mov@rl, rl"从寄存器rl所指的存储器位置 将数据载入寄存器rl。第2载入指令"mov@rl, r2,,从寄存器rl所 指的存储器位置将数据载入寄存器r2。第3存储指令"movr2, @r0" 将寄存器r2的值存储到寄存器r0所指存储器位置。第4直接转移指 令"mov#2, r2"将2写入寄存器r2。第5直接转移指令"mov#l, r0"将1写入寄存器r0。第6加法运算指令"add r0, r2,,将寄存器 r0的值加到寄存器r2中。然后,最终的存储指令与第3指令相同。
载入存储指令在存储器流水线执行、立即传送和加法运算指令在 运算流水线执行时,最初的3条指令和最后的指令在存储器流水线执 行,从第4条开始的3条指令在运算流水线执行。此时,第2载入指 令和第4、 6指令处于输出依赖的关系,第3存储指令和第4、 5条直 接转移指令处于反向依赖的关系。并且,在存储器流水线和运算流水
线中,有序执行指令,因此,只要利用各执行结果更新各局部寄存器 文件EXRF和LSRF,就会使输出依赖和反向依赖不显著。但是,要 在另 一 方流水线参照 一 方流水线的执行结果,则需要在流水线之间传 送执行结果,有可能使输出依赖和反向依赖显著。图16所示的例子 中,使用在运算流水线执行的第5、 6条指令的执行结果而在存储器 流水线执行最后的指令。因此,需要将第5、 6条指令的执行结果从 运算流水线传送到存储器流水线。由于最后的指令在LSIB级生成读 寄存器信息LSIB-RI,因此判断出在该级中需要r0和r2的传送。并 且,在判断出的时刻,在最后的指令之前执行的存储器流水线指令的 LSRR级完成,反向依赖消除,即使将执行结果从运算流水线传送到 存储器流水线,也没有障碍。具体而言,判断出第5、 6条指令分别 在第4、 5周期的回写级WB回写到局部寄存器文件EXRF中之后, 需要在第6周期的最后指令的LSIB级的起始传送回写的值,因此, 分别在第6、 7周期的复制级CPY传送rO和r2。由于第3存储指令所使用的r2的值在LSRR级不存在,因此不使 之读出,但其后,不会从局部寄存器文件LSRF读出,在存储緩存数 据级SBD之前,生成值的时刻通过前送(forwarding)来取入。因此, 即使在第3存储指令在LSRR级不读出r2的情况下,只要将从运算 流水线传送到存储器流水线的值写入到存储器流水线的局部寄存器 文件LSRF的r2即可。结果,在存储器流水线的局部寄存器文件LSRF 中,在基于第2条指令向r2写入之前,进行基于第6条指令的向r2 的写入,输出依赖显著。因此,在第2载入指令中,不进行向r2的 寄存器写,仅进行向第3存储指令的数据前送。
上述的复制中,在局部寄存器文件EXRF和LSRF中增加专用的 读写端口或将与通常的读写共享现有的端口即可。对于控制成在共享 端口而使访问发生竟争时使一方等待来逐次进行访问,只要是设计处 理器等数据处理装置的通常的技术人员即可实现。另外,暂时不使用 执行结果的情况非常少,因此若在向局部寄存器文件的回写之后还在 緩存中保留值时,则即使不增加端口,也能进行复制的情况较多。在 图16所示的例子中,在回写级WB之后设置1级緩存复制级 BUF/CPY,不需要用于传送的寄存器读端口。
在通常的流水线控制中,面向回写级WB ,流过回写信息 EXRR-WI、 EX-WI、和WB-WI。并且,在后续指令4吏用值的情况下, 在存在多个向同一序号的寄存器的回写信息时,只要使用最新的值即 可。与此相对,在本发明的流水线控制中,增加了緩存复制级BUF/CPY 的回写信息BFU/CPY-WI。而且,若流水线不同,未必是逐次执行, 因此,对指令标注序号来比较程序顺序,识别选择在按程序顺序先于 读出指令执行的指令中最新的指令生成的值。在图16中,直接使用 在写信息队列WIQ中标注的序号。r2的值由指令序号为3和5的两 条指令更新,由指令序号为6的存储指令参照。因此,传送并使用指 令序号为5的加法运算指令的结果。
如果程序顺序相反,存储指令为5号、加法运算指令为6号,则 传送的值成为指令序号3号的直接转移指令的结果。此时,只要再准备l级緩存级,值保留在緩存中,则可实现来自緩存的传送。
写信息队列WIQ具有16条目,识别需要4位,但若限制从緩存 传送值的指令与参照值的指令的距离,则也可减少位数。而且,在程 序上在同一流水线执行的指令连续的情况下,对于这些指令可使用相 同的识别序号,因此,即使是相同的位数,也能放宽指令距离的限制。 例如,在图16所示的例子中,由于集中到第1、 2、 3和第4、 5、 6 和第7这三组,因此,这7条指令的识别信息用2位就足够。
若经过緩存复制级BUF/CPY,则失去回写信息,因此,会失去仅 在一方的局部寄存器文件具有最新值这样的信息。因此,对各寄存器 定义寄存器状态。在图16中对各寄存器保持2位的信息REGI[n](n: 0-15),记录全部最新、存储器流水线的局部寄存器文件LSRF最新、 以及运算流水线的局部寄存器文件EXRF最新这三种状态。在图16 中示出r0、 rl和r2的信息。空栏、LS和EX分别表示全部最新、存 储器流水线的局部寄存器文件LSRF最新、以及运算流水线的局部寄 存器文件EXRF最新这三种状态。
处理反向依赖和输出依赖关系的另 一 方法是进行控制以使后续 指令的寄存器写入不超越先行指令的寄存器读出和寄存器写入。图17 表示的例子是扩大图8的写信息队列WIQ作为也保持读信息的读写 信息队列RWIQ,不仅能检测流程依赖,还可检测反向依赖和输出依 赖。
读写信息队列RWIQ由读写信息译码部RWID0 3、 16条指令的 读写信息条目RWI0 15、指定新的读写信息设置位置的读写信息队列 指针RWIQP、指定处于局部指令緩存级EXIB和LSIB的运算指令和 载入存储指令的位置的载入存储指令局部指针LSLP、运算指令局部 指针EXLP、指向载入接下来可利用的载入数据的指令的载入数据写 指针LDWP、以及对这些指针进行译码的读写信息队列指针译码部 RWIP-DEC构成。
在读写信息队列RWIQ中,首先,读写信息译码部RWID0 3接 收锁存于局部指令队列GIQ中的4条指令,生成这些指令的寄存器写信息。然后,当接收到的指令的有效信号IV被断言后,按照通过读
写信息队列指针RWIQP的译码而生成的读写信息队列选择信号 RWIQS,将生成的寄存器读写信息锁存到RWI0 3、 RWI4 7、 RWI8 11、或RWI12~15。读写信息队列指针RWIQP指向在锁存于 读写信息队列RWIQ中的指令中最早的指令,当该最早的指令起4条 指令的寄存器读写信息成为不需要的而被删除时,则在读写信息队列 RWIQ中产生空闲,可进行新的4条指令的读写信息的锁存。然后, 若重新锁存了读写信息,则使读写信息队列指针RWIQP前进,以指 向下4条。
而运算指令局部指针EXLP和载入存储指令局部指针LSLP指定 以后要执行的指令,从上述最早的指令到这些指针指定的指令之前的 指令,是要在以后执行的指令之前先执行的指令,成为流程依赖、反 向依赖和输出依赖的检查对象指令。因此,读写信息队列指针译码部 RWIP-DEC生成用于从读写信息队列指针RWIQP、运算指令和载入 存储指令的局部指针EXLP和LSLP中选择全部流程依赖、反向依赖 和输出依赖的检查对象范围的条目的运算指令和载入存储指令用屏 蔽信号EXMSK和LSMSK。
并且,根据运算指令用屏蔽信号EXMSK,从读写信息队列RWIQ 的16条中取出在运算指令局部指针EXLP所指的运算指令前先执行 的指令的读写信息,并取逻辑和,作为运算指令用读写信息EX-WI 和EX-RI进行输出。同样,根据载入存储指令用屏蔽信号LSMSK, 从读写信息队列RWIQ的16条中取出在载入存储指令局部指针LSLP 所指的载入存储指令之前先执行的指令的读写信息,并取逻辑和,作 为载入存储指令用读写信息LS-WI和LS-RI进行输出。
同时,在全局指令緩存GIB级,用锁存部81、 82锁存从全局指 令队列GIQ输出的运算指令EX-INST和载入存储指令LS-INST,使 其与局部指令緩存LSIB和EXIB级同步,输入到运算指令和载入存 储指令的寄存器读写信息译码部EX-RWID和LS-RWID并进行译码, 生成运算指令和载入存储指令的寄存器读写信息EXIB-RI、EXIB-WI、LSIB-RI、LSIB-WI。然后,取写信息EX-WI、LS-WI和读信息EXIB-RI、 LSIB-RI的每个寄存器序号的逻辑积的、关于所有寄存器序号的逻辑 和,分别检测运算指令和载入存储指令的流程依赖。同样,取读信息 EX-RI、 LS-RI和写信息EXIB-WI、 LSIB-WI的每个寄存器序号的逻 辑积的、关于所有寄存器序号的逻辑和,分别检测运算指令和载入存 储指令的反向依赖。然后,取写信息EX-WI、 LS-WI和写信息 EXIB-WI、 LSIB-WI的每个寄存器序号的逻辑积的、关于所有寄存器 序号的逻辑和,分别检测运算指令和载入存储指令的输出依赖。然后, 取这三种依赖信息的逻辑和,作为发出暂停EX-STL和LS-STL。
与图8所示的写信息队列WIQ相同,这些发出暂停被取反时,发 出指令。在本实施方式中,使运算指令的运算和载入存储指令的地址 计算在l周期中完成,因此,当发出运算指令和载入存储指令时,其 结果从下一周期发出的指令开始成为可以使用状态。而且,当发出指 令时不需要反向依赖检查,因此也不需要寄存器读信息。因此,若发 出指令则清除读写信息队列RWIQ内的对应的寄存器读写信息。因 此,将对运算指令和载入存储指令的发出暂停EX-STL和LS-STL取 反后的信号分别作为运算指令和载入存储指令的寄存器读写信息清 除信号EX-RWICLR和LS-RWICLR。而载入指令的延迟是3,因此 通常等待2周期后将所对应的寄存器写信息清除。但是,有时由于高 速緩存错误等,也需要超过3周期的周期数,以使载入数据成为可使 用状态。因此,实际上输入与载入数据成为可使用状态相符的载入数 据寄存器写信息清除信号LD-WICLR来清除对应的寄存器写信息。
图18例示出由具有读写信息队列RWIQ (参照图17)的处理器 10进行的与图16所示程序相同的程序的流水线工作。
寄存器读写信息在各条目中,读写分别为16个寄存器的16位, 共计32位,^旦在例示的程序中, <又<吏用r0、 rl和r3三条,因此对于 三条读写信息6位,表示各周期的值。条目也示出16条中从0到8 和15这10条。与图12所示情况相同,读写信息队列RWIQ的值仅 在为"1"时进行记载,空栏表示"0"。另外,来自读写信息队列RWIQ的输出LS-WI、 LS-RI、 EX-WI和EX-RI的值也是仅在为"1" 时进行记载,空栏表示"0"。并且,在运算指令和载入存储指令的 寄存器读写信息EXIB-RI、 EXIB-WI、 LSIB-RI和LSIB-WI的值为"1"
时标注阴影线,为"0"时是空栏。因此,若存在流程依赖和反向依
赖,则"r和阴影线位置重叠。
在第2、 3周期,发生rl的LS-WI与LSIB-WI的重叠,表示第1 指令和第2指令为流程依赖。结果,第2指令的发出暂停2周期。另 外,从第2周期到第5周期,发生r2的EX-RI与EXIB-WI的重叠, 表示第3指令和第4指令为反向依赖。结果,第4指令的发出暂停5 周期。对于输出依赖,栏内显示不一致,因此不重叠,但r2的EX-RI 与EXIB-WI在从第2周期到第5周期同时为1,表示第2指令与第4 指令为输出依赖。即,第4指令不仅因为上述反向依赖,还由于输出 依赖而暂停。进一步,在第6、 7周期发生r0的LS-WI和LSIB-RI 的重叠,表示第5指令和第7指令为流程依赖。结果,第7指令的发 出暂停2周期。
如此,虽然增加了依赖关系检查机构的电路规模,且执行周期也 较上述方式增加,但可进行统一的依赖关系检查,不需要管理最新寄 存器值存在于哪里。
与此相对,在上述方式中,具有电路规模小、性能强的优点。能 够以局部寄存器写为基本,将向其他流水线的寄存器写抑制为必要的 最小限度,因此也适于低功耗化。
以上具体说明了由本发明人完成的发明,但本发明不限于此,不 言而喻,在不脱离其要旨的范围内可进行各种变更。
例如,在上述例子中,进行控制以使后续指令的寄存器写入不超 越先行指令的寄存器写入,但在先行指令的寄存器写入被向同一寄存 器的后续指令的寄存器写入超越时,也可以进行控制来抑制先行指令 的寄存器写入。采用这样的控制,则可阻止寄存器的保持信息的破坏, 因此能够保持处于输出依赖关系的指令的执行结果的匹配性。
在以上说明中,主要就背景技术的利用领域的处理器对由本发明人完成的发明进行了说明,但本发明不限于此,也能够适用于进行数 据处理的数据处理装置。
本发明能将至少包括多个执行资源作为适用条件。
权利要求
1. 一种数据处理装置,包括能够分别进行用于指令执行的预定处理的多个执行资源,能够通过上述多个执行资源进行流水线处理,其特征在于对于在相同的执行资源中处理的指令,上述执行资源按照该指令的流程顺序用有序方式进行处理;对于在互不相同的执行资源中处理的指令,上述执行资源与该指令的流程顺序无关而用乱序方式处理。
2. 根据权利要求1所述的数据处理装置,其特征在于 上述数据处理装置包括能够取得指令的指令取得单元, 上述指令读取单元包括全局指令队列,能够锁存所取得的指令;以及信息队列,能够管理根据锁存于上述全局指令队列中的指令而生 成的寄存器写信息,并基于按各执行资源而不同的范围的先行指令的 寄存器写信息来检查作为与先行指令的冒险要因的流程依赖。
3. 根据权利要求2所述的数据处理装置,其特征在于上述信息队列被控制为,使后续指令的寄存器写入不超越先行指 令的寄存器读出。
4. 根据权利要求1所述的数据处理装置,其特征在于按上述多个执行资源中的每个执行资源而配置局部寄存器。
5. 根据权利要求4所述的数据处理装置,其特征在于器写入。
6. 根据权利要求4所述的数据处理装置,其特征在于 上述执行资源包括能够基于上述指令进行运算执行的运算执行单元;和能够进行数据的载入和存储的载入存储单元,上述局部寄存器包括运算指令用局部寄存器文件和载入存储指令用局部寄存器文件,上述局部寄存器文件配置在上述运算执行单元内,上述局部寄存器文件被配置在上述载入存储单元内,由此能够确保寄存器读出的局部性。
7. 根据权利要求2所述的数据处理装置,其特征在于上述信息队列被控制为使后续指令的寄存器写入不超越先行指 令的寄存器写入。
8. 根据权利要求2所述的数据处理装置,其特征在于 上述信息队列在对同一寄存器的后续指令的寄存器写入超越先行指令的寄存器写入时,抑制先行指令的寄存器写入。
全文摘要
本发明提供一种数据处理装置,用有序方式那样的较小规模的硬件,实现乱序方式那样的不需要整体同步的方式,提高处理的局部性并提高功率效率。数据处理装置(10)包括能够分别进行用于指令执行的预定处理的多个执行资源(EXU、LSU),能够通过上述多个执行资源进行流水线处理。并且,上述执行资源对于在相同的执行资源中处理的指令,按照该指令的流程顺序用有序方式进行处理,对于在互不相同的执行资源中处理的指令,与该指令的流程顺序无关地用乱序方式进行处理。由此,使执行资源内的局部处理简单化,能够用小规模的硬件加以实现,不需要跨执行资源的大范围处理的同步,能够提高处理的局部性和功率效率。
文档编号G06F9/38GK101414252SQ20081016999
公开日2009年4月22日 申请日期2008年10月16日 优先权日2007年10月19日
发明者荒川文男 申请人:株式会社瑞萨科技