一种缓存系统和方法技术方案

技术编号:11599203 阅读:42 留言:0更新日期:2015-06-12 16:40
本发明专利技术提供了一种缓存系统和方法,应用于处理器领域时能区分数据缓存中位于栈区域和非栈区域的数据,并提供独立的栈缓存用于存放栈区域中的数据;在处理器核执行数据访问指令前,提前在栈缓存中分配数据存储单元,使得该数据访问指令对应的数据在栈缓存中一定命中。

【技术实现步骤摘要】

本专利技术涉及计算机,通讯及集成电路领域。
技术介绍
通常数据缓存的作用是将更低级存储器中的部分数据内容复制在其中,使这些内容能被更高级存储器或处理器核快速存取,以保证流水线的持续运行。当前的高性能计算机/微处理器等多数使用独立的数据缓存以避免指令与数据共用同一通道的冯·诺依曼瓶颈。随着多指令发射技术的广泛应用,单数个的数据缓存也将更经常地成为限制处理器功能提高的瓶颈。在现有技术中,数据缓存结构由数据存储器和标签存储器构成。数据存储器和标签存储器每行对应,数据存储器重存储数据,标签存储器中存储数据地址的标签,即数据地址中的高位。现行数据缓存的寻址都基于以下方式,用地址中的索引段(index)寻址读出标签存储器中的标签与地址中的标签段进行匹配;用地址中索引段与块内位移段共同寻址读出缓存中的内容。在现有技术中,存储器相邻存储行对应的的索引段寻址地址是连续的,而存储在对应的标签存储器中的标签可以是不连续的。从编译器的角度看,正在执行的目标程序在它自己的逻辑地址空间内运行,每个程序值在这个地址空间中有一个地址。一个目标程序在逻辑地址空间的运行时刻映像包含数据区和代码区。数据区又包含静态区、堆区、空闲内存和栈区。栈区用来存放称为活动记录的数据结构,这些活动记录在函数调用过程中生成。通常静态区与堆区从地址空间的低区从底向顶生长,栈区从地址空间的高区从顶向底生长,两者之间并不重叠,由空闲内存分隔。通常处理器内的寄存器资源有限,过程调用时经常需要将寄存器原有的内容换出到存储器。过程调用结束时,调用者使用的任何寄存器都必须恢复到过程调用前所存储的值。将原来换出到存储器的内容写回到寄存器。在现有技术中,换出/写回寄存器的最理想的数据结构是栈。栈是一种后进先出的队列。栈需要一个指针指向栈中最新分配的地址,以指示下一个过程放置换出寄存器的位置,或是寄存器旧值的存放位置。将数据放入栈中称为压栈,从栈中移除数据称为出栈。按照惯例,栈“增长”是按照地址从高到低的顺序进行的。这表明将值压栈时,栈指针值减小;而值出栈时,栈长度缩短,栈指针增大;也就是说栈内地址是连续的。正是由于栈内地址是连续的,而存储在标签存储器中的标签又是不连续的,所以这就给缓存的查找和替换带来很大的困扰,已成为是制约现代处理器性能提升的最严重瓶颈。本专利技术提出的方法与系统装置能直接解决上述或其他的一个或多个困难。
技术实现思路
本专利技术提出了一种将数据地址空间细分的方法,使得可以由复数个同一层次的数据缓存并行向处理器提供数据以缓解数据访问瓶颈。其特征在于将缓存分为栈缓存,用于存储程序运行时存储在栈区域中的数据;非栈缓存,用于存储程序运行时的其他数据;当处理器核执行的数据访问指令对应的数据位于栈区域中时,直接访问栈缓存。可选的,在所述方法中,根据所述数据访问指令数据地址判断对应的数据位于栈区域中,还是位于非栈区域中;或根据所述数据访问指令中的基地址寄存器号判断对应的数据位于栈区域中,还是位于非栈区域中。可选的,在所述方法中,大于或等于栈寄存器值的数据地址位于栈区域中。可选的,在所述方法中,用栈缓存中地址连续的存储空间存储栈区域中数据地址连续的数据。可选的,在所述方法中,用循环缓冲实现所述栈缓存。可选的,在所述方法中,还包括:栈顶指针,指向所述栈缓存中位于栈顶位置的数据;栈底指针,所述栈底指针与所述栈顶指针保持一定距离,且两者之间的数据就是存储在所述栈缓存中的有效数据。可选的,在所述方法中,当栈顶值改变时,通过对原栈顶值和新栈顶值相减,判断出栈顶指针移动方向。可选的,在所述方法中,由多个所述栈缓存结构组成多层的栈缓存;其中:最高层次的栈缓存的栈顶指针值由处理器核产生的栈顶值决定;其他层次的栈缓存的栈顶指针值由更高一层次的栈缓存的栈底指针值决定。可选的,在所述方法中,各个层次的栈缓存中的循环缓冲共同组成一个大的循环缓冲,所述循环缓冲跨越了不同的缓存层次。可选的,在所述方法中,当较高层次栈缓存已满或接近满时,将其栈底指针指向的至少一个数据存储到更低层次栈缓存中与其栈顶指针指位置相邻的尚未存储有效数据的存储位置,并相应移动所述较高层次栈缓存的栈底指针及所述更低层次栈缓存的栈顶指针。可选的,在所述方法中,当较高层次栈缓存已空或接近空,且在更低层次栈缓存中有数据时,将所述更低层次栈缓存中栈顶指针指向的至少一个数据取回存储到所述较高层次栈缓存中栈底指针指向位置相邻的尚未存储有效数据的存储位置,并相应移动所述较高层次栈缓存的栈底指针及所述更低层次栈缓存的栈顶指针。可选的,在所述方法中,栈缓存中预留若干个存储单元作为预留部分;新的数据可以被写入栈缓存的预留部分,但必须保证预留部分大于等于预设的最小容量;所述最小容量值为零或正数;若因新数据的写入导致预留部分小于所述最小容量,则将其栈底指针指向的至少一个数据存储到更低层次栈缓存中与其栈顶指针指位置相邻的尚未存储有效数据的存储位置,并相应移动所述栈缓存的栈底指针及所述更低层次栈缓存的栈顶指针。可选的,在所述方法中,当支持多个线程同时运行时,将所述预留部分对应的存储单元的号码存储在保留池中;若有新数据写入,则由保留池分配一个存储单元号码供存储数据;若有数据被从栈中取出不再存储,则将对应的存储单元号码送回保留池。可选的,在所述方法中,当正在进行栈操作的一个线程的栈顶指针下移需要更多的存储块,而保留池中已没有预留的存储块时,控制其他线程移动栈底指针释放存储块以供所述线程栈顶指针使用。可选的,在所述方法中,每个存储单元或每组存储单元有相应的数据地址;将所有所述数据地址与处理器核送出的数据地址同时匹配,可以找到处理器核送出的数据地址对应的一个存储单元,或一组存储单元并在该组存储单元中找到相应的存储单元。可选的,在所述方法中,记录栈顶值以及栈顶值对应的一个存储单元或一组存储单元的号码;将处理器核送出的数据地址与所述栈顶值相减,得到所述数据地址与栈顶值之间的差值;根据所述差值按地址连续的顺序从栈缓存中找到该数据地址对应的一个存储单元,或一组存储单元并在该组存储单元中找到相应的存储单元。本专利技术还提出了一种缓存系统,其特征在于包括栈缓存和非栈缓存;其中栈缓存只存储程序运行时存储在栈区域中的数据;当处理器核执行的数据访问指令对应的数据位于栈区域中时,直接访问栈缓存。可选的,在所述系统中,所述栈缓存中地址连续的存储单元存储栈区域中本文档来自技高网
...

【技术保护点】
一种缓存方法,其特征在于将缓存分为:栈缓存,用于存储程序运行时存储在栈区域中的数据;和非栈缓存,用于存储程序运行时的其他数据;当处理器核执行的数据访问指令对应的数据位于栈区域中时,直接访问栈缓存。

【技术特征摘要】
1.一种缓存方法,其特征在于将缓存分为:
栈缓存,用于存储程序运行时存储在栈区域中的数据;和
非栈缓存,用于存储程序运行时的其他数据;
当处理器核执行的数据访问指令对应的数据位于栈区域中时,直接访问栈
缓存。
2.根据权利要求1所述方法,其特征在于,根据所述数据访问指令数据地
址判断对应的数据位于栈区域中,还是位于非栈区域中;或
根据所述数据访问指令中的基地址寄存器号判断对应的数据位于栈区域
中,还是位于非栈区域中。
3.根据权利要求2所述方法,其特征在于,大于或等于栈寄存器值的数据
地址位于栈区域中。
4.根据权利要求2所述方法,其特征在于,用栈缓存中地址连续的存储空
间存储栈区域中数据地址连续的数据。
5.根据权利要求4所述方法,其特征在于,用循环缓冲实现所述栈缓存。
6.根据权利要求5所述方法,其特征在于,还包括:
栈顶指针,指向所述栈缓存中位于栈顶位置的数据;
栈底指针,所述栈底指针与所述栈顶指针保持一定距离,且两者之间的数
据就是存储在所述栈缓存中的有效数据。
7.根据权利要求6所述方法,其特征在于,当栈顶值改变时,通过对原栈
顶值和新栈顶值相减,判断出栈顶指针移动方向。
8.根据权利要求7所述方法,其特征在于,由多个所述栈缓存结构组成多
层的栈缓存;其中:
最高层次的栈缓存的栈顶指针值由处理器核产生的栈顶值决定;
其他层次的栈缓存的栈顶指针值由更高一层次的栈缓存的栈底指针值决
定。
9.根据权利要求8所述方法,其特征在于,各个层次的栈缓存中的循环缓
冲共同组成一个大的循环缓冲,所述循环缓冲跨越了不同的缓存层次。
10.根据权利要求8所述方法,其特征在于,当较高层次栈缓存已满或接

\t近满时,将其栈底指针指向的至少一个数据存储到更低层次栈缓存中与其栈顶
指针指位置相邻的尚未存储有效数据的存储位置,并相应移动所述较高层次栈
缓存的栈底指针及所述更低层次栈缓存的栈顶指针。
11.根据权利要求10所述方法,其特征在于,当较高层次栈缓存已空或接
近空,且在更低层次栈缓存中有数据时,将所述更低层次栈缓存中栈顶指针指
向的至少一个数据取回存储到所述较高层次栈缓存中栈底指针指向位置相邻的
尚未存储有效数据的存储位置,并相应移动所述较高层次栈缓存的栈底指针及
所述更低层次栈缓存的栈顶指针。
12.根据权利要求11所述方法,其特征在于,在栈缓存中预留若干个存储
单元作为预留部分;
新的数据可以被写入栈缓存的预留部分,但必须保证预留部分大于等于预
设的最小容量;所述最小容量值为零或正数;
若因新数据的写入导致预留部分小于所述最小容量,则将其栈底指针指向
的至少一个数据存储到更低层次栈缓存中与其栈顶指针指位置相邻的尚未存储
有效数据的存储位置,并相应移动所述栈缓存的栈底指针及所述更低层次栈缓
存的栈顶指针。
13.根据权利要求12所述方法,其特征在于,当支持多个线程同时运行时,
将所述预留部分对应的存储单元的号码存储在保留池中;
若有新数据写入,则由保留池分配一个存储单元号码供存储数据;
若有数据被从栈中取出不再存储,则将对应的存储单元号码送回保留池。
14.根据权利要求13所述方法,其特征在于,当正在进行栈操作的一个线
程的栈顶指针下移需要更多的存储块,而保留池中已没有预留的存储块时,控
制其他线程移动栈底指针释放存储块以供所述线程栈顶指针使用。
15.根据权利要求5所述方法,其特征在于,每个存储单元或每组存储单
元有相应的数据地址;
将所有所述数据地址与处理器核送出的数据地址同时匹配,可以找到处理
器核送出的数据地址对应的一个存储单元,或一组存储单元并在该组存储单元
中找到相应的存储单元。
16.根据权利要求5所述方法,其特征在于,记录栈顶值以及栈顶值对应

\t的一个存储单元或一组存储单元的号码;

【专利技术属性】
技术研发人员:林正浩
申请(专利权)人:上海芯豪微电子有限公司
类型:发明
国别省市:上海;31

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

1