CN103838550B - 一种分支处理系统和方法 - Google Patents
一种分支处理系统和方法 Download PDFInfo
- Publication number
- CN103838550B CN103838550B CN201210508931.3A CN201210508931A CN103838550B CN 103838550 B CN103838550 B CN 103838550B CN 201210508931 A CN201210508931 A CN 201210508931A CN 103838550 B CN103838550 B CN 103838550B
- Authority
- CN
- China
- Prior art keywords
- instruction
- branch
- target
- address
- address information
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 230000008569 process Effects 0.000 title claims abstract description 14
- 238000012546 transfer Methods 0.000 claims abstract description 22
- 238000003860 storage Methods 0.000 claims description 12
- 230000000052 comparative effect Effects 0.000 claims description 6
- 230000000694 effects Effects 0.000 claims description 6
- 238000003672 processing method Methods 0.000 claims description 5
- 238000006243 chemical reaction Methods 0.000 claims description 2
- 238000010276 construction Methods 0.000 claims 2
- 230000015654 memory Effects 0.000 description 107
- 230000006870 function Effects 0.000 description 37
- 230000003139 buffering effect Effects 0.000 description 21
- 101100167360 Drosophila melanogaster chb gene Proteins 0.000 description 6
- 238000013507 mapping Methods 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 3
- 241001492220 Echovirus E2 Species 0.000 description 2
- 238000007792 addition Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 230000009191 jumping Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 241001492209 Echovirus E4 Species 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 239000002585 base Substances 0.000 description 1
- 239000003637 basic solution Substances 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000004080 punching Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
一种分支处理系统和方法。该系统和方法包括在处理器执行指令前将所需指令预取到缓存中;判断处理器即将执行的指令是否是分支指令,并提供该分支指令的分支目标指令地址和该分支指令在程序序列中的后一指令地址。该系统和方法还包括至少根据分支目标指令的地址对分支指令的分支判定,并根据该分支判断,在分支指令到达其在流水线中的执行段前,至少选择分支目标指令和后一指令中的一个作为执行单元将要执行的指令,使得无论分支指令的转移是否发生都不会导致流水线操作的暂停。
Description
技术领域
本发明涉及电子计算机和微处理器体系结构领域,具体涉及分支处理方法与系统。
背景技术
控制相关(control hazards)也称为分支(Branch),是流水线性能损失的一大原因。在处理分支指令时,传统处理器无法提前知道应该从哪里获取分支指令之后执行的下一条指令,而是需要等到分支指令完成后才能知道,使得流水线中分支指令之后出现空周期。图1是显示了传统流水线结构,其中的流水线段对应了一条分支指令。
表1分支指令的流水线段(分支转移发生时)
顺序 | i | IF | ID | EX | MEM | WB | ||
i+1 | IF | stall | stall | stall | ||||
目标 | IF | ID | EX | MEM | ||||
目标+1 | IF | ID | EX | |||||
目标+2 | IF | ID | ||||||
指令地址 | i | i+1 | 目标 | 目标+1 | 目标+2 | 目标+3 | 目标+4 | |
获取指令 | i | i+1 | 目标 | 目标+1 | 目标+2 | 目标+3 | ||
时钟周期 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
结合图1与表1一同说明,表1中的列表示流水线中的时钟周期,而行表示按顺序的指令。指令地址是提供给指令存储器用于在获取指令时进行寻址,之后指令存储器的输出被送到译码器对获取到的指令进行译码。该流水线包括指令获取(IF)、指令译码(ID)、执行(EX)、存储器访问(MEM)和写回(WB)。停止(“stall”)表示流水线暂停或空周期。
表1显示了一个被标记为‘i’的分支指令,该指令在时钟周期‘1’被获取到。此外,‘i+1’表示紧跟在该分支指令之后的指令,“目标”表示该分支点的分支目标指令,而“目标+1”、“目标+2”、“目标+3”和“目标+4”表示紧跟在该分支目标指令之后的顺序指令。
如表1所示,在时钟周期‘2’,处理器获取到分支指令‘i’。在时钟周期‘3’,处理器获取到指令‘i+1’,并对分支指令‘i’进行译码。假设在该分支指令译码段的结尾可以计算出分支目标地址,并完成分支判定。如果分支判定为分支转移发生,那么分支目标地址就被保存为下一地址用于获取下一指令。在时钟周期‘4’,获取分支目标指令,并在之后周期进行译码和执行。从这里开始,流水线处理分支目标指令后面的指令。然而,在这种情况下,已经被获取到的紧跟在分支指令之后的指令‘i+1’是不应该被执行的,因此流水线会因为指令‘i+1’而暂停。这样,当分支转移成功发生时,流水线会有一个时钟周期的暂停,这会导致流水线操作性能明显降低。
为了减少分支处理对流水线性能的不利影响,已经有各种静态或动态的分支预测方法被提出,如:延时槽、分支预测缓冲、分支目标缓冲和跟踪缓存(tracecache)等。然而,这些预测方法通常根据处理器之前的运行结果进行预测,因此仍然会有预测错误而导致的性能损失。此外,在传统的处理器系统中,分支转移造成的缓存缺失也会导致性能损失。
本发明提出的方法与系统可用于解决上述一个或多个问题,以及其他问题。
发明内容
本发明提出一种分支处理方法,所述方法包括:判断写入缓存的指令的指令类型,并记录该指令类型;当该指令是分支指令时,计算该分支指令的分支目标指令地址,并记录该分支目标指令地址对应的目标地址信息;该目标地址信息对应至少包含该分支目标指令在内的一个指令段;若该分支目标指令尚未存储在缓存中,则根据该分支目标指令地址将至少包含该分支目标指令的指令段填充到缓存中与该目标地址信息对应的位置中,使得处理器核执行该分支指令之前,该分支指令的后一指令及分支目标指令都已存储在缓存中。
可选地,对于缓存中的每条指令,均有一个指令类型和一个目标地址信息与之对应。
可选地,所述指令类型可以包括有条件的分支指令。
可选地,所述指令类型还可以包括无条件的分支指令。
可选地,所述指令类型还可以包括非分支指令。
可选地,对于每条指令,还可以有一个有效位与之对应;所述有效位表示对应的目标地址信息是否有效。
可选地,若一个目标地址信息对应的指令段被替换出缓存,则将该目标地址信息对应的有效位设置为无效。
可选地,若即将被处理器核执行的分支指令对应的有效位表示为无效,则重新计算该分支指令的分支目标指令地址,并记录该分支目标指令地址对应的目标地址信息。
可选地,若该分支目标指令尚未存储在缓存中,则根据该分支目标指令地址将至少包含分支目标指令的指令段填充到缓存中与该分支指令相应的目标地址信息对应的位置中,使得处理器核执行该分支指令之前,该分支指令的后一指令及分支目标指令都已存储在缓存中。
可选地,若即将被处理器核执行的分支指令是间接分支指令且有效位表示为有效,则在处理器核计算得到分支目标地址前,猜测执行该间接分支指令的后续指令,即将该间接分支指令对应的目标地址信息作为后续指令的位置,使得流水线操作不会因为间接分支指令而暂停。
可选地,在处理器核计算得到间接分支目标地址后,将该分支目标地址与该间接分支指令对应的目标地址信息对应的分支目标地址进行比较,并根据比较结果决定后续操作。
可选地,若比较结果为不相等且发生分支转移,则以处理器核计算得到分支目标地址作为该间接分支指令的后续指令地址。
可选地,记录该分支目标地址对应的目标地址信息;该目标地址信息对应至少包含该分支目标指令在内的一个指令段;若该分支目标指令尚未存储在缓存中,则根据该分支目标指令地址将至少包含该分支目标指令的指令段填充到缓存中与该目标地址信息对应的位置中。
可选地,所述方法进一步包括:从缓存同时向处理器核提供所述后一指令及分支目标指令;决定对应于分支指令的分支判定;根据所述分支判定,在所述分支指令到达其在流水线中的执行段前,选择至少所述分支目标指令和所述后一指令中的一个作为所述执行单元将要执行的指令,使得无论所述分支指令的转移是否发生都不会导致流水线操作的暂停。
可选地,对该分支指令对应的目标地址信息进行递增,可以提供缓存中所述分支目标指令所在指令段的寻址地址;若该分支指令的执行结果为分支转移成功发生,则将递增后的目标地址信息作为新的寻址地址进行后续操作。
可选地,记录该分支指令之后顺序执行的指令的位置信息;对该分支指令本身的地址进行递增,可以提供缓存中该分支指令所在指令段的寻址地址;若该分支指令的执行结果为分支转移不发生,则将递增后的分支指令本身地址的地址信息作为新的寻址地址进行后续操作。
可选地,当分支指令本身地址递增后已经到达指令段最后一条指令时,可以继续对该地址进行递增,从而指向与该指令段地址相邻的后一指令段中的指令,同时将该递增地址的地址信息作为新的寻址地址进行后续操作。
可选地,根据所述分支判定,当所述分支指令的执行结果表示该分支转移没有成功发生时,放弃由分支目标地址递增得到的地址信息,仅使用由分支指令本身地址递增得到的地址信息作为新的寻址地址。
可选地,所述指令类型还可以包含函数调用指令和函数返回指令。
可选地,当处理器核执行函数调用指令时,将函数返回地址对应的目标地址信息压栈存储到一个栈中;所述目标地址信息可以是函数调用指令本身对应的地址信息,也可以是函数调用指令的后续指令的地址信息。
可选地,当处理器核即将执行到函数返回指令时,将所述栈中位于栈顶的目标地址信息出栈,作为该函数返回指令的目标地址信息,并记录该目标地址信息;该目标地址信息对应至少包含该目标指令在内的一个指令段;若该目标指令尚未存储在缓存中,则根据该目标地址信息对应的目标指令地址将至少包含该目标指令的指令段填充到缓存中与该目标地址信息对应的位置中,使处理器核执行该函数返回指令之前,该函数返回指令的目标指令都已存储在缓存中。
本发明还提出一种分支处理系统,所述系统包括处理器核及缓存;该系统进一步包括:一个扫描器,用于判断写入缓存的指令的指令类型,并计算分支指令的分支目标指令地址;一个主动表,用于将分支目标指令地址转换为目标地址信息;一个轨道表,用于记录写入缓存的指令对应的指令类型、目标地址信息;若该分支目标指令尚未存储在缓存中,则根据该分支目标指令地址将至少包含该分支目标指令的指令段填充到缓存中与该目标地址信息对应的位置中,使得处理器核执行该分支指令之前,该分支指令的后一指令及分支目标指令都已存储在缓存中。
可选地,对于缓存中的每个指令段,均有轨道表的一个表行与之对应;对于缓存中的每条指令,均有轨道表的一个表项与之对应。
可选地,存储在所述表项中的指令类型可以包括有条件的分支指令。
可选地,存储在所述表项中的指令类型还可以包括无条件的分支指令。
可选地,存储在所述表项中的指令类型还可以包括非分支指令。
可选地,轨道表的每个表项还可以包含一个有效位;所述有效位表示该表项包含的目标地址信息是否有效。
可选地,所述缓存可以同时向处理器核提供所述后一指令及分支目标指令;所述系统还包括:一个分支判定逻辑,用于决定对应于分支指令的分支判定;一个选择逻辑,用于根据所述分支判定,在所述分支指令到达其在流水线中的执行段前,选择至少所述分支目标指令和所述后一指令中的一个作为所述执行单元将要执行的指令,使得无论所述分支指令的转移是否发生都不会导致流水线操作的暂停。
可选地,所述系统还包括:一个自增器,用于对所述分支指令本身的地址信息或所述分支指令对应的目标地址信息进行递增,以提供缓存中所述分支指令所在指令段的寻址地址或缓存中所述分支目标指令所在指令段的寻址地址;一个当前地址寄存器,用于存储所述分支指令所在指令段的寻址地址;一个目标地址寄存器,用于存储所述分支目标指令所在指令段的寻址地址;一个选择器,用于选择当前地址寄存器和目标地址寄存器中的一个作为新的寻址地址;若该分支指令的执行结果为分支转移成功发生,该选择器选择目标地址寄存器中存储的地址信息,否则选择当前地址寄存器中存储的地址信息。
可选地,所述系统还包括:一个段结束地址寄存器,用于存储处理器核正在执行的指令段地址相邻的后一指令段的寻址地址;一个段地址选择器,用于选择当前地址寄存器和段结束地址寄存器中的一个作为新的寻址地址;若处理器核已经执行到指令段的最后一条指令,该段地址选择器选择段结束地址寄存器中存储的地址信息,否则选择当前地址寄存器中存储的地址信息。
可选地,存储在所述表项中的指令类型还可以包含函数调用指令和函数返回指令。
可选地,所述系统还包括:一个栈,用于存储函数调用指令的函数返回地址对应的地址信息;当处理器核执行函数调用指令时,将函数返回地址对应的地址信息压栈存储到所述栈中;当处理器核即将执行到函数返回指令时,将所述栈中位于栈顶的地址出栈,作为该函数返回指令的目标地址信息;将该目标地址信息存储在该函数返回指令对应的轨道表表项中;该目标地址信息对应至少包含该目标指令在内的一个指令段;若该目标指令尚未存储在缓存中,则根据该目标地址信息对应的目标指令地址将至少包含该目标指令的指令段填充到缓存中与该目标地址信息对应的位置中,使得处理器核执行该函数返回指令之前,该函数返回指令的目标指令都已存储在缓存中。
对于本领域专业人士,还可以在本发明的说明、权利要求和附图的启发下,理解、领会本发明所包含其他方面内容。
有益效果:
本发明所述的系统和方法可以为流水线处理器的分支处理提供一种基本的解决方法。首先,该系统和方法采用轨道表结构进行缓存的预填充,在处理器核执行指令前,已经将所需指令填充到缓存中,消除或减少了缓存缺失造成的处理器性能损失。采用本系统和方法,可以在分支点被执行前获取分支目标指令的地址,结合分支判断逻辑即可消除因错误的分支预测而造成的效率损失。对于本领域技术人员而言,也可以推导出本发明的其他优点和有益效果。
附图说明
图1是现有普通流水线的控制结构;
图2是本发明所述基于轨道表的缓存系统的一个实施例;
图3是本发明轨道表中表项类型的一个实施例;
图4是本发明所述基于轨道表的缓存系统的另一个实施例;
图5A是本发明所述分支处理系统的一个实施例;
图5B是本发明所述分支处理系统运行过程的一个实施例;
图6是本发明所述分支处理系统的另一个实施例;
图7A是本发明所述循迹器的另一个实施例;
图7B是本发明所述循迹器的另一个实施例。
具体实施方式
虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。同样的元器件号码也可以被用于所有附图以代表相同的或类似的部分。
图2是本发明所述基于轨道表的缓存系统的一个实施例。应当理解的是,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件也可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。该轨道表系统中包含一个处理器核216,该处理器核216可以是能以流水线方式并与缓存系统协同工作的任意合适的处理器。
该轨道表系统中还包含一个由块号(Block Number)和块内偏移(blockoffset,)寻址的指令存储器202。指令存储器202可以包含任何合适的存储设备,如:静态存储器(SRAM)、动态存储器(DRAM)和闪存存储器(flash memory)。指令存储器202可以作为系统缓存的一部分进行工作,且可以被分割成复数个被称为块(block如:存储器块memory block)的存储片段用于存储处理器核216要访问的指令。例如:指令存储器202中含有X个每块含有Y条指令的存储器块。BNX是一个由指令缓存器块地址映射而得的块号用以选择一个存储块,BNY是块内偏移用以选择块中的一条指令。
轨道表204用以保存程序中内在的逻辑关系。轨道表204可以是一个具有与指令存储器202中的指令一一对应的具有X行、Y列的二维表。轨道表204中的每一行构成一条轨道(track),轨道与指令存储器202中的存储块(memoryblock)一一对应。这里说的轨道的意思是对要被执行的一系列指令(比如一个指令块)的一种表达形式。这种表达形式可以包括任何适当的数据类型,如地址,块号码,或者其它数字。此外,当一个轨道包含一个分支点,该分支点有一个改变了程序流向的分支目标时,或当一条指令后的另一条指令是在一个不同的指令块,比如是下一个指令块中的一条指令、或一个异常程序、或另外一个程序线程等时,可以根据该分支点的信息建立一条新轨道。
轨道中的表项(entry,比如存储单元)与对应存储器块中的指令一一对应,且均由同一对BNX、BNY寻址。一个与一条分支指令(以下称分支源)对应的轨道表表项中存有一个经映射过的分支目标指令地址(以下称分支目标)。表项的格式包括TYPE(类型)、BNX、BNY。在此,TYPE是该表项对应的指令的指令类型,而BNX、BNY表示分支目标在轨道表中的寻址地址,同时也表示分支目标指令在指令存储器中的寻址地址。其中当BNX被用于对轨道表寻址时也称为轨道号,当BNX被用于对指令存储器寻址时也称为存储块号。此外,表项的格式还可以包含一个有效位,该有效位表示该表项中存储的BNX、BNY是否有效。
当一条包含分支源的新轨道被建立时,该新轨道可以被建立在轨道表204的一个可用行中,而分支源可以被建立在该行的一个表项中。该行和该表项的位置由分支源所在指令块对应的BNX和分支源在该指令块中对应的BNY确定。例如,可以根据分支源地址中的块地址部分确定其BNX,根据分支源地址中的块内偏移地址部分确定其BNY,从而确定该表项的位置。
轨道表表项的内容可以对应分支目标在轨道表中的位置。换句话说,分支源表项内容存储了分支目标的地址信息。例如,轨道表204中的对应于一条分支目标的特定的块号码被作为BNX存储到该分支源表项的内容中;而该分支目标指令在其所在指令块中的块内偏移被作为BNY存储到该分支源表项的内容中。这样,可以根据分支源表项的内容中的BNX和BNY在轨道表204中对该分支源的分支目标表项进行寻址,也可以根据分支源表项的内容中的BNX和BNY在指令存储器202中对该分支源的分支目标指令进行寻址。如此,轨道表项可将分支源与分支目标联系起来。
一个循迹器206与轨道表204共同作用构成该缓存系统的核心。循迹器206可以根据轨道表204中的当前轨道上分支源表项的内容及处理器核216的在执行该分支源相应指令时的分支判断等信息确定下一轨道。循迹器206可以包含一个选择器208,一个自增器210,一个寄存器212,以及一个译码器(图中未显示)。该译码器对TYPE进行译码以决定程序流向。
寄存器212的输出(以下称读指针214)用以对指令存储器202以及轨道表204寻址。读指针214由BNX部分及BNY部分组成。在任一时刻读指针214的BNX部分指向指令存储器202中的一个存储器块,并根据由处理器核216提供的指令地址(PC)的块内偏移218(blockoffset)从该存储器块中按需适时取出处理器核216所需要的指令。
同时,读指针214的BNX部分也指出轨道表204中相应的轨道,并根据读指针214的BNY部分从该轨道中选取一个表项,从而读出该表项的内容并经总线224送往循迹器206。基于该表项内容,循迹器206可以根据TYPE与处理器核216送来的控制信号控制读指针的走向。
图3是本发明轨道表中表项类型的一个实施例。在本实施例中,TYPE一共有五种。TYPE 1(302)是非分支指令类型,TYPE 2(304)是有条件的直接分支指令,TYPE 3(306)是无条件的直接分支指令,TYPE 4(308)是有条件的间接分支指令,TYPE 5(310)是无条件的间接分支指令。在本发明中,直接分支指令指的是根据分支源地址及分支源指令码中的分支偏移量即可计算出分支目标地址的分支指令;而间接分支指令指的是除分支源地址或分支源指令码中的分支偏移量之外,还需要其他寄存器的值一起计算才能得到分支目标地址的分支指令。有条件的分支指令指的是需要根据处理器核216执行分支源的结果以确定分支转移是否发生的分支指令;而无条件的分支指令指的是分支转移一定发生的分支指令。
具有TYPE 1(302)的指令,其后续指令固定是顺序执行的下一条指令(NEXT)。对于具有TYPE 3(306)或TYPE 5(310)的指令而言,其后续指令固定由表项中含有的分支目标地址指示。当译码器译出TYPE为TYPE 1(302)、TYPE 3(306)或TYPE 5(310)时,循迹器206自行决定更新读指针。
对于具有TYPE 2(304)或TYPE 4(308)的指令,循迹器206不单独更新读指针,而是等待从处理器核216来的信号以控制程序流向。
若一个表项中的指令类型为TYPE 1非分支指令(302),则该表项中的有效位的值为无效(如‘0’),且该表项中的BNX和BNY可以是任意值。
若一个表项中的指令类型为直接分支指令TYPE 2(304)、TYPE 3(306)、TYPE 4(308)或TYPE 5(310),则该表项中的有效位的值根据该表项中的BNX和BNY的有效性,可以是有效的(如‘1’),也可以是无效的(如‘0’)。若一个表项中的指令类型为TYPE 2(304)或TYPE 3(306),当该有效位的值为有效时,该表项中的BNX和BNY就是该分支源对应的分支目标在轨道表204中的寻址地址(即包含BNX和BNY)。当该有效位的值为无效时,该表项中的BNX和BNY可以是任意值。
若一个表项中的指令类型为间接分支指令TYPE 4(308)或TYPE 5(310),当该有效位的值为有效时,该表项中的BNX和BNY就是该分支源对应的分支目标在轨道表204中的可能的寻址地址(即包含BNX和BNY),在处理器核216计算得到实际分支目标地址后,将该可能的寻址地址中的BNX对应的块地址与实际分支目标地址中的块地址部分进行比较。若比较结果为不相等且发生分支转移,则以处理器核216计算得到实际分支目标地址作为该分支源的后续指令地址。当该有效位的值为无效时,该表项中的BNX和BNY可以是任意值。
回到图2,循迹器206的读指针214领先处理器核216的PC沿着现行轨道往前移,当译码器译出具有TYPE 1(302)的非分支指令时,控制选择器208选择更新读指针214为BNX新=BNX原,及由自增器210提供的BNY新=(BNY原+1)。该读指针214在同一轨道上前移。此时读指针214的BNX部分指示的还是同一条轨道及同一个存储器块,处理器核216产生的PC块内偏移从该存储器块中按需读取指令。
当译码器译出TYPE 3(306)或TYPE 5(310)的无条件分支指令时,控制选择器208选择更新读指针214为从总线224送来的轨道表表项内容BNX新=BNX目标及BNY新=BNY目标。此时读指针214可指向轨道表中一条新的轨道中的一个表项,读指针214落到此点后从此点出发如前述前移。此时读指针214的BNX可指向一条新的轨道及对应的新的存储器块,处理器核216产生的PC块内偏移从该新的存储器块中按需读取指令。
读指针214如此前行直到碰到第一个条件分支源,即具有TYPE 2(304)或TYPE 4(308)的指令,然后停下等待处理器核216送出控制信号。如果处理器核216中的分支判断机制决定不进行分支转移,则处理器核216送出的代表分支转移是否发生的TAKEN信号220的值为‘0’,控制选择器208选择自增器210提供的BNX新=BNX原及BNY新=(BNY原+1)。此时由处理器核216送出的代表当前指令是否为分支源的BRANCH信号222控制寄存器212更新读指针214,使读指针214指向顺序下一条指令位置。在此,BRANCH信号222指示了TAKEN信号220有效的时间点,即在该时间点更新寄存器208。该情况与译码器译出具有TYPE 1(302)的指令时的情况类似。在此情况下,指令由处理器核216产生的PC块内偏移从读指针214的BNX部分所指示的存储器块(即原存储块)中按需适时读取指令。
如果处理器核216中的分支判断机制决定进行分支转移,则TAKEN信号220的值为‘1’,控制选择器208选择轨道表204经总线224提供的BNX新=BNX目标及BNY新=BNY目标。此时BRANCH信号222控制寄存器212更新读指针214,使读指针214指向该分支源的分支目标指令的位置。该情况与译码器译出具有TYPE 2(304)的指令时的情况类似。此时该读指针214可指向轨道表中一条新的轨道中的一个表项,读指针214从此点出发如前述前移。同时该读指针214也可指向指令存储器202中一个新的存储器块以供处理器核按需读取指令。由于在地址上相邻的两个指令块在指令存储器202中存储的存储器块不一定相邻,因此在每一个轨道的最后一个表项之后增设一个特殊的结束表项(end entry)。该表项有一个表示无条件的直接分支指令的TYPE 3以及一个BNX,该BNX是当前存储器块的按指令顺序下一个存储器块映射后的轨道号。该表项的BNY固定为0以指示轨道中第一个表项。这样,处理器核216在读取一个存储器块的最后一条指令后,可以读取到与该指令地址相邻的下一条指令。
在具体实现中,轨道表204可以被压缩,只保存具有TYPE 2、TYPE 3、TYPE4和TYPE5的指令对应的分支源表项以节省面积,同时也提高读指针移动速度。这种优化实现中,没有TYPE 1表项。
根据处理器指令集体系结构的不同,有的处理器的指令并不包含上述全部五种指令类型,而是只包含其中的至少一种。在这种情况下,也可以按上述方法相应操作,在此不再重复说明。
图4是本发明所述基于轨道表的缓存系统的另一个实施例。该缓存系统包含一个指令储器202、一个扫描器402、一个主动表404、一个轨道表204、一个循迹器206、一个加法器406、一个选择器408和一个处理器核216。
扫描器402、主动表404、轨道表204、循迹器206、加法器406和选择器408用于将处理器核216将要执行到的指令填充到指令存储器202中,使处理器核216能从指令存储器202中以非常低的缓存缺失率读取到所需的指令。
扫描器402可以对填充到指令存储器202中的每一条指令进行审查,并从中提取出某些信息,如:指令类型(TYPE)、指令地址和分支指令的分支目标信息。该指令以及包含分支目标信息的被提取出的信息被用于计算地址并送到其他模块,如主动表402和轨道表204。例如将分支源地址与分支偏移量相加获得的分支目标地址。如果一个分支目标信息对应的指令块尚未被填充到指令存储器202中,那么在将该指令块填充到指令存储器202中的同时,在轨道表204中建立对应的轨道。
主动表404可以被用于存储任何已建立的轨道信息,并建立指令块地址与块号码之间的映射关系,使得可以使用轨道表204中的任何可用行建立轨道。当建立一条轨道时,轨道中所有分支源的分支目标地址信息都被存储在主动表404中。主动表404可以是一个有X*1个表项的映射表,每个表项与轨道表中一条轨道及指令存储器中的一个存储块对应,有共同的块号码(BNX)。块号指向的每个表项中存有其映射的相应指令块地址。主动表可以用两种方法查找:一种是输入一个块地址匹配得到相应的块号,另一种是输入一个块号读出该块号寻址的表项中的指令块地址。在审查过程中,可以通过对地址和主动表404中表项进行匹配的方式得到分支目标地址的BNX。匹配成功的结果,即BNX可以与指令在轨道中的偏移量一起,按前述方法确定轨道表中表项的位置。
如果匹配不成功,表示该地址对应的轨道尚未建立。由主动表404指定(分配)一个BNX并将该地址对应的指令块填充到指令存储器202中由该BNX索引的位置中,在轨道表204中建立对应这个指令存储器202的一条新轨道,使得主动表404可以表示这条已建立的轨道及相关块地址(通常需要替换已存在的轨道)。如此,前述主动表404和扫描器402的操作可以在分支源被处理器核216获取并执行之前,将分支源的分支目标指令对应的指令块填充到指令存储器202中。
此外,当指令被填充到指令存储器202中时,可以通过计算分支指令地址及分支目标指令的分支偏移量之和的方法得到所有直接分支源(即TYPE 2和TYPE 3)的分支目标地址。该分支目标地址被送到主动表404以对其中的块地址部分进行匹配,而主动表404可以分配一个BNX。该分配到的BNX与从扫描器402来的指令类型以及块内偏移(BNY)一起构成分支源表项的内容。该内容被存储在由相应分支源本身的BNX、BNY寻址的轨道表表项中。
对于间接分支源(即TYPE 4和TYPE 5),当第一次审查到该间接分支源时,该间接分支源对应轨道表表项中的有效位被置为无效。当循迹器206的读指针214指向一个间接分支源表项,并读出无效的表项内容时,由处理器核216计算得到该间接分支源的分支目标地址,将该分支目标地址通过总线410送往选择器408。选择器408选择该分支目标地址送往主动表404进行地址匹配,主动表404输出一个匹配得到或分配得到的BNX,同时该分支目标地址中的块内偏移被作为BNY,该BNX、BNY被存储到所述间接分支源表项中,并将该表项的有效位置为有效。
当循迹器206的读指针214指向间接分支源表项,并读出有效的表项内容时,该表项内容中的BNX和BNY就是该分支源对应的分支目标在轨道表204中的可能的寻址地址,以该地址在指令存储器202中读取分支目标指令及其后的单数或复数条顺序指令供处理器216猜测执行。其方法是在处理器核中流水线各流水线段增置一个能向下一流水线段传递的猜测执行信号,以分别猜测执行/正常执行。执行间接分支目标及其后的数条指令时都在指令开始执行的第一个流水线段将该信号设为猜测执行。将该可能的寻址地址中的BNX在主动表404中对应的块地址与在处理器核216计算得到实际分支目标地址中的块地址部分进行比较。
若比较结果为相等且发生转移则此后执行的指令都将该信号设为正常执行,且在写回流水线段将猜测执行的指令的结果正常写回。读指针214从现有地址继续向前。若比较结果为不相等且发生分支转移,则以处理器核216计算得到实际分支目标地址通过总线410送往选择器408,并经选择器408选择后送往主动表404进行地址匹配,主动表404输出一个匹配得到或分配得到的BNX,同时该分支目标地址中的块内偏移被作为BNY,该BNX、BNY被更新到轨道表中该间接分支源表项中。读指针从新的分支目标开始前行。同时以此BNX,BNY为地址从指令存储器202中读出指令供处理器216执行,并在指令执行的第一段将猜测执行信号设为正常执行。该不相等比较结果也被送往流水线写回段,控制将猜测执行结果全部抛弃,使结果不被写回。
若不发生分支转移,则要退回分支源后下一条顺序地址执行。
在操作过程中,由于轨道表204中的总轨道数是有限的,可能需要用新的轨道替换已经存在的轨道。可以使用一个类似LRU或LFU的策略以决定轨道表204中一条或多条轨道被替换,这也表示在指令存储器202中的对应存储器块和主动表404中的对应表项也要被更新或替换。
然而,当一个存储器块(和对应的轨道)被新的存储器块/轨道替换时,可能导致其他轨道中原来以被替换轨道为分支目标的分支源执行时错误转移到新的存储器块/轨道。为避免这种情况发生,替换时可以将这些分支源表项中的有效位置为无效,从而防止错误的转移。
当循迹器206的读指针214指向一个直接分支源表项(即TYPE 2和TYPE3),并读出该表项内容中的有效位为无效时,可以根据分支源的BNX和BNY从指令存储器202中读出对应的指令码中的分支偏移量(branch offset),以分支源的BNX从主动表404中读出对应的块地址(block address),以及分支源的BNY(block offset)三者一同送往加法器406。计算三者之和的得到该分支源的分支目标地址,并通过总线412送往选择器408,经选择器408选择后送往主动表404进行地址匹配。主动表404输出一个匹配得到或分配得到的BNX,同时该分支目标地址中的块内偏移被作为BNY,该BNX、BNY被更新到该分支源表项中,并将该表项中的有效位置为有效。
在本实施例中,当在主动表404中对地址进行匹配不成功时,根据分配得到的BNX可以将对应的指令块填充到指令存储器202的相应位置中。该操作与之前实施例所述相同,在此不再重复说明。
这样,分支源、分支目标指令和与分支源地址相邻的后一指令的地址信息都能事先确定,且在处理器核216执行分支源之前,对应的分支目标指令和后一指令均已经存储在指令存储器202中。一个具有双寻址、双输出端口的指令存储器即可同时向处理器核提供该分支目标指令和后一指令,及它们各自的后续指令,根据处理器核执行所述分支判定,在所述分支指令到达流水线中的执行段前,选择至少所述分支目标指令和所述后一指令中的一个作为所述执行单元将要执行的指令,使得无论所述分支指令的转移是否发生都不会导致流水线操作的暂停。也可以采用一个指令读缓冲与单端口指令存储器结合的方式实现双寻址、双输出的功能。还可以对循迹器206进行改进,以提供上述分支目标指令、后一指令及它们的后续指令。
图5A是本发明所述分支处理系统的一个实施例。在本实施例中,与图2的循迹器206相比,循迹器506中增加了一个选择器504和一个寄存器508。寄存器508用于存储所述分支源的后一指令的寻址地址以备向分支目标前行的读指针在必要时退回并指向该指令,自增器210在此例中也可以对分支目标地址进行递增以读出后续指令,以提供地址供从指令存储器202中读取上述分支目标指令及后续指令。选择器504用于从寄存器508中存储的所述分支源的后一指令的寻址地址和递增后的分支目标地址中进行选择送往选择器208。选择器208则从选择器504送来的地址及轨道表204送来的表项内容中选择一个送往寄存器212。
在本实施例中,一个能存储一个存储器块的指令读缓冲502与指令存储器202共同作用可以同时提供条件分支源的地址的后一指令以及分支目标指令。可以根据处理器核216产生的PC块内偏移218,从指令读缓冲502读取指令源后续指令;根据循迹器506的读指针从指令存储器202中读出分支目标指令及其后续指令。
处理器核216的分支判定流水线段526通常在处理器流水线的中段。我们命名在该判定指令段之前的流水线段为前端流水线,该分支判定流水线段后的流水线段为后端流水线。如果处理器核216有两条前端流水线则可以与上述两条指令流共同作用以实现无惩罚分支。在此我们命名与指令读缓冲502连接的前端流水线为N前端520,命名与指令存储器连接的前端流水线为T前端522。分支判定指令段选择N前端与T前端其中一条的输出供后端流水线528继续处理。
以下结合图5B的实例来说明图5A的工作原理。图5B显示轨道表204中的三条轨道以及与之相应的存储器202及指令读缓冲502中的指令块。起始状态是读指针214在5号轨道上,相应的5号存储器块的内容已被填充在指令读缓冲502中。读指针214从5号轨道上的562表项开始前行(往右),处理器核216以其产生的PC块内偏移量218从指令572开始顺序读取指令读缓冲502中指令作为指令流送进处理器核216的N前端520进行处理。读指针如前例前行遇到条件分支指令表项564(与读缓冲中574号指令相应),在此与上例不同的是此时译码器输出控制寄存器508存入自增器210的输出(其值为分支源地址564后顺序一条的地址信息),译码器输出也控制选择器208选择来自轨道表204的目标地址信息224并控制寄存器212更新读指针指向在9号轨道上的表项570。该读指针同时从指令存储器202中读出与570表项相应的指令580送往处理器核216的T前端522。表项570代表一条非分支指令,译码器输出控制选择器504及208选择自增器210输出并更新寄存器212使读指针沿9号轨道增1,指向570右面的一个表项,也指向指令存储器202中580号指令的顺序下一条指令送往处理器核216的T前端522。读指针214如此前行直到处理器核216提供反馈信号告知循迹器T前端的各级流水线被填满或遇到下一个分支源才停止。处理器核216中分支指令判定段526在574号条件分支指令循N前端到达该段时会据此进行分支判断。如判断为不分支,则526继续选择从N前端520来的574号指令的后续指令流供后端流水线528执行,并不停顿。该不分支判断经由TAKEN信号=‘0’反馈至循迹器控制选择器504及208选择存在寄存器508中的值并以该值更新寄存器212。此时读指针从9号轨道退回到5号轨道上564后一个表项。读指针由此出发沿5号轨道前行直到遇到条件分支指令表项566.
此时如前例译码器输出控制寄存器508存入自增器210的输出(其值为分支源地址566后顺序一条的地址信息),译码器输出也控制选择器208选择来自轨道表204的目标地址信息224并控制寄存器212更新读指针指向在2号轨道上的表项568。该读指针同时从指令存储器202中读出与568表项相应的指令578送往处理器核216的T前端。读指针214如前例沿2号轨道前行直到T前端的各级流水线被578及后续指令填满后才停止。与此同时N前端持续处理来自指令读缓冲502的指令包括576号指令及后续指令。分支指令判定段526在576号指令循N前端520到达该段时会据此进行分支判断。如判断为分支,则526选择从T前端522来的578号指令及后续指令流供后端流水线528执行。此时TAKEN=‘1’控制选择器504及208选择自增器210输出并以此更新寄存器212。读指针214即从刚才停止处继续沿2号轨道前行。TAKEN=‘1’也控制将读指针指向的2号(分支目标)存储块从指令存储器中填充到指令读缓冲502中使其成为新的当前存储块。处理器核216产生的PC块内偏移量218从指令读缓冲502中按需读取当前存储块的指令至N前端520。同时如果读指针214在2号轨道上前行遇到一个新的条件分支源586并依前例跳到一个新的分支轨道上时,则可依前例从指令存储器202中读出相应的分支目标指令及后续指令流送往T前端522。当N前端520中的从新的当前(2号)存储块来的新指令到达分支指令判定段526时,处理器核216选择从N前端520来的指令流送往后端流水线528继续执行,而从新的分支目标指令及后续指令则填满T前端在此等待。如此周而复始,流水线不会因为分支而停顿。
另外寄存器508存入的也可以是分支源地址后顺序第S条的地址信息(分支源地址+S),在此S为前端流水线的深度。如此当不进行分支时读指针可以直接回到与PC正在读取的指令相应的表项而不需追赶PC。
如果在5号轨道上的所有分支指令的判断结果都是不分支,读指针到达了结束表项,则将结束表项点内容中的顺序下一存储块BNX(在此是8号)读出经读指针214送往指令存储器202将下一存储块读出存进读缓冲502,供处理器核216调用。在将存储块从指令存储器读出以存入读缓冲时只需要用读指针的BNX。在将分支目标指令及后续指令读出送往处理器核T前端时需要读指针的BNX也需要BNY。
图6是本发明所述分支处理系统的另一个实施例。在本实施例中,与图5A相比,增加了两个寄存器632与636,一个监测PC块内偏移218的监测器(图中未显示),两个选择器634与638。寄存器636保存读缓冲502中存储的存储块(当前存储块)的块号。寄存器632保存读缓冲502中存储的存储块的顺序下一个存储块的块号。选择器634选择顺序下一个存储块的块号或分支目标存储块的块号以更新寄存器636。循迹器506中减少了寄存器508。循迹器中选择器646用于选择由寄存器636中当前存储块号及PC块内偏移218构成的指令源后续地址或递增后的分支目标地址送往选择器208。选择器208则仍从选择器504送来的地址及轨道表204送来的表项内容中选择一个送往寄存器212。选择器638选择由循迹器提供的读指针(分支目标地址)或由寄存器634选择的顺序下一个存储块号送往指令存储器读取下一个存储块。此外轨道表中被读指针214中BNX指向的轨道的结束表项可以被单独读出。
仍以图5B为例,此例中5号轨道的顺序下一条轨道是8号轨道,5号存储器块的顺序下一个存储器块是8号存储器块。起始状态是读指针214在5号轨道上564与566表项之间,5号轨道结束表项所含的下一条轨道号(8号)已被读出存进寄存器632,相应的5号存储器块的内容已被填充在指令读缓冲502中,相应的存储块号BNX(5号)也已被存进寄存器636。读指针沿5号轨道前行直到遇到条件分支指令表项566。此时译码器输出控制选择器208选择来自轨道表204的目标地址信息224并控制寄存器212更新读指针指向在2号轨道上的表项568。同时选择器638选择该读指针从指令存储器202中读出与568表项相应的指令578送往处理器核216的T前端。读指针214如前例沿2号轨道前行直到T前端的各级流水线被578及后续指令填满后才停止。与此同时N前端持续处理来自指令读缓冲502的指令包括576号指令及后续指令。分支指令判定段526在分支指令576循N前端520到达该段时会据此进行分支判断。如判断为分支,526选择从T前端522来的578号指令及后续指令流供后端流水线528执行,之间并无停顿。此时TAKEN=‘1’控制选择器504及208选择自增器210输出并以此更新寄存器212。读指针214即从刚才停止处继续沿2号轨道前行。TAKEN=‘1’也控制选择器638选择读指针寻址将含有分支目标指令的2号存储器块从指令存储器中填充到指令读缓冲502中。TAKEN=‘1’也控制选择器634选择读指针214上2号轨道的BNX并将其存进寄存器636。处理器核216产生的PC块内偏移量218从指令读缓冲502中(此时是2号存储块)按需读取指令至N前端520。同时如果读指针214在2号轨道上遇到一个新的条件分支源表项586并依上例跳到一个含有586的分支目标的新轨道上时,则依前例从指令存储器202中读出相应的分支目标指令及后续指令流送往T前端522。当N前端520中的新指令到达分支指令判定段526时,处理器216选择从N前端520来的指令流送往后端流水线528继续执行,而从新的分支目标所在的存储块的指令则填满T前端后在此等待。
如分支指令判定段526对分支指令576判断为不分支,则526继续选择从N前端520来的576号指令的后续指令流供后端流水线528执行,并不停顿。该不分支判断经由TAKEN信号=‘0’反馈至循迹器控制选择器504及208选择存在寄存器636中的当前轨道号(BNX)与处理器核216提供的PC块内偏移218(BNY)并以该BNX,BNY更新寄存器212。此时读指针从2号轨道退回到5号轨道上分支源566右面处理器核216正在执行的指令的表项。读指针由此出发沿5号轨道前行直到遇到下一个分支源。
如果当处理器核216执行到5号存储块中最后一条指令时则下一周期处理器核216自动开始执行顺序下一个存储块的指令。实施方法是当监测器检测到PC块内偏移218达到最高地址(比如全‘1’)时,此时监测器控制选择器638选择寄存器632中的顺序下一存储块号(在此为8号)送往指令存储器202读取相应存储块存入指令缓冲502。PC块内偏移218从指令缓冲中最低地址开始顺序读取指令送往N前端520执行。同时监测器也选择寄存器632中的块号(8号)存进寄存器636作为当前存储块号。如果此时分支判断为不分支(BRANCH=’1’,TAKEN=’0’),则该条件控制选择器646及208选择选择寄存器636中的BNX(8号)及PC块内偏移218更新寄存器212,使读指针落在当前正在执行的指令的相应表项上,并由此前行。如果此时分支判断为分支(BRANCH=’1’,TAKEN=’1’),则该条件控制选择器638选择读指针(此时指向2号存储块)从指令存储器202中读出2号存储块存入读缓冲502供PC块内偏移218选择送往N前端520执行。此条件也控制选择器634选择读指针中的BNX(2号)更新寄存器636。读指针由现行位置(2号轨道)继续前行。如此周而复始,不管是否分支,流水线永不停顿。
在一个例子中,处理器核支持的指令类型还可以包括函数调用指令类型和函数返回指令类型。在这种情况下,可以在循迹器中增加一个栈,用于在审查或执行函数调用指令时保存对应的函数返回地址对应的BNX和BNY。
图7A是本发明所述循迹器的另一个实施例。在本实施例中,循迹器206中增加了一个实现了栈操作功能的后进先出(LIFO)寄存器组702,在审查或执行函数调用指令时将函数返回地址对应的轨道表表项地址(BNX、BNY)压栈到寄存器组702中。在审查或执行函数返回指令时可以直接由寄存器组702中出栈(即将最后存储到寄存器组702中的表项地址输出)得到函数返回地址对应的BNX、BNY,并经总线704送往选择器208。选择器208则从自增器210送来的地址、总线704送来的地址及轨道表204经总线224送来的地址(即轨道表表项内容)中选择总线704并更新寄存器212。此时读指针指向函数返回地址相应的轨道表表项及存储器中的指令,处理器核216由此指令开始执行,读指针从此表项开始前行。
图7B是本发明所述循迹器的另一个实施例。在本实施例中,循迹器606中增加了一个实现了栈操作功能的寄存器组702,在审查或执行函数调用指令时将函数返回地址对应的轨道表表项地址(BNX、BNY)压栈到寄存器组702中。在审查或执行函数返回指令时可以直接由寄存器组702中出栈(即将最后存储到寄存器组702中的表项地址输出)得到函数返回地址对应的BNX、BNY,并经总线704送往选择器208。选择器208则从自增器210送来的地址、选择器504送来的地址、总线704送来的地址及轨道表204经总线224送来的地址(即表项内容)中选择总线704并更新寄存器212。此时读指针指向函数返回地址相应的轨道表表项及存储器中的指令,处理器核216由此指令开始执行,读指针从此表项开始前行。
Claims (30)
1.一种分支处理方法,其特征在于所述方法包括:
判断写入缓存的指令的指令类型,并记录该指令类型;当该指令是分支指令时,
计算该分支指令的分支目标指令地址,并记录该分支目标指令地址对应的目标地址信息;该目标地址信息对应至少包含分支目标指令在内的一个指令段;
若该分支目标指令尚未存储在缓存中,则根据该分支目标指令地址将至少包含该分支目标指令的指令段填充到缓存中与该目标地址信息对应的位置中,使得处理器核执行该分支指令之前,该分支指令的后一指令及分支目标指令都已存储在缓存中;
对于间接分支指令,还有一个有效位与之对应;所述有效位表示对应的目标地址信息是否有效;
当所述间接分支指令的有效位表示为有效时,将间接分支指令对应的目标地址信息作为后续指令的地址。
2.根据权利要求1所述方法,其特征在于:
对于缓存中的每条指令,均有一个指令类型和一个目标地址信息与之对应。
3.根据权利要求2所述方法,其特征在于:
所述指令类型包括有条件的分支指令。
4.根据权利要求2所述方法,其特征在于:
所述指令类型包括无条件的分支指令。
5.根据权利要求2所述方法,其特征在于:
所述指令类型包括非分支指令。
6.根据权利要求2所述方法,其特征在于:
对于每条指令,有一个有效位与之对应;所述有效位表示对应的目标地址信息是否有效。
7.根据权利要求6所述方法,其特征在于:
若一个目标地址信息对应的指令段被替换出缓存,则将该目标地址信息对应的有效位设置为无效。
8.根据权利要求7所述方法,其特征在于:
若即将被处理器核执行的分支指令对应的有效位表示为无效,则重新计算该分支指令的分支目标指令地址,并记录该分支目标指令地址对应的目标地址信息。
9.根据权利要求6所述方法,其特征在于:
若即将被处理器核执行的分支指令是间接分支指令且有效位表示为有效,则在处理器核计算得到分支目标指令地址前,猜测执行该间接分支指令的后续指令,使得流水线操作不会因为间接分支指令而暂停。
10.根据权利要求9所述方法,其特征在于:
在处理器核计算得到间接分支目标指令地址后,将间接分支目标指令地址与间接分支指令对应的记录中分支目标指令地址进行比较,并根据比较结果决定后续操作。
11.根据权利要求10所述方法,其特征在于:
若比较结果为不相等且发生分支转移,则以处理器核计算得到分支目标指令地址作为该间接分支指令的后续指令地址。
12.根据权利要求11所述方法,其特征在于:
记录该分支目标指令地址对应的目标指令地址信息;该目标指令地址信息对应至少包含该分支目标指令在内的一个指令段;
若该分支目标指令尚未存储在缓存中,则根据该分支目标指令地址将至少包含该分支目标指令的指令段填充到缓存中与该目标地址信息对应的位置中。
13.根据权利要求2所述方法,其特征在于:
所述指令类型还包含函数调用指令和函数返回指令。
14.根据权利要求13所述方法,其特征在于:
当处理器核执行函数调用指令时,将函数返回地址对应的目标地址信息压栈存储到一个栈中;所述目标地址信息是函数调用指令本身对应的地址信息;或所述目标地址信息是函数调用指令的后续指令的地址信息。
15.根据权利要求14所述方法,其特征在于:
当处理器核即将执行到函数返回指令时,将所述栈中位于栈顶的目标地址信息出栈,作为该函数返回指令的目标地址信息,并记录该目标地址信息;该目标地址信息对应至少包含目标指令在内的一个指令段;
若该目标指令尚未存储在缓存中,则根据目标地址信息对应的目标指令地址将至少包含该目标指令的指令段填充到缓存中与该目标地址信息对应的位置中,使得处理器核执行该函数返回指令之前,该函数返回指令的目标指令都已存储在缓存中。
16.一种分支处理方法,其特征在于所述方法包括:
判断写入缓存的指令的指令类型,并记录该指令类型;当指令是分支指令时,
计算分支指令的分支目标指令地址,并记录分支目标指令地址对应的目标地址信息;该目标地址信息对应至少包含分支目标指令在内的一个指令段;
若该分支目标指令尚未存储在缓存中,则根据该分支目标指令地址将至少包含该分支目标指令的指令段填充到缓存中与该目标地址信息对应的位置中,使得处理器核执行该分支指令之前,该分支指令的后一指令及分支目标指令都已存储在缓存中;
从缓存同时向处理器核提供所述后一指令及分支目标指令;
决定对应于分支指令的分支判定;和
根据所述分支判定,在所述分支指令到达其在流水线中的执行段前,选择至少所述分支目标指令和所述后一指令中的一个作为执行单元将要执行的指令,使得无论所述分支指令的转移是否发生都不会导致流水线操作的暂停。
17.根据权利要求16所述方法,其特征在于:
对该分支指令对应的目标地址信息进行递增,能够提供缓存中所述分支目标指令所在指令段的寻址地址;若该分支指令的执行结果为分支转移成功发生,则将该递增目标地址信息作为新的寻址地址进行后续操作。
18.根据权利要求17所述方法,其特征在于:
记录该分支指令之后顺序执行的指令的位置信息;对该分支指令本身的地址进行递增,提供缓存中该分支指令所在指令段的寻址地址;
若该分支指令的执行结果为分支转移不发生,则将该递增地址的地址信息作为新的寻址地址进行后续操作。
19.根据权利要求18所述方法,其特征在于:
当分支指令本身地址递增后已经到达指令段最后一条指令时,继续对该地址进行递增,从而指向与该指令段地址相邻的后一指令段中的指令,同时将该递增地址的地址信息作为新的寻址地址进行后续操作。
20.根据权利要求19所述方法,其特征在于:
根据所述分支判定,当所述分支指令的执行结果表示分支转移没有成功发生时,使用由分支指令本身地址递增得到的地址信息作为新的寻址地址。
21.一种分支处理系统,所述系统包括处理器核及缓存;其特征在于该系统进一步包括:
一个扫描器,用于判断写入缓存的指令的指令类型,并计算分支指令的分支目标指令地址;若该分支目标指令地址对应的分支目标指令尚未存储在缓存中,则根据该分支目标指令地址将至少包含该分支目标指令的指令段填充到缓存中与目标地址信息对应的位置中,使得处理器核执行该分支指令之前,该分支指令的后一指令及分支目标指令都已存储在缓存中;
一个主动表,用于将分支目标指令地址转换为目标地址信息;
一个轨道表,用于记录写入缓存的指令对应的指令类型、目标地址信息;和
对于缓存中的每个指令段,均有轨道表的一个表行与之对应;对于缓存中的每条指令,均有轨道表的一个表项与之对应;
轨道表的每个表项还能够包含一个有效位;所述有效位表示该表项包含的目标地址信息是否有效。
22.根据权利要求21所述系统,其特征在于:
存储在所述表项中的指令类型包括有条件的分支指令。
23.根据权利要求21所述系统,其特征在于:
存储在所述表项中的指令类型包括无条件的分支指令。
24.根据权利要求21所述系统,其特征在于:
存储在所述表项中的指令类型包括非分支指令。
25.根据权利要求21所述系统,其特征在于:
所述缓存能够同时向处理器核提供所述后一指令及分支目标指令;
所述系统还包括:
一个分支判定逻辑结构单元,用于决定对应于分支指令的分支判定;和
一个选择逻辑结构单元,用于根据所述分支判定,在所述分支指令到达其在流水线中的执行段前,选择至少所述分支目标指令和所述后一指令中的一个作为执行单元将要执行的指令,使得无论所述分支指令的转移是否发生都不会导致流水线操作的暂停。
26.根据权利要求25所述系统,其特征在于所述系统还包括:
一个自增器,用于对所述分支指令本身的地址信息或所述分支指令对应的目标地址信息进行递增,以提供缓存中所述分支指令所在指令段的寻址地址或缓存中所述分支目标指令所在指令段的寻址地址;
一个当前地址寄存器,用于存储所述分支指令所在指令段的寻址地址;
一个目标地址寄存器,用于存储所述分支目标指令所在指令段的寻址地址;
一个选择器,用于选择当前地址寄存器和目标地址寄存器中的一个作为新的寻址地址;若该分支指令的执行结果为分支转移成功发生,该选择器选择目标地址寄存器中存储的地址信息,否则选择当前地址寄存器中存储的地址信息。
27.根据权利要求26所述系统,其特征在于所述系统还包括:
一个段结束地址寄存器,用于存储处理器核正在执行的指令段地址相邻的后一指令段的寻址地址;
一个段地址选择器,用于选择当前地址寄存器和段结束地址寄存器中的一个作为新的寻址地址;若处理器核已经执行到指令段的最后一条指令,该段地址选择器选择段结束地址寄存器中存储的地址信息,否则选择当前地址寄存器中存储的地址信息。
28.根据权利要求24所述系统,其特征在于:
存储在所述表项中的指令类型包含函数调用指令和函数返回指令。
29.根据权利要求28所述系统,其特征在于所述系统还包括:
一个栈,用于存储函数调用指令的函数返回地址对应的地址信息;
当处理器核执行函数调用指令时,将函数返回地址对应的地址信息压栈存储到所述栈中;
当处理器核即将执行到函数返回指令时,将所述栈中位于栈顶的地址出栈,作为该函数返回指令的目标地址信息;将目标地址信息存储在该函数返回指令对应的轨道表表项中;目标地址信息对应至少包含目标指令在内的一个指令段;
若该目标指令尚未存储在缓存中,则根据目标地址信息对应的目标指令地址将至少包含目标指令的指令段填充到缓存中与目标地址信息对应的位置中,使得处理器核执行该函数返回指令之前,函数返回指令的目标指令都已存储在缓存中。
30.根据权利要求27所述系统,其特征在于所述系统中的处理器核有两条流水线前端,分别执行分支指令地址相邻的后续指令及分支目标指令;
所述处理器核的分支判定指令段选择所述两条流水线前端中的一条的输出供后端流水线继续处理。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210508931.3A CN103838550B (zh) | 2012-11-26 | 2012-11-26 | 一种分支处理系统和方法 |
PCT/CN2013/087723 WO2014079389A1 (en) | 2012-11-26 | 2013-11-22 | Branch processing method and system |
US14/443,393 US9529595B2 (en) | 2012-11-26 | 2013-11-22 | Branch processing method and system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210508931.3A CN103838550B (zh) | 2012-11-26 | 2012-11-26 | 一种分支处理系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103838550A CN103838550A (zh) | 2014-06-04 |
CN103838550B true CN103838550B (zh) | 2018-01-02 |
Family
ID=50775561
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210508931.3A Active CN103838550B (zh) | 2012-11-26 | 2012-11-26 | 一种分支处理系统和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9529595B2 (zh) |
CN (1) | CN103838550B (zh) |
WO (1) | WO2014079389A1 (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10853074B2 (en) * | 2014-05-01 | 2020-12-01 | Netronome Systems, Inc. | Table fetch processor instruction using table number to base address translation |
CN104156196B (zh) * | 2014-06-12 | 2017-10-27 | 龚伟峰 | 重命名预处理方法 |
JP6457836B2 (ja) * | 2015-02-26 | 2019-01-23 | ルネサスエレクトロニクス株式会社 | プロセッサおよび命令コード生成装置 |
WO2016155623A1 (zh) * | 2015-03-30 | 2016-10-06 | 上海芯豪微电子有限公司 | 基于信息推送的信息系统和方法 |
CN106155939B (zh) * | 2015-03-30 | 2019-05-31 | 联想(北京)有限公司 | 一种信息处理方法及电子设备 |
CN106897306B (zh) * | 2015-12-21 | 2019-04-30 | 阿里巴巴集团控股有限公司 | 数据库操作方法及装置 |
EP3244300B1 (fr) * | 2016-02-24 | 2022-02-09 | STMicroelectronics (Rousset) SAS | Procédé et outil de génération d'un code programme configuré pour effectuer une vérification du flot de contrôle d'un autre code programme contenant des instructions de branchements indirects |
CN105975252B (zh) * | 2016-04-29 | 2018-10-09 | 龙芯中科技术有限公司 | 一种处理指令的流水线的实现方法、装置及处理器 |
US20180004627A1 (en) * | 2016-06-29 | 2018-01-04 | Centipede Semi Ltd. | Sequential monitoring and management of code segments for run-time parallelization |
CN107870780B (zh) * | 2016-09-28 | 2020-04-28 | 华为技术有限公司 | 数据处理装置和方法 |
US10747539B1 (en) * | 2016-11-14 | 2020-08-18 | Apple Inc. | Scan-on-fill next fetch target prediction |
CN108228239B (zh) * | 2016-12-13 | 2021-04-20 | 龙芯中科技术股份有限公司 | 基于快速模拟器qemu的分支指令抓取方法和装置 |
US10713048B2 (en) | 2017-01-19 | 2020-07-14 | International Business Machines Corporation | Conditional branch to an indirectly specified location |
CN108845831A (zh) * | 2017-04-13 | 2018-11-20 | 上海芯豪微电子有限公司 | 一种分支处理方法与系统 |
CN111209044B (zh) * | 2018-11-21 | 2022-11-25 | 展讯通信(上海)有限公司 | 指令压缩方法及装置 |
CN111026442B (zh) * | 2019-12-17 | 2022-08-02 | 天津国芯科技有限公司 | 一种cpu中用于消除程序无条件跳转开销的方法及装置 |
CN111538535B (zh) * | 2020-04-28 | 2021-09-21 | 支付宝(杭州)信息技术有限公司 | 一种cpu指令处理方法、控制器和中央处理单元 |
CN112433765B (zh) * | 2020-11-26 | 2023-09-08 | 海光信息技术股份有限公司 | 一种数据存储方法、装置、处理器及电子设备 |
CN112579176B (zh) * | 2020-12-17 | 2023-03-28 | 成都海光微电子技术有限公司 | 记录地址历史的装置和方法 |
CN113254083B (zh) * | 2021-06-28 | 2021-11-02 | 北京智芯微电子科技有限公司 | 指令处理方法、指令处理系统及处理器、芯片 |
US12067399B2 (en) | 2022-02-01 | 2024-08-20 | Apple Inc. | Conditional instructions prediction |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5542109A (en) * | 1994-08-31 | 1996-07-30 | Exponential Technology, Inc. | Address tracking and branch resolution in a processor with multiple execution pipelines and instruction stream discontinuities |
US5860017A (en) * | 1996-06-28 | 1999-01-12 | Intel Corporation | Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction |
CN1349160A (zh) * | 2001-11-28 | 2002-05-15 | 中国人民解放军国防科学技术大学 | 流水线控制相关延迟消除方法 |
CN102117198A (zh) * | 2009-12-31 | 2011-07-06 | 上海芯豪微电子有限公司 | 一种分支处理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6912650B2 (en) * | 2000-03-21 | 2005-06-28 | Fujitsu Limited | Pre-prefetching target of following branch instruction based on past history |
-
2012
- 2012-11-26 CN CN201210508931.3A patent/CN103838550B/zh active Active
-
2013
- 2013-11-22 WO PCT/CN2013/087723 patent/WO2014079389A1/en active Application Filing
- 2013-11-22 US US14/443,393 patent/US9529595B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5542109A (en) * | 1994-08-31 | 1996-07-30 | Exponential Technology, Inc. | Address tracking and branch resolution in a processor with multiple execution pipelines and instruction stream discontinuities |
US5860017A (en) * | 1996-06-28 | 1999-01-12 | Intel Corporation | Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction |
CN1349160A (zh) * | 2001-11-28 | 2002-05-15 | 中国人民解放军国防科学技术大学 | 流水线控制相关延迟消除方法 |
CN102117198A (zh) * | 2009-12-31 | 2011-07-06 | 上海芯豪微电子有限公司 | 一种分支处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103838550A (zh) | 2014-06-04 |
US9529595B2 (en) | 2016-12-27 |
US20150339125A1 (en) | 2015-11-26 |
WO2014079389A1 (en) | 2014-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103838550B (zh) | 一种分支处理系统和方法 | |
CN104424129B (zh) | 基于指令读缓冲的缓存系统和方法 | |
CN102855121B (zh) | 分支处理方法与系统 | |
FI80532B (fi) | Centralenhet foer databehandlingssystem. | |
CN102117198B (zh) | 一种分支处理方法 | |
CN104978282B (zh) | 一种缓存系统和方法 | |
CN102841865B (zh) | 高性能缓存系统和方法 | |
KR100335478B1 (ko) | 카운터플로우파이프라인프로세서 | |
CN102110058A (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
KR20160046331A (ko) | 범용 유닛을 기반으로 하는 고성능 프로세스 시스템 및 방법 | |
CN103778070B (zh) | 多个块一致性操作的并行处理 | |
CN104731718A (zh) | 一种缓存系统和方法 | |
CN102566976A (zh) | 管理重命名寄存器的寄存器重命名系统和方法 | |
CN107506329B (zh) | 一种自动支持循环迭代流水线的粗粒度可重构阵列及其配置方法 | |
CN106066787A (zh) | 一种基于指令和数据推送的处理器系统和方法 | |
CN113157636A (zh) | 协处理器、近数据处理装置和方法 | |
CN103176914A (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
CN105988775A (zh) | 处理器、程序代码转换装置以及软件 | |
CN106843816A (zh) | 一种分支预测控制方法及装置 | |
US20160092182A1 (en) | Methods and systems for optimizing execution of a program in a parallel processing environment | |
EP0360553B1 (en) | Buffer storage system | |
US10885985B2 (en) | Processor in non-volatile storage memory | |
CN103514107B (zh) | 高性能数据缓存系统和方法 | |
TWI636362B (zh) | 高性能快取方法和裝置 | |
CN104156196B (zh) | 重命名预处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: 201203 501, No. 14, Lane 328, Yuqing Road, Pudong New Area, Shanghai Patentee after: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd. Address before: 200092, B, block 1398, Siping Road, Shanghai, Yangpu District 1202 Patentee before: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd. |