CN112579176A - 记录地址历史的装置和方法 - Google Patents
记录地址历史的装置和方法 Download PDFInfo
- Publication number
- CN112579176A CN112579176A CN202011494505.XA CN202011494505A CN112579176A CN 112579176 A CN112579176 A CN 112579176A CN 202011494505 A CN202011494505 A CN 202011494505A CN 112579176 A CN112579176 A CN 112579176A
- Authority
- CN
- China
- Prior art keywords
- instruction
- address history
- address
- bpq
- history
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 238000012545 processing Methods 0.000 claims abstract description 17
- 230000004044 response Effects 0.000 claims abstract description 5
- 230000006870 function Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 7
- 230000008859 change Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000007429 general method Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003672 processing method Methods 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
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)
Abstract
本发明提出了一种记录取指地址历史的装置和方法,该方法包括:当取指请求中的多个指令被提交后,释放与多个指令相关联的分支处理队列BPQ表项;以及响应于BPQ表项的释放,判断要释放的BPQ表项中是否包含调用指令,当要释放的BPQ表项中包含调用指令时,判断调用指令是直接将取指地址历史记录输出到指令预取器的记录表中的第一类型,还是等待与调用指令相对应的返回指令执行后将取指地址历史记录输出到指令预取器的记录表中的第二类型,基于判断结果来选择与第一类型和第二类型相对应的操作模式来将取指地址历史记录输出到指令预取器的记录表中。
Description
技术领域
本申请涉及处理器设计领域,且更具体地涉及一种记录地址历史的装置和方法。
背景技术
当包含流水线技术的处理器(例如,中央处理单元CPU)处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生跳转,而这会打断对流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕。在存在分支的情况下,流水线越长,处理器等待的时间便越长,因为处理器必须等待分支指令处理完毕,才能确定下一条进入流水线的指令。分支预测技术便是为解决这一问题而出现的。分支预测是处理器在程序分支指令执行前预测其结果的一种机制,其根据历史信息来对跳转指令进行预测,是能够解决处理分支指令所导致的CPU流水线失败的数据处理方法。具体地,分支预测包括静态分支预测和动态分支预测,最简单的静态分支预测方法就是任选分支中的一条分支,这样平均命中率为50%,更精确的办法是根据先前运行的结果进行统计从而尝试预测分支是否会跳转;而动态分支预测是处理器近来已经尝试采用的技术。最简单的动态分支预测策略是使用分支目标缓冲器或分支历史表来进行分支预测。采用分支预测,处理器猜测进入哪个分支,并且基于预测的结果来取指、译码。如果猜测正确,就能节省时间,加快运算速度;如果猜测错误,刷新流水线,在新的地址处取指、译码。
在图1所示的传统的CPU的简要结构100中,分支预测单元101位于CPU流水线的最前端,并且用于生成取指请求。取指单元102执行由分支预测单元所生成的取指请求,从一级(L1)指令缓存106中取出指令,发送给译码单元103。译码单元103对从L1指令缓存106中取出的指令进行译码,然后将译码后的结果发送给执行单元104。执行单元104根据要执行的类别执行相应的操作,并进行乱序指令的重新排序,以保证指令的按序提交。如果从L1指令缓存106中取出的指令是访存指令,则执行单元104还会进一步将访存指令发送给访存单元105进行执行,以访问L1数据缓存107中的数据。L1指令缓存106和L1数据缓存107被访问的速度很快,但是容量比较小,在它们后面的是容量逐渐增大、但速度逐渐减慢的二级(L2)缓存和三级(L3)缓存108。L2/L3缓存108中一般是指令和数据一起存储的。L2/L3缓存108的后面是内存109,其存储所有的指令和数据。
随着代码规模的不断增长,上述取指阶段访问L1指令缓存106的不命中率不断增长,一旦取指单元106在从L1指令缓存106中取指时发生不命中,就需要向更慢的L2/L3缓存108发送请求,从而阻塞了流水线的执行,影响程序的性能。因此,L1指令缓存106通常需要预取,即提前将要访问的指令取入L1指令缓存106,以在对L1指令缓存106进行真正访问时,提高取指的命中率。将提前将要访问的指令取入L1指令缓存106,也就需要提前记录要访问的指令的地址。因此,为了提高取指的命中率,现阶段需要一种能够灵活记录需要被预取的指令的地址的地址历史记录方法,即使得随着CPU内的代码规模不断增长时,指令能够根据其代码空间局部性和时间局部性被整段地预取到指令缓存中,而不是像现有技术一样被分段地预取到指令缓存中。
发明内容
技术问题
根据在背景技术中描述的传统的CPU的简要结构,现有技术已经提出了使用了独立的指令预取器来进行指令预取的方法,如图2(A)所示的方法200。图2(A)示出了用于指令预取的一般方法200,其原理是由图1中的分支预测单元101将过去的取指地址历史和基于程序上下文(context)所生成的签名(signature)之间的对应关系记录并存储在取指地址历史记录表201中,其中,上下文(context)是计算机术语,其表示程序当前的一系列状态。上述相同的签名指示程序很大概率上又运行到了相同的上下文,因此很大概率上有着相同的代码访问,即签名可以作为指令预取时对指令的标识;然后当下次出现相同的签名时,读取出先前记录并存储在取指地址历史记录表201中的取指地址历史,并生成预取请求。指令预取的核心是存储取指地址历史的记录表201,其输入为当前的取指地址和其他所需信息,当前的取指地址被暂时地存储在地址历史记录结构202中,当生成一个签名时,暂时记录的取指地址历史信息被写入取指地址历史记录表201中;同时,当生成一个签名时,也会读取取指地址历史记录表201,如果其中已经有了相应的取指地址历史记录,则从取指地址历史记录表201中生成预取请求。
更具体地,图2(B)示出了用于指令预取的一种具体的方法210,即返回地址栈指导的指令预取(Return-address-stack Directed Instruction Prefetching,RDIP)方法。参考图2(B),在RDIP中,利用整个返回地址栈(RAS)202的内容(RAS中存储的是程序的调用栈信息,可以被认为是程序上下文的一种)生成签名,在RAS 202进行进栈/出栈(push/pop)时(即调用/返回(Call/Return)指令发生时),将整个RAS 202中的内容转换为签名,同时把两次签名生成之间(即两次调用/返回指令之间)所记录到的取指未命中的地址,填入取指历史地址记录表203中。这里的取指历史地址记录表203可以是图2(A)中的取指历史地址记录表201。
如图2(A)所述,在RDIP中,也具有用于暂时记录地址历史的地址历史记录结构(图2(B)中未示出),该地址历史记录结构在每次签名的生成时被清空,然后记录取指未命中的地址;并且在下个签名的生成时,把其中所记录的内容填入取指历史地址记录表203中,然后再次被清空,记录下一个取指未命中的地址,以这样的方式循环往复。
对于RDIP,其中用于暂时记录地址历史的地址历史记录结构在每次签名的生成时都必须被清空,然后才能开始为新的签名记录一组取指未命中的地址。如果一段特定代码内存在多个函数调用,那么每次调用/返回就会引起签名的生成,则该特定代码的地址会被分段地记录在取指历史地址记录表203中与多个签名相对应的地址历史记录中。下面参考表1给出一段特定代码的示例代码:
表1示例代码
如果特定代码的代码空间很大,或者其中函数2或函数3的调用很深,比如表1中所示的指令11和指令16在时间上没有局部性,那么特定代码被分段地记录是没有坏处的。但是如果函数1的代码空间很小,或者函数2或函数3的调用并不深,比如表1中所示的指令11和指令16在时间上有局部性,那么特定代码被分段地记录在与多个不同的签名相对应的地址历史记录中就不如将指令11和指令16记录在与一个签名相对应的地址历史记录中,因为后者可以实现指令11和16被一起预取入L1指令缓存中,以提高指令预取的效率。
解决问题的技术方案
针对RDIP在每次签名的生成时,都需要清空用于暂时记录地址历史的地址历史记录结构的缺点,设计实现了一种更灵活的记录地址历史记录的装置和方法。本发明针对上述“暂时记录取指地址历史”的功能进行优化,提出了一种利用现有的硬件返回地址栈(RAS)和分支处理队列(BPQ)进行记录的装置和方法。
根据本发明的一个方面,提出了一种记录取指地址历史的方法,该方法包括:当取指请求中的多个指令被提交后,释放与多个指令相关联的分支处理队列BPQ表项;以及响应于BPQ表项的释放,判断要释放的BPQ表项中是否包含调用指令,当要释放的BPQ表项中包含调用指令时,判断调用指令是直接将取指地址历史记录输出到指令预取器的记录表中的第一类型,还是等待与调用指令相对应的返回指令执行后将取指地址历史记录输出到指令预取器的记录表中的第二类型,选择与第一类型和第二类型相对应的两种操作模式之一来将取指地址历史记录输出到指令预取器的记录表中。
根据本发明的另一个方面,提出了一种记录取指地址历史的装置,该装置包括:分支预测单元,其被配置为当取指请求中的多个指令被提交后,释放与多个指令相关联的分支处理队列BPQ表项;以及指令预取器,其被配置为响应于BPQ表项的释放,判断要释放的BPQ表项中是否包含调用指令,当要释放的BPQ表项中包含调用指令时,判断调用指令是直接将取指地址历史记录输出到指令预取器的记录表中的第一类型,还是等待与调用指令相对应的返回指令执行后将取指地址历史记录输出到指令预取器的记录表中的第二类型,选择与第一类型和第二类型相对应的两种操作模式之一来将取指地址历史记录输出到指令预取器的记录表中。
发明的有益效果
本发明提出了一种记录地址历史的装置和方法,可以支持灵活的签名生成,和对跨签名生成的地址历史的记录。可以支持两种操作模式的混合,以支持更灵活的签名生成和地址记录。具体地,有些调用指令是可以立即输出记录给存储地址历史信息的记录表的,而有些调用指令则是需要等到相应的返回指令的执行才输出记录给存储地址历史信息的记录表。对于前者,需要在输出记录后清空RAS表项中地址历史记录结构中的地址历史记录;而对于后者,则需要把签名填入RAS表项中的地址历史记录结构,等待返回指令的执行,以在输出记录时使用。
附图说明
当结合附图时,根据以下详细描述,本发明的上述和其他方面、特征和优点将更加清楚。
图1示出了传统的CPU的简要结构。
图2(A)示出了用于指令预取的一般方法;图2(B)示出了用于指令预取的一种具体方法;图2(C)示出了返回地址栈RAS更新的一个具体示例。
图3示出了根据本发明的用于记录取指地址历史的装置的框图。
图4(A)示出了根据本发明的用于暂时记录地址历史的地址历史记录结构的示例结构;图4(B)示出了根据本发明的用于暂时记录地址历史的地址历史记录结构的更新操作的流程图。
图5示出了根据本发明的记录取指地址历史的方法的流程图。
图6示出了图3中的指令预取器在与调用指令的第一类型相对应的第一操作模式下的操作的流程图。
图7示出了图3中的指令预取器在与调用指令的第二类型相对应的第二操作模式下的操作的流程图。
具体实施方式
借助于以下附图和实施例,可以更好地理解本公开。本文所描述的实施例本质上仅是示例性的,并且用于描述本公开的一些可能的应用和用途,并且相对于本文所没有明确描述的替代实施例,不应该被认为是对本公开进行限制。
本申请提出了一种利用现有的硬件返回地址栈(RAS)和分支处理队列(BPQ)进行记录的装置和方法。
具体地,返回参考图1,RAS是分支预测单元101中对返回指令进行预测的组件,而BPQ是分支预测单元101中用于记录分支预测单元101所生成的取指请求从生成到其中的所有指令都提交的队列结构。RAS是栈结构,其每个表项为一个指令地址,其基本操作为:
·每次分支预测单元101识别出函数的调用(Call)指令时,为RAS分配一个表项,将该调用指令的下一条指令的地址写入所分配的RAS表项,并把该RAS表项压入RAS的栈顶;
·每次分支预测单元101识别出函数的返回指令(Return)时,把RAS栈顶的RAS表项弹出,将所弹出的RAS表项中的指令地址作为预测的返回的返回地址。值得说明的是,从RAS栈顶弹出的RAS表项并没有立即被回收释放,而是一直保留到返回指令被提交(Retire)。
·每次分支预测单元101获知对返回指令的提交,则释放并回收当预测时弹出的RAS表项。
图2(C)示出了针对上述表1中的代码的RAS更新示例,其中虚线框表示被弹出但是尚未被释放的RAS表项。参考图2(C),可以看到,RAS包括两个重要指针:
·调用(Call)指针:指向RAS中下一个可被分配的RAS表项,即当分支预测单元101识别出函数的调用指令时、写入该调用指令的下一条指令地址的RAS表项;
·返回(Return)指针:指向RAS栈顶的RAS表项,即当分支预测单元101识别出函数的返回指令时、读出返回地址的RAS表项。
这两个指针随着识别出调用/返回而不断变化,但是它们的副本会被记录在分支处理队列BPQ中,以用于当分支预测失败时,对分支预测进行恢复。
分支处理队列BPQ是分支预测单元101中用于记录取指请求从生成到其中所有指令都提交的整个生命周期的队列结构。每个BPQ表项对应一个取指请求,每个BPQ表项的内容通常包括:
·取指请求的完整起始虚拟地址;
·取指请求的完整起始物理地址;
·取指请求的结束地址:结束地址通常没有必要是完整的地址,而只需要是在取指边界内的偏移地址,因此不用区分是虚拟地址还是物理地址;
·分支信息:当前取指请求中包括的分支的信息;
·分支历史:当前取指请求执行前的分支历史的备份;
·RAS的调用(Call)指针:当前取指请求执行前的RAS调用指针的备份;
·RAS的返回(Return)指针:当前取指请求执行前的RAS返回指针的备份。
在生成取指请求时分配BPQ表项,并且在该取之请求中的所有指令都提交时释放BPQ表项。需要说明的是,在一个取指请求中,通常不会同时存在调用指令和返回指令。
下表2示出了在执行表1中所示的函数指令时,BPQ中存储的RAS返回指针的情况。假设每条指令对应一个取指请求:
表2执行表1的代码时,BPQ中存储的RAS返回指针的情况
如上图2(C)和表2所示,在现有技术中,RAS的每个表项仅记录函数的返回地址,使用单独的记录结构记录两次签名的变化(包括调用->返回、返回->调用、调用->调用、返回->返回)之间的地址历史,并且对于该记录结构,每次签名改变其都需要被清0。这样的记录方式较为复杂,且使得在函数中具有时间局部性的代码被分段地记录,降低了后续指令预取的效率。此外,或者也可以多条指令对应一个取指请求,多条指令中仅最后一条指令是被预测为跳转的,例如,指令01和函数调用1是一个取指请求,且指令11、指令12和函数调用2是一个取指请求。
本申请在上述图1和图2(A)-图2(C)的基础上,提出了能够灵活记录需要被预取的指令的地址历史的装置,如下图3所示。
图3示出了根据本发明的用于记录取指地址历史的装置300的框图。图3示出的装置300包括:被配置为提交指令的执行单元302;被配置为当取指请求中的多个指令被提交后、释放与多个指令相关联的分支处理队列BPQ表项的分支预测单元301;以及包括记录指令历史地址的记录表3031的指令预取器303,该指令预取器303被配置为响应于BPQ表项的释放,判断要释放的BPQ表项中是否包含调用指令,当要释放的BPQ表项中包含调用指令时,判断由分支预测单元301所预测的调用指令是直接将取指地址历史记录输出到指令预取器的记录表中的第一类型,还是等待与调用指令相对应的返回指令执行后将取指地址历史记录输出到指令预取器的记录表中的第二类型,选择与第一类型和第二类型相对应的两种操作模式之一来将取指地址历史记录输出到指令预取器的记录表303中,其中,记录表3031可以是图2(A)中的记录表201。
本申请所提出的装置300可以支持灵活的签名生成,和跨签名生成的地址历史记录。同时,装置可以支持两种操作模式的混合,以支持更灵活的签名生成和地址记录。
需要说明的是,图3所示出的分支预测单元301和指令预取器303是独立的两个组件,但是在一些情况下,指令预取器303也可以使用分支预测单元301中的组件(例如,返回地址栈RAS或分支处理队列BPQ等),以实现下面将要描述的方法500。
此外,指令预取器303在调用指令是第一类型时,选择两种操作模式中与第一类型相对应的第一操作模式来将相邻两个指令之间的取指地址历史输出到记录表中,其中,相邻两个指令是调用指令或返回指令;且在调用指令是第二类型时,选择两种操作模式中与第二类型相对应的第二操作模式将调用指令和与调用指令相对应的返回指令之间的取指地址历史输出到记录表中。
具体地,分支预测单元301包括分支处理队列BPQ 3011和返回地址栈RAS 3012,其中,RAS 3012的RAS表项具有用于暂存指令历史地址的地址历史记录结构400,如下面将参考图4(A)所示的一样。
在一个示例实施例中,指令预取器303基于第一类型选择第一操作模式,指令预取器303被配置为检查要释放的BPQ表项是否符合指令预取器303记录地址的要求,当要释放的BPQ表项不符合指令预取器303记录地址的要求时,分支预测单元301检查要释放的BPQ表项是否包含调用指令或返回指令;并且当要释放的BPQ表项符合指令预取器303记录地址的要求时,分支预测单元301将要释放的BPQ表项中记录的地址填入RAS 3012的RAS表项中的地址历史记录结构400中,检查要释放的BPQ表项是否包含调用指令或返回指令。
更进一步地,指令预取器303还被配置为当要释放的BPQ表项包含调用指令时,基于RAS 3012的内容生成签名,将地址历史记录结构400中记录的地址读出,并且将签名和读出的地址一起填入记录表3031中,清空RAS 3012的RAS表项中的地址历史记录结构400中的历史地址;并且当要释放的BPQ表项包含返回指令时,基于RAS 3012的内容生成签名,将地址历史记录结构400中记录的地址读出,并且将签名和读出的地址一起填入记录表3031中的取指地址历史记录中。
在另一个示例实施例中,指令预取器303基于第二类型选择第二操作模式,指令预取器303被配置为检查要释放的BPQ表项是否为调用指令后的第一个BPQ表项,当要释放的BPQ表项是调用指令后的第一个BPQ表项时,基于RAS 3012的内容生成签名,将基于RAS3012的内容生成的签名填入RAS表项的地址历史记录结构400,检查要释放的BPQ表项是否符合指令预取器303记录地址的要求;并且当要释放的BPQ表项不是调用指令后的第一个BPQ表项时,检查要释放的BPQ表项是否符合指令预取器303记录地址的要求。
其中,指令预取器303还被配置为当要释放的BPQ表项符合指令预取器303记录地址的要求时,将BPQ中记录的地址填入RAS表项的地址历史记录结构400中,检查要释放的BPQ是否为返回指令;并且当要释放的BPQ表项不符合指令预取器303记录地址的要求时,检查要释放的BPQ是否为返回指令。
更进一步地,指令预取器303还被配置为当要释放的BPQ是返回指令时,将RAS表项的地址历史记录结构400中记录的地址和签名读出,并且将地址和签名填入记录表3031中的取指地址历史记录中。
下面将结合图4(A)和图4(B)详细地描述被添加进RAS 3012的RAS表项中的用于暂时记录地址历史的地址历史记录结构400,以支持在灵活的签名生成下对指令的地址历史进行记录,以便于对指令进行预取。图4(A)示出了根据本发明的用于暂时记录地址历史的地址历史记录结构的示例结构400。参考图3,示出了一种用于暂时记录地址历史的地址历史记录结构的结构400,该结构400包括签名(Signature)和N组{V,base,bitmap}。其中,V为有效位,指示与该V相对应的组{V,base,bitmap}是否可用于暂时记录地址历史,当V被设置为1时,指示有效,即此时组{V,base,bitmap}可用于暂时记录地址历史;base为基地址;且Bitmap的每个位对应固定的宽度W,诸如可以是取指边界的宽度(也可以是以其他方式被另外定义的其他宽度)。对于每个组{V,base,bitmap},当第i个位被设置为1时,指示地址“base+i*W”被记录在该结构400中。这里,使用bitmap主要是为了充分利用指令间的空间局部性,使用多组bitmap主要是为了覆盖指令的不连续性。
图4(B)示出了根据本发明的用于暂时记录地址历史的地址历史记录结构400的更新操作的流程图410。在S411,输入要记录的取指地址addr和RAS表项;在S412,将输入的地址addr和RAS表项中地址历史记录结构500中的所有base进行比较,判断地址addr是否在任一有效的[base,base+m*W]的范围内;在S413,确定是否在结构400中找到地址addr落入某一有效的[base,base+m*W]的范围内的匹配的base,如果找到匹配的base,执行S415,否则,执行S414;在S414,为RAS表项中的结构400分配一组新的{V,base,bitmap},其中新的base通过地址addr生成,分支预测单元301将新分配一组{V,base,bitmap}中的V设置为1,然后将新的base填入新分配的空间中,接着执行S415;在S415,分支预测单元301将与(addr-base)/W相对应的位设置为1,以指示地址addr被记录在结构400中。例如,上述通过地址addr生成的base,可以是addr本身,也可以是由addr简单计算得到,诸如addr&0xffffff000,其他任何合适的计算方式也都是可能的。
特别地,上述分配一组{V,base,bitmap},首先选择无效的组(即,V被设置为0的组),如果所有的组都是有效的,则有两种选择:一种选择是以合适的方式从所有的组中挑选出一组,将其bitmap清空,即替换掉已有的信息,以用于记录新的地址历史;另一种选择是,放弃本次更新操作,即,放弃对本次新的地址历史的记录。
在此,地址历史记录结构400和流程图410仅作为示例,而不作为对用于暂时记录地址历史的地址历史记录结构的限制。以其他任何合适的方式构造的用于暂时记录地址历史的地址历史记录结构400、对地址历史记录结构400中的相应位进行设置的方法和地址历史记录结构400的更新操作的流程也都是可能的。
下面将结合具体的实施例详细地描述本申请所提出的记录取指地址历史的方法。
图5示出了根据本发明的记录取指地址历史的方法500的流程图。在S501,当执行单元302提交完由分支预测单元301生成的取指请求中的多个指令时,释放与多个指令相关联的分支处理队列BPQ 3012的表项,具体地,对由分支预测单元301生成的取指请求中的所有指令的提交可以是按序执行的提交,也可以是乱序执行的提交;在S502,分支预测单元301判断要释放的BPQ表项中是否包含调用指令,当要释放的BPQ表项中包含调用指令时,判断调用指令是直接将取指地址历史记录输出到指令预取器的记录表中的第一类型,还是等待与调用指令相对应的返回指令执行后将取指地址历史记录输出到指令预取器的记录表中的第二类型,指令预取器303选择与第一类型和第二类型相对应的两种操作模式之一来将取指地址历史记录输出到指令预取器303的记录表3031中。
具体地,此外,指令预取器303在调用指令是第一类型时,选择两种操作模式中与第一类型相对应的第一操作模式来将相邻两个指令之间的取指地址历史输出到记录表中,其中,相邻两个指令是调用指令或返回指令;且在调用指令是第二类型时,选择两种操作模式中与第二类型相对应的第二操作模式将调用指令和与调用指令相对应的返回指令之间的取指地址历史输出到记录表中。
具体地,下面参考图6和图7,详细地描述了根据上面图3和图5中所述的操作模式、更新指令预取器303的记录表3031中的取指地址历史记录的流程。
图6示出了图3中的指令预取器303在第一操作模式下的操作600的流程图。在一个示例实施例中,在第一操作模式下,指令预取器403可以实现与如图2(B)示出的现有技术RDIP相同的效果,即每次调用/返回指令都对应一次签名的变化,并且在签名变化后清空RAS中用于暂时记录地址历史的地址历史记录结构400中的历史记录:
在S601,输入要释放的BPQ表项,其中,要释放的BPQ表项可以包括地址、分支信息、RAS返回指针以及L1指令是否命中等信息;在S602,分支预测单元301检查要释放的BPQ表项是否符合指令预取器303记录地址的要求,当符合指令预取器303记录地址的要求时,执行S603,然后执行S604,否则直接执行S604;在S603,分支预测单元301将BPQ表项中记录的地址填入与RAS返回指令相对应的RAS表项的地址历史记录结构400中,然后在S604,分支预测单元301检查要释放的BPQ表项中是否包括调用/返回指令,当包括调用指令时,执行S605,当包括返回指令时,执行S607,否则,执行S609,在S609,指令预取器303结束操作(即,不对其中的记录表3031进行任何操作),且分支预测单元301释放该要释放的BPQ表项;在S605,指令预取器303把与RAS返回指针相对应的RAS表项的地址历史记录结构400记录的地址历史信息读出,并将同时生成的签名一起填入指令预取器303中存储地址历史信息的记录表3031中的取指地址历史记录中,接着在S606,分支预测单元301清空RAS表项的地址历史记录结构400中记录的地址历史信息,并释放该要释放的BPQ表项;类似地,在S607,指令预取器303把与RAS返回指针相对应的RAS表项的地址历史记录结构400记录的地址历史信息读出,并将同时生成的签名一起填入指令预取器303中存储地址历史信息的记录表3031中,接着在S608,分支预测单元301释放RAS表项,并释放该要释放的BPQ表项。
具体地,与RDIP相似,对于所有的BPQ表项释放(包括调用/返回指令),将BPQ表项中记录的地址存入BPQ表项中记录的RAS返回指针所指向的RAS表项的历史地址记录结构400中:
·取决于在指令预取器303中的记录表3031需要记录的是哪种地址,这里历史地址记录结构400可以记录虚拟地址,也可以记录物理地址;
·取决于指令预取器303中的记录表3031需要记录的是哪种地址,这里历史地址记录结构400可以记录每个地址,也可以只记录发生L1指令缺失的地址。如果需要只记录L1指令缺失的地址,则BPQ表项中需要包括当前取指请求是否是L1指令缺失的信息。
在本实施例中,签名的生成与对RAS表项中的地址历史记录的读取是同时发生的,因此并不需要于RDIP一样将签名写入RAS表项中,然后再读取出来。
为了方便理解,下面给出了对于上表1中示出的示例代码,说明在第一操作模式下的BPQ表项释放时的操作示例的表3:
表3基于表1的示例代码,以第一操作模式释放BPQ表项的操作
图7示出了图3中的指令预取器303在第二操作模式下的操作700的流程图。在一个示例实施例中,在第二操作模式下,指令预取器303可以实现与RDIP不同的效果,即,签名在每次调用的时候生成,然后再与此调用相对应的返回执行后,指令预取器303将该签名和RAS表项的地址历史记录结构400中记录的地址历史写入指令预取器303的记录表3031中:
在S701,输入要释放的BPQ表项,其中,要释放的BPQ表项可以包括地址、分支信息、RAS返回指针以及L1指令是否命中等信息;在S702,分支预测单元301检查该要释放的BPQ表项是否是调用指令后的第一个BPQ表项,如果是,则执行S703,然后执行S704,否则直接执行S704;在S703,分支预测单元301将根据调用指令生成的签名填入与RAS返回指针相对应的RAS表项的地址历史记录结构400中;在S704,分支预测单元301检查要释放的BPQ是否符合指令预取器303记录地址的要求,当符合指令预取器303记录地址的要求时,执行S705,然后执行S706,否则直接执行S706;在S705,分支预测单元301将BPQ表项中记录的地址填入与RAS返回指针相对应的RAS表项的地址历史记录结构400中;在S706,分支预测单元301检查要释放的BPQ表项是否包括返回指令,如果包括,则执行S708,然后执行S709,否则执行S707;在S707,指令预取器303结束操作(即,不对其中的记录表3031进行任何操作),且分支预测单元301释放该要释放的BPQ表项;在S708,指令预取器303将与RAS返回指针相对应的RAS表项的地址历史记录结构400中记录的地址历史信息和由相应的调用指令生成的签名一起读出,并且将读出的信息填入指令预取器303中存储地址历史信息的记录表3031;然后在S709,分支预测单元301释放RAS表项,并释放该要释放的BPQ表项。
具体地,对于所有的BPQ表项释放(包括调用/返回指令),将BPQ表项中记录的地址存入BPQ中记录的RAS返回指针所指向的RAS表项的历史地址记录结构400中:
·取决于指令预取器303中的记录表3031需要记录的是哪种地址,这里历史地址记录结构400可以记录虚拟地址,也可以记录物理地址;
·取决于指令预取器303中的记录表3031需要记录的是哪种地址,这里历史地址记录结构400可以记录每个地址,也可以只记录发生L1指令缺失的地址。如果需要只记录L1指令缺失的地址,则BPQ表项中需要包括当前取指请求是否是L1指令缺失的信息。
为了方便理解,下面给出了对于上表1中示出的示例代码,说明在第二操作模式下的BPQ表项释放时的操作示例的表4:
表4基于表1的示例代码,以第二操作模式释放BPQ表项的操作
本申请提出了一种记录地址历史的装置和方法,更具体地,可以支持灵活的签名生成,和跨签名生成的地址历史记录。同时,本申请可以支持上述两种操作模式的混合,以支持更灵活的签名生成和地址记录。其中,有些调用指令是可以立即输出记录给存储地址历史信息的记录表的,而有些调用指令则是需要等到相应的返回指令的执行才输出记录给存储地址历史信息的记录表。对于前者,需要在输出记录后清空RAS表项中地址历史记录结构400中的地址历史记录;而对于后者,则需要把签名填入RAS表项中的地址历史记录结构400中,等待返回指令的执行,以在输出记录时使用。
注意,本文中提到的元件和组件的名称,例如分支预测单元、返回地址栈RAS、分支处理队列BPQ、指令预取器和地址历史记录结构以及记录表等均是示例,为了标识作用,而非限制,事实上根据本发明的原理,实现相同功能的其他元件和组件也是可行的。同时,本文中提到的分支预测单元、返回地址栈RAS、分支处理队列BPQ、指令预取器和地址历史记录结构以及记录表可以通过软件、硬件、固件或它们的任意组合来实现。
本文所描述的技术和方法可以在硬件、软件、固件或其任意组合中实现,除非被具体描述为以特定方式实现。被描述为模块或组件的任何特征也可以在集成逻辑设备中一起实现,或者作为分立但可互操作的逻辑设备单独实现。
此外,如本文所使用的,“基于”不应被解释为对封闭条件集的引用。例如,被描述为“基于条件A”的示例性步骤可以基于条件A和条件B,而不脱离本公开的范围。换句话说,如本文所使用的,“基于”和“根据”应该以与短语“至少部分地基于”和“至少部分地根据”相同的方式来解释。
在附图中,相似的组件或特征可以具有相同的附图标记。此外,相同类型的各种组件可以通过在附图标记之后加上破折号和区分相似组件的第二标记来区分。如果在说明书中仅使用第一附图标记,则该描述适用于具有相同第一附图标记的任何一个相似的组件,而与第二附图标记或其他后续附图标记无关。
结合附图,本文所阐述的描述描述了示例配置、方法和装置,并且不表示可以实现的或者在权利要求范围内的所有示例。本文所使用的术语“示例”意味着“用作示例、实例或说明”,而不是“优选的”或“优于其他示例的”。详细的描述包括具体细节,目的是提供对所描述的技术的理解。然而,可以在没有这些具体细节的情况下实践这些技术。在一些情况下,以框图形式示出了公知的结构和设备,以避免模糊所描述的示例的概念。
尽管本说明书包含多个具体的实现方式细节,但是这些不应被解释为对任何发明或所要求保护的范围的限制,而是对特定发明的特定实施例的特定特征的描述。本说明书中在单独实施例的上下文中所描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中所描述的各种特征也可以在多个实施例中单独实现或者在任何合适的子组合中实现。此外,尽管特征可以在上文中被描述为在某些组合中起作用,并且甚至最初被如此要求保护的,但是在一些情况下,来自所要求保护的组合的一个或多个特征可以从该组合中被删除,并且所要求保护的组合可以针对子组合或子组合的变型。
应当理解,本发明的方法中的步骤的特定顺序或层次是示例性过程的说明。基于设计偏好,可以理解,方法中步骤的特定顺序或层次可以被重新排列,以实现本发明所公开的功能和效果。所附的方法权利要求以示例顺序呈现各种步骤的元素,并且不意味着限于所呈现的特定顺序或层次,除非另有特别陈述。此外,尽管可以以单数形式描述或要求保护元件,但是除非明确说明了对单数的限制,否则复数也是可以预期的。因此,本公开不限于所示出的示例,并且用于执行本文所描述的功能的任何装置都包括在本公开的各方面中。
以上公开的主题将被认为是例示性的而不是限制性的,并且所附权利要求意图覆盖落入本发明构思的真实精神和范围的所有这样的修改、增强、和其它实施例。因此,本发明构思的范围被对所附权利要求及其等同物的最广泛可允许解释确定到法律所允许的最大程度,并且不应该被前述详细描述所约束或限制。
Claims (12)
1.一种记录取指地址历史的方法,包括:
当取指请求中的多个指令被提交后,释放与所述多个指令相关联的分支处理队列BPQ表项;以及
响应于所述BPQ表项的释放,判断要释放的BPQ表项中是否包含调用指令;
当要释放的BPQ表项中包含调用指令时,判断所述调用指令是直接将取指地址历史记录输出到指令预取器的记录表中的第一类型,还是等待与所述调用指令相对应的返回指令执行后将取指地址历史记录输出到指令预取器的记录表中的第二类型,并基于所述判断结果来选择与所述第一类型和所述第二类型相对应的操作模式来将取指地址历史记录输出到所述指令预取器的记录表中。
2.根据权利要求1所述的方法,其中,所述选择与所述第一类型和所述第二类型相对应的操作模式来将取指地址历史记录输出到指令预取器的记录表中包括:
当判断所述调用指令是所述第一类型时,选择与所述第一类型相对应的操作模式来将相邻两个指令之间的取指地址历史输出到所述记录表中,其中,所述相邻两个指令是调用指令或返回指令;以及
当判断所述调用指令是所述第二类型时,选择与所述第二类型相对应的操作模式将调用指令和与所述调用指令相对应的返回指令之间的取指地址历史输出到所述记录表中。
3.根据权利要求2所述的方法,其中,当判断所述调用指令是所述第一类型时,选择与所述第一类型相对应的操作模式将相邻两个指令之间的取指地址历史输出到所述记录表中包括:
判断所述要释放的BPQ表项中是否包含返回指令;
当所述要释放的BPQ表项中包含返回指令时,基于包括指示返回指令的地址的指针的返回地址栈RAS的内容、生成与所述相邻两个指令之间的暂存地址历史相关的签名,并且将所述签名和所述暂存地址历史一起输出到指令预取器的记录表中的取指地址历史中。
4.根据权利要求3所述的方法,其中,所述暂存地址历史存储在所述RAS的RAS表项的地址历史记录结构中,并且,所述方法还包括:
在将所述签名和所述暂存地址历史一起输出指令预取器的记录表中的取指地址历史记录后,清空所述RAS表项的地址历史记录结构中的暂存地址历史。
5.根据权利要求2所述的方法,其中,当判断所述调用指令是所述第二类型时,选择与所述第二类型相对应的操作模式将调用指令和与所述调用指令相对应的返回指令之间的取指地址历史输出到所述记录表中包括:
检查所述要释放的BPQ表项是否包含返回指令;
当所述要释放的BPQ表项中包含返回指令时,基于包括指示返回指令的地址的指针的返回地址栈RAS的内容以及包括指示与所述返回指针相对应的调用指令的地址的指针的BPQ的内容、生成与所述调用指令和与所述调用指令相对应的返回指令之间的暂存地址历史相关的签名,并且将所述签名和所述暂存地址历史一起输出到指令预取器的记录表中的取指地址历史中。
6.根据权利要求5所述的方法,其中,所述暂存地址历史存储在所述RAS的RAS表项的地址历史记录结构中,并且,所述方法还包括:
在将所述签名和所述暂存地址历史一起输出到指令预取器的记录表中的取指地址历史记录后,保留所述RAS表项的地址历史记录结构中的暂存地址历史。
7.一种记录取指地址历史的装置,包括:
分支预测单元,其被配置为当取指请求中的多个指令被提交后,释放与所述多个指令相关联的分支处理队列BPQ表项;以及
指令预取器,其被配置为响应于所述BPQ表项的释放,判断要释放的BPQ表项中是否包含调用指令,当要释放的BPQ表项中包含调用指令时,判断所述调用指令是直接将取指地址历史记录输出到指令预取器的记录表中的第一类型,还是等待与所述调用指令相对应的返回指令执行后将取指地址历史记录输出到指令预取器的记录表中的第二类型,并基于所述判断结果来选择与所述第一类型和所述第二类型相对应的操作模式来将取指地址历史记录输出到指令预取器的记录表中。
8.根据权利要求7所述的装置,其中,所述指令预取器还被配置为当判断所述调用指令是所述第一类型时,选择与所述第一类型相对应的操作模式来将相邻两个指令之间的取指地址历史输出到所述记录表中,其中,所述相邻两个指令是调用指令或返回指令;以及
当判断所述调用指令是所述第二类型时,选择与所述第二类型相对应的操作模式将调用指令和与所述调用指令相对应的返回指令之间的取指地址历史输出到所述记录表中。
9.根据权利要求10所述的装置,其中,所述指令预取器还被配置为:判断所述要释放的BPQ表项中是否包含返回指令;当所述要释放的BPQ表项中包含返回指令时,基于包括指示返回指令的地址的指针的返回地址栈RAS的内容生成与所述相邻两个指令之间的暂存地址历史相关的签名,并且将所述签名和所述暂存地址历史一起输出到指令预取器的记录表中的取指地址历史中。
10.根据权利要求9所述的装置,其中,
所述暂存地址历史存储在所述RAS的RAS表项的地址历史记录结构中,并且,所述指令预取器还被配置为:
在将所述签名和所述暂存地址历史一起输出指令预取器的记录表中的取指地址历史记录后,清空所述RAS表项的地址历史记录结构中的暂存地址历史。
11.根据权利要求7所述的装置,其中,所述指令预取器还被配置为:检查所述要释放的BPQ表项是否包含返回指令,当所述要释放的BPQ表项中包含返回指令时,基于包括指示返回指令的地址的指针的返回地址栈RAS的内容以及包括指示与所述返回指针相对应的调用指令的地址的指针的BPQ的内容生成与所述调用指令和与所述调用指令相对应的返回指令之间的暂存地址历史相关的签名,并且将所述签名和所述暂存地址历史一起输出到指令预取器的记录表中的取指地址历史中。
12.根据权利要求11所述的装置,其中,
所述暂存地址历史存储在所述RAS的RAS表项的地址历史记录结构中,并且,所述指令预取器还被配置为:
在将所述签名和所述暂存地址历史一起输出到指令预取器的记录表中的取指地址历史记录后,保留所述RAS表项的地址历史记录结构中的暂存地址历史。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011494505.XA CN112579176B (zh) | 2020-12-17 | 2020-12-17 | 记录地址历史的装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011494505.XA CN112579176B (zh) | 2020-12-17 | 2020-12-17 | 记录地址历史的装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112579176A true CN112579176A (zh) | 2021-03-30 |
CN112579176B CN112579176B (zh) | 2023-03-28 |
Family
ID=75135740
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011494505.XA Active CN112579176B (zh) | 2020-12-17 | 2020-12-17 | 记录地址历史的装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112579176B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2608855A (en) * | 2021-07-15 | 2023-01-18 | Advanced Risc Mach Ltd | Apparatus and method for pointer authentication |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5822264A (en) * | 1996-12-10 | 1998-10-13 | Mitsubishi Denki Kabushiki Kaisha | Dynamic semiconductor memory device with SOI structure and body refresh circuitry |
US6449204B1 (en) * | 2000-03-30 | 2002-09-10 | Mitsubishi Denki Kabushiki Kaisha | Dynamic semiconductor memory device capable of rearranging data storage from a one bit/one cell scheme in a normal mode to a one bit/two cell scheme in a twin-cell mode for lengthening a refresh interval |
CN103838550A (zh) * | 2012-11-26 | 2014-06-04 | 上海芯豪微电子有限公司 | 一种分支处理系统和方法 |
CN105264513A (zh) * | 2013-06-23 | 2016-01-20 | 英特尔公司 | 用于过程返回地址验证的系统和方法 |
CN106293642A (zh) * | 2016-08-08 | 2017-01-04 | 合肥工业大学 | 一种用于粗粒度多核计算系统的分支处理模块及其分支处理机制 |
CN106575284A (zh) * | 2014-09-25 | 2017-04-19 | 英特尔公司 | 用于内核模块的多核存储器数据记录器 |
CN111033467A (zh) * | 2017-08-18 | 2020-04-17 | 国际商业机器公司 | 同时进行分支地址的预测和寄存器内容的更新 |
CN111984325A (zh) * | 2019-05-23 | 2020-11-24 | 三星电子株式会社 | 提高分支预测吞吐量的装置及系统 |
-
2020
- 2020-12-17 CN CN202011494505.XA patent/CN112579176B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5822264A (en) * | 1996-12-10 | 1998-10-13 | Mitsubishi Denki Kabushiki Kaisha | Dynamic semiconductor memory device with SOI structure and body refresh circuitry |
US6449204B1 (en) * | 2000-03-30 | 2002-09-10 | Mitsubishi Denki Kabushiki Kaisha | Dynamic semiconductor memory device capable of rearranging data storage from a one bit/one cell scheme in a normal mode to a one bit/two cell scheme in a twin-cell mode for lengthening a refresh interval |
CN103838550A (zh) * | 2012-11-26 | 2014-06-04 | 上海芯豪微电子有限公司 | 一种分支处理系统和方法 |
CN105264513A (zh) * | 2013-06-23 | 2016-01-20 | 英特尔公司 | 用于过程返回地址验证的系统和方法 |
CN106575284A (zh) * | 2014-09-25 | 2017-04-19 | 英特尔公司 | 用于内核模块的多核存储器数据记录器 |
CN106293642A (zh) * | 2016-08-08 | 2017-01-04 | 合肥工业大学 | 一种用于粗粒度多核计算系统的分支处理模块及其分支处理机制 |
CN111033467A (zh) * | 2017-08-18 | 2020-04-17 | 国际商业机器公司 | 同时进行分支地址的预测和寄存器内容的更新 |
CN111984325A (zh) * | 2019-05-23 | 2020-11-24 | 三星电子株式会社 | 提高分支预测吞吐量的装置及系统 |
Non-Patent Citations (1)
Title |
---|
孟建熠等: "基于指令回收的低功耗循环分支折合技术", 《浙江大学学报(工学版)》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2608855A (en) * | 2021-07-15 | 2023-01-18 | Advanced Risc Mach Ltd | Apparatus and method for pointer authentication |
WO2023285785A1 (en) * | 2021-07-15 | 2023-01-19 | Arm Limited | Apparatus and method for pointer authentication |
GB2608855B (en) * | 2021-07-15 | 2024-02-21 | Advanced Risc Mach Ltd | Apparatus and method for pointer authentication |
Also Published As
Publication number | Publication date |
---|---|
CN112579176B (zh) | 2023-03-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6047363A (en) | Prefetching data using profile of cache misses from earlier code executions | |
US8171260B2 (en) | Fetching all or portion of instructions in memory line up to branch instruction based on branch prediction and size indicator stored in branch target buffer indexed by fetch address | |
EP1228426B1 (en) | Store buffer which forwards data based on index and optional way match | |
US6247097B1 (en) | Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions | |
US6151662A (en) | Data transaction typing for improved caching and prefetching characteristics | |
US6065103A (en) | Speculative store buffer | |
TWI223195B (en) | Optimized branch predictions for strongly predicted compiler branches | |
US7133969B2 (en) | System and method for handling exceptional instructions in a trace cache based processor | |
US6502188B1 (en) | Dynamic classification of conditional branches in global history branch prediction | |
EP1244961B1 (en) | Store to load forwarding predictor with untraining | |
US6092182A (en) | Using ECC/parity bits to store predecode information | |
EP0381470A2 (en) | Processing of memory access exceptions along with prefetched instructions within the instruction pipeline of a virtual memory system-based digital computer | |
US7032097B2 (en) | Zero cycle penalty in selecting instructions in prefetch buffer in the event of a miss in the instruction cache | |
US6427192B1 (en) | Method and apparatus for caching victimized branch predictions | |
EP0795828A2 (en) | Dynamic set prediction method and apparatus for a multi-level cache system | |
KR20010073182A (ko) | 전송을 적재하는 저장 메커니즘 | |
US8667258B2 (en) | High performance cache translation look-aside buffer (TLB) lookups using multiple page size prediction | |
US6493819B1 (en) | Merging narrow register for resolution of data dependencies when updating a portion of a register in a microprocessor | |
US8601240B2 (en) | Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution | |
JPH0334024A (ja) | 分岐予測の方法とそのための装置 | |
EP1410177A1 (en) | Branch prediction with two levels of branch prediction cache | |
US20070033385A1 (en) | Call return stack way prediction repair | |
US6542986B1 (en) | Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor | |
US7380062B2 (en) | Mechanism in a multi-threaded microprocessor to maintain best case demand instruction redispatch | |
CN115640047A (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230307 Address after: 610216 building 4, No. 171, hele'er street, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan Applicant after: CHENGDU HAIGUANG MICROELECTRONICS TECHNOLOGY Co.,Ltd. Address before: 300392 North 2-204 industrial incubation-3-8, 18 Haitai West Road, Huayuan Industrial Zone, Tianjin Applicant before: Haiguang Information Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |