CN114064127A - 具有指令预取功能的微处理器 - Google Patents
具有指令预取功能的微处理器 Download PDFInfo
- Publication number
- CN114064127A CN114064127A CN202111453291.6A CN202111453291A CN114064127A CN 114064127 A CN114064127 A CN 114064127A CN 202111453291 A CN202111453291 A CN 202111453291A CN 114064127 A CN114064127 A CN 114064127A
- Authority
- CN
- China
- Prior art keywords
- instruction
- prefetch
- fetch
- address
- cache
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000013507 mapping Methods 0.000 claims description 38
- 230000004044 response Effects 0.000 claims description 27
- 239000000872 buffer Substances 0.000 claims description 16
- 238000000034 method Methods 0.000 claims description 8
- 238000010586 diagram Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 241001504505 Troglodytes troglodytes Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
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/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
高效进行指令预取的微处理器,具有一指令高速缓存、一分支预测器、耦接在该分支预测器以及该指令高速缓存之间的一取指目标队列、以及一预取读指针控制电路。指令高速缓存其中高速缓存内容供根据一取指地址进行取指。取指目标队列储存经该分支预测器预测在分支方向上的指令地址,待读出作为该取指地址、或选作一预取地址以操作该指令高速缓存进行指令预取。预取读指针控制电路产生一预取读指针给该取指目标队列,使该取指目标队列根据该预取读指针供应的该预取地址所实现的该指令预取不落后根据一取指读指针供应的该取指地址所实现的该取指。
Description
技术领域
本发明关于微处理器的指令提取(instruction fetching),特别有关于指令预取(instruction pre-fetching),意在加速指令提取。
背景技术
计算机架构中,一般会以数字电路实现分支预测器(branch predictor),预测分支指令(例如,‘if-then-else’条件分支指令、‘call’呼叫指令、‘return’返还指令、以及‘jump’无条件分支指令)的跳转。分支预测结果将主导一指令高速缓存(instructioncache,如本技术领域熟知的指令一级缓存L1i)上的指令提取(instruction fetching)。
然而,指令高速缓存上可能寻无指令(cache miss);相应发展出的是指令预取(instruction pre-fetching)技术。
发明内容
本发明提出一种高效的指令预取技术。
根据本发明一种实施方式实现的一微处理器具有一指令高速缓存、一分支预测器、耦接在该分支预测器以及该指令高速缓存之间的一取指目标队列、以及一预取读指针控制电路。指令高速缓存其中高速缓存内容供根据一取指地址进行取指。取指目标队列储存经该分支预测器预测在分支方向上的指令地址,待读出作为该取指地址,或选作一预取地址以操作该指令高速缓存进行指令预取。预取读指针控制电路产生一预取读指针给该取指目标队列,使该取指目标队列根据该预取读指针供应的该预取地址所实现的该指令预取不落后根据一取指读指针供应的该取指地址所实现的该取指。
本发明上述实施例的微处理器所实现的指令预取操作的预取地址是独立地从该取指目标队列读出,从而可以实现将指令预取操作与取指操作分离(separate),并且通过预取读指针控制电路产生预取读指针,控制指令预取操作不落后取指操作,在提高预取效率的同时保证了预取操作的有效性,避免了无意义的预取操作。
下文特举实施例,并配合附图,详细说明本发明内容。
附图说明
图1为方块图,图解一微处理器100的指令提取(instruction fetching)技术的硬件实施架构;
图2以方块图图解根据本发明一种实施方式实现的一微处理器200;
图3根据本发明一种实施方式图解指令预取的硬件架构,其中描绘为指令预取而作的开口;
图4举例说明取指失败重放事件;
图5为预取读指针控制电路308的一种实施电路;以及
图6图解一预取状态机,包括S状态、C、I、B、U级状态。
具体实施方式
以下叙述列举本发明的多种实施例。以下叙述介绍本发明的基本概念,且并非意图限制本发明内容。实际发明范围应依照权利要求界定。
图1为方块图,图解一微处理器100的指令提取(instruction fetching,后文均简称为“取指”)技术的硬件实施架构。
根据取指地址AddrL1i,指令102从指令高速缓存(instruction cache)104取出,由解码器106解码,最终由执行单元108执行。取指单位可为16字节(16B),即一取指地址AddrL1i对应16字节指令的取指。不同于传统技术将指令高速缓存104的取指地址AddrL1i也同步供分支预测用,微处理器100设计使得分支预测器(branch predictor)110所进行的分支预测得以高度领先该指令高速缓存104的取指。例如,进行分支预测的分支预测地址AddrBP可不捆绑为该取指地址AddrL1i。
一种实施方式是使分支预测器110解耦该指令高速缓存104。请参阅图1,微处理器100提供一取指目标队列(fetch target queue)FTQ,耦接在该分支预测器110以及该指令高速缓存104之间,其储存经该分支预测器110完成分支预测的指令地址(各自对应一取指单位,如16字节的指令),待弹出(由取指读指针RdPtr指示)作为该指令高速缓存104的取指地址AddrL1i。取指目标队列FTQ使得分支预测器110与指令高速缓存104不再耦接,即解耦(decoupled),分支预测器110得以早早就预测出分支跳转,无意义(不在预测方向上的)指令地址不会被推入取指目标队列FTQ,仅有意义地址(在预测方向上的)会被推入该取指目标队列FTQ形成取指轨迹,用作取指地址AddrL1i,指引该指令高速缓存104上的指令提取。取指目标队列FTQ使得该分支预测器110更高度领先该指令高速缓存104。
取指地址AddrL1i还有其他来源。以下进行讨论。
若预测出分支跳转,从该跳转目标地址逐周期自增的自增地址118将用做该取指地址AddrL1i送入该指令高速缓存104,直至该取指目标队列FTQ内容追上该指令高速缓存104需求。
另外,微处理器100的运算流水线(pipeline)可能发生刷新(flush)取指地址AddrL1i的需求。例如,分支预测器110可能不准确,载于该取指目标队列FTQ的取指轨迹可能是错的。如此错误可由微处理器100运算流水线较后端的解码器106或执行单元108识别出。又例如,解码器106或执行单元108在运行中发生例外(exception)时也会发生刷新。当刷新被发起时,该解码器106或执行单元108会回传刷新地址120或122,用做该取指地址AddrL1i送入该指令高速缓存104,也会送入该分支预测器110。之后周期,指令高速缓存104还从刷新地址120/122开始地址自增,逐周期提供指令高速缓存用自增地址118,用做指令高速缓存104操作用的该取指地址AddrL1i,直至该取指目标队列FTQ内容追上该指令高速缓存104需求。
指令高速缓存104有一指令映射关系缓存器(translation lookaside buffer)itlb、一高速缓存列表it_cores、以及一指令高速缓存区ic_cores。一内存(未绘示)上管理多页指令。各页指令(如,4K个、2M个、甚至1G个指令地址管理,不限定)可划分为多条高速缓存行,这些高速缓存行部分可供一行一行地加载至指令高速缓存104。指令高速缓存区ic_cores有能力加载多条高速缓存行,每一高速缓存行包括多个取址单位(如,包括四个取址单位,而各取址单位对应16字节的指令)。指令映射关系缓存器itlb记录之前访问过的多页的逻辑指令地址与该内存的物理指令地址的映射关系,可以理解为页表(page tables)的高速缓存。高速缓存列表it_cores则逐条列出这些页哪些高速缓存行已加载于该指令高速缓存区ic_cores。当该取指地址AddrL1i所对应的取指单位跨页时,需要访问指令映射关系缓存器itlb,确认已掌握其映射关系后,才能够访问该高速缓存列表it_cores,再确认是否为已加载高速缓存行。
每有针对新一页的取指要求而对应的逻辑与物理指令地址的映射关系并未记录于该指令映射关系缓存器itlb,则该指令映射关系缓存器itlb需对应更新,即从该内存加载对应的逻辑与物理指令地址的映射关系(即页表),这个操作称为表遍历(tablewalk)。
落入指令映射关系缓存器itlb记载其中一页的取指地址AddrL1i,经查询该高速缓存列表it_cores,若确定所对应高速缓存行(cache line,64B)已加载至该指令高速缓存区ic_cores(即发生icache hit),则访问该指令高速缓存区ic_cores取出指令102。反之,若该高速缓存列表it_cores显示取指地址AddrL1i所对应高速缓存行尚未加载至该指令高速缓存区ic_cores(即发生fetch icache miss),则发出一加载请求(load request)将对应的高速缓存行从内存加载至该指令高速缓存区ic_cores,并更新该高速缓存列表it_cores作加载记录。
如前所述,指令高速缓存区ic_cores可能寻无指令,即发生指令寻无(fetchicache miss)事件。图1架构根据预取地址PfAddr,以高速缓存行为单位进行指令预取(instruction prefetch)操作,预先将指令从内存加载至该指令高速缓存区ic_cores,使充分应付取指需求,减少寻无指令(fetch icache miss)事件。其中图1架构的预取地址PfAddr是从该取指地址AddrL1i自增产生。
但是,图1架构的指令预取技术有其缺点。若在预取地址PfAddr之前存在分支指令并且其发生了跳转(branch taken),则从该取指地址AddrL1i自增产生的预取地址PfAddr是无用的。此外,指令预取事件要与取指事件、甚至其他事件竞争,仲裁成功才能使用该高速缓存列表it_cores以及该指令高速缓存区ic_cores进行指令预取。指令预取无法常态进行。即使指令预取事件竞争成功,抢走硬件资源的指令预取也可能会拖累取指效能。此外,因为预取地址PfAddr并不直接送到指令映射关系缓存器itlb,所以当自增的预取地址PfAddr超出当前该指令映射关系缓存器itlb记载的映射关系范围(例如发生跨页的情形),将直接导致指令预取无法继续。
图2以方块图图解根据本发明一种实施方式实现的一微处理器200。该微处理器200可以并行进行取指(instruction fetching)以及指令预取(instructionprefetching),且出于此目的,在取指目标队列FTQ多开了三个预取候选地址开口,根据预取读指针PfRdPtr1~PfRdPtr3读出三笔预取候选地址202,以其中新一条高速缓存行(不同于前一次预取的前一高速缓存行)的地址作为预取地址PfAddr,操作指令高速缓存204进行指令预取。指令高速缓存204的指令映射关系缓存器itlb、以及高速缓存列表it_cores也都有相应预取地址PfAddr新增开口,供预取查询专用,以使取指、指令预取得以并行。其中,预取读指针PfRdPtr1~PfRdPtr3是连续的3个指针,指向取指目标队列FTQ中相邻的三个条目(entry)。例如,预取读指针PfRdPtr1指示读取指目标队列FTQ的第N个条目,则预取读指针PfRdPtr2指示读取指目标队列FTQ的第(N+1)个条目,预取读指针PfRdPtr3指示读取指目标队列FTQ的第(N+2)个条目,其中,N为正整数。
本实施例中,以取指目标队列FTQ所储存的指令地址替代以取指地址AddrL1i基础上自增产生的地址用作预取地址PfAddr,由于取指目标队列FTQ是储存分支预测结果,通常正是有效的取指方向,所以可以大幅提升有效预取率。
指令高速缓存204内组件为预取地址PfAddr所开设的专有开口,也使得预取地址PfAddr可以直接给到指令映射关系缓存器itlb以及高速缓存列表it_cores,而使指令预取无需参与硬件资源仲裁。取指目标队列FTQ中,取指地址AddrL1i起的地址,只要是属尚未高速缓存的高速缓存行,就可用作预取地址PfAddr。由于无需争夺硬件资源,指令预取可连续进行。
特别是,由于指令预取无需参与仲裁,跨页(cross page)的预取地址PfAddr也可规划进行。该指令高速缓存204包括多级流水线硬件,该多级流水线硬件被设置为可供取指、以及指令预取并行操作
指令映射关系缓存器itlb储存多页的逻辑指令地址与物理指令地址的映射关系,即它是作为页表(page table)的高速缓存,缓存内存中完整页表的一部分。一种实施方式中,每4K个指令地址管理的指令组成一页(page)。逻辑指令地址VA包括48位,其中较低的12位(位11至位0)为页内偏移(page offset)。指令映射关系缓存器itlb有16个条目、6个路(way)的映射信息,则逻辑指令地址VA的位15~12为指令映射关系缓存器itlb的条目索引(entry index),位47~16为指令映射关系缓存器itlb的条目标签(entry tag)。各逻辑指令地址VA映射该内存的一物理指令地址PA,物理指令地址PA的位47~12即指令映射关系缓存器itlb的条目数据(entry data)。本发明是在预取地址PfAddr跨页(逻辑指令地址VA的位47~12发生变化)时允许访问该指令映射关系缓存器itlb。只要新一页的地址映射关系也有储存在该指令映射关系缓存器itlb上,即可对此跨页的预取地址PfAddr进行指令预取。如此架构特别有助于频繁跨页的程序的取指。
其他实施方式中,取指目标队列FTQ可只为指令预取多开一个读口。还有其他实施方式是为指令预取多开其他数目的读口。以下讨论仍以多开三个读口的取指目标队列FTQ作说明。
图3根据本发明一种实施方式图解指令预取的硬件架构,其中略去了取指操作涉及的硬件部分,以单纯描绘指令预取操作涉及的硬件。
如图3所示,取指目标队列FTQ根据预取读指针PfRdPtr1、PfRdPtr2、PfRdPtr3提供至多三个预取候选地址PfAddr1~PfAddr3至一比较器302。比较器302将该至多三个预取候选地址PfAddr1~PfAddr3与前一次预取操作的一前预取地址CompAddr进行比对,以确认该至多三个预取候选地址PfAddr1~PfAddr3对应的高速缓存行是否相同于该前预取地址CompAddr所对应的高速缓存行,并产生确认结果,也就是控制信号Pf1/2/3_C,用以指示该至多三个预取候选地址PfAddr1~PfAddr3中何者可以用于预取,并分别给到逻辑单元312以及逻辑单元314。
逻辑单元314随着该取指目标队列FTQ被压入新的地址(响应于指示有无地址被压入的指示信号Ftqpush)以及弹出地址(响应于控制信号Pf1/2/3_C,控制信号Pf1/2/3_C也可用于指示有无地址被弹出),计数该取指目标队列FTQ中可作预取候选地址的指令地址的数量,产生一有效数PfValid_C。其中该计数可以用计数器实现,也可以以移位寄存器实现。该有效数PfValid_C指示该取指目标队列FTQ中是否有地址,以支持是否进行指令预取的判断。具体而言,该有效数PfValid_C代表该取指目标队列FTQ中有多少(和/或有哪些)地址支持指令预取。若该有效数PfValid_C为零,则代表该取指目标队列FTQ没有地址支持指令预取,因而要待有指令地址填入该取指目标队列FTQ才再次启动该指令预取。逻辑单元314将该有效数PfValid_C给到多路复用器316。多路复用器316默认以该有效数PfValid_C作为C级有效数Valid_C并输出该C级有效数Valid_C至逻辑单元312,逻辑单元312将依据控制信号Pf1/2/3_C(指示该至多三个预取候选地址PfAddr1~PfAddr3中何者可以用于预取)以及该C级有效数Valid_C(也就是有效数PfValid_C,在此处指示该至多三个预取候选地址PfAddr1~PfAddr3中可以用于预取者是否支持预取)产生一选择信号SEL以控制多路复用器310输出该至多三个预取候选地址PfAddr1~PfAddr3中真正可以用于预取者,作为预取地址PfAddr。
此外,若比较器302比较出该至多三个预取候选地址PfAddr1~PfAddr3中不只有一预取候选地址对应的高速缓存行不同于前预取地址CompAddr对应的高速缓存行,即该至多三个预取候选地址PfAddr1~PfAddr3中存在多个预取候选地址所对应高速缓存行均不同于该前预取地址CompAddr对应的前高速缓存行,且均支持预取时,则通过选择信号SEL控制多路复用器310选取在取指目标队列FTQ中较靠前的预取候选地址作为该预取地址PfAddr。若该至多三个预取候选地址PfAddr1~PfAddr3所对应高速缓存行均相同于该前高速缓存行,则在该时钟周期不进行该指令预取。
在一实施例中,比较器302还通过比对该至多三个预取候选地址PfAddr1~PfAddr3与前一次预取操作的一前预取地址CompAddr,判断预取地址PfAddr(该至多三个预取候选地址PfAddr1~PfAddr3之一者)是否跨页,并产生一对指令映射关系缓存器itlb进行查询的查询要求AccessTlb。一种实施方式中,若查询的结果是指令映射关系缓存器itlb尚无新一页的映射信息(此时指令预取会发生itlb miss),则指令预取操作暂停,并不会为了预取去内存载入新一页的映射信息,也就是说当指令预取发生itlb miss时,并不进行表遍历(tablewalk)操作。因为从内存加载映射信息涉及层层索引,非常耗时(以下简称预取重放事件,指示信号为PfReplay)。本发明则是将指令预取操作暂停并重放(replay)该当前时钟周期的预取地址PfAddr,待取指操作也作到此页,使此页映射信息从内存加载至该指令映射关系缓存器itlb后,被重放的预取地址PfAddr即可成功进行,此时可从该预取地址PfAddr接续往后继续进行指令预取。
一种实施方式中,指令映射关系缓存器itlb储存一第一页的逻辑指令地址与内存的物理指令地址的映射关系、以及一第二页的逻辑指令地址与内存的物理指令地址的映射关系。前一次预取(在一实施例中,前一次预取发生在前一时钟周期、或更前时钟周期)的一前高速缓存行属于该第一页时,若当下(在一实施例中是当前时钟周期)的一预取目标行属于该第二页(即指令预取发生跨页,但无itlb miss),该指令映射关系缓存器itlb经访问提供该第二页的前述映射关系,用以供该指令预取操作使用,例如供该预取地址PfAddr的逻辑指令地址转译为物理指令地址,并且以该物理指令地址查询该高速缓存列表it_cores,以判断预取地址PfAddr对应的高速缓存行是否已经加载至图2的该指令高速缓存区ic_cores(图3未绘示)。一种实施方式中,该指令映射关系缓存器itlb包括针对该指令预取而设计的至少一开口,用于根据跨至该第二页的该预取地址PfAddr查询该第二页的前述映射关系。一种实施方式中,该指令映射关系缓存器itlb未储存一第三页的指令地址与该内存的映射关系而一预取目标行属于该第三页(即指令预取发生跨页并且itlb miss),指令预取暂停并重放(replay)该当前时钟周期的预取地址PfAddr,直至该取指地址AddrL1i所对应的一取指目标行属于该第三页,使该第三页的前述映射关系从内存加载至该指令映射关系缓存器itlb,被重放(可能被反复重放多次)的预取地址PfAddr即可成功进行,此时可从该预取地址PfAddr接续往后继续进行指令预取。
现在讨论图3的高速缓存列表it_cores针对指令预取而设计的开口,其是用于查询预取地址PfAddr所对应的预取目标行是否已加载至图2的该指令高速缓存区ic_cores(图3未绘示)。若尚未加载,则产生信号PfMiss,触发加载要求LoadReq。多路复用器304使在指令高速缓存204的取指寻无事件(即指令高速缓存区ic_cores中尚未加载取指地址AddrL1i所对应的取指目标行,即fetch icache miss,简称fetch miss,由信号FetMiss代表)得以优先在指令高速缓存204的预取寻无事件(即指令高速缓存区ic_cores中尚未加载预取地址PfAddr所对应的预取目标行,即prefetch icache miss,简称prefetch miss,由信号PfMiss代表)触发加载要求LoadReq。被触发的加载要求LoadReq,使得错失的取指目标行(由FetMiss所指示)优先于错失的预取目标行(由PfMiss所指示)得以先载入。
现在讨论图3的高速缓存替代逻辑电路ilru(ICache LRU)针对指令预取而设计的开口。从内存加载的高速缓存行要填入指令高速缓存区ic_cores何处,是由高速缓存替代逻辑电路ilru决定。例如,指令高速缓存区ic_cores中,最久没被使用到的(LRU,leastrecently used)地址所对应的高速缓存行,即可在高速缓存替代逻辑电路ilru操作下,被载入的高速缓存行更新。图标清楚描绘高速缓存替代逻辑电路ilru针对指令预取而设计的开口,当在指令高速缓存204预取寻无时,信号PfMiss会拉起高速缓存替代逻辑电路ilru的使能信号WrEn。一种实施方式中,高速缓存替代逻辑电路ilru对指令高速缓存区ic_cores各条目管理一使用频率标示,在取指命中(fetch hit)时,更新(提升)相应条目的频率标示,以指示该条目为最新使用,避免该命中行被替代。在取指寻无(fetch miss)/预取寻无(prefetch miss)而加载取指目标行/预取目标行时,更新所填写的条目的频率标示为一默认值,代表该条目乃最新使用,避免所加载的取指目标行/预取目标行在下周期被替代。在取指命中(fetch hit)与预取寻无(prefetch miss)同时发生时,先针对取指命中(fetchhit)的情形更新(提升)一次相应条目的频率标示,再在选定要被加载的预取目标行替换的行后,针对预取寻无(prefetch miss)事件,再更新(提升)一次该相应条目的频率标示。通过管理该频率标示,可以使取指目标行以及预取目标行可以被真正填入使用率低的条目。通过多路复用器306,高速缓存行加载指令高速缓存区ic_cores的目的地条目LoadWay可以是响应于预取需求(预取加载的目的地条目PfWay)、或响应于取指需求(取指加载的目的地条目FetWay)。
再如图3所示,指令高速缓存204是以流水线化配置,如本文的进一步描述,跨越四级流水线,其中,C级表示仲裁阶段,I级表示地址访问阶段,B级表示阵列访问阶段,U级表示决策周期阶段。这些流水线阶段通常被以核心时钟计时的寄存器R(Register)所分隔。本发明还包括在U级产生一U级有效数Valid_U。如图3所示,多路复用器318默认以有效数PfValid_U作为U级有效数Valid_U。有效数PfValid_U是通过逻辑单元320依据取指目标队列FTQ被压入新的地址(响应于指示有无地址被压入的指示信号Ftqpush)以及弹出地址(响应于流转至U级的控制信号Pf1/2/3_C,下称控制信号Pf1/2/3_U,控制信号Pf1/2/3_U也可用于指示有无地址被弹出)而产生,指示在U级看到的取指目标队列FTQ中有多少(和/或有哪些)地址支持指令预取。如图3所示,多路复用器316将在指令预取需要被重放时,响应于相应的指示信号PfReplay,以默认为有效数PfValid_U的U级有效数Valid_U作为C级有效数Valid_C。也就是说,若在U级看到该预取地址PfAddr的指令预取需要被重放,该U级有效数Valid_U(也就是有效数PfValid_U)将响应于重放指示信号PfReplay,被多路复用器316选择以复原已变动为其他值的C级有效数Valid_C,以支持将预取地址PfAddr的指令预取拉回C级。
但预取地址PfAddr的指令预取要被拉回C级,还需要将相应的预取读指针拉回C级。因而,一种实施方式中,预取读指针PfRdPtr1也顺着流水线硬件传递到一U级流水线硬件,成为一复位用读指针PfRdPtr_U(图3未示)。U级流水线硬件判断该预取地址PfAddr需要被重放(也就是发生预取重放事件)时,是以该复位用读指针PfRdPtr_U设定该预取读指针PfRdPtr1。关于如何以该复位用读指针PfRdPtr_U设定该预取读指针PfRdPtr1将于之后结合图4进行说明。
此外,若该预取地址PfAddr的指令预取需要被重放,比较器302所比较的前预取地址CompAddr将是重放的预取地址PfAddr更之前的预取地址PfComAddr。具体而言,是通过多路复用器308响应于重放指示信号PfReplay而选择更之前的预取地址PfComAddr作为前预取地址CompAddr。该地址PfComAddr是上一周期流转到U级的前预取地址CompAddr,该上一周期流转到U级的前预取地址CompAddr已于上一周期被存储到备份资料Backup(图未示)。除此之外,多路复用器308还可响应于一初始化信号INI以一初始地址Start,例如每一比特位皆为0的初始地址,来初始化前预取地址CompAddr。
并且,如图3所示,U级有效数Valid_U指示U级在取指和预取之间进行状态切换,而相似地,C级有效数Valid_C也指示C级在取指和预取之间进行状态切换。多路复用器316在初始化信号INI(也就是多路复用器308接收的初始化信号INI)的控制下选择何时开始以取指有效数FetValid_C作为C级有效数Valid_C。多路复用器318也在该初始化信号INI的控制下选择何时开始以取指有效数FetValid_U(流转到U级的取指有效数FetValid_C)作为U级有效数Valid_U。也就是说,初始化信号INI在需要将预取操作切换为取指操作时,选择将取指有效数FetValid_C作为C级有效数Valid_C,将取指有效数FetValid_U作为U级有效数Valid_U,以支持取指操作。
另外需要特别说明的是,指令预取操作包括提前判断指令地址所对应的高速缓存行是否已经缓存于指令高速缓存区ic_cores中,因此,对同一高速缓存行而言,指令预取操作需领先取指操作,否则便无意义。本发明前述实施例的指令预取操作系独立于取指操作进行,可能会存在指令预取操作落后于取指操作的情形,为此图3还设计一预取读指针控制电路308设定该取指目标队列FTQ的预取读指针PfRdPtr1,确保该取指目标队列FTQ根据该预取读指针PfRdPtr1供应的该预取地址PfAddr所实现的指令预取操作,不落后根据取指读指针RdPtr供应的取指地址AddrL1i所实现的取指操作。
一种实施方式中,指令预取是根据一对齐信号Strobe。依据该对齐信号Strobe所产生的脉冲,预取读指针PfRdPtr1对齐当前的取指读指针RdPtr。以下介绍三种可致该对齐信号Strobe产生脉冲的事件,都可由预取读指针控制电路308实现,具体如何通过对齐信号Strobe的脉冲使预取读指针PfRdPtr1对齐当前的取指读指针RdPtr将于之后结合图4进行说明。
第一种状况是随着指令地址填入该取指目标队列FTQ,该对齐信号Strobe产生脉冲。该取指目标队列FTQ没有可以支持预取的指令时,指令预取暂停。该取指目标队列FTQ又有可以支持预取的指令后,预取重启,该对齐信号Strobe再产生脉冲,使预取读指针PfRdPtr1对齐取指读指针RdPtr。
第二种状况是当预取寻无(由信号PfMiss代表)事件发生,即预取目标行尚未加载至该指令高速缓存区ic_cores,但所有响应缓冲器(Response Buffer,简称RB)都被占用的情形。需要说明的是,如图3所示,该指令高速缓存204包括响应缓冲器RB,当预取寻无指令(由信号PfMiss代表)事件发生,从内存加载该预取地址PfAddr所对应的一预取目标行LoadData至该指令高速缓存204时,需要使用该响应缓冲器RB先暂存该预取目标行LoadData。且需要通过响应缓冲器RB接收多路复用器304产生的加载要求LoadReq以及多路复用器306产生的目的地条目LoadWay,以将加载的预取目标行LoadData作为回填目标行DataFill填入指令高速缓存区ic_cores,并相应地更新高速缓存列表it_cores中的记录。在一种实施方式中,可设计多个(例如四个)响应缓冲器(RB)以应付多笔(例如四笔),例如由多路复用器304产生的加载要求LoadReq1~LoadReq4。
当该预取目标行尚未加载至该指令高速缓存204,但所有响应缓冲器RB都被占用时,指令预取操作暂停,该预取地址PfAddr将被重放(指示信号PfReplay被设置)以等待有响应缓冲器(RB)闲置。此时,由于取指操作可能继续正常进行,甚至超前暂停的该指令预取操作。因此,当有响应缓冲器(RB)闲置时,对齐信号Strobe产生脉冲,使预取读指针PfRdPtr1对齐当前的取指读指针RdPtr,使得指令预取操作从当前的取指操作的指令地址开始进行,从而避免无意义的指令预取操作。
第三种状况是取指失败重放事件(fetch replay),取指被重放的同时会新增预取需求。这里先说明导致取指失败并且重放(fetch replay)原因,可能包括但不限于:1.取指寻无指令事件发生,即指令高速缓存区ic_cores中找不到取指地址AddrL1i所对应的指令(fetch icache miss,简称fetch miss,由信号FetMiss代表);2.指令映射关系缓存器itlb上找不到取指地址AddrL1i的映射关系(fetch TLB miss);3.前端硬件不正常运作导致(例如某些队列满了导致无法存放取指的指令)。
如前所述的第3种情形,前端硬件有可能不正常运作,导致取指失败须暂停。相应取指暂停事件(stopfetch),该取指目标队列FTQ可被清空(flush)。取指读指针RdPtr指向该取指目标队列FTQ第一个条目,且对齐信号Strobe被拉起,使预取读指针PfRdPtr1对齐重置的取指读指针RdPtr。
另外,预取也无需无限制地超前。一种实施方式中,对相同取指地址的取指是以一重复计数InstrFetGood计数。当该重复计数InstrFetGood达一临界量,代表是在反复取指同一段指令(例如,执行循环),指令预取即可暂停,预取读指针PfRdPtr1被强制设零,不指向该取指目标队列FTQ任何条目。待取指目标又不在指令高速缓存区ic_cores时(即发生fetch icache miss),重复计数InstrFetGood清空,方重启该指令预取。
若该重复计数InstrFetGood没有达一临界量,预取读指针PfRdPtr1是根据目标队列FTQ中何者被选作预取地址PfAddr,指向PfRdPtr1/2/3中的下一个地址条目。例如,若地址1、2、3中,被选作预取地址PfAddr的是地址1,预取读指针PfRdPtr1更新指向该取指目标队列FTQ中储存地址2的条目;若地址1、2、3中,被选作预取地址PfAddr的是地址2,预取读指针PfRdPtr1更新指向该取指目标队列FTQ中储存地址3的条目,该些地址1、2、3的条目相邻,但地址1、2、3的值并不需要相邻。以下将通过图4进行详细说明。
图4为预取读指针控制电路308的一种实施电路,例示前述复位用读指针PfRdPtr_U、对齐信号Strobe以及递增重复计数InstrFetGood是如何对预取读指针PfRdPtr1进行控制。
具体而言,相应指令循环产生重复计数InstrFetGood的计数电路包括多路复用器402、404、缓存器R以及一递增电路“+1”。信号Data_ValidU为一指示信号,用于显示取指有效、且信号ILoadReq为另一指示信号,指示发生取指寻无(fetch miss),加载要求LoadReq被触发,多路复用器402、404输出递增重复计数InstrFetGood。信号ILoadReq显示又有新的取指需求,多路复用器404清空该重复计数InstrFetGood。
预取读指针PfRdPtr1的设定电路包括一个移位器Shift、两个多路复用器406与408、以及一个缓存器R。起始时,多路复用器406依据前述对齐信号Strobe直接选择将取指读指针RdPtr作为预取读指针PfRdPtr1,即将该预取读指针PfRdPtr1对齐于取指读指针RdPtr。一般操作下,显示当前预取选择哪一预取读指针的控制信号Pf1/2/3_C经移位器Shift输出到多路复用器408、缓存器R、以及多路复用器406输出,设定下一周期的预取读指针PfRdPtr1。若有预取地址被重放,则响应于指示信号PfReplay,将储存在备份信息Backup中的重放预取的指针(即复位用读指针PfRdPtr_U),经多路复用器408、缓存器R、以及多路复用器406输出,设定为下一周期的预取读指针PfRdPtr1,以支持预取重放。若重复计数InstrFetGood达一临界量,代表是在反复取指同一段指令(例如,执行循环),指令预取即可暂停,预取读指针PfRdPtr1被强制设零。
一种预取电路实施方式中,预取读指针PfRdPtr2是将预取读指针PfRdPtr1左移一位产生,预取读指针PfRdPtr3是将预取读指针PfRdPtr1左移两位产生,因此只需要配置相应的移位电路对预取读指针PfRdPtr1进行移位即可。
一种预取电路实施方式中,C、I、B、U共四级流水线。若发生拉起前述对齐信号Strobe的第三种状况,也就是发生取指失败重放事件(fetch replay)时,随着取指的重放,指令预取也会被重放,而使预取操作的状态机回到C级。以下将通过图5举例说明该取指失败重放的流程。
图5的示例用于说明取指失败重放事件。取指包括C、I、B、U四个阶段对应的四级流水线Fet_C、Fet_I、Fet_B、Fet_U。指令预取包括C、I、B、U四个阶段对应的四级流水线Pf_C、Pf_I、Pf_B、Pf_U。周期T0、T1,取指目标队列FTQ为“空(empty)”,无预取动作。周期T2,指令地址C、D、E作为预取候选,进行C级预取操作(Pf_C)。周期T3,取指地址A的取指失败。周期T4重放取指地址A的取指至C级,因而产生指令地址B的预取需求。未使用本发明的取指重放调整预取流程技术的流水线状况502显示,若没有针对取指地址A的重放取指调整预取程序,周期T4在C级是对预取候选E、F、G进行预取操作(Pf_C),并没有为指令地址B作预取。本发明针对取指地址A的取指重放调整预取程序,所以本申请的流水线状况504显示,周期T4在C级作的是以指令地址A、B、C为预取候选进行预取操作(Pf_C),指令地址B的指令将成功预取。本发明在取指失败并重放时,拉起对齐信号Strobe,使预取读指针PfRdPtr1对齐当前的取指读指针RdPtr。
如前所述的第2种情形,取指的失败可能是因为指令映射关系缓存器itlb上找不到(即尚未备妥)取指地址AddrL1i的映射关系(即发生fetch TLB miss)。此状况下,预取地址PfAddr所需的映射关系通常也不存在于指令映射关系缓存器itlb(即发生prefetch TLBmiss)。一种实施方式是将该指令预取和该取指均停止,待指令映射关系缓存器itlb备妥(可以是待取指地址AddrL1i所需的映射关系备妥,也可以在待预取地址PfAddr所需的映射关系也备妥),再拉起该对齐信号Strobe,使预取读指针PfRdPtr1对齐当前的取指读指针RdPtr,当重启时,指令预取被拉回至取指停止时的取指地址AddrL1i开始进行。
图6图解一预取状态机,包括S(停止状态)、C、I、B、U级状态。其中,符号“&”、“~”、“|”分别代表“与(AND)”、“非(NOT)”以及“或(OR)”。
一种实施方式中,预取不执行时,预取状态机是在C级状态。确定预取地址PfAddr后,预取状态机进入I级状态,再进入B级状态,再进入U级状态。若连续周期都有预取地址PfAddr可用(PfStartDly0),则预取状态机停留在U级状态,每周期实现一高速缓存行的预取。若高速缓存行还没有预取在指令高速缓存区ic_cores,停留在U级状态的预取状态机会打出加载要求LoadReq,从内存加载高速缓存行。
如果两笔预取非连续,如,有1周期间隔(PfStartDly1)或2周期间隔,预取状态机跳回B级或I级状态。
如果发生预取重放事件(PfReplay),预取状态机从U级跳回C级状态。
相应取指暂停事件(stopfetch),预取状态机要先跳到I级状态,再跳到S状态。
凡是预测错误发生刷新(flush),对应图6的Branch,预取状态机跳回C级状态。
相应取指重放事件(FetReplay),预取状态机要先跳到I级状态。
另外有重启预取事件PfStart、预取及取指无候选事件PfFTQEmpty使得预取状态机在状态间切换。
本发明状态机的状态切换更灵活。预取地址PfAddr不一定需要循序切换完所有状态,预取效能高。
虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可做些许更动与润饰,因此本发明的保护范围当视后附的权利要求所界定者为准。
Claims (19)
1.一种微处理器,包括:
一指令高速缓存,其中高速缓存内容供根据一取指地址进行取指;
一分支预测器;
一取指目标队列,耦接在该分支预测器以及该指令高速缓存之间,其储存经该分支预测器预测在分支方向上的至少一指令地址,待读出作为该取指地址,或选作一预取地址以操作该指令高速缓存进行指令预取;以及
一预取读指针控制电路,产生一预取读指针给该取指目标队列,使该取指目标队列根据该预取读指针供应的该预取地址所实现的该指令预取不落后根据一取指读指针供应的该取指地址所实现的该取指。
2.根据权利要求1所述的微处理器,其中:
该取指地址是根据该取指读指针从该取指目标队列取出;
该预取地址是根据该预取读指针从该取指目标队列取出;
根据一对齐信号,该预取读指针控制电路使该预取读指针对齐该取指读指针,使得该指令预取不落后于该取指。
3.根据权利要求2所述的微处理器,其中:
该对齐信号在该指令预取启动、且该取指目标队列不为空时立起,使该预取读指针对齐该取指读指针才开始该指令预取。
4.根据权利要求2所述的微处理器,其中:
该指令高速缓存包括多个响应缓冲器,在从一内存加载该预取地址所对应的一预取目标行至该指令高速缓存时使用;以及
当该预取目标行尚未加载至该指令高速缓存、但该多个响应缓冲器全被占用时,该指令预取停止,待有响应缓冲器闲置,该对齐信号立起,使该预取读指针对齐该取指读指针。
5.根据权利要求2所述的微处理器,其中:
当该取指失败并重放时,该对齐信号立起,使该预取读指针对齐该取指读指针。
6.根据权利要求2所述的微处理器,其中:
该指令高速缓存包括一映射关系缓存器,储存多页的逻辑指令地址与物理指令地址的映射关系;
该映射关系缓存器接收该取指地址以及该预取地址;
该映射关系缓存器尚未备妥该取指地址所对应的映射关系时,该指令预取和该取指均停止,待该映射关系缓存器备妥该取指地址所对应的映射关系,该对齐信号立起,使该预取读指针对齐该取指读指针。
7.根据权利要求2所述的微处理器,其中:
相应取指暂停事件对该取指目标队列的清空,该取指读指针指向该取指目标队列的第一个条目,且该对齐信号立起,使该预取读指针对齐该取指读指针。
8.根据权利要求2所述的微处理器,其中:
该取指地址的一重复计数达一临界量时,该指令预取停止,待后续要求的该取指地址所对应的一取指目标行不在该指令高速缓存,才再次启动该指令预取,且该对齐信号立起,使该预取读指针对齐该取指读指针。
9.根据权利要求1所述的微处理器,其中:
该取指目标队列耦接该指令高速缓存,其根据该取指读指针提供该取指地址,并耦接该指令高速缓存,根据该预取读指针输出多个预取候选地址,供选作该预取地址。
10.根据权利要求9所述的微处理器,其中:
该指令高速缓存包括多条高速缓存行,每一高速缓存行包括多个取址单位;
该取指目标队列储存的所述指令地址各自对应一取指单位;以及
该多个预取候选地址中,若所对应的高速缓存行不同于前一次预取的一前高速缓存行,即选择为该预取地址,而该预取地址所对应的高速缓存行设定为一预取目标行。
11.根据权利要求1所述的微处理器,其中:
该指令高速缓存包括多级流水线硬件;
该预取读指针顺着该多级流水线硬件传递到该多级流水线硬件中一末级流水线硬件,作为一复位用读指针;以及
该末级流水线硬件判断该预取地址需要被重放时,该预取读指针控制电路设定该预取读指针为该复位用读指针。
12.根据权利要求1所述的微处理器,其中:
该指令高速缓存包括一高速缓存列表、以及一指令高速缓存区,该高速缓存列表接收该预取地址,用于查询该预取地址所对应的一预取目标行是否已加载至该指令高速缓存区;
若该预取目标行尚未加载至该指令高速缓存区,一加载要求被发出,从一内存将该预取目标行加载至该指令高速缓存区。
13.根据权利要求12所述的微处理器,其中:
若该预取目标行尚未加载至该指令高速缓存区时、该取指地址所对应的一取指目标行也尚未加载至该指令高速缓存区,该加载要求是为该取指地址发出,从该内存将该取指目标行加载至该指令高速缓存区。
14.根据权利要求12所述的微处理器,其中:
该指令高速缓存包括一高速缓存替代逻辑电路,在该预取目标行尚未加载至该指令高速缓存区时,指示该指令高速缓存区上的一第一替代条目,使被替代为该预取目标行。
15.根据权利要求14所述的微处理器,其中:
该高速缓存替代逻辑电路为该指令高速缓存区各条目管理一频率标示,在该取指命中时提升,避免命中的条目被替代;以及
该高速缓存替代逻辑电路还在该第一替代条目替代为该预取目标行时,更新该第一替代条目的频率标示为一默认值,避免下周期又被替代。
16.根据权利要求15所述的微处理器,其中:
在该取指地址所对应的一取指目标行尚未加载至该指令高速缓存区时,该高速缓存替代逻辑电路指示该指令高速缓存区上的一第二替代条目,使被替代为该取指目标行;
该高速缓存替代逻辑电路还在该第二替代条目替代为该取指目标行时,更新该第二替代条目的频率标示为该默认值,避免下周期又被替代。
17.根据权利要求15所述的微处理器,其中:
若该预取目标行尚未加载至该指令高速缓存区,同时该取指命中,该第一替代条目的选择,是安排在该取指命中的条目的频率标示提升之后。
18.根据权利要求13所述的微处理器,其中:
该取指目标队列具备一第一级有效数以标示该取指目标队列中待选作该预取地址的预取候选指令的数量,其中该第一级有效数随指令地址填入该取指目标队列而提升,并随该指令预取的进行而降低;
该指令高速缓存包括多级流水线硬件;
该第一级有效数供一第一级流水线硬件判断该取指目标队列是否可以提供该预取候选指令;
该第一级有效数顺着该多级流水线硬件传递到一末级流水线硬件,作为一末级有效数;以及
该末级流水线硬件判断该预取地址需要被重放时,该末级有效数用于复原该第一级有效数。
19.根据权利要求18所述的微处理器,其中:
该第一级有效数为零时,该指令预取停止,待有指令地址填入该取指目标队列才再次启动该指令预取。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111453291.6A CN114064127A (zh) | 2021-12-01 | 2021-12-01 | 具有指令预取功能的微处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111453291.6A CN114064127A (zh) | 2021-12-01 | 2021-12-01 | 具有指令预取功能的微处理器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114064127A true CN114064127A (zh) | 2022-02-18 |
Family
ID=80228222
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111453291.6A Pending CN114064127A (zh) | 2021-12-01 | 2021-12-01 | 具有指令预取功能的微处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114064127A (zh) |
-
2021
- 2021-12-01 CN CN202111453291.6A patent/CN114064127A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100973951B1 (ko) | 오정렬 메모리 액세스 예측 | |
KR100974384B1 (ko) | 분기 명령들을 예측하기 위한 방법 및 장치 | |
JP5357017B2 (ja) | 高速で安価なストア−ロード競合スケジューリング及び転送機構 | |
US5933860A (en) | Multiprobe instruction cache with instruction-based probe hint generation and training whereby the cache bank or way to be accessed next is predicted | |
KR101059335B1 (ko) | 가변 길이 명령 세트 실행 모드들을 가지는 프로세서 내의 bht의 효율적 사용방법 | |
US7516312B2 (en) | Presbyopic branch target prefetch method and apparatus | |
JP3919802B2 (ja) | プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 | |
KR101081674B1 (ko) | 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법 | |
JPH03206523A (ja) | デジタルコンピユータにおいてデータをメモリ内のスタツク上にプツシユする方法およびパイプラインされる命令とメモリを有するデジタルコンピユータにおいてスタツクオペレーシヨンを実行する回路 | |
US20070033385A1 (en) | Call return stack way prediction repair | |
US11403103B2 (en) | Microprocessor with multi-step ahead branch predictor and having a fetch-target queue between the branch predictor and instruction cache | |
US20060218351A1 (en) | Look ahead LRU array update scheme to minimize clobber in sequentially accessed memory | |
JPH10228377A (ja) | 分岐予測する情報処理装置 | |
JP2009536770A (ja) | ブロックに基づく分岐先アドレスキャッシュ | |
US10140126B2 (en) | Variable length instruction processor system and method | |
KR101048258B1 (ko) | 가변 길이 명령 세트의 브랜치 명령의 최종 입도와 캐싱된 브랜치 정보의 관련 | |
US11099849B2 (en) | Method for reducing fetch cycles for return-type instructions | |
US7779241B1 (en) | History based pipelined branch prediction | |
CN111459550B (zh) | 具高度领先分支预测器的微处理器 | |
US5878252A (en) | Microprocessor configured to generate help instructions for performing data cache fills | |
US10922082B2 (en) | Branch predictor | |
US6421774B1 (en) | Static branch predictor using opcode of instruction preceding conditional branch | |
CN114064127A (zh) | 具有指令预取功能的微处理器 | |
CN114116007A (zh) | 具有指令预取功能的微处理器 | |
TW202219744A (zh) | 微處理器和分支預測控制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Applicant after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203 Applicant before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |