基于指令流混合模式学习的低污染缓存预取系统及方法技术方案

技术编号:33701702 阅读:17 留言:0更新日期:2022-06-06 08:12
本发明专利技术提供一种基于指令流混合模式学习的低污染缓存预取系统,包括分支预测模块,其对指令流进行预测并写入取指地址队列;访存指令记录模块,其记录已经提交的访存指令的信息并写入访存指令缓冲中;同时查询得到访存指令序列;访存模式学习模块,其将访存指令序列记录在其访存历史缓冲中进行学习,预测访存指令的访存物理地址并写入访存地址队列;预取请求生成模块,其检索取指地址队列和访存地址队列,生成一级缓存的预取请求;预取请求写回模块,其暂存拿到数据的预取请求,根据指令提交情况等待写回或者立即写回。本发明专利技术还提供相应的方法。本发明专利技术的低污染缓存预取系统减少了访存序列预测过程中所面对的不确定性,提高预取地址预测的准确性。地址预测的准确性。地址预测的准确性。

【技术实现步骤摘要】
基于指令流混合模式学习的低污染缓存预取系统及方法


[0001]本专利技术涉及计算机体系结构
,尤其涉及一种基于指令流混合模式学习的低污染缓存预取系统及方法。

技术介绍

[0002]缓存是现代处理器中的一种重要机制,将常用数据从内存拷贝到缓存中,后续数据访问可以直接从缓存读取,从而减少慢速DRAM内存的访问次数,提升处理器性能。缓存的容量是有限的,在实际使用中发生缓存失效是不可避免的。缓存预取技术预测程序将要使用的数据,并将这些数据提前读取到缓存中,减少缓存失效的次数。
[0003]缓存访问行为是复杂的,处理器中缓存系统接收到的访存序列会受到处理器乱序执行的干扰。同时,不同模式的访存指令会互相交织在一起,进一步增大了在缓存系统中预测访存行为的难度。现有的缓存预取方法均不能有效的解决未来访存序列预测困难的问题。

技术实现思路

[0004]本专利技术的目的在于提供一种基于指令流混合模式学习的低污染缓存预取系统及方法,以减少访存序列预测过程中所面对的不确定性,提高预取地址预测的准确性。
[0005]为了实现上述目的,本专利技术提供了一种基于指令流混合模式学习的低污染缓存预取系统,包括主流水线和分支预测子流水,所述分支预测子流水包括分支预测模块、取指地址队列、访存指令记录模块、访存模式学习模块、访存地址队列、预取请求生成模块和预取请求写回模块;所述分支预测模块设置为采用提前预测技术,对目标程序的指令流进行预测并将预测结果写入取指地址队列中;所述访存指令记录模块设置为依次记录已经提交的访存指令的信息,将这些访存指令的信息写入到其访存指令缓冲中;同时,每当取指地址队列写入新的条目项时,用该条目项所对应的指令块的起始地址查询所述访存指令缓冲,以通过查询尝试得到访存指令序列并将其输出至访存指令学习模块和访存地址队列;所述访存模式学习模块设置为将访存指令序列记录在其访存历史缓冲中,根据访存历史缓冲中保存的历史信息对访存指令的访存模式进行学习,并根据学习到的访存模式来预测访存指令序列中每条访存指令的访存物理地址并写入访存地址队列;所述预取请求生成模块设置为在一级数据缓存接收到新的请求时,检索所述取指地址队列和访存地址队列,为即将进入主流水线的指令块分别生成一级指令缓存和一级数据缓存的预取请求并将其发送到缓存系统中,以获取拿到数据的预取请求;所述预取请求写回模块设置为将拿到数据的预取请求暂存在其预取队列中,使得位于预取队列头部的拿到数据的预取请求根据所述预取请求之前的指令提交情况等待写回或者立即写回至一级缓存。
[0006]所述分支预测模块设置为将预测结果以指令块为粒度写入取指地址队列中;且所述分支预测模块设置为执行:
[0007]A1:在每个周期,将当前预测地址所在的指令块作为当前指令块,将当前预测地址
作为当前指令块的预测起始地址;根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口;
[0008]A2:在获得当前指令块的预测起始地址后,在当前指令块中对分支指令进行检索和预测,以判断当前指令块是否命中跳转的分支指令;
[0009]A3:根据判断结果,若当前指令块未命中跳转的分支指令,说明当前指令块中没有分支指令或者识别到的分支指令均未跳转,则将当前指令块的信息作为分支预测模块的预测结果写入取指地址队列;随后,确定下一指令块的预测起始地址,并将下一指令块作为新的当前指令块,并回到步骤A2,直到当前指令块为固定预测窗口中的最后一个指令块,此时当前预测地址根据固定预测窗口中的指令块的个数自增,以进入下一个周期;
[0010]否则,从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址,以进入下一个周期;
[0011]或者,所述分支预测模块设置为将预测结果以指令块为粒度写入取指地址队列中;且所述分支预测模块设置为执行:
[0012]步骤A1

:在每个周期,将当前预测地址所在的指令块作为当前指令块,将当前预测地址作为当前指令块的预测起始地址;随后,根据当前指令块的预测起始地址确定从当前指令块开始的固定预测窗口中的所有指令块的预测起始地址;
[0013]步骤A2

:根据各个指令块的预测起始地址,在各个指令块中对分支指令进行检索和预测,以判断各个指令块是否命中跳转的分支指令;
[0014]步骤A3

:根据判断结果,若所有指令块均未命中跳转的分支指令,则将所有指令块的信息作为分支预测模块的预测结果依次写入取指地址队列;当前预测地址根据固定预测窗口中的指令块的个数自增,以进入下一个周期;
[0015]否则,若存在至少一个指令块命中至少一个跳转的分支指令,则从命中的跳转的分支指令中选择线性地址最小的第一个跳转的分支指令作为当前指令块的结尾地址,将当前指令块及其前面的所有指令块的信息作为预测结果写入取指地址队列,同时将当前预测地址更新为第一个跳转的分支指令的跳转地址,以进入下一个周期。
[0016]所述主流水线包括依次连接的取指单元、译码单元、执行单元、访存单元和写回单元,在所述分支预测模块中,所述指令块的位宽等同于所述取指单元在取指时的位宽;
[0017]所述指令块的信息包括指令块的行线性地址、行物理地址、起始偏移、结束偏移以及跳转位;在将指令块的信息写入取指地址队列时,将指令块的预测起始地址拆分为高位的行线性地址和低位的起始偏移,并通过行线性地址查询TLB得到行物理地址,并将得到的行线性地址、行物理地址和起始偏移写入取指地址队列的条目项中的对应域;此外,如果指令块命中的跳转的分支指令,则第一个跳转的分支指令的末尾字节偏移作为结束偏移写入取指地址队列;否则,取指地址队列中的结束偏移设置为63。
[0018]所述取指地址队列每一条目项的结构为:
[0019]<valid,line_addr,phys_addr,begin_offset,end_offset,taken>,
[0020]其中,valid表示有效位;line_addr表示行线性地址;phys_addr表示行物理地址;begin_offset表示起始偏移;end_offset表示结束偏移;taken表示跳转位;
[0021]所述取指地址队列还设有提交指针,读指针和写指针;取指地址队列的提交指针
指向下一个将提交的指令所在的指令块在取指地址队列中的条目项;取指地址队列的读指针指向下一个将读取的指令所在的指令块在取指地址队列中的条目项;取指地址队列的写指针指向分支预测模块下一次写入的位置;在处理器的主流水线刷新发生后,根据刷新类型,取指地址队列的读指针和写指针回滚到分支刷新的位置或者提交指针的位置;
[0022]所述访存指令缓冲的每一个表项的结构为:
[0023]<LineAddr,PhyAddr,Inst本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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>,其中,LineA...

【专利技术属性】
技术研发人员:王玉庆杨秋松李明树
申请(专利权)人:中国科学院上海高等研究院
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1