CN113986774A - 一种基于指令流和访存模式学习的缓存替换系统及方法 - Google Patents
一种基于指令流和访存模式学习的缓存替换系统及方法 Download PDFInfo
- Publication number
- CN113986774A CN113986774A CN202111358078.7A CN202111358078A CN113986774A CN 113986774 A CN113986774 A CN 113986774A CN 202111358078 A CN202111358078 A CN 202111358078A CN 113986774 A CN113986774 A CN 113986774A
- Authority
- CN
- China
- Prior art keywords
- instruction
- address
- memory access
- prediction
- access
- 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
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000008569 process Effects 0.000 claims description 26
- 230000036962 time dependent Effects 0.000 claims description 6
- 238000005096 rolling process Methods 0.000 claims description 2
- 238000004422 calculation algorithm Methods 0.000 description 28
- 230000006399 behavior Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 11
- 230000002123 temporal effect Effects 0.000 description 8
- 238000003491 array Methods 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000003909 pattern recognition Methods 0.000 description 2
- 241001562042 Physa Species 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- 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/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- 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/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Abstract
本发明提供一种基于指令流和访存模式学习的缓存替换系统,包括分支预测模块,其对指令流进行预测并写入取指地址队列;访存指令记录模块,其依次记录已经提交的访存指令的信息并写入到其访存指令缓冲中;同时查询得到访存指令序列;访存模式学习模块,其将访存指令序列记录在其访存历史缓冲中,据此对访存模式进行学习,随后预测访存指令的访存物理地址并写入访存地址队列;缓存替换决策模块,其接收缓存替换候选项的物理地址并用其检索取指地址队列或访存地址队列,根据得到的重用距离选择一个缓存替换候选项作为踢出项反馈给一级缓存。本发明还提供相应的方法。本发明的缓存替换系统能避免乱序执行和缓存预取的干扰,提高访存序列预测的准确性。
Description
技术领域
本发明涉及计算机体系结构技术领域,尤其涉及一种基于指令流和访存模式学习的缓存替换系统及方法。
背景技术
缓存是现代处理器中的一种重要机制,将常用数据从内存拷贝到缓存中,后续数据访问可以直接从缓存读取,从而减少慢速DRAM内存的访问次数,提升处理器性能。缓存的容量是有限的,在实际使用中发生缓存内容的替换是不可避免的,缓存的性能受缓存替换策略的影响很大。
缓存访问行为是复杂的,处理器中缓存系统接收到的访存序列会受到处理器乱序执行和缓存预取机制的干扰,这进一步增大了在缓存系统中预测访存行为的难度。
具体来说,传统的缓存替换方法依据缓存系统接收到的访存序列学习访存行为模式。但是在缓存系统中接收到的访存序列是若干条访存指令交织在一起的组合结果,不同指令间的执行次序以及每条指令的行为模式都将对缓存系统最终接收到的访存序列产生影响。在这样复杂多变的访存序列基础上学习访存行为模式是困难的,要面对很大的不确定性。
现有的缓存替换方法均不能有效的减少这些不确定性。
发明内容
本发明提供了一种基于指令流和访存模式学习的缓存替换系统及方法,以降低访存行为模式的学习难度,提高缓存替换策略的性能。
为了实现上述目的,本发明提供一种基于指令流和访存模式学习的缓存替换系统,包括分支预测模块、取指地址队列、访存指令记录模块、访存模式学习模块、访存地址队列和缓存替换决策模块;
所述分支预测模块设置为采用提前预测技术,对目标程序的指令流进行预测并将预测结果写入取指地址队列中;
所述访存指令记录模块设置为依次记录已经提交的访存指令的信息,将这些访存指令的信息写入到其访存指令缓冲中;同时,每当取指地址队列写入新的条目项时,用该条目项所对应的指令块的起始地址查询所述访存指令缓冲,以通过查询尝试得到访存指令序列并将其输出至访存指令学习模块和访存地址队列;
所述访存模式学习模块设置为将访存指令序列记录在其访存历史缓冲中,根据访存历史缓冲中保存的历史信息对访存指令的访存模式进行学习,并根据学习到的访存模式来预测访存指令序列中每条访存指令的访存物理地址并写入访存地址队列;
所述缓存替换决策模块设置为接收一级缓存发出的所有缓存替换候选项的物理地址,使用这些物理地址检索所述取指地址队列或访存地址队列,得到每个缓存替换候选项的重用距离,根据重用距离选择一个缓存替换候选项作为踢出项反馈给一级缓存。
所述分支预测模块设置为将预测结果以指令块为粒度写入取指地址队列中;所述分支预测模块设置为执行:
A1:在每个周期,将当前预测地址所在的指令块作为当前指令块,将当前预测地址作为当前指令块的预测起始地址;根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口;
A2:在获得当前指令块的预测起始地址后,在当前指令块中对分支指令进行检索和预测,以判断当前指令块是否命中跳转的分支指令;
A3:根据判断结果,若当前指令块未命中跳转的分支指令,说明当前指令块中没有分支指令或者识别到的分支指令均未跳转,则将当前指令块的信息作为分支预测模块的预测结果写入取指地址队列;随后,确定下一指令块的预测起始地址,并将下一指令块作为新的当前指令块,并回到步骤A2,直到当前指令块为固定预测窗口中的最后一个指令块,此时当前预测地址根据固定预测窗口中的指令块的个数自增,以进入下一个周期;
否则,从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址,以进入下一个周期。
或者,与上文一致,所述分支预测模块设置为将预测结果以指令块为粒度写入取指地址队列中,区别仅在于,所述分支预测模块设置为执行如下步骤:
A1’:在每个周期,将当前预测地址所在的指令块作为当前指令块,将当前预测地址作为当前指令块的预测起始地址;随后,根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口中的所有指令块的预测起始地址;
A2’:根据各个指令块的预测起始地址,在各个指令块中对分支指令进行检索和预测,以判断各个指令块是否命中跳转的分支指令;
A3’:根据判断结果,若所有指令块均未命中跳转的分支指令,则将所有指令块的信息作为分支预测模块的预测结果依次写入取指地址队列;当前预测地址根据固定预测窗口中的指令块的个数自增,以进入下一个周期;否则,若存在至少一个指令块命中至少一个跳转的分支指令,则从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块及其前面的所有指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址,以进入下一个周期。
指令块的信息包括指令块的行线性地址、行物理地址、起始偏移、结束偏移以及跳转位;在将指令块的信息写入取指地址队列时,将指令块的预测起始地址拆分为高位的行线性地址和低位的起始偏移,并通过行线性地址查询TLB得到行物理地址,并将得到的行线性地址、行物理地址和起始偏移写入取指地址队列的条目项中的对应域;此外,如果指令块命中的跳转的分支指令,则第一个跳转的分支指令的末尾字节偏移作为结束偏移写入取指地址队列;否则,取指地址队列中的结束偏移设置为63。
所述取指地址队列每一条目项的结构为:
<valid,line_addr,phys_addr,begin_offset,end_offset,taken>,
其中,valid表示有效位;line_addr表示行线性地址;phys_addr表示行物理地址;begin_offset表示起始偏移;end_offset表示结束偏移;taken表示跳转位;
所述取指地址队列还设有提交指针,读指针和写指针;取指地址队列的提交指针指向下一个将提交的指令所在的指令块在取指地址队列中的条目项;取指地址队列的读指针指向下一个将读取的指令所在的指令块在取指地址队列中的条目项;取指地址队列的写指针指向分支预测模块下一次写入的位置;在处理器的主流水线刷新发生后,根据刷新类型,取指地址队列的读指针和写指针回滚到分支刷新的位置或者提交指针的位置;
所述访存指令缓冲的每一个表项的结构为:
<LineAddr,PhyAddr,InstType,Memlen>,
其中,LineAddr表示访存指令的指令线性地址;PhyAddr表示访存指令在上一次执行时的访存物理地址;InstType表明访存指令的类型,InstType∈{DirectInst,InDirectInst},其中DirectInst表示直接访存指令,InDirectInst表示间接访存指令;Memlen表明访存指令的访存长度;
所述访存历史缓冲是一个由访存指令的PC作为索引的阵列,访存历史缓冲中的每一个表项都记录有同一访存指令过去12次的访存物理地址;
且所述访存地址队列中每一条目项的结构为:
<valid,inst_line_addr,mem_phys_addr,memlen,inst_queue_index>,
其中,valid表示有效位;inst_line_addr表示指令线性地址;mem_phys_addr表示访存物理地址;memlen表示访存长度;inst_queue_index表示取指地址队列索引;
所述访存地址队列具有提交指针、读指针和写指针;在主流水线发生分支刷新时,访存地址队列的读指针和写指针回滚到分支刷新的位置。
所述分支预测模块设置为:若取指地址队列写满则暂停预测过程;取指地址队列是否写满根据所述取指地址队列的写指针和提交指针的结合来判断。
所述访存模式学习模块包括步长预测器和时间关联预测器,使得访存模式学习模块在访存历史缓冲的基础上通过步长预测器和时间关联预测器实现步长模式和时间关联模式的学习和预测。
所述步长预测器的每一条目项用于记录一种步长模式,所述步长模式是指步长访存序列;步长预测器的每一条目项包括一个步长访存序列的标签、上一次地址、上一次步长、可信计数器、当前模式、首地址、最大计数器和方向;
所述时间关联预测器的每一条目项用于记录一种时间关联模式,时间关联模式是指一个时间关联访存序列,所述时间关联预测器的每一条目项包括时间关联模式、时间关联序列长度和时间关联序列。
所述缓存替换决策模块设置为:在根据重用距离选择一个缓存替换候选项作为踢出项时,如果多个缓存替换候选项中重用距离最小的缓存替换候选项是唯一的,则将重用距离最大的缓存替换候选项作为踢出项反馈给一级缓存;否则,选择重用距离最小的缓存替换候选项中一级缓存所发送的路号最小的一项从一级缓存中踢出。
所述缓存替换决策模块还设置为:在检索所述取指地址队列或访存地址队列之前,判断取指地址队列或访存地址队列中的有效预测结果是否小于有效预测结果的数量阈值,若小于,则替换决策模块向一级缓存反馈相应的信息,使得一级缓存使用默认替换策略进行候选项选择,此时结束流程。
另一方面,本发明提供一种基于指令流和访存模式学习的缓存替换方法,包括:
S1:利用一分支预测模块,采用提前预测技术,对目标程序的指令流进行预测并将预测结果写入一取指地址队列中;
S2:利用一访存指令记录模块,依次记录已经提交的访存指令的信息,将这些访存指令的信息写入到其访存指令缓冲中;每当取指地址队列写入新的条目项时,用该条目项所对应的指令块的起始地址查询所述访存指令缓冲,以通过查询尝试得到访存指令序列并将其输出至访存指令学习模块和访存地址队列;
S3:利用一访存指令学习模块,将访存指令序列记录在访存历史缓冲中,根据访存历史缓冲中保存的历史信息对访存指令的访存模式进行学习,并根据学习到的访存模式来预测访存指令序列中每条访存指令的访存物理地址,将每条访存指令的访存物理地址写入到一访存地址队列;
S4:利用一缓存替换决策模块接收一级缓存发出的所有缓存替换候选项的物理地址,使用这些物理地址检索所述取指地址队列或访存地址队列,得到每个缓存替换候选项的重用距离,根据重用距离选择一个缓存替换候选项作为踢出项反馈给一级缓存。
本发明提出的基于指令流和访存模式学习的缓存替换系统依据分支预测技术对未来访存序列进行预测,访存模式学习的对象具体到每条访存指令而非若干条访存指令的组合,从而降低了访存行为模式的学习难度并降低了预测的复杂性;预测过程基于分支预测技术得出的程序指令流,预测的访存序列只包含真实的程序需求,不受缓存预取机制的影响。此外,本发明的系统依次记录已经提交的访存指令的信息,从而通过访存指令的提交序列而非缓存系统中接收到的访存序列进行访存模式学习,避免乱序执行的干扰。
综上所述,本发明方法学习指令级的访存模式,不受乱序执行和缓存预取的干扰,减少了访存序列预测过程中所面对的不确定性。
附图说明
图1是本发明的基于指令流和访存模式学习的缓存替换系统及方法所适用的其中一种处理器微架构的结构示意图。
图2是本发明的基于指令流和访存模式学习的缓存替换系统及方法所适用的另一种处理器微架构的结构示意图。
图3是根据本发明的一个实施例的基于指令流和访存模式学习的缓存替换系统的整体框架图。
图4是如图3所示的基于指令流和访存模式学习的缓存替换系统的分支预测模块的预测流程图。
图5是本发明的基于指令流和访存模式学习的缓存替换系统的取指地址队列及其提交指针、读指针和写指针的位置关系示意图。
图6是本发明的基于指令流和访存模式学习的缓存替换系统的访存指令缓冲的查询过程示意图。
图7(a)是传统的时间关联预取算法的原理图。
图7(b)是本发明的基于指令流和访存模式学习的缓存替换系统中基于访存历史缓冲的访存模式学习过程的原理图。
图8是本发明的基于指令流和访存模式学习的缓存替换系统的步长预测器的条目项的结构示意图。
图9是本发明的基于指令流和访存模式学习的缓存替换系统的取指地址队列及访存地址队列在主流水线发生分支刷新时的刷新流程的原理图。
图10是本发明提出的基于指令流和访存模式学习的缓存替换方法相比于多种现有的算法的性能提高对比图。
具体实施方式
下面通过具体实施示例和附图,对本发明做进一步详细说明。
本发明的基于指令流和访存模式学习的缓存替换系统及方法适用于图1所示的处理器微架构中。所述处理器微架构至少包含取指、译码、执行、访存和写回这5个阶段,这五个阶段分别对应取指单元100、译码单元200、执行单元300、访存单元400和写回单元500。本发明同样适用于包含图1所示功能的更为复杂的处理器微架构中,更复杂的处理器微架构中可能会将某个阶段进行细化,比如可以将执行阶段拆分为重命名、调度和执行三个子阶段。
如图2所示,根据现有技术中的提前预测技术,处理器微架构中还可以包含分支预测单元600,分支预测单元600可以通过预测队列与取指单元进行交互。具体来说,分支预测单元600对未来程序指令流进行预测,并将预测结果以对齐指令块为粒度写入预测队列700中。预测队列700中的每一条目项包含指令块的起始地址、结尾地址以及其它分支指令信息。分支预测单元600和取指单元100之间类似生产者-消费者关系。取指单元100每周期从预测队列700中读取一条目项,并根据读取的条目项从缓存系统中读取相应的指令块数据,然后将指令块数据发送给流水线的后续单元(即译码单元200、执行单元300、访存单元400和写回单元500)来执行该指令块中包含的指令。本发明的基于指令流和访存模式学习的缓存替换方法在应用于包含分支预测单元600的处理器微架构中时,可以将分支预测单元600和预测队列700分别作为本发明系统的分支预测模块和取指地址队列,从而减少具体实施的工作量。
图3是根据本发明的一个实施例的基于指令流和访存模式学习的缓存替换系统的整体框架图。如图3所示,所述基于指令流和访存模式学习的缓存替换系统在现有的处理器微架构(包括取指单元100、译码单元200、执行单元300、访存单元400和写回单元500)的基础上,还包括分支预测模块10、取指地址队列20、访存指令记录模块30、访存模式学习模块40、访存地址队列50和缓存替换决策模块60六个模块。这六个模块共同组成了执行速率快于主流水线的预测子流水,于处理器的主流水(即取指单元100、译码单元200、执行单元300、访存单元400和写回单元500的顺序执行)外独立运行,各个模块在预测子流水中的先后的执行次序是分支预测模块10→取指地址队列20→访存指令记录模块30→访存模式学习模块40→访存地址队列50。缓存替换决策模块60是一个比较独立的模块,其设置为接收并响应主流水线中11i/l1d的替换请求。缓存替换决策模块60和其它5个预测子流水的组成模块之间的关系类似生产者-消费者,通过预测子流水填充取指地址队列20和访存地址队列50,而缓存替换决策模块60检索这两个队列。
如上文所述,在某些实施例中,分支预测模块10和取指地址队列20可以是现有的处理器微架构中的分支预测单元600和预测队列700,在其他实施例中,分支预测模块10和取指地址队列20是新增的模块。
(一)分支预测模块10
分支预测模块10是预测子流水的起始点。分支预测模块10设置为:采用提前预测技术,对目标程序的指令流进行预测并将预测结果以指令块为粒度(即以对齐指令块的形式)写入取指地址队列20中;取指地址队列20写满则暂停预测过程。所得到的取指地址队列20中的条目项用于作为取指单元100中的一级指令缓存的未来访问序列,也就是目标程序的指令流的访问序列的预测结果。
其中,分支预测模块10通过在每个周期判断固定预测窗口的所有指令块中是否存在跳转的分支指令,根据判断结果来对目标程序的指令流进行预测。在每个周期的预测过程都在当前预测地址的基础上进行,当前预测地址更新则进入下一个周期。分支预测模块10中一个很重要的功能是维护当前预测地址,这是一个48位的线性地址。
维护当前预测地址包括:如果预测到跳转的分支指令,该跳转的分支指令的跳转地址将会更新为当前预测地址;也就是说,分支预测模块10是一个自循环的分支预测单元,分支预测模块10的预测结果除了写入取指地址队列20之外,预测结果中的跳转的分支指令的跳转地址将作为当前预测地址被回传给分支预测模块10自身,作为下一次预测周期的起始地址。另外,在处理器初始化阶段或者主流水线发生刷新时,取指单元会将初始化地址或者刷新地址发送给分支预测模块10用以更新当前预测地址。
图4示出了分支预测模块10的预测流程。分支预测模块的固定预测窗口为多个指令块,即每周期可以预测多个连续的指令块,指令块的位宽等同于取指单元100的取指位宽,便于和取指单元100的交互。
分支预测模块的固定预测窗口为多个64B指令块,即每周期可以预测多个连续的64B指令块,选择64B的指令块是用于匹配取指单元100的带宽。
如图4所示,所述分支预测模块10设置为执行如下步骤:
步骤A1:在每个周期(即当前预测地址初始化或者更新时),将当前预测地址所在的指令块作为当前指令块,将当前预测地址作为当前指令块的预测起始地址;根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口;
由于对目标程序的指令流的预测以对齐的指令块为粒度,每个周期的固定预测窗口为多个指令块,即每周期可以预测多个指令块,比如32B的固定预测窗口可以拆分成2个16B的指令块并行预测。在本实施例中,假设当前预测地址是5,分支预测模块10的每周期的固定预测窗口是128B,即每周期预测2个对齐的64B指令块。第一个64B指令块的预测起始地址就是当前预测地址(也就是5),指令块范围是[5,63];第二个64B指令块的预测起始地址是64,指令块范围是[64,127]。由于是对齐的指令块,每个指令块的默认起始地址是64B的整数倍。然而考虑到预测过程中第一个指令块的起始地址可能不是64B的整数倍,因为这个地址可能是从某个分支指令跳转过来的,没有办法保证这个地址是严格对齐的;因此预测过程中的第二个指令块(以及第三、四等)的起始地址一定是64B的整数倍。
在本实施例中,图4中分支预测模块每周期所预测的多个指令块是按照串行次序逐个预测的,即每一次根据当前指令块的预测起始地址去计算其下一个指令块的预测起始地址。
步骤A2:在获得当前指令块的预测起始地址后,在当前指令块中对分支指令进行检索和预测,以判断当前指令块是否命中跳转的分支指令;
其中,分支预测模块10需要利用一种现有的分支预测算法来实现分支指令的预测。本发明并不依赖特定的分支预测算法,现有的分支预测算法都适用于分支预测模块。以常见的TAGE分支预测算法为例,首先使用当前指令块的预测起始地址检索BTB(branchtarget buffer,分支目标缓冲器),根据BTB中保存的分支指令位置识别当前指令块中包含的所有分支指令。这个识别过程可能会命中多条分支指令。然后对识别出的每条分支指令的跳转方向和跳转地址进行预测,以确定这些分支指令中是否存在跳转的分支指令。
步骤A3:根据判断结果,若当前指令块未命中跳转的分支指令,说明当前指令块中没有分支指令或者识别到的分支指令均未跳转,则将当前指令块的信息作为分支预测模块10的预测结果写入取指地址队列;随后,确定下一指令块的预测起始地址,并将下一指令块作为新的当前指令块,并回到步骤A2,直到当前指令块为固定预测窗口中的最后一个指令块,此时当前预测地址根据固定预测窗口中的指令块的个数自增,从而实现当前预测地址的更新,进入下一个周期;
否则,即当前指令块命中跳转的分支指令,说明在指令块中识别到的分支指令有一个或者多个预测跳转,则从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址,以进入下一个周期。
指令块的信息包括指令块的行线性地址、行物理地址、起始偏移、结束偏移以及跳转位,等等。
分支预测模块10在每个周期的预测过程中使用的地址(如当前指令块的预测起始地址,等等)均是线性地址形式。然而,取指地址队列20保存的地址为物理地址形式,这是由于缓存系统中使用的地址都是物理地址,缓存替换决策模块60将使用候选项的物理地址检索取指地址队列和访存地址队列。因此,取指地址队列20中保存的地址需要是线性地址对应的物理地址。
因此,根据当前指令块的预测起始地址可以确定当前指令块的行线性地址和起始偏移,在当前指令块的信息中的行线性地址写入取指地址队列时,先需要经过TLB(translation lookaside buffer,转译后备缓冲区)的检索以得到行物理地址,并将行线性地址和行物理地址均保存在取指地址队列20中。
具体来说,在将指令块的信息写入取指地址队列20时,需要将48位的指令块的预测起始地址拆分为高42位的行线性地址和低6位的起始偏移,并通过42位的行线性地址查询TLB得到34位的行物理地址,并将得到的行线性地址、行物理地址和起始偏移写入取指地址队列20的条目项中的对应域。此外,如果指令块命中的跳转的分支指令,则第一个跳转的分支指令的末尾字节偏移作为结束偏移写入取指地址队列20;否则,取指地址队列20中的结束偏移设置为63。此外,如果当前指令块命中跳转的分支指令,则将取指地址队列20中的条目项中的跳转位置1。
因为每个指令块的预测是相对独立的,在其他实施例中,也可以采用并行的方式同时预测多个指令块的预测起始地址。
相应地,所述分支预测模块10设置为执行如下步骤:
步骤A1’:在每个周期(即当前预测地址初始化或者更新时),将当前预测地址所在的指令块作为当前指令块,将当前预测地址作为当前指令块的预测起始地址;随后,根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口中的所有指令块的预测起始地址;
如上文所述,如果第一个指令块的范围是[5,63],第二个指令块的范围就是[64,127],第三个指令块的范围就是[128,191]。除了第一个指令块外,其它指令块的起始地址都是64B对齐的。
步骤A2’:根据各个指令块的预测起始地址,在各个指令块中对分支指令进行检索和预测,以判断各个指令块是否命中跳转的分支指令;
步骤A3’:根据判断结果,若所有指令块均未命中跳转的分支指令,则将所有指令块的信息作为分支预测模块10的预测结果依次写入取指地址队列;当前预测地址根据固定预测窗口中的指令块的个数自增;
否则,若存在至少一个指令块命中至少一个跳转的分支指令,则从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块及其前面的所有指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址。
(二)取指地址队列20
再请参见图3,取指地址队列20设置为以指令块为单位,存放分支预测模块10写入的预测结果,在本发明的设计中,取指地址队列有4096个条目项。在本实施例中,取指地址队列中的每一条目项表示一个64B的指令块的预测结果。64B的宽度是为了和取指单元100在访问一级指令缓存时的64B带宽匹配。
取指地址队列每一条目项的结构可以表示为:
<valid,line_addr,phys_addr,begin_offset,end_offset,taken>,
其中,valid表示有效位;line_addr表示行线性地址;phys_addr表示行物理地址;begin_offset表示起始偏移;end_offset表示结束偏移;taken表示跳转位。
其中,行线性地址、起始偏移和结束偏移确定了64B指令块内有效字节的范围,这个有效字节的范围用于检索访存指令记录模块30,查询指令块内存在的访存指令。取指地址队列中的每一个条目项代表一个指令块,每个指令块都包含起始偏移和结束偏移,各个指令块的顺序相连构成了目标程序的指令流。行物理地址用于缓存替换决策模块60查询替换候选项的重用距离时进行地址匹配计算。跳转位用于表示当前条目项对应的数据块是否具有跳转的分支指令。
如图5所示,所述取指地址队列20还设有提交指针,读指针和写指针,这三个指针各自指向取指地址队列中的其中一个条目项,每个指针都可以看作为[0,4095]范围内的一个编号。
取指地址队列20的提交指针指向下一个将提交的指令所在的指令块在取指地址队列20中的条目项。当某个指令块中的所有指令都在主流水线中提交后,该指令块所对应的条目项可以从取指地址队列中移除,此时提交指针加1。具体来说,主流水线中的写回单元500设置为在每个周期向取指地址队列20反馈正在提交的指令在取指地址队列20中的编号,当这个编号大于提交指针时,可以确认提交指针所指向的指令块中的所有指令均已在主流水线中提交,此时提交指针加1。提交指针之前的条目项并不需要主动清空,分支预测模块10的预测结果只能够写入提交指针之前的条目项,从而自动覆盖提交指针之前的条目项。
取指地址队列20的读指针指向下一个将读取的指令所在的指令块在取指地址队列中的条目项。当取指单元100当前读取的指令块中的所有指令被读取完成时,读指针加1,以保证取指地址队列20的读指针一直指向下一个将读取的指令所在的指令块在取指地址队列中的条目项。
也就是说,取指地址队列提交指针和读指针之间的指令块已经处于处理器的主流水线中(即从取指单元100到写回单元500的执行流程)。
取指地址队列20的写指针指向分支预测模块10下一次写入的位置,用于在分支预测模块10写入新的条目项时确定写入的位置。写指针设置为在每次分支预测模块10写入新的条目项时加1。因此,读指针和写指针之间的指令块是有效预测指令块,写指针和提交指针结合则可以判断取指地址队列20的空满情况(即取指地址队列20是否写满)。
处理器的主流水线刷新发生后,根据刷新类型读、写指针会回滚到分支刷新的位置或者提交指针的位置。具体来说,当分支刷新发生时(即刷新类型为分支刷新),主流水线中的执行单元300会向取指地址队列20反馈刷新的分支指令在取指地址队列20中的编号作为分支指令刷新指针,读、写指针回滚到分支刷新的位置。当写回刷新发生时(即刷新类型为写回刷新),读、写指针回滚到提交指针的位置。需要说明的是,刷新过程并不会主动清空队列中的数据,只会改变读、写指针的赋值。分支预测不是100%准确的,因此取指地址队列中的预测结果有可能是错误的,此时需要借助刷新过程使得读、写指针回滚,从而把错误的数据清除掉,以重新写入正确数据。
(三)访存指令记录模块30
再请参见图3,访存指令记录模块30设置为接收写回单元500的反馈的指令执行信息,依次记录其中的已经提交的访存指令的信息,将这些访存指令的信息写入到一个访存指令缓冲31中。由此,能够判断指令块中是否包含访存指令。
访存指令记录模块30具有访存指令缓冲31,其存储结构为表结构,其具有4096个表项。
访存指令的信息(即已经提交的访存指令的信息)包括访存指令的线性地址、访存指令的访存地址、类型以及访存长度等信息。
访存指令缓冲31的每一个表项的结构表示为:
<LineAddr,PhyAddr,InstType,Memlen>,
其中,LineAddr表示访存指令的指令线性地址;PhyAddr表示访存指令在上一次执行时的访存物理地址;InstType表明访存指令的类型,InstType∈{DirectInst,InDirectInst},其中DirectInst表示直接访存指令,InDirectInst表示间接访存指令;Memlen表明访存指令的访存长度。
访存指令记录模块30还设置为:每当取指地址队列20写入新的条目项时,用该条目项所对应的指令块的起始地址(即行线性地址+起始偏移)查询所述访存指令缓冲31,以通过查询尝试得到访存指令的指令线性地址(即位置)LineAddr和类型InstType,并将其依次作为访存指令序列中的访存指令的取指地址队列索引输出至访存指令学习模块40和访存地址队列50。即,如果指令块中包含多条访存指令,则根据访存指令的指令线性地址(即位置)按顺序排列,以得到访存指令序列。取指地址队列20的新增条目项所对应的访存指令的指令线性地址LineAddr(即位置)作为取指地址队列索引会发送给指令学习模块40以供查询,且这个取指地址队列索引会在后续流程中发送给访存地址队列50,以记录访存指令的位置。访存指令的类型则用于访存指令学习模块40在多种模式之间进行选择的。
由此,通过访存指令记录模块30,可以根据分支预测模块10预测的程序的指令块序列获得程序的访存指令序列。
其中,访存指令记录模块30设置为在查询过程中使用访存指令缓冲31的所有表项中的访存指令的指令线性地址进行命中判定,以通过查询访存指令缓冲31中所有的访存指令来尝试得到访存指令的指令线性地址(即位置)和类型。
访存指令缓冲31的查询过程如图6所示。如图6所示,访存指令缓冲31的命中判定是一个包含关系的判定,取指地址队列20中的每一个条目项对应于指令块,其是一个区间范围;因此,在进行命中判定时,需要判定各个访存指令的指令线性地址是否在取指地址队列20写入新的条目项所在的区间范围内,若存在访存指令在所述区间范围内,则该访存指令查询命中,否则,查询命中失败,即没有命中任何访存指令,说明对应的指令块中没有访存指令,此时什么操作都不进行。
在本实施例中,取指地址队列20新添加的条目项中包括指令块的48位的起始地址和48位的结束地址,可以转化为高42位的线性地址高位标签(即行线性地址)和低6位的起始偏移和结束偏移。因此,在查询过程中,使用指令块的标签和偏移查询访存指令缓冲31中所有的访存指令,当一条访存指令的指令线性地址的高位标签和指令块的行线性地址相同,并且其低位偏移大于等于指令块的起始偏移,小于等于指令块的结束偏移的时候,即说明该访存指令位于该指令块中,即该访存指令查询命中。
此外,本发明在访存指令缓冲31的基础上还另外新增了步长预测器和时间关联预测器,这些预测器包含在下文将详述的访存模式学习模块40中,从而能够对符合特定模式的访存指令进行预测。
(四)访存模式学习模块40
再请参见图3,访存模式学习模块40设置为将访存指令记录模块30发送的访存指令序列记录在访存历史缓冲41中,根据访存历史缓冲41中保存的历史信息对访存指令的访存模式进行学习,并根据学习到的访存模式来预测访存指令序列中每条访存指令的访存物理地址,将每条访存指令的访存物理地址作为预测结果写入到访存地址队列50。
访存模式学习模块40包括访存历史缓冲41(如图7所示),其设置为接收处理器写回阶段反馈的访存指令的PC和访存物理地址,根据访存指令的PC将访存指令的访存物理地址写入访存历史缓冲41中该访存指令所对应的表项中,每一条表项为一条历史信息。
需要说明的是,访存指令记录模块30的访存指令缓冲31和访存模式学习模块40的访存历史缓冲41存在一定的相似性,两者的区别在于:访存指令记录模块30中的访存指令缓冲31保存指令相关信息,比如访存指令的指令线性地址,访存指令类型等;访存指令缓冲中也会保存访存物理地址,但是只记录了上一次的访存物理地址的结果。而访存模式学习模块40中的访存历史缓冲41主要是为了记录过往访存历史,记录有过往12次的访存物理地址,在此基础上才可以进行访存模式的学习。由于访存指令缓冲31和访存历史缓冲41这两个存储阵列确实存在一定的相似性,所以这两个阵列设计成等大的。虽然访存指令缓冲31和访存历史缓冲41逻辑上是两个阵列,但是在具体实现中访存指令缓冲31和访存历史缓冲41可以统一存储在同一硬件位置,以合并在一起。
访存历史缓冲41是一个由访存指令的PC作为索引的阵列,共4096个表项。访存历史缓冲41中的每一个表项都是一个12项的循环队列,记录有同一访存指令过去12次的访存物理地址。具有同一PC的访存指令被认定为同一个访存指令。
本发明中基于访存历史缓冲的访存模式学习过程同现有算法是有明显区别的。如图7(a)所示,传统的时间关联预取算法基于全局失效缓冲而非访存历史缓冲41来进行访存模式的获取,时间关联预取算法中缓存失效是预取请求生成的触发条件,使用缓存失效的地址A检索全局失效缓冲,获取以地址A作为首地址的地址序列{A,B,C,D}。{B,C,D}这三个地址即为地址A的预取候选项,A,B,C,D均可以用来发送预取请求。为了保证预取请求能够覆盖更多的缓存失效场景,在检索以地址A为首地址的地址序列时一般采用最长匹配原则,以便能够发出更多的预取请求。并且为了防止过多的预取请求浪费缓存系统带宽,发出的预取请求的个数通常受预取深度(degree)的制约。对传统算法而言,地址序列的长度(即预取深度)并不影响预测的准确性,长度只起到控制预取提前量的作用。
如图7(b)所示,在本发明中的访存指令M所在的指令块可能在取指地址队列20中出现多次,本发明需要为访存指令M的每次出现独立进行地址预测。如果访存指令M的访存物理地址的行为符合模式{A,B,C,D},A,B,C,D均是访存指令M的访存物理地址,则本发明必须在学习到步长模式的长度为4的前提下才能准确预测访存指令M第五次出现时的访存物理地址为A。因此,经过学习得到的访存模式的步长模式是本发明在学习阶段必须要考虑的因素。
因此,所述访存模式学习模块40包括步长预测器42和时间关联预测器43,使得访存模式学习模块40在访存历史缓冲41的基础上通过步长预测器42和时间关联预测器43实现步长模式、时间关联模式等多种访存模式的学习和预测。
本发明的步长预测器42基于传统的IBSP(智能盲信号处理方法)算法。在本实施例中,步长预测器42的每一条目项用于记录一种步长模式,所述步长模式是指步长访存序列,条目项的结构如图8所示,步长预测器42的每一条目项包括一个步长访存序列的标签、上一次地址、上一次步长、可信计数器、当前模式、首地址、最大计数器和方向。也就是说,在传统的IBSP算法的基础上,本发明的步长预测器的条目项扩展了可信计数器,当前模式,首地址以及最大计数器等内容。原本的IBSP算法只需要记录步长信息,因为数据的预取操作仅仅是在当前的访存物理地址的基础上计算出来的。针对步长访存序列{A,A+K,A+2K,...,A+NK}这样的固定步长模式的访存物理地址的序列,本发明的步长预测器不仅要记录其步长K,同时也要记录步长访存序列的起始地址A以及最大计数值N。因此,为了增加步长预测器42的准确性,步长预测器42增加了可信计数器和当前模式。具体来说,当上一次步长和当前步长相同时,可信计数器加一,否则可信计数器清零。当可信计数器的数值大于某个阈值时,将当前模式置1,表明当前访存指令的行为确实是符合步长模式的。若当前模式为0,则表明当前尚处于学习阶段,学习阶段的步长预测器不输出预测结果。步长预测器还包括步长和方向位,步长始终是正值,方向位决定步长访存序列是递增还是递减。在步长预测器在进行访存指令的条目项分配时,将该条目项的首地址设置为当前的访存物理地址。在步长模式计数过程中,首地址是不更新的,只更新上一次地址为当前最新的访存物理地址,通过这种方式将一个步长访存序列的首地址保存下来。当步长预测器42为某条符合步长访存序列的访存指令进行更新时,发现当前的访存指令的访存物理地址恰好等于步长预测器42中当前的步长访存序列的首地址,说明该首地址所对应的步长访存序列又被重新执行了一遍。此时将可信计数器的值更新到最大计数器中,使得步长访存序列的头和尾都被记录下来。
下面示例性地给出步长模式的识别算法。
算法1.步长模式识别算法
输入:提交的访存指令PC和物理地址PhysAddr;
输出:是否是步长模式
if(当前模式==步长模式);
if(当前方向和步长与历史记录不符)
if(PhysAddr==首地址&&(最大计数器==0||可信计数器!=最大计数器))
最大计数器=可信计数器;
else
清空步长相关信息;
end if
else
可信计数器++;
if(最大计数器!=0&&可信计数器>最大计数器)
最大计数器=可信计数器;
end if
end if
else
if(当前方向和步长与历史记录不符)
清空步长相关信息;
else
可信计数器+1;
if(可信计数器>学习阈值)
当前模式=步长模式;
end if
end if
end if
时间关联预测器43的每一条目项用于记录一种时间关联模式,时间关联模式是指以固定的次序重复出现的一段访存序列,即,一个时间关联访存序列。所述时间关联预测器43的每一条目项包括时间关联模式、时间关联序列长度和时间关联序列。例如我们观察到{A,B,C,D,A,B,C,D}这样的访存序列之后,{B,C,D}这样的序列有很大概率紧接着在A之后出现。指令级访存行为中也存在时间关联模式。
算法2.时间关联模式识别
输入:过去12次访存物理地址;
输出:时间关联信息;
将过去12次访存物理地址记录在访存历史缓冲[11:0]中;
if(访存历史缓冲[3n-1:0]匹配
{A1,A2,…,An,A1,A2,…,An,A1,A2,…,An})
时间关联模式=1;
时间关联序列长度=n;
时间关联序列=访存历史缓冲[n-1:0];
end if
时间关联预测器依赖访存历史缓冲中记录的每一条访存指令过去12次的访存物理地址,根据这12次历史信息识别时间关联模式。本发明的算法中相同访存序列重复3次才能确认为时间关联模式,支持序列长度不超过4的时间关联模式。
除此基本的时间关联模式之外,本发明算法还支持形如{A,B,C,A+n,B+n,C+n,A+2n,B+2n,C+2n,…}这样的“步长-时间关联模式”。
(五)访存地址队列50
再请参见图3,访存地址队列50用来存放访存指令记录模块30和访存模式学习模块40的预测结果,即访存指令记录模块30所输出的访存指令序列以及访存模式学习模块40所输出的每条访存指令的访存物理地址。访存地址队列50中的内容可以看作一级数据缓存的未来访问序列。
访存地址队列50有多个条目项,每个条目项对应于一条访存指令的信息并且对应于取指地址队列20中的一个条目项。访存地址队列50具有对应于取指地址队列20中提交指针、读指针和写指针所指向的条目项的提交指针、读指针和写指针。具体来说,访存地址队列50的提交指针指向下一个将提交的指令在访存地址队列50中的条目项,访存地址队列50的读指针指向下一个将读取的指令在访存地址队列50中的条目项,访存地址队列50的写指针指向访存指令记录模块30和访存模式学习模块40下一次写入的位置。
在本实施例中,访存地址队列50有65536个条目项。65536是在取指地址队列20有4096个条目项的基础上得出,由于取指地址队列20的每个条目项代表一个64B对齐的指令块,我们假设每个指令块中最多有16条访存指令,因此4096个指令块中最多包含65536条访存指令。访存地址队列50中的每一条目项对应一条访存指令的信息,每个取指地址队列20中的一个条目项可能对应于访存地址队列50的0到16个条目项。此时,由于并不是所有的64B指令块中都有16条访存指令,访存地址队列50的容量是存在设计冗余的。
访存地址队列50中每一条目项的结构表示为:
<valid,inst_line_addr,mem_phys_addr,memlen,inst_queue_index>,
其中,valid表示有效位;inst_line_addr表示指令线性地址;mem_phys_addr表示访存物理地址;memlen表示访存长度,根据访存物理地址和访存长度可以识别跨行的访存指令;inst_queue_index表示取指地址队列索引,便于在流水线刷新时进行取指地址队列和访存地址队列的同步刷新。
其中,指令线性地址inst_line_addr、访存长度memlen和取指地址队列索引inst_queue_index来自访存指令记录模块30中的访存指令缓冲31,访存物理地址mem_phys_addr来自访存模式学习模块40或者访存指令记录模块30。如果访存模式学习模块40识别到该访存指令所属的步长模式和/或时间关联模式,则该访存指令的访存物理地址由访存模式学习模块40中的对应预测器给出;否则,说明访存指令不属于特定模式,则访存物理地址来自于访存指令缓冲31中的访存指令在上一次执行时的物理地址。
访存地址队列50在主流水线发生分支刷新时的刷新流程的原理如图9所示。在主流水线发生分支刷新时,主流水线的执行单元向取指地址队列20反馈分支指令在取指地址队列20中的编号,取指地址队列20的读、写指针根据分支指令的编号作为分支指令刷新指针进行回滚到分支刷新的位置。同时,分支指令在取指地址队列20中的编号同样也会发送给访存地址队列50,访存地址队列50首先从提交指针的位置开始遍历队列,找到条目项的取指地址队列索引inst_queue_index等于分支指令在取指地址队列20中的编号的第一个条目项的位置,该位置为分支刷新的位置,然后将读、写指针回滚到分支刷新的位置。
(六)缓存替换决策模块60
再请参见图3,缓存替换决策模块60用于实现缓存替换的决策过程。
根据上文所述,取指地址队列20和访存地址队列50中的内容分别是一级指令缓存的未来访问序列和一级数据缓存的未来访问序列。
所述缓存替换决策模块60设置为接收一级缓存(即一级指令缓存L1I)发出的所有缓存替换候选项的物理地址,使用这些物理地址检索取指地址队列20,得到每个缓存替换候选项的重用距离,根据重用距离选择一个缓存替换候选项作为踢出项反馈给一级缓存(即一级指令缓存L1I),以将该缓存替换候选项从一级缓存中踢出。
一级数据缓存L1D的替换请求处理与此类似,仅仅是一级指令缓存L1I替换成一级数据缓存L1D,取指地址队列20替换成访存地址队列50。
缓存替换候选项的重用距离的计算过程如下:在检索过程使用64B对齐的物理地址进行匹配;从取指地址队列20/访存地址队列50的读指针开始,到写指针结束,与缓存替换候选项匹配的第1个的条目项的位置到读指针之间的距离就是缓存替换候选项的重用距离。若一个缓存替换候选项未命中,则将该缓存替换候选项的重用距离设置为最大值(最大值是取指地址队列20/访存地址队列50的条目项的总个数+1)。
所述缓存替换决策模块60还设置为:在检索取指地址队列20或者访存地址队列50之前,判断取指地址队列20或者访存地址队列50中的有效预测结果是否小于有效预测结果的数量阈值,若小于,则替换决策模块60向一级缓存反馈相应的信息,使得一级缓存使用默认替换策略进行候选项选择,此时结束流程。若取指地址队列20或者访存地址队列50中没有足够多的有效预测结果,替换决策模块60会向一级缓存反馈相应的信息,此时一级缓存使用默认替换策略进行候选项选择。所述默认替换策略是现有技术,一般是LRU(leastrecent used)策略,当然也可以是其它策略。
优选地,若取指地址队列20或者访存地址队列50中的有效预测结果小于4096时,使用默认替换策略。即有效预测结果的数量阈值为4096。4096的选择是基于8倍一级缓存大小。一级指令或者数据缓存都是32KB的容量,包含512个64B的缓存行。512*8=4096。这也是取指地址队列选择4096项的原因。然而在其他实施例中,有效预测结果的数量阈值也可以采用其他数值替代。
在根据重用距离选择一个缓存替换候选项作为踢出项时,如果多个缓存替换候选项中重用距离最小的缓存替换候选项是唯一的,则将重用距离最大的缓存替换候选项作为踢出项反馈给一级缓存;否则,即多个缓存替换候选项中重用距离最小的缓存替换候选项不是唯一的,有多个缓存替换候选项的重用距离相同,则选择重用距离最小的缓存替换候选项中一级缓存所发送的路号最小的一项从一级缓存中踢出。
一级缓存所发送的多个缓存替换候选项是有次序的,比如发送了4个替换候选项,但是这4个缓存替换候选项的重用距离相同(4个缓存替换候选项都未命中,所以重用距离都为最大值),那么就选择第一个缓存替换候选项。
由此,本发明中提出的基于指令流和访存模式学习的缓存替换系统可以避免乱序执行和缓存预取的干扰,预测对象是行为简单的独立访存指令,提高了访存序列预测的准确性,明显减少缓存失效发生的次数。
基于上文所述的基于指令流和访存模式学习的缓存替换系统,所实现的基于指令流和访存模式学习的缓存替换方法,包括:
步骤S1:利用一分支预测模块,采用提前预测技术,对目标程序的指令流进行预测并将预测结果写入一取指地址队列中;取指地址队列20写满则暂停预测过程;
所述步骤S1包括:
步骤A1:在每个周期,将当前预测地址所在的指令块作为当前指令块,将当前预测地址作为当前指令块的预测起始地址;根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口;
步骤A2:在获得当前指令块的预测起始地址后,在当前指令块中对分支指令进行检索和预测,以判断当前指令块是否命中跳转的分支指令;
步骤A3:根据判断结果,若当前指令块未命中跳转的分支指令,说明当前指令块中没有分支指令或者识别到的分支指令均未跳转,则将当前指令块的信息作为分支预测模块10的预测结果写入取指地址队列;随后,确定下一指令块的预测起始地址,并将下一指令块作为新的当前指令块,并回到步骤A2,直到当前指令块为固定预测窗口中的最后一个指令块,此时当前预测地址根据固定预测窗口中的指令块的个数自增,从而实现当前预测地址的更新,进入下一个周期;
否则,从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址,以进入下一个周期。
或者,所述步骤S1包括:
步骤A1’:在每个周期(即当前预测地址初始化或者更新时),将当前预测地址所在的指令块作为当前指令块,将当前预测地址作为当前指令块的预测起始地址;随后,根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口中的所有指令块的预测起始地址;
步骤A2’:根据各个指令块的预测起始地址,在各个指令块中对分支指令进行检索和预测,以判断各个指令块是否命中跳转的分支指令;
步骤A3’:根据判断结果,若所有指令块均未命中跳转的分支指令,则将所有指令块的信息作为分支预测模块10的预测结果依次写入取指地址队列;当前预测地址根据固定预测窗口中的指令块的个数自增,以进入下一个周期;
否则,若存在至少一个指令块命中至少一个跳转的分支指令,则从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块及其前面的所有指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址,以进入下一个周期。
步骤S2:利用一访存指令记录模块,记录已经提交的访存指令的信息,将这些访存指令的信息写入到其访存指令缓冲中;每当取指地址队列20写入新的条目项时,用该条目项所对应的指令块的起始地址查询所述访存指令缓冲,以通过查询尝试得到访存指令序列并将其输出至访存指令学习模块和访存地址队列;
步骤S3:利用一访存指令学习模块,将访存指令序列记录在访存历史缓冲中,根据访存历史缓冲中保存的历史信息对访存指令的访存模式进行学习,并根据学习到的访存模式来预测访存指令序列中每条访存指令的访存物理地址,将每条访存指令的访存物理地址写入到一访存地址队列;
步骤S4:利用一缓存替换决策模块接收一级缓存发出的所有缓存替换候选项的物理地址,使用这些物理地址检索所述取指地址队列或访存地址队列,得到每个缓存替换候选项的重用距离,根据重用距离选择一个缓存替换候选项作为踢出项反馈给一级缓存。
对本发明的实验验证:
采用GEM5模拟器作为基础实验环境,使用alpha指令集。使用DerivO3CPU细粒度CPU模型,分支预测算法为TAGE_L,一级缓存32KB,二级缓存256KB,取指位宽64B,内存4GB。选择GemsFDTD,astar,hmmer,lbm,bwaves这5个SPEC2006程序对比本发明方式和其他方法的性能。
如图10所示,本发明提出的基于指令流和访存模式学习的缓存替换方法(即RTRDP算法)相比LRU算法平均提高3.2%的性能。和BRRIP算法、BIP算法、SHIP算法和PERCEPTRON算法相比RTRDP算法分别平均提高12.3%、14.4%、9.17%和18.07%的性能。由此,说明当前缓存系统瓶颈导致高性能处理器的性能无法得到充分发挥,本发明对提升处理器性能有显著的作用。
本发明方法适用于所有的处理器微架构,不局限于特定的分支预测算法和指令集,当然可能由于指令集以及特定处理器微架构的不同,具体实现过程可能稍有变化,但也属于本发明保护的范围。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (10)
1.一种基于指令流和访存模式学习的缓存替换系统,其特征在于,包括分支预测模块、取指地址队列、访存指令记录模块、访存模式学习模块、访存地址队列和缓存替换决策模块;
所述分支预测模块设置为采用提前预测技术,对目标程序的指令流进行预测并将预测结果写入取指地址队列中;
所述访存指令记录模块设置为依次记录已经提交的访存指令的信息,将这些访存指令的信息写入到其访存指令缓冲中;同时,每当取指地址队列写入新的条目项时,用该条目项所对应的指令块的起始地址查询所述访存指令缓冲,以通过查询尝试得到访存指令序列并将其输出至访存指令学习模块和访存地址队列;
所述访存模式学习模块设置为将访存指令序列记录在其访存历史缓冲中,根据访存历史缓冲中保存的历史信息对访存指令的访存模式进行学习,并根据学习到的访存模式来预测访存指令序列中每条访存指令的访存物理地址并写入访存地址队列;
所述缓存替换决策模块设置为接收一级缓存发出的所有缓存替换候选项的物理地址,使用这些物理地址检索所述取指地址队列或访存地址队列,得到每个缓存替换候选项的重用距离,根据重用距离选择一个缓存替换候选项作为踢出项反馈给一级缓存。
2.根据权利要求1所述的基于指令流和访存模式学习的缓存替换系统,其特征在于,所述分支预测模块设置为将预测结果以指令块为粒度写入取指地址队列中;且所述分支预测模块设置为执行:
步骤A1:在每个周期,将当前预测地址所在的指令块作为当前指令块,将当前预测地址作为当前指令块的预测起始地址;根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口;
步骤A2:在获得当前指令块的预测起始地址后,在当前指令块中对分支指令进行检索和预测,以判断当前指令块是否命中跳转的分支指令;
步骤A3:根据判断结果,若当前指令块未命中跳转的分支指令,说明当前指令块中没有分支指令或者识别到的分支指令均未跳转,则将当前指令块的信息作为分支预测模块的预测结果写入取指地址队列;随后,确定下一指令块的预测起始地址,并将下一指令块作为新的当前指令块,并回到步骤A2,直到当前指令块为固定预测窗口中的最后一个指令块,此时当前预测地址根据固定预测窗口中的指令块的个数自增,以进入下一个周期;
否则,从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址,以进入下一个周期
或者,所述分支预测模块设置为将预测结果以指令块为粒度写入取指地址队列中;且所述分支预测模块设置为执行如下步骤:
步骤A1’:在每个周期,将当前预测地址所在的指令块作为当前指令块,将当前预测地址作为当前指令块的预测起始地址;随后,根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口中的所有指令块的预测起始地址;
步骤A2’:根据各个指令块的预测起始地址,在各个指令块中对分支指令进行检索和预测,以判断各个指令块是否命中跳转的分支指令;
步骤A3’:根据判断结果,若所有指令块均未命中跳转的分支指令,则将所有指令块的信息作为分支预测模块的预测结果依次写入取指地址队列;当前预测地址根据固定预测窗口中的指令块的个数自增,以进入下一个周期;
否则,若存在至少一个指令块命中至少一个跳转的分支指令,则从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块及其前面的所有指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址,以进入下一个周期。
3.根据权利要求2所述的基于指令流和访存模式学习的缓存替换系统,其特征在于,指令块的信息包括指令块的行线性地址、行物理地址、起始偏移、结束偏移以及跳转位;
在将指令块的信息写入取指地址队列时,将指令块的预测起始地址拆分为高位的行线性地址和低位的起始偏移,并通过行线性地址查询TLB得到行物理地址,并将得到的行线性地址、行物理地址和起始偏移写入取指地址队列的条目项中的对应域;此外,如果指令块命中的跳转的分支指令,则第一个跳转的分支指令的末尾字节偏移作为结束偏移写入取指地址队列;否则,取指地址队列中的结束偏移设置为63。
4.根据权利要求1所述的基于指令流和访存模式学习的缓存替换系统,其特征在于,所述取指地址队列每一条目项的结构为:
<valid,line_addr,phys_addr,begin_offset,end_offset,taken>,
其中,valid表示有效位;line_addr表示行线性地址;phys_addr表示行物理地址;begin_offset表示起始偏移;end_offset表示结束偏移;taken表示跳转位;
所述取指地址队列还设有提交指针,读指针和写指针;取指地址队列的提交指针指向下一个将提交的指令所在的指令块在取指地址队列中的条目项;取指地址队列的读指针指向下一个将读取的指令所在的指令块在取指地址队列中的条目项;取指地址队列的写指针指向分支预测模块下一次写入的位置;在处理器的主流水线刷新发生后,根据刷新类型,取指地址队列的读指针和写指针回滚到分支刷新的位置或者提交指针的位置;
所述访存指令缓冲的每一个表项的结构为:
<LineAddr,PhyAddr,InstType,Memlen>,
其中,LineAddr表示访存指令的指令线性地址;PhyAddr表示访存指令在上一次执行时的访存物理地址;InstType表明访存指令的类型,InstType∈{DirectInst,InDirectInst},其中DirectInst表示直接访存指令,InDirectInst表示间接访存指令;Memlen表明访存指令的访存长度;
所述访存历史缓冲是一个由访存指令的PC作为索引的阵列,访存历史缓冲中的每一个表项都记录有同一访存指令过去12次的访存物理地址;
且所述访存地址队列中每一条目项的结构为:
<valid,inst_line_addr,mem_phys_addr,memlen,inst_queue_index>,
其中,valid表示有效位;inst_line_addr表示指令线性地址;mem_phys_addr表示访存物理地址;memlen表示访存长度;inst_queue_index表示取指地址队列索引;
所述访存地址队列具有提交指针、读指针和写指针;在主流水线发生分支刷新时,访存地址队列的读指针和写指针回滚到分支刷新的位置。
5.根据权利要求4所述的基于指令流和访存模式学习的缓存替换系统,其特征在于,所述分支预测模块设置为:若取指地址队列写满则暂停预测过程;取指地址队列是否写满根据所述取指地址队列的写指针和提交指针的结合来判断。
6.根据权利要求1所述的基于指令流和访存模式学习的缓存替换系统,其特征在于,所述访存模式学习模块包括步长预测器和时间关联预测器,使得访存模式学习模块在访存历史缓冲的基础上通过步长预测器和时间关联预测器实现步长模式和时间关联模式的学习和预测。
7.根据权利要求6所述的基于指令流和访存模式学习的缓存替换系统,其特征在于,所述步长预测器的每一条目项用于记录一种步长模式,所述步长模式是指步长访存序列;步长预测器的每一条目项包括一个步长访存序列的标签、上一次地址、上一次步长、可信计数器、当前模式、首地址、最大计数器和方向;
所述时间关联预测器的每一条目项用于记录一种时间关联模式,时间关联模式是指一个时间关联访存序列,所述时间关联预测器的每一条目项包括时间关联模式、时间关联序列长度和时间关联序列。
8.根据权利要求1所述的基于指令流和访存模式学习的缓存替换系统,其特征在于,所述缓存替换决策模块设置为:在根据重用距离选择一个缓存替换候选项作为踢出项时,如果多个缓存替换候选项中重用距离最小的缓存替换候选项是唯一的,则将重用距离最大的缓存替换候选项作为踢出项反馈给一级缓存;否则,选择重用距离最小的缓存替换候选项中一级缓存所发送的路号最小的一项从一级缓存中踢出。
9.根据权利要求1所述的基于指令流和访存模式学习的缓存替换系统,其特征在于,所述缓存替换决策模块还设置为:在检索所述取指地址队列或访存地址队列之前,判断取指地址队列或访存地址队列中的有效预测结果是否小于有效预测结果的数量阈值,若小于,则替换决策模块向一级缓存反馈相应的信息,使得一级缓存使用默认替换策略进行候选项选择,此时结束流程。
10.一种基于指令流和访存模式学习的缓存替换方法,其特征在于,包括:
步骤S1:利用一分支预测模块,采用提前预测技术,对目标程序的指令流进行预测并将预测结果写入一取指地址队列中;
步骤S2:利用一访存指令记录模块,依次记录已经提交的访存指令的信息,将这些访存指令的信息写入到其访存指令缓冲中;每当取指地址队列写入新的条目项时,用该条目项所对应的指令块的起始地址查询所述访存指令缓冲,以通过查询尝试得到访存指令序列并将其输出至访存指令学习模块和访存地址队列;
步骤S3:利用一访存指令学习模块,将访存指令序列记录在访存历史缓冲中,根据访存历史缓冲中保存的历史信息对访存指令的访存模式进行学习,并根据学习到的访存模式来预测访存指令序列中每条访存指令的访存物理地址,将每条访存指令的访存物理地址写入到一访存地址队列;
步骤S4:利用一缓存替换决策模块接收一级缓存发出的所有缓存替换候选项的物理地址,使用这些物理地址检索所述取指地址队列或访存地址队列,得到每个缓存替换候选项的重用距离,根据重用距离选择一个缓存替换候选项作为踢出项反馈给一级缓存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111358078.7A CN113986774A (zh) | 2021-11-16 | 2021-11-16 | 一种基于指令流和访存模式学习的缓存替换系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111358078.7A CN113986774A (zh) | 2021-11-16 | 2021-11-16 | 一种基于指令流和访存模式学习的缓存替换系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113986774A true CN113986774A (zh) | 2022-01-28 |
Family
ID=79748916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111358078.7A Pending CN113986774A (zh) | 2021-11-16 | 2021-11-16 | 一种基于指令流和访存模式学习的缓存替换系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113986774A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114546488A (zh) * | 2022-04-25 | 2022-05-27 | 超验信息科技(长沙)有限公司 | 一种向量跨步指令的实现方法、装置、设备及存储介质 |
CN115658150A (zh) * | 2022-10-31 | 2023-01-31 | 海光信息技术股份有限公司 | 一种指令分配方法、处理器、芯片及电子设备 |
CN115934171A (zh) * | 2023-01-16 | 2023-04-07 | 北京微核芯科技有限公司 | 为多指令调度分支预测器的方法及装置 |
CN116048627A (zh) * | 2023-03-31 | 2023-05-02 | 北京开源芯片研究院 | 指令缓冲方法、装置、处理器、电子设备及可读存储介质 |
CN117472446A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 基于处理器的多级取指目标缓冲器的分支预测方法 |
-
2021
- 2021-11-16 CN CN202111358078.7A patent/CN113986774A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114546488A (zh) * | 2022-04-25 | 2022-05-27 | 超验信息科技(长沙)有限公司 | 一种向量跨步指令的实现方法、装置、设备及存储介质 |
CN115658150A (zh) * | 2022-10-31 | 2023-01-31 | 海光信息技术股份有限公司 | 一种指令分配方法、处理器、芯片及电子设备 |
CN115658150B (zh) * | 2022-10-31 | 2023-06-09 | 海光信息技术股份有限公司 | 一种指令分配方法、处理器、芯片及电子设备 |
CN115934171A (zh) * | 2023-01-16 | 2023-04-07 | 北京微核芯科技有限公司 | 为多指令调度分支预测器的方法及装置 |
CN115934171B (zh) * | 2023-01-16 | 2023-05-16 | 北京微核芯科技有限公司 | 为多指令调度分支预测器的方法及装置 |
CN116048627A (zh) * | 2023-03-31 | 2023-05-02 | 北京开源芯片研究院 | 指令缓冲方法、装置、处理器、电子设备及可读存储介质 |
CN116048627B (zh) * | 2023-03-31 | 2023-06-16 | 北京开源芯片研究院 | 指令缓冲方法、装置、处理器、电子设备及可读存储介质 |
CN117472446A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 基于处理器的多级取指目标缓冲器的分支预测方法 |
CN117472446B (zh) * | 2023-12-28 | 2024-04-09 | 北京微核芯科技有限公司 | 基于处理器的多级取指目标缓冲器的分支预测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113986774A (zh) | 一种基于指令流和访存模式学习的缓存替换系统及方法 | |
Kim et al. | Path confidence based lookahead prefetching | |
Shevgoor et al. | Efficiently prefetching complex address patterns | |
US5353426A (en) | Cache miss buffer adapted to satisfy read requests to portions of a cache fill in progress without waiting for the cache fill to complete | |
US6560693B1 (en) | Branch history guided instruction/data prefetching | |
KR102244191B1 (ko) | 캐시 및 변환 색인 버퍼를 갖는 데이터 처리장치 | |
US4980823A (en) | Sequential prefetching with deconfirmation | |
US7657726B2 (en) | Context look ahead storage structures | |
US7099999B2 (en) | Apparatus and method for pre-fetching data to cached memory using persistent historical page table data | |
CN100517274C (zh) | 高速缓冲存储器及其控制方法 | |
CN114579479A (zh) | 基于指令流混合模式学习的低污染缓存预取系统及方法 | |
US9396117B2 (en) | Instruction cache power reduction | |
US9582282B2 (en) | Prefetching using a prefetch lookup table identifying previously accessed cache lines | |
US8677049B2 (en) | Region prefetcher and methods thereof | |
US7047362B2 (en) | Cache system and method for controlling the cache system comprising direct-mapped cache and fully-associative buffer | |
JPH1074166A (ja) | 多重レベル・ダイナミック・セット予測方法および装置 | |
JP5622155B2 (ja) | キャッシュメモリおよびその制御方法 | |
US11301250B2 (en) | Data prefetching auxiliary circuit, data prefetching method, and microprocessor | |
CN101681258A (zh) | 使用可变长度指令集处理器中分支目标地址缓存的分支预测 | |
US11036639B2 (en) | Cache apparatus and method that facilitates a reduction in energy consumption through use of first and second data arrays | |
US11249762B2 (en) | Apparatus and method for handling incorrect branch direction predictions | |
JP5699854B2 (ja) | 記憶制御システムおよび方法、置換方式および方法 | |
JPH0743671B2 (ja) | キャッシュ・メモリ制御方式 | |
US7519777B1 (en) | Methods, systems and computer program products for concomitant pair prefetching | |
CN116383100A (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 |