一种基于函数调用栈的数据预取方法和装置制造方法及图纸

技术编号:19593146 阅读:20 留言:0更新日期:2018-11-28 04:48
本发明专利技术公开了一种基于函数调用栈的数据预取方法和装置,方法步骤包括跟踪程序执行的函数调用和函数返回指令;函数调用时,将当前堆栈地址存入先进后出队列头部;函数返回时,将队列头部调用该函数时放入的堆栈地址删除;使用当前队列头部的堆栈地址,生成数据预取请求并进行数据预取操作;装置包括Call/Ret指令跟踪单元、堆栈地址缓存单元以及预取请求生成单元。本发明专利技术基于函数调用栈规律实现,具有准确率高、实现代价小、不影响现有预取器、集成方便、使用灵活的优点。

【技术实现步骤摘要】
一种基于函数调用栈的数据预取方法和装置
本专利技术涉及微处理器数据预取技术,具体涉及一种基于函数调用栈的数据预取方法和装置。
技术介绍
现代处理器核心的快速发展,并且单个芯片上集成的处理器核数据日益增多,但是存储系统发展速度较慢,处理器核心和存储系统之间由于速度差异造成的“存储墙”问题日益严重。为了缓解存储问题,当前主流的方法是在处理器核和存储器之间设置多级Cache,并通过数据预取将数据提前放到离处理核心较近的Cache中。数据预取操作通常分为两类,一类是软件预取,一类是硬件预取。软件预取通过在程序中插入预取指令,显式地通知处理器核将未来需要用到的数据先取回来放到某一级Cache中。软件预取具有较高的准确度,但是需要编程人员对数据访问进行分析,在合适的位置插入预取指令,加重了程序编写的负担。硬件预取通过分析历史访存的规律,自动生成预取请求,通常的预取算法包括预取下一行、跨步预取方法等,这些算法基于历史访问的地址进行,对有规律的访问具有较好的效果。一般来说,进一步提高数据预测准确率、增加能够预测的访问需要更复杂的算法,实现时也需要更多资源,运行时需要消耗更多功耗。对于一些通过物理地址难以捕获的访存规律,可以很容易地通过分析程序执行特性提取。在程序的执行过程中,通过Call指令进行函数调用,在函数调用进入新的函数后,需要先保存调用该函数时的寄存器信息,以免破坏函数调用者的数据。保存寄存器信息的方法通常是将这些寄存器存放到存储器中。在被调用函数执行完后,首先将存放的寄存器信息恢复到寄存器中,即读取存储器的内容,然后再通过Ret指令返回到调用该函数的代码中。函数调用可以多层嵌套,故在存储其中会存储嵌套的多个函数的寄存器值。如图1所示,函数1在执行时,会先保存一些寄存器的值到存储空间中,然后执行函数的功能代码,在执行中会调用函数2;函数2在执行时又要保存一些寄存器的值到存储空间中,然后执行函数的功能代码,在执行的过程中又可能调用函数3;以此类推,调用到函数n时,保存相应的寄存器值,执行功能代码,然后返回。在返回前,需要从存储中恢复寄存器值,然后返回到函数n-1,直至返回到函数1。可以看出,保存寄存器值和恢复寄存器值时,访问的存储空间是一致的。但是在函数执行的过程中,保存的寄存器值可能被替换出了Cache。通过捕捉寄存器保存和恢复的特性,可以构造准确的预取策略。
技术实现思路
本专利技术要解决的技术问题:针对现有技术的上述问题,提供一种基于函数调用栈规律实现的基于函数调用栈的数据预取方法和装置,本专利技术具有准确率高、实现代价小、不影响现有预取器、集成方便、使用灵活的优点。为了解决上述技术问题,本专利技术采用的技术方案为:一种基于函数调用栈的数据预取方法,实施步骤包括:1)跟踪指令执行部件当前执行的指令信息,如果指令跟踪结果为函数调用指令Call则跳转执行步骤2);如果指令跟踪结果为函数返回指令Ret则跳转执行步骤3);2)将指令跟踪结果发送给堆栈地址缓存单元,所述堆栈地址缓存单元主要包含了一个先进后出的堆栈地址队列,堆栈地址队列的每项存储一个堆栈地址,将当前堆栈寄存器的值放入堆栈地址队列的头部,跳转执行步骤1);3)将指令跟踪结果发送给堆栈地址缓存单元,将堆栈地址队列头部的存储项删除,并将新的队列头部地址读出,跳转执行步骤4);4)根据读出的新的队列头部地址生成相应的预取请求,并将生成的预取请求发送给处理器中的存储部件,预取请求包含预取地址、预取粒度、预取目标。本专利技术还提供一种基于函数调用栈的数据预取装置,所述数据预取装置被编程以执行本专利技术基于函数调用栈的数据预取方法的步骤。本专利技术还提供一种基于函数调用栈的数据预取装置,包括:Call/Ret指令跟踪单元,用于跟踪指令执行部件当前执行的指令信息,且在指令跟踪结果为函数调用指令Call或函数返回指令Ret时输出指令跟踪结果;堆栈地址缓存单元,包含了一个先进后出的堆栈地址队列,堆栈地址队列的每项存储一个堆栈地址,且在指令跟踪结果为函数调用指令Call时将当前堆栈寄存器的值放入堆栈地址队列的头部;在指令跟踪结果为函数返回指令Ret时将指令跟踪结果发送给堆栈地址缓存单元,将堆栈地址队列头部的存储项删除,并将新的队列头部地址读出;预取请求生成单元,用于根据读出的新的队列头部地址生成相应的预取请求,并将生成的预取请求发送给处理器中的存储部件,预取请求包含预取地址、预取粒度、预取目标。优选地,所述Call/Ret指令跟踪单元输出指令跟踪结果时具体是指将指令跟踪结果通过2比特位的信息编码发送给堆栈地址缓存单元。和现有技术相比,本专利技术具有下述有益优点:1、准确率高。基于存储访问历史地址信息的预取方法是根据历史信息,预测未来访问地址,若要达到高精度必然引入复杂的算法。而本专利技术中基于程序调用栈的预取方法,保存寄存器信息时的地址,肯定是恢复寄存器信息所需的地址,所以需要预取的地址是确定的。只有在一些特殊情况下,预取的地址可能不正确,而普通的程序是不会出现这种情况的,故本专利技术中所提的预取方法的准确率极高,接近100%。2、实现简单、实现代价小。本专利技术所提的方法主要开销在于堆栈地址的存储,而地址存储只需要10多个项,每个项只需存储几十bit的数据。Call/Ret命令的跟踪只需两个指令类型比较的比较器,预取地址的生成只需要简单组合逻辑就能完成,甚至可直接使用存储的地址。3、不影响现有预取器,集成方便,使用灵活。本专利技术所提的预测算法预测的对象和访存模式与普通预测器是完全不同的,可以作为已有预测器的性能补充,方便集成添加到现有预取器中。附图说明图1为现有技术的函数嵌套调用时寄存器保存和恢复过程示意图。图2为本专利技术实施例方法的基本实施流程示意图。图3为本专利技术实施例支持基于函数调用栈的数据预取装置示意图。图4为本专利技术实施例中预取请求结构示意图。具体实施方式如图2所示,本实施例基于函数调用栈的数据预取方法的实施步骤包括:1)跟踪指令执行部件当前执行的指令信息,如果指令跟踪结果为函数调用指令Call则跳转执行步骤2);如果指令跟踪结果为函数返回指令Ret则跳转执行步骤3);2)将指令跟踪结果发送给堆栈地址缓存单元,所述堆栈地址缓存单元主要包含了一个先进后出的堆栈地址队列,堆栈地址队列的每项存储一个堆栈地址,将当前堆栈寄存器的值放入堆栈地址队列的头部,跳转执行步骤1);3)将指令跟踪结果发送给堆栈地址缓存单元,将堆栈地址队列头部的存储项删除,并将新的队列头部地址读出(也就是在图1中函数n返回时,读取函数n-1保存寄存器的存储位置地址。这样才能在数据使用之前,能够有足够的时间将数据取回),跳转执行步骤4);4)根据读出的新的队列头部地址生成相应的预取请求,并将生成的预取请求发送给处理器中的存储部件,预取请求包含预取地址、预取粒度、预取目标。数据预取地址可以直接使用读出的地址,也可以根据程序特性决定预取请求的长度,例如,1个或者多个Cache行。也可以指定预取后数据存放的位置,例如L1Cache,L2Cache,L3Cache等。预取粒度一般是1到多个Cache行,预取目标包括一级数据Cache、二级数据Cache等。生成的预取请求发送给处理器中的存储部件,就可以完成整个预取工作。本实施例还提供一种基于函数调用本文档来自技高网
...

【技术保护点】
1.一种基于函数调用栈的数据预取方法,其特征在于实施步骤包括:1)跟踪指令执行部件当前执行的指令信息,如果指令跟踪结果为函数调用指令Call则跳转执行步骤2);如果指令跟踪结果为函数返回指令Ret则跳转执行步骤3);2)将指令跟踪结果发送给堆栈地址缓存单元,所述堆栈地址缓存单元主要包含了一个先进后出的堆栈地址队列,堆栈地址队列的每项存储一个堆栈地址,将当前堆栈寄存器的值放入堆栈地址队列的头部,跳转执行步骤1);3)将指令跟踪结果发送给堆栈地址缓存单元,将堆栈地址队列头部的存储项删除,并将新的队列头部地址读出,跳转执行步骤4);4)根据读出的新的队列头部地址生成相应的预取请求,并将生成的预取请求发送给处理器中的存储部件,预取请求包含预取地址、预取粒度、预取目标。

【技术特征摘要】
1.一种基于函数调用栈的数据预取方法,其特征在于实施步骤包括:1)跟踪指令执行部件当前执行的指令信息,如果指令跟踪结果为函数调用指令Call则跳转执行步骤2);如果指令跟踪结果为函数返回指令Ret则跳转执行步骤3);2)将指令跟踪结果发送给堆栈地址缓存单元,所述堆栈地址缓存单元主要包含了一个先进后出的堆栈地址队列,堆栈地址队列的每项存储一个堆栈地址,将当前堆栈寄存器的值放入堆栈地址队列的头部,跳转执行步骤1);3)将指令跟踪结果发送给堆栈地址缓存单元,将堆栈地址队列头部的存储项删除,并将新的队列头部地址读出,跳转执行步骤4);4)根据读出的新的队列头部地址生成相应的预取请求,并将生成的预取请求发送给处理器中的存储部件,预取请求包含预取地址、预取粒度、预取目标。2.一种基于函数调用栈的数据预取装置,其特征在于,所述数据预取装置被编程以执行权利要求1所述基于函数调用栈的数据预取方法的步骤。3.一种基于函数调用栈的...

【专利技术属性】
技术研发人员:郑重郭维雷国庆王俊辉王永文黄立波孙彩霞隋兵才
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:湖南,43

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

1