CN105511838B - 处理器及其执行方法 - Google Patents
处理器及其执行方法 Download PDFInfo
- Publication number
- CN105511838B CN105511838B CN201410652252.2A CN201410652252A CN105511838B CN 105511838 B CN105511838 B CN 105511838B CN 201410652252 A CN201410652252 A CN 201410652252A CN 105511838 B CN105511838 B CN 105511838B
- Authority
- CN
- China
- Prior art keywords
- instruction
- cycle
- branch
- processor
- buffer
- 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
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, 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
- 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, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
- G06F9/381—Loop buffering
-
- 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/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- 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
Abstract
本发明提供一种处理器及其执行方法。所述处理器包括:指令高速缓存;执行引擎;指令缓冲器;以及循环预测器,其判断循环的尺寸是否不大于该指令缓冲器的尺寸,其中该循环之循环指令包括以分支指令的目标开始并且以该分支指令结束的指令序列。其中,当该循环的尺寸不大于该指令缓冲器的尺寸时,该处理器:停止从该指令高速缓存取指;将该些循环指令从该指令缓冲器发送到该执行引擎而不从该指令高速缓存取指;维持一循环弹出计数,其指示将该分支指令从该指令缓冲器发送到该执行引擎而不从该指令高速缓存取指的次数;以及当该循环弹出计数达到阈值,该处理器在该分支指令之后的顺序下一指令处恢复从该指令高速缓存取指。
Description
本申请是申请日为2014年9月29日、申请号为201410512577.0、发明名称为“循环预测器指导的循环缓冲器”的发明专利申请的分案申请。
技术领域
背景技术
计算机程序普遍包含循环。循环是通常被称为循环本体的、重复地运行的指令序列,该循环本体重复地运行直到导致循环退出并进行到接着该循环的下一条指令的条件(condition)发生为止。在机器语言级别,一般来说,循环以通常回到位于循环本体的开始处的指令的条件分支指令来结束,但是当条件发生时,循环不再被采用(not taken)并且向下执行顺序的下一条指令。例如,条件可以是被初始化为正值然后通过循环每次递减的变量达到0。
对于现代处理器,循环呈现潜在的性能问题,因为它们包括条件分支指令,尤其是对于流水线和/或超标量处理器。一般而言,为了足够快地取指和解码指令以将它们提供给运行指令的处理器的功能单元,取指单元必须预测指令流中条件分支指令的存在并预测它们的结果,即,它们是将被采用(taken)或是不被采用(not taken)以及它们的目标地址。如果条件分支指令被误预测,则误预测必须被纠正,当流水线的前端开始在被纠正的地址处取指和解码指令时,会造成执行单元由于缺乏要执行的指令而饥饿的一个时段,常被称作流水线气泡。另外,对执行发生之前的所获取的指令的解码可能是复杂的,尤其对于一些指令集架构,并且因此引入的延迟也可能导致流水线气泡。
现代处理器中另外关心的是功耗。这在很多环境中是存在的。例如,在诸如移动电话或笔记本电脑或平板电脑的电池供电的环境中,总是希望减少处理器功耗以便延长所需要的电池再充电之间的时间。又例如,在服务器环境中,除了环境考虑之外,相对大的-确实有时候巨大的-数量的服务器导致功耗方面非常显著的成本。如上面讨论的,包括循环本体指令的指令解码可能是复杂的,因此除了由取指逻辑和从其获取指令的指令高速缓存以及预测所获取的循环的条件分支指令的分支预测器所消耗的功率之外,解码逻辑需要消耗相当大量的功率。
因此,理想的是提供一种装置用于处理器在运行循环时提高性能和/或减少功耗。
发明内容
在本发明的一方面中提供了一种处理器。处理器包括指令高速缓存、执行引擎、指令缓冲器和循环预测器。循环预测器训练(train)分支指令来确定循环的经训练的循环计数。循环包括以分支指令的目标开始并以该分支指令结束的指令序列。循环预测器还判断循环的尺寸是否不大于指令缓冲器的尺寸。当循环的尺寸不大于指令缓冲器的尺寸时,处理器停止从指令高速缓存取指,将循环指令从指令缓冲器发送到执行引擎而不从指令高速缓存取指循环指令,维持一循环弹出计数,其指示分支指令从指令缓冲器被发送到执行引擎而不从指令高速缓存取指的次数,当循环弹出计数少于经训练的循环计数时预测分支指令为被采用,否则,则预测分支指令为不被采用。在另一个方面中,本发明提供了通过具有指令高速缓存、指令缓冲器和执行引擎的处理器执行的方法。该方法包括训练分支指令来确定循环的经训练的循环计数。循环包括以分支指令的目标开始并以分支指令结束的指令序列。该方法还包括判断循环的尺寸是否不大于指令缓冲器的尺寸。该方法还包括,当循环的尺寸不大于指令缓冲器的尺寸时:停止从指令高速缓存取指,将循环指令从指令缓冲器发送到执行引擎而不从指令高速缓存取指循环指令,维持一循环弹出计数,其指示分支指令从指令高速缓存发送到执行引擎而不从指令高速缓存取指的次数,当循环弹出计数少于经训练的循环计数时预测分支指令为被采用,否则,则预测分支指令为不被采用。
具体地,根据本发明一方面,提供一种处理器,包括:指令高速缓存;执行引擎;指令缓冲器;以及循环预测器,其判断循环的尺寸是否不大于该指令缓冲器的尺寸,其中该循环之循环指令包括以分支指令的目标开始并且以该分支指令结束的指令序列。其中,当该循环的尺寸不大于该指令缓冲器的尺寸时,该处理器:停止从该指令高速缓存取指;将该些循环指令从该指令缓冲器发送到该执行引擎而不从该指令高速缓存取指;维持一循环弹出计数,其指示将该分支指令从该指令缓冲器发送到该执行引擎而不从该指令高速缓存取指的次数;以及当该循环弹出计数达到阈值,该处理器在该分支指令之后的顺序下一指令处恢复从该指令高速缓存取指。
其中该循环预测器还训练该分支指令来确定该循环的经训练的循环计数,其中在维持该循环弹出计数时,该处理器:当该循环弹出计数小于该经训练的循环计数时,预测该分支指令为被采用,否则,则预测该分支指令为不被采用。
所述的处理器进一步包括:其中,当该循环的尺寸大于该指令缓冲器的尺寸时,处理器:从该指令高速缓存取指该些循环指令,解码该些循环指令并将其发送到该执行引擎;维持一循环取指计数,其指示从该指令高速缓存取指该分支指令的次数;以及当该循环取指计数小于该经训练的循环计数时,预测该分支指令为被采用,否则,则预测该分支指令为不被采用。
其中该阈值是该循环的经训练的循环计数减去((A*C)/B);其中该经训练的循环计数是该循环预测器训练该分支指令来确定的;其中A是该处理器从该指令高速缓存获取指令、解码指令并将指令提供给该指令缓冲器所需要的处理器时钟周期的预定数量;其中B是该些循环指令的数量;以及其中C是每个时钟周期该处理器能够从该指令缓冲器发送到该执行引擎的指令的数量。
其中该指令缓冲器保存已经从该指令高速缓存取指然后被解码但是尚未发送到该执行引擎的指令。
其中该处理器在该循环完成至少一次执行例程之后,判断该循环的尺寸是否不大于该指令缓冲器的尺寸。
其中该经训练的循环计数指示在该循环的一个执行例程期间该循环分支指令被采用的次数。
根据本发明另一方面,提供一种通过具有指令高速缓存、指令缓冲器和执行引擎的处理器执行的方法,该方法包括:判断循环的尺寸是否不大于该指令缓冲器的尺寸,其中该循环之循环指令包括以分支指令的目标开始并且以该分支指令结束的指令序列;以及当该循环的尺寸不大于该指令缓冲器的尺寸时:停止从该指令高速缓存取指;将该些循环指令从该指令缓冲器发送到执行引擎而不从该指令高速缓存取指;维持一循环弹出计数,其指示该分支指令从该指令缓冲器被发送到该执行引擎而不从该指令高速缓存取指的次数;以及当该循环弹出计数达到阈值,该处理器在该分支指令之后的顺序下一指令处恢复从该指令高速缓存取指。
所述的方法进一步包括:训练该分支指令来确定该循环的经训练的循环计数;以及当该循环弹出计数小于该经训练的循环计数时,预测该分支指令为被采用,否则,则预测该分支指令为不被采用。
所述的方法进一步包括:当该循环的尺寸不大于该指令缓冲器的尺寸时:从该指令高速缓存取指该些循环指令,解码该些循环指令并将其发送到该执行引擎;维持一循环取指计数,其指示从该指令高速缓存取指该分支指令的次数;以及当该循环取指计数小于该经训练的循环计数时,预测该分支指令为被采用,否则,则预测该分支指令为不被采用。
其中该阈值是该循环的经训练的循环计数减去((A*C)/B);其中该经训练的循环计数是该循环预测器训练该分支指令来确定的;其中A是该处理器从该指令高速缓存获取指令、解码指令并将指令提供给该指令缓冲器所需要的处理器时钟周期的预定数量;其中B是该些循环指令的数量;以及其中C是每个时钟周期该处理器能够从该指令缓冲器发送到该执行引擎的指令的数量。
其中该经训练的循环计数指示在该循环的一个执行例程期间该循环分支指令被采用的次数。
本发明的上述处理器及其执行方法在循环缓冲器模式中利用循环预测器结合指令缓冲器工作的方式来潜在地精确预测循环退出,从而避免不具有循环预测器指导的循环缓冲器模式操作的优点的常规处理器所经历的误预测。
附图说明
图1是示出处理器的框图。
图2是示出图1的循环预测器的框图。
图3是示出图1的处理器的操作的流程图。
图4是示出图1的处理器的操作的流程图。
被统称为图5的图5A和5B是示出图1的处理器的操作的流程图。
图6是进一步示出根据替换实施例的图1的处理器的操作的流程图。
图7是作为示例示出向图1的执行引擎提供嵌套循环的指令的工作在循环缓冲器模式中的图1的指令缓冲器的框图。
具体实施方式
现在参照图1,显示了示出处理器100的框图。处理器100包括取指单元108,其控制从指令高速缓存104的指令的获取,这些指令被提供到指令解码单元118。解码单元118将经解码的指令提供到指令缓冲器114,在此也被称为循环缓冲器(loop buffer)114,指令缓冲器114将指令提供给执行引擎112用于执行。取指单元108耦接到解码单元118、指令缓冲器114和执行引擎112。处理器100还包括多个分支预测器。在一个实施例中,分支预测器包括分支历史表116、分支目标地址高速缓存(Branch Target Address Cache,BTAC)106和循环预测器102,其中每个耦接到取指单元108。循环预测器102还耦接到解码单元118、指令缓冲器114和执行引擎112。
对本公开来说,一个循环是以一后向分支的条件分支指令结束并且以该条件分支指令的目标指令(即,条件分支指令分支所到的指令)开始的指令序列。条件分支指令可以被称为循环分支指令。循环的迭代(iteration)指的是循环的全部指令的单次运行。循环的执行例程(execution instance)指的是运行多次迭代直到由于它的循环分支指令的不被采用的方向而退出循环为止。如在此描述的,循环预测器102被有利地用于预测循环的退出,并且从而避免分支误预测及其伴随的性能损失。有利地,循环预测器102可以在两种模式中的每种中被用来预测循环的退出。在第一种模式中,循环太大而不能适合于循环缓冲器114,所以循环指令在被提供给执行引擎112之前被重复地从指令高速缓存104获取并通过解码单元118解码。每次从指令高速缓存104获取循环分支指令时,循环预测器102就进行预测它是否将被采用(taken or not taken)。循环预测器102跟踪在当前的循环执行例程期间该循环分支指令已经被执行的次数,并且也知道在循环的前一个(last)执行例程期间它被采用的次数,并且使用此信息来进行预测。在被称为“循环缓冲器模式”(loop buffermode)的第二种模式中,已经解码的循环的指令之大小可以适合于循环缓冲器114,并且从循环缓冲器114中被弹出(pop)用于提供给执行引擎112,而不需要重复地从指令高速缓存104中获取并通过解码单元118解码。在循环缓冲器模式中,当循环分支指令从循环缓冲器114中弹出的次数已经达到在循环的前一个执行例程期间它被采用的次数之后,循环预测器102则指示循环缓冲器退出循环。
取指单元108将指令指针或程序计数器值提供给指令高速缓存104来存取指令高速缓存104。作为响应,指令高速缓存104将指令字节区块提供给解码单元118。在一个实施例中,该区块是每个时钟周期16字节。一般而言,取指单元108取指顺序的下一指令区块;然而,在分支指令的情况中,取指单元108在分支指令的目标地址处取指指令区块。该分支目标地址可以由分支预测器102/106/116之一的预测而提供,或者在诸如为了纠正分支误预测而由执行引擎112提供。
分支历史表116存储用于先前运行的分支指令的被采用/不被采用(T/NT)预测,也被称为分支方向或方向。在一个实施例中,分支历史表116通过分支指令在指令高速缓存104中的获取地址与分支历史图案的布尔异或的值来索引,其中之前执行的N个分支指令中的每一个在该分支历史图案中包含一个比特,其中N是预定值,并且每个比特指示该分支指令是否被采用。在一个实施例中,分支历史表116包括与多个分支指令对应的饱和计数器,并且每个饱和计数器在当分支被采用时递增计数(count up),而当分支不被采用时递减计数(count down),并且T/NT预测基于计数器的值。
循环预测器102存储用于先前运行的循环分支指令的一经训练的循环计数,其可以用于进行先前被识别为循环分支指令的条件分支指令的T/NT预测。循环分支指令是在指令流中后向分支的条件分支指令。因此,循环分支指令在程序次序上出现在循环的末尾。例如,条件分支指令可以是包括有符号偏移的相对跳转指令,所述有符号偏移被添加到条件分支指令的指令指针值来计算分支目标地址。优选地,另外,条件分支指令在最近一次的循环执行例程中被采用的次数达到一阈值次数,才有资格被称为循环分支指令。所述经训练的循环计数指示在循环的前一个执行例程期间该循环分支指令被采用的次数,其可能是对于在循环的下一个执行例程中将采用的循环分支指令的次数的有用指示。例如,如果该经训练的循环计数是37,那么循环预测器102可以预测该循环分支指令在它从指令高速缓存104被取指的前37次都将被采用,并且循环预测器102可以预测循环分支指令在它被取指的第38次将不被采用,即,循环预测器102可以预测循环将退出。
有利地,循环预测器102也可以用在处理器100的循环缓冲器模式中。在循环缓冲器模式中,处理器100检测到它正在运行一全部暂存于循环缓冲器114中的循环。因此,处理器100停止从指令高速缓存104取指。替代为,处理器100从循环缓冲器114弹出已经解码的循环指令,用于提供给执行引擎112。有利地,循环预测器102可以用类似于循环预测器102预测从指令高速缓存104取指的循环分支指令的方向(通常因为循环太大而不能适合于循环缓冲器114,所以处理器100不工作在循环缓冲器模式中时)所用的方式,来预测从循环缓冲器114弹出的循环分支指令何时将被采用或不被采用。有利地,当处理器100工作在二者的任何模式中时,循环预测器102都可以用来预测循环分支指令的方向。下面相对于图2更详细地描述循环预测器102,并且下面相对于其余图更详细地描述其操作。
BTAC 106存储用于先前执行的分支指令的方向预测和分支目标地址,并且提供分支指令的方向预测以及指令高速缓存104取指地址所选择的分支目标地址。BTAC 106还存储与每个分支指令有关的其它信息。例如,其它信息可以包括分支指令的类型,诸如指令是否是调用指令、返回指令、间接分支指令、条件有关分支指令、非条件有关分支指令或者循环分支指令,如在此描述的。有利地,在一个实施例中,额外的信息还包括一经训练的循环分支标志(参照图2作为经训练的循环分支标志278),其该指示条件分支指令是否是一个经训练的循环分支指令。在一个实施例中,条件分支指令仅在它具有图2的经训练的循环计数表201中的有效的经训练的循环计数206的情况下才将其经训练的循环分支标志278置位,如下面更详细地描述的。在一个实施例中,分支历史表116通过作为指令高速缓存104的取指地址的值来索引。在一个实施例中,处理器100包括其它分支预测器,诸如基于堆栈的调用/返回预测器。优选地,BTAC 106提供来自分支历史表116、循环预测器102(例如,经由经训练的循环分支标志278的设置值)或BTAC 106自身的预测是否应该被用来预测分支指令的指示。
解码单元118解码从指令高速缓存104取指的指令。解码可以包括根据处理器100的指令集架构(ISA)将从指令高速缓存104接收的未分化的(undifferentiated)指令字节流打断(break)为分立的(distinct)指令。这也被称为指令格式化。例如,在一个实施例中处理器100是x86 ISA处理器。x86 ISA中的指令是可变长度,并且可以在存储器中的任何字节边界处开始。因此,x86指令可以跨越从指令高速缓存104取指的多个区块。目前,x86 ISA指令可以在1和15字节长之间。又例如,在一个实施例中,处理器100是高级RISC机器(ARM)ISA处理器。在ARM ISA处理器的某些模式中的指令也可以是可变长度。例如,在一些模式中,ARM ISA指令可以是16比特长或32比特长。可以包括或不包括可变长度指令的其它ISA的实施例是预期的。
通常,解码/格式化可变长度指令需要大量逻辑,这可能需要显著的功耗并且可能在提供经解码/格式化的指令给执行引擎112时造成延迟。更具体地,依赖于指令混合,解码单元118可能难以足够快地向指令缓冲器114提供经解码的指令来保持执行引擎112的高利用率。有利地,当工作在循环缓冲器模式中时,循环缓冲器114可能能够以足够的速率将循环指令提供给执行引擎112来充分地利用执行引擎112,尤其是具有如在此描述的通过循环预测器102来预测循环分支指令的方向的额外优势,以避免当循环退出发生时的误预测,从而潜在地改善处理器100的性能。另外,有利地,当工作在循环缓冲器模式中时,可以节省大量电力,因为在循环缓冲器模式的操作期间中相当长的一段时间,可以临时关闭指令高速缓存104、取指单元108、分支历史表116和/或解码单元118。在一个实施例中,缓冲器(未显示)存在于指令高速缓存104和解码单元118之间用于缓冲指令字节的区块;当工作在循环缓冲器模式中时也可以关闭此缓冲器。
常规地,在循环缓冲器模式中的操作有效地总是预测循环分支指令将被采用,这意味着,在循环退出时,即,运行循环分支指令的最后一次,误预测将发生,这将必须由处理器100纠正。有利地,在此描述的实施例中,在循环缓冲器模式中循环预测器102结合循环缓冲器114工作来潜在地精确预测循环退出,并且从而避免不具有循环预测器指导的循环缓冲器模式操作的优点的常规处理器100所经历的误预测。
解码也可以包括解码指令字节来生成额外的微架构控制比特,其随着它们流下处理器100流水线而变为指令的一部分。例如,额外的控制比特可以被执行引擎112用来减少执行引擎112所需要的解码量,从而改善性能和/或功耗。无论ISA和/或微架构,处理器100可以从如在此描述的基于循环预测的循环缓冲器操作中受益。
指令缓冲器114或循环缓冲器114从解码单元118接收经解码的指令,并且要求将它们提供给执行引擎112。优选地,指令缓冲器114包括构成一循环(circular)队列的多个条目(entry),解码单元118将经解码的指令推入(push)到这些条目中,并且执行引擎112将它们从这些条目中弹出(pop)。推送指针被维持用以指向指令被推入到其中的下一条目,并且弹出指针被维持用以指向从其弹出指令的下一条目。指针值被用来确定哪些条目是有效的,并且也用来确定指令缓冲器114何时是满的以及何时是空的。在一个实施例中,循环缓冲器114的尺寸或长度是24个条目,即,循环缓冲器114能够保存24个经解码的指令。在这样的实施例中,包括24个指令或者更短的循环将可以完全适合于循环缓冲器114。循环缓冲器114的尺寸大于或小于24的其它实施例是预期的。
指令缓冲器114还包括控制逻辑,其与循环预测器102合作地控制如在此描述的操作,诸如指针的更新。如在此描述的,当处理器100确定它遇到完全适合于循环缓冲器114的循环(“完全适合”意思是循环的尺寸不大于循环缓冲器114的尺寸)并且进入循环缓冲器模式时,暂停从指令高速缓存104的取指,这有利地避免循环缓冲器114中的循环指令被覆写。当进入循环缓冲器模式时控制逻辑重新调整指针。具体地,弹出指针被更新为指向循环分支指令的目标。当循环预测器102有效地预测在循环迭代的末尾该循环分支指令将被采用时,控制逻辑将弹出指针更新为循环分支指令的目标。
执行引擎112执行从指令缓冲器114接收的格式化的指令。在一个实施例中,指令缓冲器114每个时钟周期能够向执行引擎112提供多达三个指令。执行引擎112包括根据处理器100的ISA来执行指令以产生结果的执行单元。在一个实施例中,执行引擎112包括一超标量乱序运行微架构。然而,具有其它微架构的实施例也是可以预期的。在一个实施例中,执行引擎112还包括指令翻译器(未显示),指令翻译器将每个格式化的ISA指令翻译成被执行单元运行的一个或多个微指令。在一个实施例中,处理器100包括微指令缓冲器,指令翻译器将等待被发送到执行单元的微指令写到该微指令缓冲器中。微指令缓冲器充当不同于指令缓冲器114的循环缓冲器或者除了指令缓冲器114之外的循环缓冲器的实施例是可以预期的。执行引擎112还可以包括指令结果被写入的架构状态,诸如架构寄存器集。执行引擎112还可以包括数据操作数被写到/从其读取的存储器子系统,诸如高速缓存层级和存储器次序缓冲器。
现在参照图2,显示更详细地示出图1的循环预测器102的框图。循环预测器102包括经训练的循环计数表201、循环取指计数器234、循环弹出计数器254、经训练的循环计数寄存器242和训练计数器264。图2中还显示了经训练的循环分支标志278。经训练的循环分支标志278表示多个经训练的循环分支标志278。经训练的循环分支标志278优选地存储在与各个分支指令对应的BTAC 106的条目中,并且当根据包括各个分支指令的指令高速缓存104区块的取指地址对BTAC 106进行存取时,经训练的循环分支标志278被提供给循环预测器102的控制逻辑262。如在此描述的,控制逻辑262按照需要来清除和/或增加循环取指计数器234、循环弹出计数器254和训练计数器264。优选地,控制逻辑262包括组合和时序逻辑,其可以包括状态机器。
经训练的循环计数表201包括多个条目,每个条目包括有效比特202、标签204和经训练的循环计数206。按照需要使用训练计数器264的值来更新给定条目的该经训练的循环计数206,如下面参照图3描述的。经训练的循环计数表201通过条件分支指令地址212的索引214部分来索引。通常,当经训练的循环计数表201被读取时,分支指令地址212是用来存取指令高速缓存104和BTAC 106的指令指针,例如,如在下面描述的图5的框503。通常,当经训练的循环计数表201被写入时,分支指令地址212是使用中的分支指令的地址,例如,如在下面描述的图3的框312或图4的框404处。在一些实施例中,经训练的循环计数表201可以是直接映射的或集合关联的。通过第一比较器208将条件分支指令地址212的标签216部分与所选择的条目的标签204比较来生成被提供给控制逻辑262的命中(hit)信号218。通过第二比较器232将所选择的经训练的循环计数206与循环取指计数器234比较来生成提供给2输入复用器272的一个输入端的第一采用/不采用(T/NT)指示符236。所选择的经训练的循环计数206还被提供给一经训练的循环计数寄存器242,该经训练的循环计数寄存器242存储当处理器100处于循环缓冲器模式中时使用的经训练的循环计数206的经流水线向下输送的版本(piped-down version)。在一个实施例中,经训练的循环计数寄存器242包括用于存储多个经训练的循环计数206的多个寄存器242。通过第三比较器252将存储在经训练的循环计数寄存器242中的经训练的循环计数206的经流水线向下输送的版本与循环弹出计数器254比较来生成提供给2输入复用器272的另一输入端的第二T/NT指示符256。由控制逻辑262生成的模式指示符274控制复用器272选择输入之一以输出提供给控制逻辑262的第三T/NT指示符276。当处理器100在循环缓冲器模式(下面会更详细地描述)中时,控制逻辑262生成模式指示符274的值来使得复用器272选择第三比较器252的输出,否则生成模式指示符274的值来使得复用器272选择第二比较器232的输出。下面参照其余图来更详细地描述循环预测器102的操作。
现在参照图3,显示了示出图1的处理器100的操作的流程图。流程在框302处开始。
在框302处,执行引擎112运行后向分支的条件分支指令。即,执行引擎112确定分支指令的正确的方向和正确的目标地址。优选地,如果分支指令被误预测,即,正确的方向和目标地址不匹配于预测的方向和目标地址,则执行引擎112纠正误预测。更具体地,执行引擎112使得处理器100的前端被刷新(flush),并且使得取指单元108在正确的目标地址处开始取指。另外,执行引擎112将分支指令的执行通知循环预测器102。流程进行到判定框304。
在判定框304,循环预测器102从执行引擎112确定分支指令的正确方向是否被采用。如果被采用,则流程进行到框306;否则,流程进行到判定框308。
在框306处,循环预测器102增加训练计数器264。流程在框306处结束。
在判定框308处,循环预测器102确定分支指令是否满足循环分支的标准。优选地,如果该分支指令后向分支,且经训练的循环计数表201没有包括用于该分支指令的条目,并且训练计数器264的值足够大,则该分支指令满足循环分支标准。例如,在一个实施例中,训练计数器264的值必须至少为24。在一个实施例中,为了满足循环分支标准,循环预测器102还必须确定对于该循环的至少N个连续的例程都具备相同的训练计数器264值。在一个实施例中,例如N是3。在另一个实施例中,例如N是7。如果分支指令满足标准,流程进行到框312;否则,流程结束。
在框312处,循环预测器102在经训练的循环计数表201中分配条目。优选地,循环预测器102基于分支指令地址212的索引部分214来分配条目。优选地,分配条目包括设置条目的有效比特202。循环预测器102还使用分支指令地址212的标签部分来填充所分配的条目的标签字段204,并且使用训练计数器264值来填充所分配的条目的经训练的循环计数字段206。流程进行到框314。
在框314处,循环预测器102使得在与分支指令相关的BTAC 106的条目中的经训练的循环分支标志278被设置。流程在框314处结束。
现在参照图4,显示了进一步示出图1的处理器100的操作的流程图。流程在框402处开始。
在框402处,执行引擎112执行了误预测的循环分支指令并通知循环预测器102。优选地,执行引擎112知道条件分支指令是循环分支指令,因为由BTAC 106提供的经训练的循环分支标志278被经流水线向下输送到执行引擎112。流程进行到框404。
在框404处,循环预测器102使与误预测的循环分支指令对应的经训练的循环计数表201中的条目无效。另外,循环预测器102使得在与循环分支指令对应的BTAC 106的条目中的经训练的循环分支标志278被清除。循环分支指令可以在其循环的随后的执行例程中被再次训练。流程在框404处结束。
现在参照由图5A和图5B组成的图5,显示了进一步示出图1的处理器100的操作的流程图。流程在框502处开始。
在框502处,取指单元108从指令高速缓存104取指分支指令。同时,以用于存取指令高速缓存104的取指地址来存取BTAC 106。响应地,BTAC106向取指单元108提供分支指令的预测,并且向循环预测器102提供所取指的分支指令的经训练的循环分支标志278。流程进行到框503。
在框503处,假设分支指令是循环分支指令并且存在一经训练的循环计数206可用,循环预测器102从分支指令的经训练的循环计数表201获得其经训练的循环计数206。流程进行到判定框504。
在判定框504处,循环预测器102通过判断经训练的循环分支标志278是否被设置来确定所取得的分支指令是已经被训练的循环分支。如果如此,则流程进行到判定框508;否则,流程进行到框506。
在框506中,取指单元108使用由BTAC 106和/或分支历史表116所提供的预测来预测分支指令。流程在框506处结束。
在判定框508处,循环预测器102确定循环取指计数器234是否已经被分配用于该循环分支指令。如果如此,则流程进行到框514;否则,流程进行到框512。
在框512处,针对该循环分支指令,循环预测器102分配一循环取指计数器234。分配循环取指计数器包括将它重置为0。在一个实施例中,只存在一个循环取指计数器234,所以分配循环取指计数器234仅包括重置它。然而,在另一实施例中,循环预测器102包括保存多个循环取指计数器的一循环取指计数器表,在这种情况下分配循环取指计数器234包括选择表条目之一。优选地,该循环取指计数器表中的不同循环取指计数器通过它们各自的循环分支地址来区分。这可以适用于嵌套循环(nested loops),该嵌套循环的多个循环分支指令均可以通过循环预测器102精确地预测。流程进行到框514。
在框514处,循环预测器102增加所分配的循环取指计数器234。流程进行到框518。
在框518,循环预测器102确定循环的长度或尺寸。优选地,指令缓冲器114的控制逻辑为指令缓冲器114中的每个指令维持一指令指针值或一程序计数器值。如下所述,循环预测器102使用这些指令指针值来找到循环分支指令的目标指令并确定循环的尺寸。优选地,循环预测器102将BTAC 106提供的循环分支指令的目标地址与所维持的指令指针值进行比较来找到匹配。在指令缓冲器114中具有匹配于该目标地址的指令指针值的、按程序次序最新的指令便是循环分支指令的目标指令。然后,循环预测器102减去(考虑指令缓冲器114的循环性质)循环分支指令的索引和匹配的目标指令的索引来计算该循环的长度。流程进行到判定框522。
在判定框522处,循环预测器102基于在框518处确定的长度和指令缓冲器114的尺寸来确定循环是否适合于指令缓冲器114。如果循环的尺寸不大于指令缓冲器114的尺寸,则流程进行到框532;否则,流程进行到判定框524。
在判定框524处,循环预测器102确定在框514处增加的循环取指计数器234的值是否小于在框503处获得的经训练的循环计数206的值。如果循环取指计数器234的值小于经训练的循环计数206的值,则流程进行到框526;否则,流程进行到框528。
在框526处,循环预测器102预测循环分支指令被采用,并且取指单元108重定向在由BTAC 106(或其它分支预测器)提供的目标地址处取指。流程在框526处结束。
在框528处,循环预测器102预测循环分支指令不被采用,并且取指单元108继续在下一连续的取指地址处取指。流程在框528处结束。
在框532处,循环预测器102使得取指单元108停止从指令高速缓存104取指,并且使得处理器100进入循环缓冲器模式,这包括提供关于模式指示符274的值来指示如此。优选地,进入循环缓冲器模式还包括关闭处理器100流水线的前端的一些功能单元,诸如指令高速缓存104、取指单元108、解码单元118和/或分支历史表116。在一个实施例中,关闭功能单元包括关闭功能单元的时钟。在一个实施例中,关闭功能单元还包括关断到功能单元的电源,尤其是如果经训练的循环计数206相当大时。在这样的实施例中,在达到经训练的循环计数206之前将电源恢复到这些功能单元。流程进行到框534。
在框534,在框503获得的经训练的循环计数206与循环分支指令一起被经流水线向下输送,以便它可以在循环缓冲器模式期间与循环弹出计数器比较,如下面描述。优选地,经流水线向下输送的经训练的循环计数206被存储在图2的经训练的循环计数寄存器242中。流程进行到框536。
在框536,循环预测器102将循环分支指令推入到指令缓冲器114中。这里值得注意的是,循环本体指令已经在指令缓冲器114中。流程进行到框538。
在框538处,循环预测器102分配循环弹出计数器254用于该循环分支指令。分配循环弹出计数器包括将它重置为0。在一个实施例中,只存在一个循环弹出计数器254,所以分配循环弹出计数器254仅包括重置它。然而,在另一实施例中,循环预测器102包括保存多个循环弹出计数器的一循环弹出计数器表,在这种情况下分配循环弹出计数器254包括选择表条目之一。优选地,循环弹出计数器表中的不同循环弹出计数器通过它们各自的循环分支地址来区分。这可以适用于可适合(fit)于循环缓冲器114之内的嵌套循环(nestedloops),该嵌套循环的多个循环分支指令均可以通过循环预测器102精确地预测,如下面相对于图7描述的。流程进行到框542。
在框542,工作在循环缓冲器模式中的处理器100从指令缓冲器114中弹出从循环分支指令的目标处开始的循环本体的指令,并且将它们发送到执行引擎112用于执行。优选地,在框518处确定的循环的长度被提供给循环缓冲器114的控制逻辑,使得它知道多少指令要弹出并提供给执行引擎112(包括在下面的框544的循环分支指令),也知道何时增加循环弹出计数器254(在下面的框546处)。流程进行到框544。
在框544,处理器100从指令缓冲器114弹出循环分支指令,并且将它发送到执行引擎112用于执行,并且通知循环预测器102。流程进行到框546。
在框546处,循环预测器102增加在框538处分配的循环弹出计数器254,因为循环分支指令已经从指令缓冲器114弹出。流程进行到判定框548。
在判定框548处,循环预测器102判断循环弹出计数器254的值是否小于在框534处经流水线向下输送的经训练的循环计数206的值。如果是,循环预测器102有效地预测循环分支指令被采用,并且流程返回到框542以开始循环的另一次迭代;否则,流程进行到框552。
在框552,循环预测器102有效地预测循环分支指令不被采用,并且使得取指单元108苏醒并且在循环分支指令之后的顺序下一指令处恢复从指令高速缓存104取指。循环预测器102还使得处理器100退出循环缓冲器模式,这包括提供关于模式指示符274的值来指示如此。流程在框552处结束。
现在参照图6,显示了进一步示出图1的处理器100的操作的流程图。流程在框602处开始。与从图5的框546到判定框548的流程同时地,流程从框546进行到框602。
在框602处,循环预测器102计算一个值X。X的值是经训练的循环计数206减去((A*C)/B)表示的值,其中A、B和C如下。A的值是处理器100从指令高速缓存取指一指令字节区块、解码它们并将经解码的指令提供给指令缓冲器所需要的处理器时钟周期数。优选地,此值是基于处理器100的设计而预定的。B的值是在框518处确定的循环中的指令数量。C的值是每个时钟周期处理器100能够从指令缓冲器114提供给执行引擎112的指令数量。流程进行到判定框604。
在判定框604处,循环预测器102确定循环弹出计数器254是否等于在框602处计算的值X。如果如此,则流程进行到框606;否则,流程结束。
在框606,循环预测器102使得处理器100留在循环缓冲器模式中,但是使得取指单元108苏醒,并且开始在循环分支指令之后的顺序下一指令处从指令高速缓存104获取指令。有利地,比起等到循环执行例程的最后一次迭代才恢复取指的实施例,这可以基本上避免将气泡引入到处理器100的流水线中,并且从而改善执行引擎112的利用率。流程在框606处结束。
现在参照图7,显示了作为示例示出工作在循环缓冲器模式中的图1的指令缓冲器114向图1的执行引擎112提供嵌套循环的指令的框图。在图7的示例中,指令缓冲器114包括24个条目,表示为条目0至23。条目0位于指令缓冲器114的顶部,并且条目23位于底部。指令被推入到指令缓冲器114的顶部,并且从指令缓冲器114的底部弹出。图7描绘了嵌套在外部循环之内的内部循环。当处理器100进入循环缓冲器模式时,内部循环分支指令位于条目4,内部循环分支目标指令位于条目19,外部循环分支指令位于条目1,并且外部循环分支目标指令位于条目23。因而,在该示例中,内部循环和外部循环二者的全部指令都可适合(fit)于循环缓冲器114之内。
在图7的示例中,假定内部循环和外部循环分支指令已经按照图3被训练,而没有按照图4被使无效。根据上述处理器100的操作,在框502处从指令高速缓存104第一次取指内部循环分支指令(在已经被训练之后),或不久之后,直到但不包括内部循环分支指令的外部循环的循环本体指令已经被解码并分别被推入到循环缓冲器114的条目23至条目5中,其包括了内部循环的本体指令(到条目19至条目5中),并且按照框503从经训练的循环计数表201获得内部经训练的循环计数206。随后,处理器100按照框532进入循环缓冲器模式,按照框534在经训练的循环计数寄存器242中捕捉内部经训练的循环计数206,按照框536将内部循环分支指令推入到条目4中,按照框538分配内部循环弹出计数器254,并且处理器100开始将内部循环的指令从循环缓冲器114发送给执行引擎112用于循环缓冲器模式下的内部循环的第一执行例程。
最后,循环预测器102按照框548预测内部循环的第一执行例程的退出,并且处理器100按照框552退出循环缓冲器模式,并且开始取得被解码并且被推入到循环缓冲器114中的外部循环的其余指令。当在框502处从指令高速缓存104取指外循环分支指令时,按照框503从经训练的循环计数表201获得外部经训练的循环计数206。随后,处理器100按照框532进入循环缓冲器模式,按照框534在另一分配的经训练的循环计数寄存器242中捕捉外部经训练的循环计数206,按照框536将外部循环分支指令推到条目1中,按照框538分配外部循环弹出计数器254,并且处理器100开始将外部循环的指令从循环缓冲器114发送给执行引擎112用于外部循环的第二次迭代,其在循环缓冲器模式中执行,并且其将包括循环缓冲器模式下的内部循环的另一执行例程。优选地,本发明包括用于检测嵌套循环的机制。例如,可以包括嵌套级计数器,该计数器被初始化为0,并且每次在框532进入另一级包含循环缓冲器(loop buffer-contained)的嵌套时所述计数器递增计数,并且每次在框552退出一包含循环缓冲器的嵌套级时所述计数器递减计数。处理器100仅当嵌套级计数器具有值0时才在框552处退出循环缓冲器模式。另外,在框552处,循环预测器102将执行例程是的循环的循环弹出计数器254重置为0。
最后,循环预测器102按照框548预测外部循环的执行例程的退出,并且处理器100按照框552退出循环缓冲器模式。然后,如可看到的,在循环缓冲器模式中更多循环可以被嵌套并被循环预测器102预测,循环的数量多达可分配的循环弹出计数器254、经训练的循环计数器206和经训练的循环计数器寄存器242的数量,只要所嵌套的循环全部适合于循环缓冲器114。
虽然已经在此描述了本发明的各种实施例,但是应该理解它们作为示例而不是限制被呈现。对于相关计算机领域的技术人员来说将显而易见的是,在不脱离本发明的范围的情况下,可以在此进行形式和细节上的各种改变。例如,软件可以使能例如在此描述的装置和方法的功能、构造、建模、仿真、描述和/或测试。这可以通过通用编程语言(例如,C、C++)、包括Verilog HDL、VHDL等等的硬件描述语言(HDL)或者其它可用程序的使用来实现。这样的软件可以被布置在任何已知的计算机可用介质中,诸如磁带、半导体、磁盘、或光盘(例如,CD-ROM、DVD-ROM等)、网络、有线、无线或其它通信介质。在此描述的装置和方法的实施例可以包括在半导体知识产权核心中,诸如处理器核心(例如,用HDL实现或指定的),并在集成电路的生产中被转换为硬件。另外,在此描述的装置和方法可以被实现为硬件和软件的组合。因此,本发明不应该被在此描述的任何示范性实施例限制,但是应该仅根据以下权利要求及其等效物来限定。具体地,本发明可以在可以用在通用计算机中的处理器设备之内实现。最终,本领域技术人员应该理解,在不脱离由所附权利要求所限定的本发明的范围的情况下,他们可以容易地使用所公开的构思和特定实施例作为设计或修改用于实践本发明的相同目的的其它结构的基础。
Claims (12)
1.一种处理器,包括:
指令高速缓存;
执行引擎;
指令缓冲器来缓存经一解码单元解码的循环指令;以及
循环预测器,其判断循环的尺寸是否不大于该指令缓冲器的尺寸,其中该循环之循环指令包括以分支指令的目标开始并且以该分支指令结束的指令序列;
其中,当该循环的尺寸不大于该指令缓冲器的尺寸时,该处理器:
停止从该指令高速缓存取指;
将该循环指令从该指令缓冲器发送到该执行引擎而不从该指令高速缓存取指;
维持一循环弹出计数,其指示将该分支指令从该指令缓冲器发送到该执行引擎而不从该指令高速缓存取指的次数;以及
当该循环弹出计数达到阈值,该处理器在该分支指令之后的顺序下一指令处恢复从该指令高速缓存取指。
2.如权利要求1所述的处理器,其中该循环预测器还训练该分支指令来确定该循环的经训练的循环计数,其中在维持该循环弹出计数时,该处理器:
当该循环弹出计数小于该经训练的循环计数时,预测该分支指令为被采用,否则,则预测该分支指令为不被采用。
3.如权利要求2所述的处理器,进一步包括:
其中,当该循环的尺寸大于该指令缓冲器的尺寸时,处理器:
从该指令高速缓存取指该些循环指令,解码该些循环指令并将其发送到该执行引擎;
维持一循环取指计数,其指示从该指令高速缓存取指该分支指令的次数;以及
当该循环取指计数小于该经训练的循环计数时,预测该分支指令为被采用,否则,则预测该分支指令为不被采用。
4.如权利要求1所述的处理器,其中该阈值是该循环的经训练的循环计数减去((A*C)/B);
其中该经训练的循环计数是该循环预测器训练该分支指令来确定的;
其中A是该处理器从该指令高速缓存获取指令、解码指令并将指令提供给该指令缓冲器所需要的处理器时钟周期的预定数量;
其中B是该些循环指令的数量;以及
其中C是每个时钟周期该处理器能够从该指令缓冲器发送到该执行引擎的指令的数量。
5.如权利要求4所述的处理器,其中该经训练的循环计数指示在该循环的一个执行例程期间该分支指令被采用的次数。
6.如权利要求1所述的处理器,其中该指令缓冲器保存已经从该指令高速缓存取指然后被解码但是尚未发送到该执行引擎的指令。
7.如权利要求1所述的处理器,其中该处理器在该循环完成至少一次执行例程之后,判断该循环的尺寸是否不大于该指令缓冲器的尺寸。
8.一种通过具有指令高速缓存、指令缓冲器、循环预测器和执行引擎的处理器执行的方法,该方法包括:
判断循环的尺寸是否不大于该指令缓冲器的尺寸,其中该循环之循环指令包括以分支指令的目标开始并且以该分支指令结束的指令序列;
以及
当该循环的尺寸不大于该指令缓冲器的尺寸时:
停止从该指令高速缓存取指;
将该循环指令从该指令缓冲器发送到执行引擎而不从该指令高速缓存取指;
维持一循环弹出计数,其指示该分支指令从该指令缓冲器被发送到该执行引擎而不从该指令高速缓存取指的次数;以及
当该循环弹出计数达到阈值,该处理器在该分支指令之后的顺序下一指令处恢复从该指令高速缓存取指。
9.如权利要求8所述的方法,进一步包括:
训练该分支指令来确定该循环的经训练的循环计数;以及
当该循环弹出计数小于该经训练的循环计数时,预测该分支指令为被采用,否则,则预测该分支指令为不被采用。
10.如权利要求9所述的方法,进一步包括:
当该循环的尺寸不大于该指令缓冲器的尺寸时:
从该指令高速缓存取指该些循环指令,解码该些循环指令并将其发送到该执行引擎;
维持一循环取指计数,其指示从该指令高速缓存取指该分支指令的次数;以及
当该循环取指计数小于该经训练的循环计数时,预测该分支指令为被采用,否则,则预测该分支指令为不被采用。
11.如权利要求8所述的方法,其中该阈值是该循环的经训练的循环计数减去((A*C)/B);
其中该经训练的循环计数是该循环预测器训练该分支指令来确定的;
其中A是该处理器从该指令高速缓存获取指令、解码指令并将指令提供给该指令缓冲器所需要的处理器时钟周期的预定数量;
其中B是该些循环指令的数量;以及
其中C是每个时钟周期该处理器能够从该指令缓冲器发送到该执行引擎的指令的数量。
12.如权利要求11所述的方法,其中该经训练的循环计数指示在该循环的一个执行例程期间该分支指令被采用的次数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410652252.2A CN105511838B (zh) | 2014-09-29 | 2014-09-29 | 处理器及其执行方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410512577.0A CN104298488B (zh) | 2014-09-29 | 2014-09-29 | 循环预测器指导的循环缓冲器 |
CN201410652252.2A CN105511838B (zh) | 2014-09-29 | 2014-09-29 | 处理器及其执行方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410512577.0A Division CN104298488B (zh) | 2014-09-29 | 2014-09-29 | 循环预测器指导的循环缓冲器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105511838A CN105511838A (zh) | 2016-04-20 |
CN105511838B true CN105511838B (zh) | 2018-06-29 |
Family
ID=51951701
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410652252.2A Active CN105511838B (zh) | 2014-09-29 | 2014-09-29 | 处理器及其执行方法 |
CN201410512577.0A Active CN104298488B (zh) | 2014-09-29 | 2014-09-29 | 循环预测器指导的循环缓冲器 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410512577.0A Active CN104298488B (zh) | 2014-09-29 | 2014-09-29 | 循环预测器指导的循环缓冲器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9891923B2 (zh) |
EP (1) | EP3001308B1 (zh) |
CN (2) | CN105511838B (zh) |
TW (1) | TWI506552B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012051281A2 (en) * | 2010-10-12 | 2012-04-19 | Soft Machines, Inc. | An instruction sequence buffer to store branches having reliably predictable instruction sequences |
TWI541721B (zh) | 2010-10-12 | 2016-07-11 | 軟體機器公司 | 使用指令序列緩衝器來增強分支預測效能的方法、系統及微處理器 |
US9875106B2 (en) * | 2014-11-12 | 2018-01-23 | Mill Computing, Inc. | Computer processor employing instruction block exit prediction |
US20170039071A1 (en) * | 2015-08-05 | 2017-02-09 | International Business Machines Corporation | Method for branch prediction |
GB2542831B (en) * | 2015-09-30 | 2018-05-30 | Imagination Tech Ltd | Fetch unit for predicting target for subroutine return instructions |
US9830152B2 (en) * | 2015-12-22 | 2017-11-28 | Qualcomm Incorporated | Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor |
GB2548603B (en) * | 2016-03-23 | 2018-09-26 | Advanced Risc Mach Ltd | Program loop control |
US10223118B2 (en) * | 2016-03-24 | 2019-03-05 | Qualcomm Incorporated | Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor |
JP2018005488A (ja) * | 2016-06-30 | 2018-01-11 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US10067875B2 (en) * | 2016-11-14 | 2018-09-04 | Via Alliance Semiconductor Co., Ltd. | Processor with instruction cache that performs zero clock retires |
US10417560B2 (en) * | 2016-12-01 | 2019-09-17 | Via Alliance Semiconductor Co., Ltd. | Neural network unit that performs efficient 3-dimensional convolutions |
CN108255518B (zh) * | 2016-12-29 | 2020-08-11 | 展讯通信(上海)有限公司 | 处理器及循环程序分支预测方法 |
US10592244B2 (en) * | 2017-02-02 | 2020-03-17 | Intel Corporation | Branch type logging in last branch registers |
US11531552B2 (en) * | 2017-02-06 | 2022-12-20 | Microsoft Technology Licensing, Llc | Executing multiple programs simultaneously on a processor core |
US10915322B2 (en) * | 2018-09-18 | 2021-02-09 | Advanced Micro Devices, Inc. | Using loop exit prediction to accelerate or suppress loop mode of a processor |
JP7205174B2 (ja) * | 2018-11-09 | 2023-01-17 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
US11216279B2 (en) * | 2018-11-26 | 2022-01-04 | Advanced Micro Devices, Inc. | Loop exit predictor |
KR102601152B1 (ko) * | 2019-05-10 | 2023-11-13 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 그 동작 방법 |
US10732945B1 (en) | 2019-05-24 | 2020-08-04 | Texas Instruments Incorporated | Nested loop control |
CN112230992B (zh) * | 2019-07-15 | 2023-05-23 | 杭州中天微系统有限公司 | 一种包含分支预测循环的指令处理装置、处理器及其处理方法 |
CN110688160B (zh) * | 2019-09-04 | 2021-11-19 | 苏州浪潮智能科技有限公司 | 一种指令流水线处理方法、系统、设备及计算机存储介质 |
US11269642B2 (en) * | 2019-09-20 | 2022-03-08 | Microsoft Technology Licensing, Llc | Dynamic hammock branch training for branch hammock detection in an instruction stream executing in a processor |
US11132200B1 (en) * | 2020-09-28 | 2021-09-28 | Arm Limited | Loop end prediction using loop counter updated by inflight loop end instructions |
CN112241390B (zh) * | 2020-10-22 | 2022-08-30 | 上海兆芯集成电路有限公司 | 主机互连装置及其方法 |
US20220283811A1 (en) * | 2021-03-03 | 2022-09-08 | Microsoft Technology Licensing, Llc | Loop buffering employing loop characteristic prediction in a processor for optimizing loop buffer performance |
CN113626084B (zh) * | 2021-09-03 | 2023-05-19 | 苏州睿芯集成电路科技有限公司 | 一种tage分支预测算法针对超大循环次数指令流优化的方法 |
CN114138341B (zh) * | 2021-12-01 | 2023-06-02 | 海光信息技术股份有限公司 | 微指令缓存资源的调度方法、装置、程序产品以及芯片 |
CN114528025B (zh) * | 2022-02-25 | 2022-11-15 | 深圳市航顺芯片技术研发有限公司 | 指令处理方法、装置、微控制器及可读存储介质 |
CN115113934B (zh) * | 2022-08-31 | 2022-11-11 | 腾讯科技(深圳)有限公司 | 指令处理方法、装置、程序产品、计算机设备和介质 |
CN116679985B (zh) * | 2023-07-28 | 2023-11-10 | 北京开源芯片研究院 | 循环分支指令的处理方法、系统、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6959379B1 (en) * | 1999-05-03 | 2005-10-25 | Stmicroelectronics S.A. | Multiple execution of instruction loops within a processor without accessing program memory |
CN101101544A (zh) * | 2006-07-07 | 2008-01-09 | 国际商业机器公司 | 用于改进处理器中分支预测的方法和装置 |
CN103593167A (zh) * | 2012-06-15 | 2014-02-19 | 苹果公司 | 循环缓冲器学习 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2693572B1 (fr) | 1992-07-13 | 1994-09-30 | Texas Instruments France | Système de traitement de données comportant un dispositif amélioré de traitement des boucles de programme. |
US5909573A (en) * | 1996-03-28 | 1999-06-01 | Intel Corporation | Method of branch prediction using loop counters |
US6003128A (en) * | 1997-05-01 | 1999-12-14 | Advanced Micro Devices, Inc. | Number of pipeline stages and loop length related counter differential based end-loop prediction |
JP3570855B2 (ja) * | 1997-05-29 | 2004-09-29 | 株式会社日立製作所 | 分岐予測装置 |
US6041404A (en) * | 1998-03-31 | 2000-03-21 | Intel Corporation | Dual function system and method for shuffling packed data elements |
EP0992894A1 (en) | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Apparatus and method for loop execution |
US6438682B1 (en) * | 1998-10-12 | 2002-08-20 | Intel Corporation | Method and apparatus for predicting loop exit branches |
US20040123075A1 (en) * | 2002-12-19 | 2004-06-24 | Yoav Almog | Extended loop prediction techniques |
US7010676B2 (en) * | 2003-05-12 | 2006-03-07 | International Business Machines Corporation | Last iteration loop branch prediction upon counter threshold and resolution upon counter one |
US7023445B1 (en) * | 2004-04-12 | 2006-04-04 | Advanced Micro Devices, Inc. | CPU and graphics unit with shared cache |
US7454596B2 (en) * | 2006-06-29 | 2008-11-18 | Intel Corporation | Method and apparatus for partitioned pipelined fetching of multiple execution threads |
US8683135B2 (en) * | 2010-10-31 | 2014-03-25 | Apple Inc. | Prefetch instruction that ignores a cache hit |
WO2013089749A1 (en) * | 2011-12-15 | 2013-06-20 | Intel Corporation | Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table |
US9317291B2 (en) * | 2013-02-14 | 2016-04-19 | International Business Machines Corporation | Local instruction loop buffer utilizing execution unit register file |
-
2014
- 2014-09-29 CN CN201410652252.2A patent/CN105511838B/zh active Active
- 2014-09-29 CN CN201410512577.0A patent/CN104298488B/zh active Active
- 2014-11-06 US US14/534,841 patent/US9891923B2/en active Active
- 2014-11-07 TW TW103138668A patent/TWI506552B/zh active
- 2014-11-24 EP EP14194420.7A patent/EP3001308B1/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6959379B1 (en) * | 1999-05-03 | 2005-10-25 | Stmicroelectronics S.A. | Multiple execution of instruction loops within a processor without accessing program memory |
CN101101544A (zh) * | 2006-07-07 | 2008-01-09 | 国际商业机器公司 | 用于改进处理器中分支预测的方法和装置 |
CN103593167A (zh) * | 2012-06-15 | 2014-02-19 | 苹果公司 | 循环缓冲器学习 |
Also Published As
Publication number | Publication date |
---|---|
CN104298488B (zh) | 2018-02-23 |
US20160092230A1 (en) | 2016-03-31 |
EP3001308B1 (en) | 2017-12-20 |
EP3001308A2 (en) | 2016-03-30 |
EP3001308A3 (en) | 2017-01-04 |
US9891923B2 (en) | 2018-02-13 |
CN104298488A (zh) | 2015-01-21 |
CN105511838A (zh) | 2016-04-20 |
TW201612744A (en) | 2016-04-01 |
TWI506552B (zh) | 2015-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105511838B (zh) | 处理器及其执行方法 | |
EP2674858B1 (en) | Loop buffer learning | |
CN102160033B (zh) | 具有稀疏和密集预测缓存的复合分支预测装置 | |
TWI503744B (zh) | 用於封裝迴圈中多個反覆之裝置、處理器及方法 | |
CN101002169A (zh) | 微处理器架构 | |
KR101723711B1 (ko) | 조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환 | |
TW201423584A (zh) | 提取寬度預測器 | |
CN109643237A (zh) | 分支目标缓冲器压缩 | |
US20200081717A1 (en) | Branch prediction circuitry | |
US6351802B1 (en) | Method and apparatus for constructing a pre-scheduled instruction cache | |
CN101681258A (zh) | 使用可变长度指令集处理器中分支目标地址缓存的分支预测 | |
US8751776B2 (en) | Method for predicting branch target address based on previous prediction | |
CN106951215A (zh) | 减少由加载队列满载引起的流水线推迟的处理器和方法 | |
CN116302106A (zh) | 用于促进分支预测单元的改善的带宽的设备、方法和系统 | |
KR101829369B1 (ko) | 오버라이딩하는 분기 예측기들에서의 추론적 이력 포워딩, 및 관련 회로들, 방법들 및 컴퓨터 판독가능한 매체들 | |
CN113448626B (zh) | 推测分支模式更新方法和微处理器 | |
US8671269B2 (en) | Branch predictor accuracy by forwarding table updates to pending branch predictions | |
US9720840B2 (en) | Way lookahead | |
CN113515310A (zh) | 微处理器和分支预测控制方法 | |
US10318303B2 (en) | Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors | |
US20240020237A1 (en) | Early cache querying | |
US11972264B2 (en) | Micro-operation supply rate variation | |
US20230195468A1 (en) | Predicting upcoming control flow | |
Wu | Architecture of out of order TURBO51 embedded microprocessor |
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 | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Patentee after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203 Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |