CN118277330A - 数据处理方法、装置以及芯片、设备、存储介质 - Google Patents
数据处理方法、装置以及芯片、设备、存储介质 Download PDFInfo
- Publication number
- CN118277330A CN118277330A CN202410703038.9A CN202410703038A CN118277330A CN 118277330 A CN118277330 A CN 118277330A CN 202410703038 A CN202410703038 A CN 202410703038A CN 118277330 A CN118277330 A CN 118277330A
- Authority
- CN
- China
- Prior art keywords
- address
- request
- request information
- test result
- cache line
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 30
- 238000012360 testing method Methods 0.000 claims abstract description 293
- 238000000034 method Methods 0.000 claims abstract description 48
- 230000002776 aggregation Effects 0.000 claims abstract description 27
- 238000004220 aggregation Methods 0.000 claims abstract description 27
- 238000012545 processing Methods 0.000 claims abstract description 23
- 238000012093 association test Methods 0.000 claims description 34
- 238000004590 computer program Methods 0.000 claims description 21
- 238000011144 upstream manufacturing Methods 0.000 claims description 18
- 230000004931 aggregating effect Effects 0.000 claims description 8
- 101150104646 SET4 gene Proteins 0.000 description 9
- 101100421300 Schizosaccharomyces pombe (strain 972 / ATCC 24843) set8 gene Proteins 0.000 description 9
- 238000010586 diagram Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 9
- 239000003550 marker Substances 0.000 description 8
- 238000005192 partition Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 101100493820 Caenorhabditis elegans best-1 gene Proteins 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 101100004280 Caenorhabditis elegans best-2 gene Proteins 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000009482 thermal adhesion granulation Methods 0.000 description 2
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 1
- 244000046052 Phaseolus vulgaris Species 0.000 description 1
- -1 and set12.set0 Proteins 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Abstract
本公开实施例提供了一种数据处理方法、装置以及芯片、设备、存储介质,其中,该方法包括:基于读数据请求中携带的读取地址在缓存空间中进行缓存行命中测试,得到测试结果;该读取地址属于预设地址集合,预设地址集合中包括预设地址范围内的至少两个地址;针对预设地址集合中除读取地址之外的关联地址,基于该关联地址在缓存空间中进行缓存行命中测试,得到关联测试结果;基于测试结果及各关联测试结果对行填充请求信息集合进行聚合处理;行填充请求信息集合中包括请求信息,该请求信息用于得到至少一个行填充请求。这样可以在节约数据请求通道的同时提高缓存数据的利用率,从而提高缓存模块的整体性能。
Description
技术领域
本公开涉及但不限于计算机技术领域,尤其涉及一种数据处理方法、装置以及芯片、设备、存储介质。
背景技术
在芯片中通常都会设计缓存模块(cache),以使得数据读写的速度适应芯片中计算模块的计算速度,提高系统性能。相关技术中的缓存方案,无法较好地兼顾数据请求通道的节约需求和缓存数据的利用率需求,可能存在发往下游的行填充请求过多导致数据通道资源不够的情况,或者从下游取回的缓存数据长时间不被访问导致资源浪费的情况,最终影响缓存模块的性能。
发明内容
有鉴于此,本公开实施例至少提供一种数据处理方法、装置以及芯片、设备、存储介质。
本公开实施例的技术方案是这样实现的:
本公开实施例提供一种数据处理方法,所述方法包括:
响应于上游请求源发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址;
针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果;
基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
本公开实施例提供一种芯片,所述芯片包括:
计算模块,用于发送读数据请求;
缓存模块,用于:响应于所述计算模块发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址;针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果;基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
本公开实施例提供一种数据处理装置,所述装置包括:
第一测试模块,用于响应于上游请求源发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址;
第二测试模块,用于针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果;
聚合模块,用于基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
本公开实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法中的部分或全部步骤。
本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法中的部分或全部步骤。
本公开实施例提供一种计算机程序产品,包括计算机程序或指令,所述计算机程序或指令被处理器执行时,实现上述方法中的部分或全部步骤。
本公开实施例中,响应于上游请求源发送的读数据请求,基于读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;该读取地址属于预设地址集合,该预设地址集合中包括预设地址范围内的至少两个地址;针对预设地址集合中除读取地址之外的每一关联地址,基于该关联地址在缓存空间中进行缓存行命中测试,得到关联地址对应的关联测试结果;基于测试结果以及各关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的行填充请求信息集合;该行填充请求信息集合中包括请求信息,该请求信息用于得到至少一个行填充请求。这样,可以在接收到读数据请求后,利用读数据请求中的读取地址进行命中测试,且对与该读取地址同属于预设地址范围内的关联地址也进行命中测试,并基于读取地址对应的测试结果和关联地址对应的关联测试结果,对行填充请求信息集合进行聚合,从而可以减少发往下游数据源的行填充请求的数量,并且不需要从下游数据源预先取回多余数据,从而可以在节约数据请求通道的同时提高缓存数据的利用率,进而提高缓存模块的整体性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开的技术方案。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。
图1为本公开实施例提供的一种数据处理方法的实现流程示意图一;
图2为本公开实施例提供的一种数据处理方法的实现流程示意图二;
图3为本公开实施例提供的一种芯片的组成结构示意图;
图4为本公开实施例提供的一种数据处理方法的实现流程示意图三;
图5为本公开实施例提供的一种数据处理装置的组成结构示意图;
图6为本公开实施例提供的一种计算机设备的硬件实体示意图。
具体实施方式
为了使本公开的目的、技术方案和优点更加清楚,下面结合附图和实施例对本公开的技术方案进一步详细阐述,所描述的实施例不应视为对本公开的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本公开保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
所涉及的术语“第一/第二/第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一/第二/第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本公开实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本公开的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本公开的目的,不是旨在限制本公开。
缓存模块是芯片设计中常用的组件,缓存模块一般分为多个存储块(bank),存储块内的缓存行可以采用组相关的方式进行组织,一个存储块内的缓存行可以分为多个组(set),一个组中的缓存行可以分为多个路(way)。在一些相关技术中,可采用分区缓存(sector cache)的组织方式,将每一缓存行拆分为多个缓存分区(sector),如果请求源的数据请求粒度小于缓存行的粒度(cacheline size),则无需从下游模块读取多余的无用数据。在对缓存模块进行设计的过程中,缓存模块总的存储空间、缓存行的粒度、是否采用缓存分区等都是需要重点关注的点,需要根据实际应用场景中上下游模块的情况、请求源常见的地址请求的请求模式(Request Pattern)、芯片面积限制等来综合考虑。
例如,考虑这样一个缓存模块的应用场景:一个缓存模块的上游请求源的数据请求粒度是R字节(byte),该缓存模块与下游数据源之间的数据位宽也是R byte。则该缓存模块的设计一般有以下这样几种选择:
方案一:缓存行粒度设计为R byte,不采用缓存分区机制。
方案二:缓存行粒度设计为R byte的倍,不采用缓存分区机制,n为正整数;例如,缓存行粒度设计为2R byte 或4R byte等。
方案三:缓存行粒度设计为R byte的倍,例如,缓存行粒度设计为2R byte 或4R byte等,并采用缓存分区机制,缓存分区粒度为R byte。
以R = 32为例,如果上游请求源发出的地址请求的请求模式的空间局部性(locality)比较好(以下称之为pattern0),比如短时间内会访问到128byte的预设地址范围中的4个32byte数据,如第1、3、6、10个读数据请求的读取地址依次为0x1000、0x1020、0x1040、0x1060,且这四个地址同属于一个128byte的预设地址范围(例如同一个128byte对齐的对齐地址0x1000的地址范围)。在这种情况下,采用上述方案二,将缓存行的粒度设计为4R byte较为合适。比如,上述四个地址0x1000、0x1020、0x1040、0x1060中,若第1个地址0x1000对应的缓存行缺失,发往下游数据源的行填充请求(linefill request)就会读回来128byte的数据并依次写入0x1000、0x1020、0x1040和0x1060分别对应的缓存行中,后续再接收到读取地址为0x1020、0x1040或0x1060的读数据请求的情况下,相应的缓存行会直接命中,不必再往下游数据源发送新的行填充请求;发往下游数据源的请求量少,且读回来的缓存数据很快就会被使用到,不会浪费。
继续以R=32为例,如果上游请求源发出的地址请求的请求模式的空间局部性不好(以下称之为pattern1),比如在访问过128byte的预设地址范围中的某32byte数据之后,需要很长时间才会访问到该预设地址范围中的其他3个32byte数据,如第1、3000、6000、10000个读数据请求的读取地址依次为0x1000、0x1020、0x1040、0x1060,且这四个地址同属于一个128byte的预设地址范围(例如同一个128byte对齐的对齐地址0x1000的地址范围)。在这种情况下,大概率在读取地址为0x1020的读数据请求到来的时候,第1个地址0x1000对应的读数据请求开辟的缓存行已经被替换了。这样,如果采用上述方案二,则会导致缓存模块从下游取回来过多的数据,且这些数据在还没有被使用的情况下对应的缓存行就被替换了,也就是取回来的多余数据被浪费掉了。因此,在这种场景下可以选择上述方案一或方案三,以减少缓存数据的浪费。
由于在实际的缓存场景中,上游请求源发出的地址请求的请求模式可能既有pattern0的情况,也有pattern1的情况。相关技术中,若采用上述方案一或方案三的缓存方案,在pattern0的情况下,发往下游数据源的请求量会增多,从而可能导致数据通道资源不够,使得缓存模块的整体性能下降;若采用上述方案二的缓存方案,在pattern2的情况下,可能会导致从下游数据源取回的数据中只有R byte被使用,其他取回的多余数据长时间不被访问都被浪费了,最终影响缓存模块的性能。可见,相关技术中的缓存方案,无法较好地兼顾数据请求通道的节约需求和缓存数据的利用率需求。
有鉴于此,本公开实施例提供一种数据处理方法。该方法可以由缓存模块执行。在一些实施方式中,缓存模块可以为处理器芯片中的缓存模块,例如处理器芯片可以包括但不限于中央处理器(Central Processing Unit,CPU)、图形处理器(Graphics ProcessingUnit,GPU)、数据处理器(Data Processing Unit,DPU)等中的至少之一。图1为本公开实施例提供的一种数据处理方法的实现流程示意图一,如图1所示,该方法可以包括如下步骤S101至步骤S103:
步骤S101,响应于上游请求源发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址。
这里,上游请求源指的是对缓存模块进行数据请求的请求者,例如处理器核心等计算模块、当前缓存模块的上一级缓存模块等。
读数据请求中可以携带有待读取数据的读取地址。该读取地址属于预设地址集合,该预设地址集合中的各地址属于预设地址范围。其中,预设地址范围可以是本领域技术人员根据实际应用场景预先设置的,本申请实施例对此并不限定。例如,预设地址范围可以包括预设长度的连续地址范围,该预设长度可以包括但不限于32byte、64byte、128byte或256byte等。
在一些实施方式中,所述预设地址范围包括属于同一对齐地址的地址范围。可以理解的是对齐地址指的是为目标对齐值的整数倍的地址,对齐地址的地址范围指的是该对齐地址与下一对齐地址之间的地址范围,其中,目标对齐值可以是缓存空间中的地址对齐长度。在缓存空间中的每一个字节均被定义为一个地址的情况下,假设缓存空间中的地址对齐长度为M个字节,即目标对齐值为M,则地址0、M、2M、3M……被称为对齐地址,对齐地址0的地址范围包括0~M-1,对齐地址M的地址范围包括M~2M-1,对齐地址2M的地址范围包括2M~3M-1,……依此类推。例如,在缓存空间中的地址对齐长度为128byte的情况下,目标对齐值为128,对齐地址可以为0x1000、0x1080、或0x1100等,对齐地址0x1000的地址范围包括0x1000~0x107F。
在一些实施方式中,缓存空间中的地址对齐长度为R×N个字节,即目标对齐值为R×N,则地址0、R×N、2×(R×N)、3×(R×N)……被称为对齐地址,其中,R为缓存空间中的缓存行粒度,N为正整数;预设地址集合中可以包括属于同一对齐地址的地址范围内的N个地址。例如,在R为32、N为4的情况下,缓存空间中的地址对齐长度为128byte,对齐地址可以包括0x1000、0x1080、或0x0100等;对于对齐地址0x1000,预设地址集合中可以包括属于该对齐地址0x1000的地址范围0x1000~0x107F内的4个地址0x1000、0x1020、0x1040和0x1060。
步骤S102,针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果。
这里,可以理解的是,在预设地址集合中,当前的读数据请求中携带的地址为读取地址,除该读取地址之外的其他地址为该读取地址的关联地址。
例如,在预设地址集合中包括属于预设地址范围0x0020~0x0080内的4个地址0x0020、0x0040、0x0060和0x0080的情况下,若当前的读数据请求中携带的读取地址为0x0040,则该读取地址的关联地址可以包括0x0020、0x0060和/或0x0080。
又如,在预设地址集合中包括属于对齐地址0x1000的地址范围内的4个地址0x1000、0x1020、0x1040和0x1060的情况下,若当前的读数据请求中携带的读取地址为0x1000,则该读取地址的关联地址可以包括0x1020、0x1040和/或0x1060。
在一些实施方式中,可以利用关联地址作为测试地址,对该关联地址在缓存空间中对应的缓存行进行命中测试,得到该关联地址对应的关联测试结果。关联地址对应的关联测试结果可以表征缓存空间中存在与该关联地址匹配的缓存行(即缓存行命中)、或者表征缓存空间中不存在与该关联地址匹配的缓存行(即缓存行缺失)。
在一些实施方式中,可以根据缓存空间中的地址对齐长度和缓存行粒度,确定与该读取地址同属于预设地址范围内的其他地址,从而得到预设地址集合中除该读取地址之外的每一关联地址,并分别针对每一关联地址,基于该关联地址在缓存空间中进行缓存行命中测试,得到该关联地址的缓存行命中测试结果,即该关联地址的关联测试结果。例如,在预设地址范围包括属于同一对齐地址的地址范围,读取地址为0x1000的情况下,假设缓存空间中的地址对齐长度为128byte,缓存行粒度为32byte,则可以确定与该读取地址对应的各关联地址包括0x1020、0x1040和0x1060,并分别基于地址0x1020、0x1040和0x1060,在缓存空间中进行缓存行命中测试,得到地址0x1020、0x1040和0x1060分别对应的关联测试结果。
在一些实施方式中,可以确定与关联地址对应的关联测试信息,并基于该关联测试信息,在缓存空间中进行缓存行命中测试,得到该关联地址对应的关联测试结果。
其中,关联地址对应的关联测试信息可以包括任意合适的用于对该关联地址在缓存空间中对应的缓存行进行命中测试的信息,可以包括但不限于该关联地址对应的存储块标识信息(bank id)、组标识信息(set id)、标签信息(TAG)等中的至少之一。根据该关联地址对应的存储块标识信息、组标识信息和/或标签信息等,可以确定缓存空间中是否存在与该关联地址匹配的缓存行。
在一些实施方式中,同属于预设地址范围内的各地址对应的缓存行分布在存储空间中同一存储块的不同组中,关联地址对应的关联测试信息可以包括该关联地址对应的第二组标识信息和标签信息。在实施时,可以首先确定与该读取地址对应的第一组标识信息和标签信息;然后根据该读取地址对应的第一组标识信息确定每一关联地址对应的第二组标识信息,并将该读取地址对应的标签信息作为每一关联地址对应的标签信息;并分别针对每一关联地址,基于该关联地址对应的第二组标识信息和标签信息,在缓存空间中进行缓存行命中测试,得到该关联地址的关联测试结果。在实施时,可以采用任意合适的方式根据读取地址对应的第一组标识信息确定每一关联地址对应的第二组标识信息,本公开实施例对此并不限定。例如,可以预先确定同属于预设地址范围内的至少两个地址的组标识信息之间的对应关系,利用读取地址对应的第一组标识信息查询该对应关系,可以得到该读取地址的各关联地址分别对应的第二组标识信息。又如,可以预先确定同属于预设地址范围内的至少两个地址的组标识信息之间的映射关系,利用该映射关系,可以将读取地址对应的第一组标识信息映射为该读取地址的各关联地址分别对应的第二组标识信息。
在一些实施方式中,预设地址范围包括属于同一对齐地址的地址范围,属于同一对齐地址的地址范围内的各地址对应的缓存行分布在存储空间中同一存储块的不同组中。
步骤S103,基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
这里,读取地址的测试结果中可以包括但不限于读取地址对应的缓存行是否命中、读取地址对应的缓存行路标识、读取地址对应的请求有效状态等中的至少之一。关联地址的关联测试结果中可以包括但不限于关联地址对应的缓存行是否命中、关联地址对应的缓存行路标识(way id)、关联地址对应的请求有效状态等中的至少之一。其中,缓存行路标识为该读取地址对应的缓存行的路标识,请求有效状态表征该读取地址对应的行填充请求是否有效。地址对应的行填充请求是否有效指的是该地址是否对应有待发往/已发往下游数据源的行填充请求,其中,该地址对应的待发往/已发往下游数据源的行填充请求可以是独立的行填充请求,也可以是与其他地址聚合后的行填充请求。
下游数据源指的是缓存模块进行数据读取的来源端,例如主存储器、或当前缓存模块的下一级缓存模块等。
行填充请求信息集合中包括当前待发往下游数据源的至少一个行填充请求分别对应的请求信息,其中,行填充请求的请求信息可以包括任意合适的用于定位待请求数据的信息,例如用于确定行填充请求的请求起始地址、请求数据尺寸和/或请求突发长度等的信息,本公开实施例对此并不限定。根据行填充请求信息集合中的每一请求信息,可以生成一个行填充请求,通过将该行填充请求发送至下游数据源,可以从下游数据源获得与该请求信息对应的请求数据并回填至相应的缓存行中。
可以理解的是,由于行填充请求信息集合中可能存在与至少一个关联地址对应的行填充请求的请求信息,而读数据请求中携带的读取地址与各关联地址属于同一对齐地址的地址范围,因此,可以基于读取地址的测试结果以及各关联地址的关联测试结果,判断是否可以将该读取地址对应的行填充请求的请求信息与行填充请求信息集合中的请求信息进行聚合处理。
在一些实施方式中,在读取地址对应的测试结果表征缓存行缺失的情况下,基于所述测试结果和各所述关联地址对应的关联测试结果,对当前的行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合。在一些实施方式中,在读取地址对应的测试结果表征缓存行命中的情况下,不对当前的行填充请求信息集合进行聚合处理。
在一些实施方式中,在接收到上游请求源发送的读数据请求后,缓存模块可以利用主流水线(记为main stage hit test pipeline,以下简称main stage),基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果,并且为读取地址的每一关联地址分别新增一条从流水线(记为side stage hit test pipeline,以下简称side stage),以利用各关联地址对应的从流水线,基于关联地址在缓存空间中进行缓存行命中测试,得到关联地址对应的关联测试结果。
本公开实施例中,响应于上游请求源发送的读数据请求,基于读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;该读取地址属于预设地址集合,该预设地址集合中包括预设地址范围内的至少两个地址;针对预设地址集合中除读取地址之外的每一关联地址,基于该关联地址,在缓存空间中进行缓存行命中测试,得到关联地址对应的关联测试结果;基于测试结果以及各关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的行填充请求信息集合;该行填充请求信息集合中包括请求信息,该请求信息用于得到至少一个行填充请求。这样,可以在接收到读数据请求后,利用读数据请求中的读取地址进行命中测试,且对与该读取地址同属于预设地址范围内的关联地址也进行命中测试,并基于读取地址对应的测试结果和关联地址对应的关联测试结果,对行填充请求信息集合进行聚合,从而可以减少发往下游数据源的行填充请求的数量,并且不需要从下游数据源预先取回多余数据,从而可以在节约数据请求通道的同时提高缓存数据的利用率,进而提高缓存模块的整体性能。
在一些实施方式中,上述方法还可以包括:在所述测试结果表征缓存行缺失的情况下,在所述缓存空间中为所述读取地址分配一个目标缓存行。
在确定所述缓存空间中不存在与所述关联测试信息匹配的缓存行的情况下,确定所述关联地址的关联测试结果表征缓存行缺失。
可以理解的是,在接收到的读数据请求中携带的第一读取地址对应测试结果表征缓存行缺失的情况下,可以在缓存空间中为该第一读取地址分配一个目标缓存行,以待从下游数据源获得与该第一读取地址对应的请求数据后回填至该目标缓存行中。缓存模块通常不会在缓存行命中测试结束后立即向下游数据源发送与该第一读取地址对应的行填充请求,而会将当前待发往下游数据源的行填充请求对应的请求信息加入行填充请求信息集合,以通过仲裁机制依次基于行填充请求信息集合中的请求信息生成对应的行填充请求并发送至下游数据源。因此,后续若接收到的读数据请求中携带第二读取地址,且该第二读取地址与第一读取地址同属于预设地址范围内,则该第一读取地址可以作为第二读取地址的关联地址,由于缓存空间中已存在与该关联地址匹配的缓存行,则该关联地址对应的关联测试结果会表征缓存行命中,而此时行填充请求信息集合中与该关联地址对应行填充请求的请求信息可能还未发出。这样,在第二读取地址对应的测试结果表征缓存行缺失的情况下,可以基于该第二读取地址对应的测试结果以及该关联地址(即第一读取地址)对应的关联测试结果,将第二读取地址对应的行填充请求的请求信息与该第一读取地址对应的行填充请求的请求信息聚合,从而将第二读取地址对应的行填充请求与该第一读取地址对应的行填充请求进行聚合,减少发往下游数据源的行填充请求的数量。
在一些实施方式中,在关联地址对应的关联测试结果表征缓存行缺失的情况下,表明缓存模块未接收到以该关联地址作为读取地址的读数据请求,也即当前不需要获取该关联地址对应的请求数据,从而可以不用为该关联地址分配缓存行。这样,可以进一步减少从下游数据源预先取回多余数据的情况,从而可以进一步提高缓存数据的利用率。
在一些实施方式中,在基于读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试的过程中,若该读取地址对应测试结果表征缓存行缺失,则会在与该读取地址对应的组标识匹配的一组缓存行中,为该读取地址分配一个目标缓存行,并将该目标缓存行的标识信息更新为与该读取地址匹配的标识信息,这样,无论该读取地址对应的请求数据是否已回填至该目标缓存行中,在下一次基于该读取地址在缓存空间中进行缓存行命中测试的情况下,测试结果都会表征缓存行命中,或者,在以该读取地址作为关联地址,基于该关联地址在缓存空间中进行缓存行命中测试的情况下,得到的关联测试结果会表征缓存行命中。
在一些实施例中,上述步骤S103可以包括如下步骤S111至步骤S112:
步骤S111,在所述测试结果表征缓存行缺失、且存在至少一个所述关联测试结果表征缓存行命中的情况下,基于所述测试结果和各所述关联测试结果,确定第一请求信息。
步骤S112,在所述行填充请求信息集合中存在与所述第一请求信息匹配的第二请求信息的情况下,将所述第一请求信息与所述第二请求信息聚合。
这里,若测试结果表征缓存行缺失、且存在至少一个关联测试结果表征缓存行命中,则表明行填充请求信息集合中可能存在与至少一个关联地址对应的行填充请求的请求信息,该至少一个关联地址对应的行填充请求可与该读取地址对应的行填充请求进行聚合。因此,在测试结果表征缓存行缺失、且存在至少一个关联测试结果表征缓存行命中的情况下,可以基于该测试结果和各关联地址的关联测试结果,生成第一请求信息,并将该第一请求信息与行填充请求信息集合中的请求信息进行匹配,以确定当前的行填充请求信息集合中是否存在与第一请求信息匹配的第二请求信息。
在一些实施方式中,第一请求信息中可以包括预设地址集合中的各地址当前分别对应的缓存行路标识和请求有效状态,行填充请求信息集合中的各请求信息中可以包括预设地址集合中的各地址分别对应的缓存行路标识和请求有效状态。通过比较第一请求信息中每一地址当前对应的缓存行路标识和第二请求信息中每一地址对应的缓存行路标识、和/或比较第一请求信息中每一地址当前对应的请求有效状态和第二请求信息中每一地址对应的请求有效状态,可以确定第一请求信息与第二请求信息是否匹配。例如,可以在第二请求信息中存在第一关联地址对应的请求有效状态为有效、且该第二请求信息中该第一关联地址对应的缓存行路标识与第一请求信息中该第一关联地址对应的缓存行路标识相等的情况下,确定该第二请求信息与第一请求信息匹配。又如,可以在第二请求信息中各地址对应的请求有效状态与第二请求信息中各地址对应的请求有效状态一一对应相等、且该第二请求信息中各地址对应的缓存行路标识与第一请求信息中各地址对应的缓存行路标识一一对应相等的情况下,确定该第二请求信息与第一请求信息匹配。
上述实施例中,在测试结果表征缓存行缺失、且存在至少一个关联测试结果表征缓存行命中的情况下,基于测试结果和各关联测试结果,确定第一请求信息,并在行填充请求信息集合中存在与第一请求信息匹配的第二请求信息的情况下,将第一请求信息与第二请求信息聚合。这样,可以快速准确地将关联地址对应的行填充请求的请求信息与读取地址对应的行填充请求的请求信息聚合,进而将关联地址对应的行填充请求与读取地址对应的行填充请求聚合。
在一些实施例中,所述请求信息中包括路标识标志序列和状态标志序列,所述路标识标志序列中的各路标识标志与所述预设地址集合中的各地址一一对应,所述状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应;
所述第二请求信息的状态标志序列中存在第一关联地址对应的状态标志为有效标志、且所述第二请求信息的路标识标志序列中所述第一关联地址对应的路标识标志与所述第一请求信息的路标识标志序列中所述第一关联地址对应的路标识标志相等。
这里,路标识标志序列中可以包括预设地址集合中的各地址分别对应的路标识标志,每一地址对应的路标识标志可以表征与该地址对应的缓存行路标识。
状态标志序列中可以包括预设地址集合中的各地址分别对应的状态标志,每一地址对应的状态标志可以表征与该地址对应的请求有效状态。
例如,在预设地址集合中包括地址0x1000、0x1020、0x1040和0x1060,且这四个地址属于同一个128byte对齐的对齐地址0x1000的地址范围,则请求信息中可以包括路标识标志序列{wayId1,wayId2,wayId3,wayId4}以及状态标志序列{vb1,vb2,vb3,vb4};其中,wayId1和vb1均与地址0x1000对应,wayId1表征地址0x1000对应的缓存行路标识,vb1表征地址0x1000对应的请求有效状态;wayId2和vb2均与地址0x1020对应,wayId2表征地址0x1020对应的缓存行路标识,vb2表征地址0x1020对应的请求有效状态;wayId3和vb3均与地址0x1040对应,wayId3表征地址0x1040对应的缓存行路标识,vb3表征地址0x1040对应的请求有效状态;wayId4和vb4均与地址0x1060对应,wayId4表征地址0x1060对应的缓存行路标识,vb4表征地址0x1060对应的请求有效状态。可以理解的是,对于行填充请求信息集合中的请求信息,该请求信息中的路标识标志序列{wayId1,wayId2,wayId3,wayId4}中的各标识标志依次表征该请求信息对应的行填充请求针对地址0x1000、0x1020、0x1040和0x1060的缓存行路标识,该请求信息中的状态标志序列{vb1,vb2,vb3,vb4}中的各状态标志依次表征该请求信息是否对应地址0x1000、0x1020、0x1040和0x1060的行填充请求,也即当前是否有与地址0x1000、0x1020、0x1040和0x1060分别对应的待发往下游数据源的行填充请求;对于第一请求信息,该第一请求信息中的路标识标志序列{wayId1,wayId2,wayId3,wayId4}中的各标识标志依次表征该第一请求信息对应的行填充请求针对地址0x1000、0x1020、0x1040和0x1060的缓存行路标识,该第一请求信息中的状态标志序列{vb1,vb2,vb3,vb4}中的各状态标志依次表征该第一请求信息是否对应地址0x1000、0x1020、0x1040和0x1060的行填充请求,也即当前是否有与地址0x1000、0x1020、0x1040和0x1060分别对应的待发往/已发往下游数据源的行填充请求。例如,在当前有与某一地址对应的待发往/已发往下游数据源的行填充请求的情况下,该地址对应的状态标志为有效标志,在当前不存在与某一地址对应的待发往/已发往下游数据源的行填充请求的情况下,该地址对应的状态标志为无效标志。
上述实施例中,第二请求信息的状态标志序列中存在第一关联地址对应的状态标志为有效标志、且第二请求信息的路标识标志序列中第一关联地址对应的路标识标志与第一请求信息的路标识标志序列中第一关联地址对应的路标识标志相等,在行填充请求信息集合中存在与第一请求信息匹配的第二请求信息的情况下,将第一请求信息与第二请求信息聚合。这样,可以通过比较请求信息的状态标志序列和路标识标志序列,快速准确地确定行填充请求信息集合中是否存在与第一请求信息匹配的第二请求信息。
在一些实施例中,所述第一请求信息中包括第一路标识标志序列和第一状态标志序列;所述第一路标识标志序列中的各路标识标志与所述预设地址集合中的各地址一一对应,所述第一状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应。
上述步骤S111中所述的基于所述测试结果和各所述关联测试结果,确定第一请求信息,可以包括如下步骤S131至步骤S133:
步骤S131,基于所述测试结果,确定与所述读取地址对应的缓存行路标识和请求有效状态,并基于所述关联地址对应的所述关联测试结果,确定与所述关联地址对应的缓存行路标识和请求有效状态。
这里,在测试结果表征缓存行缺失的情况下,缓存模块可以为该读取地址分配一个目标缓存行,测试结果中可以包括该缓存行的路标识,也即与该读取地址对应的缓存行路标识。通过对该测试结果进行解析,即可得到该读取地址对应的缓存行路标识。
由于在测试结果表征缓存行缺失的情况下,需要向下游数据源发送与该读取地址对应的行填充请求,也即当前存在与该读取地址对应的待发往下游数据源的行填充请求。因此,可以在测试结果表征缓存行缺失的情况下,确定与该读取地址对应的请求有效状态为有效;在测试结果表征缓存行命中的情况下,确定与该读取地址对应的请求有效状态为无效。
在关联地址对应的关联测试结果表征缓存行缺失的情况下,缓存空间中不存在与该关联地址对应的缓存行,从而该关联地址对应的缓存行路标识为空。在关联地址对应的关联测试结果表征缓存行命中的情况下,缓存空间中存在与该关联地址对应的缓存行,关联测试结果中可以包括该缓存行的路标识,也即与该关联地址对应的缓存行路标识,通过对该关联测试结果进行解析,即可得到该关联地址对应的缓存行路标识。
由于在关联地址对应的关联测试结果表征缓存行缺失的情况下,表明当前不存在与该关联地址对应的待发往/已发往下游数据源的行填充请求,因此,可以在关联地址对应的关联测试结果表征缓存行缺失的情况下,确定与该关联地址对应的请求有效状态为无效。在关联地址对应的关联测试结果表征缓存行命中的情况下,表明当前存在与该关联地址对应的待发往/已发往下游数据源的行填充请求,因此,可以在关联地址对应的关联测试结果表征缓存行命中的情况下,确定与该关联地址对应的请求有效状态为有效。
步骤S132,基于所述读取地址对应的缓存行路标识、以及至少一个所述关联地址分别对应的缓存行路标识,确定所述第一路标识标志序列。
这里,第一路标识标志序列中可以包括多个路标识标志,且第一路标识标志序列中的各路标识标志与预设地址集合中的各地址一一对应。由于预设地址集合中包括读取地址以及该读取地址的各关联地址,因此,基于读取地址对应的缓存行路标识、以及至少一个关联地址分别对应的缓存行路标识,即可确定第一路标识标志序列。
在一些实施方式中,在关联地址/读取地址对应的缓存行路标识为空的情况下,可以将第一路标识标志序列中与该关联地址/读取地址对应的路标识标志用预设的缺省值表示,例如0;在关联地址/读取地址对应的缓存行路标识不为空的情况下,可以将第一路标识标志序列中与该关联地址/读取地址对应的路标识标志用该关联地址/读取地址对应的缓存行路标识表示。
步骤S133,基于所述读取地址对应的请求有效状态、以及至少一个所述关联地址分别对应的请求有效状态,确定所述第一状态标志序列。
这里,第一状态标志序列中可以包括多个状态标志,且第一状态标志序列中的各状态标志与预设地址集合中的各地址一一对应。因此,基于读取地址对应的缓存行路标识、以及该读取地址的至少一个关联地址分别对应的请求有效状态,即可确定第一状态标志序列。
在一些实施方式中,在关联地址/读取地址对应的请求有效状态为有效的情况下,可以将第一状态标志序列中与该关联地址/读取地址对应的状态标志用有效标志表示,例如1;在关联地址/读取地址对应的请求有效状态为无效的情况下,可以将第一状态标志序列中与该关联地址/读取地址对应的状态标志用无效标志表示,例如0。
上述实施例中,基于测试结果,确定与读取地址对应的缓存行路标识和请求有效状态,并基于关联地址对应的关联测试结果,确定与关联地址对应的缓存行路标识和请求有效状态;基于读取地址对应的缓存行路标识、以及至少一个关联地址分别对应的缓存行路标识,确定第一路标识标志序列;基于读取地址对应的请求有效状态、以及至少一个关联地址分别对应的请求有效状态,确定第一状态标志序列。这样,可以基于测试结果和各关联测试结果,快速准确地确定第一请求信息,从而可以提高对当前的行填充请求信息集合进行聚合处理的效率。
在一些实施例中,上述步骤S112中所述的将所述第一请求信息与所述第二请求信息聚合,可以包括如下步骤S141至步骤S142:
步骤S141,将所述第二请求信息的状态标志序列中与所述读取地址对应的状态标志更新为有效标志。
步骤S142,将所述第二请求信息的路标识标志序列中与所述读取地址对应的路标识标志,更新为所述第一请求信息的路标识标志序列中与所述读取地址对应的路标识标志。
这样,在读取地址对应的测试结果表征缓存行缺失、且存在至少一个关联地址对应的关联测试结果表征缓存行命中的情况下,对于行填充请求信息集合中与第一请求信息匹配的第二请求信息,通过将第二请求信息的状态标志序列中与读取地址对应的状态标志更新为有效标志,并将第二请求信息的路标识标志序列中与该读取地址对应的路标识标志,更新为第一请求信息的路标识标志序列中与该读取地址对应的路标识标志,可以将第一请求信息聚合至第二请求信息中,从而将该读取地址对应的行填充请求与该第二请求信息对应的行填充请求聚合。
在一些实施例中,上述步骤S103还可以包括如下步骤S151:
步骤S151,在所述行填充请求信息集合中不存在所述第二请求信息的情况下,基于所述测试结果,确定第三请求信息,并将所述第三请求信息添加至所述行填充请求信息集合中。
这里,若行填充请求信息集合中不存在与第一请求信息匹配的第二请求信息,则表明关联测试结果表征缓存行命中的关联地址对应的行填充请求已发往下游数据源,即当前的行填充请求信息集合中不存在与关联地址对应的行填充请求的请求信息,从而不用考虑将该读取地址对应的行填充请求的请求信息与当前的行填充请求信息集合中的请求信息进行聚合处理,而可以基于读取地址对应的测试结果,确定与该读取地址对应的行填充请求的第三请求信息后,将该第三请求信息添加至行填充请求信息集合中。
在一些实施例中,所述第三请求信息中包括第二路标识标志序列和第二状态标志序列;所述第二路标识标志序列中的各路标识标志与所述预设地址集合中的各地址一一对应,所述第二状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应。
上述步骤S151中所述的基于所述测试结果,确定第三请求信息,可以包括如下步骤S161至步骤S163:
步骤S161,基于所述测试结果,确定与所述读取地址对应的缓存行路标识和请求有效状态。
这里,上述步骤S161的实施方式可以参照前述步骤S131中基于测试结果,确定与读取地址对应的缓存行路标识和请求有效状态的方式。
步骤S162,基于所述读取地址对应的缓存行路标识,确定所述第二路标识标志序列。
在一些实施方式中,第二路标识标志序列中可以包括多个路标识标志,且第二路标识标志序列中的各路标识标志与预设地址集合中的各地址一一对应,其中,在第二路标识标志序列中,对应于读取地址的路标识标志用该读取地址对应的缓存行路标识表示,对应于关联地址的路标识标志用预设的缺省值表示,例如0。
步骤S163,基于所述读取地址对应的请求有效状态,确定所述第二状态标志序列。
在一些实施方式中,第二状态标志序列中可以包括多个状态标志,且第二状态标志序列中的各状态标志与预设地址集合中的各地址一一对应,其中,在第二状态标志序列中,对应于读取地址的路标识标志用有效标志表示,例如1,对应于关联地址的路标识标志用无效标志表示,例如0。
在一些实施例中,上述步骤S103还可以包括如下步骤S171:
步骤S171,在所述测试结果表征缓存单元缺失、且各所述关联测试结果均表征缓存单元缺失的情况下,基于所述测试结果,确定第三请求信息,并将所述第三请求信息添加至所述行填充请求信息集合中。
这里,若读取地址对应的测试结果表征缓存单元缺失、且各关联地址对应的关联测试结果均表征缓存单元缺失,则表明当前不存与任一关联地址对应的在待发往/已发往下游数据源的行填充请求,也即当前的行填充请求信息集合中不存在与至少一个关联地址对应的行填充请求的请求信息,从而不用考虑将该读取地址对应的行填充请求的请求信息与当前的行填充请求信息集合中的请求信息进行聚合处理,而可以基于读取地址的测试结果,确定与该读取地址对应的行填充请求的第三请求信息后,将该第三请求信息添加至行填充请求信息集合中。
在一些实施例中,上述步骤S101中所述的基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果,可以包括如下步骤S801至步骤S802:
步骤S801,对所述读取地址进行解析,得到待测试的第一组标识信息和标签信息。
这里,缓存空间中用于进行数据读取或写入的访存地址可以基于块标识(bankid)信息、组标识信息、标签信息等进行编码得到。在实施时,可以根据访存地址的编码方式,采用任意合适的方式对读取地址进行解析,得到读取地址中携带的组标识信息和标签信息,即待测试的第一组标识信息和标签信息。
在一些实施方式中,对读取地址中的组标识字段进行解析,可以得到待测试的第一组标识信息,对读取地址中的标签字段进行解析,可以得到待测试的标签信息。例如,读取地址包括16个地址位,其中,地址位[8:5]对应组标识字段,地址位[15:11]对应标签字段,通过对读取地址中的地址位[8:5]进行解析可以得到第一组标识信息,通过对读取地址中的地址位[15:11]进行解析可以得到标签信息。又如,读取地址包括16个地址位,其中,地址位[10:8]和地址位[5]共同组成组标识字段,地址位[15:11]对应标签字段,通过对读取地址中的地址位[10:8]和地址位[5]进行解析可以得到第一组标识信息,通过对读取地址中的地址位[15:11]进行解析可以得到标签信息。
步骤S802,基于所述第一组标识信息和标签信息,在所述缓存空间中进行缓存行命中测试,得到测试结果。
在一些实施方式中,可以在读取地址对应的存储块中,基于第一组标识信息确定一组缓存行,通过比较该组缓存行中各路缓存行的标签信息与待测试的标签信息是否相同,来确定缓存空间中是否存在与该读取地址对应的缓存行,也即确定与该读取地址对应的缓存行是否命中。例如,在该组缓存行中存在某一路缓存行的标签信息与待测试的标签信息相同的情况下,确定该路缓存行与该读取地址对应,从而确定该读取地址对应的缓存行命中,即测试结果表征缓存行命中;在该组缓存行中各路缓存行的标签信息与待测试的标签信息均不相同的情况下,确定该读取地址对应的缓存行缺失,即测试结果表征缓存行缺失。
上述实施例中,对读取地址进行解析,得到待测试的第一组标识信息和标签信息,基于第一组标识信息和标签信息,在缓存空间中进行缓存行命中测试,得到测试结果。这样,可以基于读取地址快速准确地进行缓存行命中测试。
在一些实施例中,上述步骤S102中所述的基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果,可以包括:
基于与所述关联地址对应的关联测试信息,在所述缓存空间中进行缓存行命中测试,得到所述关联地址的关联测试结果。
关联地址对应的关联测试信息可以包括任意合适的用于对该关联地址在缓存空间中对应的缓存行进行命中测试的信息,可以包括但不限于该关联地址对应的存储块标识信息、组标识信息、标签信息等中的至少之一。这样,更加快捷地完成关联地址的缓存行命中测试。
在一些实施例中,所述与所述关联地址对应的关联测试信息包括与所述关联地址对应的第二组标识信息以及所述标签信息。
上述步骤S102中所述的基于与所述关联地址对应的关联测试信息,在所述缓存空间中进行缓存行命中测试,得到所述关联地址的关联测试结果,可以包括如下步骤S901:
步骤S901,基于所述第二组标识信息和所述标签信息,在所述缓存空间中进行缓存行命中测试,得到关联测试结果。
在一些实施方式中,可以基于读取地址,确定各关联地址,并通过对关联地址进行解析,得到该关联地址对应的第二组标识信息和标签信息。
在一些实施方式中,所述预设地址范围包括属于同一对齐地址的地址范围,属于同一对齐地址的地址范围内的各地址对应的组标识信息之间具有预设的映射关系,利用该映射关系,可以将读取地址对应的第一组标识信息映射为该读取地址的各关联地址分别对应的第二组标识信息。
可以理解的是,由于属于同一对齐地址的地址范围内的各地址对应的标签信息是相同的,而关联地址与读取地址属于同一对齐地址的地址范围,因此,关联地址的标签信息与读取地址的标签信息相同。
在一些实施方式中,属于同一对齐地址的地址范围内的各地址对应的缓存行分布在存储空间中同一存储块的不同组中,可以在读取地址对应的存储块中,基于第二组标识信息确定一组缓存行,通过比较该组缓存行中各路缓存行的标签信息与待测试的标签信息是否相同,来确定缓存空间中是否存在与该关联地址对应的缓存行,也即确定与该关联地址对应的缓存行是否命中。例如,在该组缓存行中存在某一路缓存行的标签信息与待测试的标签信息相同的情况下,确定该路缓存行与该关联地址对应,从而确定该关联地址对应的关联测试结果表征缓存行命中;在该组缓存行中各路缓存行的标签信息与待测试的标签信息均不相同的情况下,确定该关联地址对应的关联测试结果表征缓存行缺失。
上述实施例中,基于与关联地址对应的第二组标识信息和标签信息,在缓存空间中进行缓存行命中测试,可以便捷地得到与关联地址对应的关联测试结果,简化缓存行命中测试的控制逻辑。
本公开实施例提供一种数据处理方法,该方法可以由缓存模块执行。图2为本公开实施例提供的一种数据处理方法的实现流程示意图二,如图2所示,该方法可以包括如下步骤S201至步骤S204:
步骤S201,响应于上游请求源发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址。
步骤S202,针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果。
步骤S203,基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
这里,步骤S201至步骤S203分别对应于前述实施例中的步骤S101至步骤S103,在实施时可参照前述步骤S101至步骤S103的实施方式。
步骤S204,针对所述行填充请求信息集合中的每一请求信息,基于所述请求信息,生成目标行填充请求,并将所述目标行填充请求发送至下游数据源。
这里,行填充请求的请求信息可以包括任意合适的用于定位待请求数据的信息,本公开实施例对此并不限定。例如,请求信息中可以包括用于确定行填充请求的请求起始地址、请求数据尺寸和/或请求突发长度等的信息,根据该行填充请求的请求起始地址、请求数据尺寸和/或请求突发长度等可以定位待请求数据。
本公开实施例中,根据行填充请求信息集合中的每一请求信息,可以生成一个目标行填充请求,通过将该目标行填充请求发送至下游数据源,可以从下游数据源获得与该请求信息对应的请求数据并回填至相应的缓存行中。
在一些实施方式中,发往下游请求源的目标行填充请求中可以携带相应的请求信息,下游数据源在返回读取的请求数据时也会携带上该请求信息,这样,缓存模块可以根据该请求信息将接收到的请求数据回填至相应的缓存行中。
在一些实施例中,所述请求信息中包括状态标志序列,所述状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应。
上述步骤S204中所述的基于所述请求信息,生成目标行填充请求,可以包括如下步骤S211至步骤S212:
步骤S211,基于所述状态标志序列,从所述预设地址集合中确定最大目标地址与最小目标地址;所述最大目标地址为所述预设地址集合中在所述状态标志序列中对应的状态标志为有效标志的最大地址,所述最小目标地址为所述预设地址集合中在所述状态标志序列中对应的状态标志为有效标志的最小地址。
步骤S212,以所述最小目标地址作为请求起始地址、且以目标数量作为请求突发长度,生成所述目标行填充请求;其中,所述目标数量为所述预设地址集合中不小于所述最小目标地址、且不大于所述最大目标地址的地址的数量。
可以理解的是,请求突发长度是预设地址集合中不小于最小目标地址且不大于最大目标地址的地址的数量,这样,通过目标行填充请求能够获取到目标地址集合中各目标地址对应的请求数据,从而可以减少发往下游数据源的行填充请求数量。
本公开实施例提供一种芯片,图3为本公开实施例提供的一种芯片的组成结构示意图,如图3所示,该芯片300包括计算模块310和缓存模块320,其中:
计算模块310,用于发送读数据请求;
缓存模块320,用于:响应于所述计算模块发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址;针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果;基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
这里,计算模块可以包括处理器核心。处理器中可以包括一个或多个处理器核心。
下面说明本公开实施例提供的数据处理方法在实际场景中的应用。本公开实施例提供的数据处理方法可应用于基于缓存模块的数据读取场景。
假定当前缓存模块的参数包括:存储块数量bank_num、每一存储块中缓存行的组数set_num、每一组缓存行中的路数way_num、缓存行粒度cacheline_size和缓存空间大小cache_size,则有如下公式1-1成立:
(1-1);
其中,cacheline_size和cache_size单位为字节(byte)。set_num一般都为2的整数次幂。一个读数据请求对应一个读取地址,将读取地址经过一定计算算法的处理,可以得到该读取地址对应的块标识信息(bank id)/组标识信息(set id)/标签信息(TAG)等信息。
在本公开实施例提供的数据处理方法中,可以先确定缓存模块的行填充请求的最大聚合粒度与缓存行粒度cacheline size之间的比值,假设该比值为N, cacheline size为R,一般情况下N为2的整数次幂。
在一些实施方式中,可以对计算bank id或set id的算法做一定的限制:属于同一个R×N byte对齐的对齐地址的地址范围内的N个地址必须落在同一个bank的不同set,且根据其中任意一个set的set id,可以得到其他(N-1)个set的set id;该N个地址可以依次对应可聚合的N拍请求,给出任意一个set id,就可以确定该set id对应的地址的请求拍数(beat id)。比如在R=32、N=4的情况下,四个地址0x1000、0x1020、0x1040和0x1060属于同一个128byte对齐的对齐地址的地址范围,其中,地址0x1000、0x1020、0x1040和0x1060分别对应的请求拍数为beat0、beat1、beat2、beat3,这四个地址对应的缓存行落在同一个bank的4个不同set中,且4个set的set id间存在一定的对应关系,可以从一个地址的set id得到其他3个地址的set id。例如,假设bank_num = 2, set_num = 16,可使用读取地址中的地址位[6:5]作为set id选择的高位(bit),使用读取地址中的地址位[7]作为bank id,使用读取地址中的地址位[9:8]作为set id选择的低bit;那么,地址0x1000、0x1020、0x1040、0x1060对应的缓存行分别落到bank0的四个set中,这四个set的set id依次为0、4、8、12,其中,根据地址0x1000对应的set的set id 0,将4bit set id的高两bit依次变为1/2/3,就得到了地址0x1020/0x1040/0x1060分别对应的set的set id 4/8/12。需要说明的是,本公开实施例对bank id或set id的计算方法并不限定,下文仅使用set X与set Y(Y1,Y2,Y3...)之间存在关联关系来说明,其中,set X为读数据请求中携带的读取地址对应的set,set Y为与该读取地址属于同一对齐地址的地址范围内的其他地址(对应前述实施例中的关联地址)对应的set。
在一个bank内,一般会有1条或多条流水线(pipeline)做缓存行命中测试(hittest)。hit test的过程中,会根据读数据请求中携带的读取地址所对应的set id和/或TAG信息,跟该读取地址对应的set(记为set X)中的所有有效路(way)的缓存行的TAG进行比较,得到测试结果,即hit/miss信息;如果set X中的所有有效路中没有空闲way,则会做缓存行移除(evict)操作和/或缓存行替换(replace)操作,并会更新替换表/状态/引用计数器(reference counter)等等信息,为该读取地址分配对应的目标缓存行。
对于上述用于对读取地址进行缓存行命中测试的流水线(hit test pipeline),可以记为主流水线main stage hit test pipeline(以下简称为main stage);同时,对于每一条主流水线main stage,都配套新增N-1条从流水线side stage hit test pipeline(以下简称为side stage)。这N-1条从流水线side stage分别依次对应与set X关联的其他N-1个set(比如set Y1,set Y2,set Y3,……),用于对与该读取地址属于同一对齐地址的地址范围内的N-1个其他地址进行缓存行命中测试,得到该N-1个其他地址分别对应的关联测试结果。需要注意的是,主流水线main stage上的地址落到哪个set是根据读数据请求中携带的读取地址确定的,可能对应beat0的set,也可能对应beat1、beat2、……的set。
在一条从流水线side stage中,可以用读取地址对应的TAG,对与set X关联的setY(比如set Y1或set Y2或set Y3或...)中的所有有效way的缓存行的TAG进行比较,得到与该set Y对应的关联地址的关联测试结果,即hit/miss信息。其中,从流水线side stage只做缓存行的hit/miss判断,不做缓存行移除操作和/或缓存行替换操作、以及更新替换表/状态/引用计数器等等信息的操作,也即不会为该关联地址分配对应的目标缓存行;如果关联地址的关联测试结果表征缓存行命中(hit),则输出与该set Y和TAG匹配的缓存行路标识;如果关联地址的关联测试结果表征缓存行缺失(miss),则不输出信息(或输出一些标志位来表明没有匹配上)。
在一些实施方式中,一个bank可以对应有一个或多个行填充请求信息集合,具有关联关系的set X和set Y(比如set Y1,set Y2,set Y3 ...)共享同一个行填充请求信息集合(记为linefill req map),linefill req map的深度等于way_num×N,每一层存储空间用于储存当前N个set中需要发往下游数据源、但暂时还未成功发送到下游数据源的行填充请求(linefill request)的请求信息(以下称之为linefill req map info),请求信息包括{路标识标志序列,状态标志序列}。其中,路标识标志序列中包括N个路标识标志,该N个路标识标志依次为set X、set Y1、set Y2、set Y3、…对应的行填充请求的缓存行路标识way id;状态标识序列中包括N个状态标志,该N个状态标志依次对应set X、set Y1、setY2、set Y3、…,每一个set对应的状态标志用于表征该set对应的行填充请求是否有效,并用于后续确定发往下游数据源的目标行填充请求中的请求起始地址和请求突发长度(burst length)。如果主流水线main stage的测试结果表征缓存行缺失,则set X对应的状态标志为1,表征set X对应的行填充请求有效,即set X对应有待发往下游数据源的行填充请求。在一些实施方式中,对于一个bank内的每个行填充请求信息集合,可以使用该行填充请求信息集合对应的一组set id中的任意一个来唯一标识该行填充请求信息集合。
如果主流水线main stage的测试结果表征hit,则不会往下游数据源发送行填充请求,故不必关心从流水线side stage的关联测试结果。
如果主流水线main stage的测试结果表征miss、且各从流水线side stage的关联测试结果均表征miss,则表明当前N个set共享的行填充请求信息集合中不会有请求信息对应的行填充请求能跟主流水线main stage本次对应的行填充请求进行聚合,故将主流水线main stage本次对应的行填充请求的请求信息添加至行填充请求信息集合中,其中,在主流水线main stage本次对应的行填充请求的请求信息中,将路标识标志序列中对应set X的way id赋值为主流水线main stage本次为读取地址分配的目标缓存行的缓存行路标识、以及将状态标志序列中对应set X的状态标志赋值为有效标志1。
如果主流水线main stage的测试结果表征miss、且至少一条从流水线side stage的关联测试结果表征hit,则表明当前N个set共享的行填充请求信息集合中可能有请求信息对应的行填充请求能跟主流水线main stage本次对应的行填充请求进行聚合。此时按照beat 0、1、2、…的顺序(也就是请求信息中路标识标志序列中各路标识标志分别对应的地址的顺序),将主流水线main stage的测试结果和N-1个从流水线side stage的关联测试结果组合,得到一个第一请求信息,该第一请求信息中包括第一路标识标志序列和第一状态标志序列,由于主流水线main stage的测试结果表征miss,则第一状态标志序列中对应setX的状态标志赋值为有效标志1、关联测试结果表征hit的从流水线side stage对应的set Y的状态标志赋值为有效标志1、关联测试结果表征miss的从流水线side stage对应的其他set的状态标志赋值为无效标志0,第一路标识标志序列中对应set X的way id赋值为主流水线main stage本次为读取地址分配的目标缓存行的缓存行路标识、关联测试结果表征hit的从流水线side stage对应的set Y的way id赋值为该从流水线side stage本次命中的缓存行的缓存行路标识、关联测试结果表征miss的从流水线side stage对应的其他set的way id赋值为缺省值0。然后,将第一请求信息跟行填充请求信息集合中的各请求信息进行比较,如果行填充请求信息集合中存在与第一请求信息匹配的第二请求信息,则表明主流水线main stage本次对应的行填充请求可以与第二请求信息对应的行填充请求进行聚合。此时,主流水线main stage本次对应的行填充请求不再产生新的请求信息,而是将第二请求信息中与set X对应的way id和状态标志分别修改为第一请求信息中与set X对应的way id和状态标志,使得修改后的第二请求信息对应的目标行填充请求可以让下游数据源返回多拍(beat)数据。如果行填充请求信息集合中存在与第一请求信息匹配的第二请求信息,则表明关联测试结果表征hit的从流水线side stage对应的set Y的行填充请求的请求信息已经从行填充请求信息集合中移除了,不能进行聚合了,故此时只保留第一请求信息中与set X对应的way id和状态标志、并将第一请求信息中与各set Y对应的way id和状态标志清0,得到第三请求信息,并将该第三请求信息存入到行填充请求信息集合中。其中,与第一请求信息匹配的第二请求信息的状态标志序列中,存在某一关联地址(对应前述实施例中的第一关联地址)对应的状态标志为有效标志1,且该第二请求信息的路标识标志序列中,该第一关联地址对应的路标识标志与第一请求信息的路标识标志序列中该第一关联地址对应的路标识标志相等。
在将行填充请求信息集合中的请求信息对应的行填充请求发往下游数据源时,基于该请求地址生成的目标行填充请求中,请求起始地址为该请求信息的状态标志序列中对应的状态标志为有效标志的最小地址,请求突发长度能够使得目标行填充请求足以覆盖到所有需要请求的数据。比如N= 4,状态标志序列valid bit = 4’b1010,则请求起始地址是对应的请求拍数为beat0的地址,突发长度需要大于或者等于3,才能覆盖到所有需要请求的数据。行填充请求信息集合中的请求信息对应的目标行填充请求发往下游数据源后,该请求信息就释放了。发往下游数据源的目标行填充请求中需要携带该请求信息,并且下游数据源返回该目标行填充请求所请求读取的数据时,也会把该请求信息再携带上,这样就可以根据该请求信息中路标识标志序列中的way id来将读取的数据回填至各set的对应way中。
依然以上述bank和set id的选择方式来举例,假设一个bank内有Q条主流水线,Q= 1,R = 32,N = 4,bank_num = 2,set_num = 16,way_num = 16;使用使用读取地址中的地址位[6:5]作为set id选择的高bit,使用读取地址中的地址位[7]作为bank id,使用读取地址中的地址位[9:8]作为set id选择的低bit;那么,地址0x1000、0x1020、0x1040、0x1060对应的缓存行分别落到bank0的四个set中,这四个set的set id依次为0、4、8、12,四个set依次记为set0、set4、set8、set12。set0、set4、set8和set12共享一个行填充请求信息集合,一个bank共有set_num / N = 4个行填充请求信息集合。属于同一对齐地址的地址范围内的地址0x1000、0x1020、0x1040和0x1060依次对应的请求拍数为beat0、beat1、beat2、beat3。
假如第0时刻0T时,缓存模块收到携带读取地址0x1020的读数据请求,该读取地址0x1020对应的请求拍数为beat1、对应的set为set4,与该读取地址set4对应的主流水线main stage的测试结果表征miss,并且该主流水线main stage为该读取地址在set4中分配的缓存行路标识way id = 1,3个从流水线side stage(分别对应set0、set8、set12)的关联测试结果表征miss,则存入到set0、set4、set8和set12共享的行填充请求信息集合中的请求信息为{0,1,0,0,4’b0100}(对应前述实施例中的第一请求信息或第三请求信息)。其中,请求信息中的前4个元素{0,1,0,0}对应于前述实施例中的路标识标志序列,4’b0100对应于前述实施例中的状态标志序列。
在第1时刻1T时,缓存模块收到携带读取地址0x1040的读数据请求,该读取地址0x1040对应的请求拍数为beat2、对应的set为set8,set8对应的主流水线main stage的测试结果表征miss,并且该主流水线main stage为该读取地址在set8中分配的缓存行路标识way id = 2,set0和set12对应的从流水线side stage的关联测试结果表征miss,set4对应的从流水线side stage的关联测试结果表征hit且命中的缓存行路标识way id = 1,则组成的请求信息为{0,1,2,0,4’b0110}(对应前述实施例中的第一请求信息)。假如0T时存入行填充请求信息集合中的请求信息{0,1,0,0,4’b0100}依然存在,则比较请求信息{0,1,2,0,4’b0110}和请求信息{0,1,0,0,4’b0100},发现请求拍数beat1在两个请求信息中对应的状态标志都是有效标志1,并且请求拍数beat1在两个请求信息中对应的路标识标志也相同(均为1),这说明请求信息{0,1,0,0,4’b0100}是与请求信息{0,1,2,0,4’b0110}匹配的第二请求信息,那么请求信息{0,1,2,0,4’b0110}和请求信息{0,1,0,0,4’b0100}可以进行聚合,聚合后,行填充请求信息集合中的请求信息{0,1,0,0,4’b0100}更新为{0,1,2,0,4’b0110}。
在第2时刻2T时,缓存模块收到携带读取地址0x1000的读数据请求,该读取地址0x1000对应的请求拍数为beat0、对应的set为set0,set0对应的主流水线main stage的测试结果表征miss,并且该主流水线main stage为该读取地址在set0中分配的缓存行路标识way id = 3。3个从流水线side stage中,set4对应的从流水线side stage的关联测试结果表征hit且命中的缓存行路标识way id = 1,set8对应的从流水线side stage的关联测试结果表征hit且命中的缓存行路标识way id = 2,set12对应的从流水线side stage的关联测试结果表征miss,则组成的请求信息为{3,1,2,0,4’b1110}。假如0T时存入行填充请求信息集合且1T时修改的请求信息{0,1,2,0,4’b0110}依然在行填充请求信息集合中,则比较请求信息{3,1,2,0,4’b1110}和请求信息{0,1,2,0,4’b0110},发现请求拍数beat1、beat2在两个请求信息中对应的状态标志都是有效标志1,并且请求拍数beat1在两个请求信息中对应的路标识标志相同(均为1),请求拍数beat2在两个请求信息中对应的路标识标志也相同(均为2),这说明请求信息{0,1,2,0,4’b0110}是与请求信息{3,1,2,0,4’b1110}匹配的第二请求信息,那么请求信息{3,1,2,0,4’b1110}和请求信息{0,1,2,0,4’b0110}可以进行聚合,聚合后,行填充请求信息集合中的请求信息{0,1,2,0,4’b0110}更新为{3,1,2,0,4’b1110}。
在第3时刻3T时,缓存模块基于行填充请求信息集合中的请求信息{3,1,2,0,4’b1110},生成目标行填充请求,并将该目标行填充请求发往下游数据源,将行填充请求信息集合中的请求信息{3,1,2,0,4’b1110}移除。其中,组成的目标行填充请求的地址为0x1000,突发长度为3,表明需要向下游数据源请求3 beat的数据。
在第4时刻4T时,缓存模块收到携带读取地址0x1060的读数据请求,该读取地址0x1060对应的请求拍数为beat3、对应的set为set12,set12对应的主流水线main stage的测试结果表征miss,并且该主流水线main stage为该读取地址在set12中分配的缓存行路标识way id = 4。3个从流水线side stage中,set0对应的从流水线side stage的关联测试结果表征hit且命中的缓存行路标识way id = 3,set4对应的从流水线side stage的关联测试结果表征hit且命中的缓存行路标识way id = 1,set8对应的从流水线side stage的关联测试结果表征hit且命中的缓存行路标识way id = 2,则组成的请求信息为{3,1,2,4,4’b1111}。由于0T时存入(1T时和2T时修改)行填充请求信息集合中的请求信息{3,1,2,0,4’b1110}已在3T时移除,故当前的行填充请求信息集合中没有与请求信息{3,1,2,4,4’b1111}匹配的请求信息,此时只保留请求信息{3,1,2,4,4’b1111}中与beat3对应的way id和状态标志、并将与beat0、beat1和beat2对应的way id和状态标志均清0,得到请求信息{0,0,0,4,4’b0001},并将该请求信息{0,0,0,4,4’b0001}存入到行填充请求信息集合中。
在第5时刻5T时,缓存模块基于行填充请求信息集合中的请求信息{0,0,0,4,4’b0001},生成目标行填充请求,并将该目标行填充请求发往下游数据源,将行填充请求信息集合中的请求信息{0,0,0,4,4’b0001}移除。其中,组成的目标行填充请求的地址为0x1060,突发长度为1,表明需要向下游数据源请求1 beat的数据。
图4为本公开实施例提供的一种数据处理方法的实现流程示意图三,如图4所示,该方法可以包括如下步骤S401至步骤S404:
步骤S401,根据读数据请求中携带的读取地址,计算bank id以及与主流水线对应的set id和TAG,并根据主流水线对应的set id,确定N-1个从流水线对应的set id;
步骤S402,利用主流水线,基于与主流水线对应的set id和TAG进行缓存行命中测试,判断读取地址的测试结果表征hit或miss,并在测试结果表征miss的情况下进行缓存行替换、移除和/或更新替换表等操作;
步骤S403,利用N-1个从流水线,基于从流水线对应的set id、以及主流水线对应的TAG进行缓存行命中测试,判断读取地址的N-1个关联地址的关联测试结果表征hit或miss;
步骤S404,基于测试结果以及各关联地址的关联测试结果,对当前的行填充请求信息集合进行聚合处理。
这里,当前的行填充请求信息集合可以为主流水线main stage对应的set id、以及N-1个从流水线side stage对应的set id共享的。
多个行填充请求信息集合中的请求信息可以通过仲裁机制依次生成行填充请求并发往下游数据源。
在一些实施方式中,一个bank对应set_num / N个行填充请求信息集合。这样,继续参见图4,在向下游发送请求信息对应的行填充请求的过程中,同一bank(例如bank0)内的多个行填充请求信息集合之间在bank内会进行仲裁,并且多个bank间在出口处也会进行仲裁。
在一些实施方式中,可以将一个bank对应的set_num / N个行填充请求信息集合整合到一个行填充请求信息集合中,同时将整合后的行填充请求信息集合的深度修改为way_num×set_num(或者,深度也可以根据需求适当小于这个值),这样,就可以省略掉bank内多个行填充请求信息集合之间的仲裁。
在一些实施方式中,同一个bank在同一拍会从上游请求源接收Q个读数据请求,如果Q大于1,也就是说一个bank中有多个主流水线main stage,则Q个主流水线main stage之间是独立的,各主流水线对应的N-1个从流水线side stage之间也是独立的,也就是说有Q个不同的读取地址分别独立经过上述步骤S401至步骤S404所述的请求信息的聚合逻辑。其中,行填充请求信息集合和后续的仲裁逻辑是Q个主流水线main stage间共享的。
在本公开实施例中,对于上游请求源发出的地址请求的请求模式既可能有pattern0也可能有pattern1的场景,可以在pattern0的情况下,尽量对待发往下游数据源的行填充请求做聚合,减少发往下游数据源的请求数量,在pattern1的情况下,不需要从下游数据源预先取回多余数据,从而可以减少从下游取回的数据被浪费掉的情况。这样,可以使得缓存模块在不同场景下都能达到很好的性能。
基于前述的实施例,本公开实施例提供一种数据处理装置,该装置包括所包括的各单元、以及各单元所包括的各模块,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(Central ProcessingUnit,CPU)、微处理器(Microprocessor Unit,MPU)、数字信号处理器(Digital SignalProcessor,DSP)或现场可编程门阵列(Field Programmable Gate Array,FPGA)等。
图5为本公开实施例提供的一种数据处理装置的组成结构示意图,如图5所示,数据处理装置500包括:第一测试模块510、第二测试模块520和聚合模块530,其中:
第一测试模块510,用于响应于上游请求源发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址;
第二测试模块520,用于针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果;
聚合模块530,用于基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
在一些实施例中,所述装置还包括:分配模块,用于在所述测试结果表征缓存行缺失的情况下,在所述缓存空间中为所述读取地址分配一个目标缓存行。
在一些实施例中,聚合模块还用于:在所述测试结果表征缓存行缺失、且存在至少一个所述关联测试结果表征缓存行命中的情况下,基于所述测试结果和各所述关联测试结果,确定第一请求信息;在所述行填充请求信息集合中存在与所述第一请求信息匹配的第二请求信息的情况下,将所述第一请求信息与所述第二请求信息聚合。
在一些实施例中,所述请求信息中包括路标识标志序列和状态标志序列,所述路标识标志序列中的各路标识标志与所述预设地址集合中的各地址一一对应,所述状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应;所述第二请求信息的状态标志序列中存在第一关联地址对应的状态标志为有效标志、且所述第二请求信息的路标识标志序列中所述第一关联地址对应的路标识标志与所述第一请求信息的路标识标志序列中所述第一关联地址对应的路标识标志相等。
在一些实施例中,所述第一请求信息中包括第一路标识标志序列和第一状态标志序列;所述第一路标识标志序列中的各路标识标志与所述预设地址集合中的各地址一一对应,所述第一状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应;聚合模块还用于:基于所述测试结果,确定与所述读取地址对应的缓存行路标识和请求有效状态,并基于所述关联地址对应的关联测试结果,确定与所述关联地址对应的缓存行路标识和请求有效状态;基于所述读取地址对应的缓存行路标识、以及至少一个所述关联地址分别对应的缓存行路标识,确定所述第一路标识标志序列;基于所述读取地址对应的请求有效状态、以及至少一个所述关联地址分别对应的请求有效状态,确定所述第一状态标志序列。
在一些实施例中,聚合模块还用于:将所述第二请求信息的状态标志序列中与所述读取地址对应的状态标志更新为有效标志;将所述第二请求信息的路标识标志序列中与所述读取地址对应的路标识标志,更新为所述第一请求信息的路标识标志序列中与所述读取地址对应的路标识标志。
在一些实施例中,聚合模块还用于:在所述行填充请求信息集合中不存在所述第二请求信息的情况下,基于所述测试结果,确定第三请求信息,并将所述第三请求信息添加至所述行填充请求信息集合中。
在一些实施例中,所述第三请求信息中包括第二路标识标志序列和第二状态标志序列;所述第二路标识标志序列中的各路标识标志与所述预设地址集合中的各地址一一对应,所述第二状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应;聚合模块还用于:基于所述测试结果,确定与所述读取地址对应的缓存行路标识和请求有效状态;基于所述读取地址对应的缓存行路标识,确定所述第二路标识标志序列;基于所述读取地址对应的请求有效状态,确定所述第二状态标志序列。
在一些实施例中,聚合模块还用于:在所述测试结果表征缓存单元缺失、且各所述关联测试结果均表征缓存单元缺失的情况下,基于所述测试结果,确定第三请求信息,并将所述第三请求信息添加至所述行填充请求信息集合中。
在一些实施例中,所述装置还包括:发送模块,用于针对所述行填充请求信息集合中的每一请求信息,基于所述请求信息,生成目标行填充请求,并将所述目标行填充请求发送至所述下游数据源。
在一些实施例中,所述请求信息中包括状态标志序列,所述状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应;发送模块还用于:基于所述状态标志序列,从所述预设地址集合中确定最大目标地址与最小目标地址;所述最大目标地址为所述预设地址集合中在所述状态标志序列中对应的状态标志为有效标志的最大地址,所述最小目标地址为所述预设地址集合中在所述状态标志序列中对应的状态标志为有效标志的最小地址;以所述最小目标地址作为请求起始地址、且以所述目标数量作为请求突发长度,生成所述目标行填充请求;其中,所述目标数量为所述预设地址集合中不小于所述最小目标地址、且不大于所述最大目标地址的地址的数量。
在一些实施例中,所述预设地址范围包括属于同一对齐地址的地址范围。
在一些实施例中,第一测试模块还用于:对所述读取地址进行解析,得到待测试的第一组标识信息和标签信息;基于所述第一组标识信息和标签信息,在所述缓存空间中进行缓存行命中测试,得到测试结果。
在一些实施例中,第二测试模块还用于:基于与所述关联地址对应的关联测试信息,在所述缓存空间中进行缓存行命中测试,得到所述关联地址的关联测试结果。
在一些实施例中,所述与所述关联地址对应的关联测试信息包括与所述关联地址对应的第二组标识信息以及所述标签信息;第二测试模块还用于:基于所述第二组标识信息和所述标签信息,在所述缓存空间中进行缓存行命中测试,得到关联测试结果。
以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。在一些实施例中,本公开实施例提供的装置具有的功能或包含的模块可以用于执行上述方法实施例描述的方法,对于本公开装置实施例中未披露的技术细节,请参照本公开方法实施例的描述而理解。
需要说明的是,本公开实施例中,如果以软件功能模块的形式实现上述的方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本公开各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本公开实施例不限制于任何特定的硬件、软件或固件,或者硬件、软件、固件三者之间的任意结合。
本公开实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法中的部分或全部步骤。
本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法中的部分或全部步骤。所述计算机可读存储介质可以是瞬时性的,也可以是非瞬时性的。
本公开实施例提供一种计算机程序,包括计算机可读代码,在所述计算机可读代码在计算机设备中运行的情况下,所述计算机设备中的处理器执行用于实现上述方法中的部分或全部步骤。
本公开实施例提供一种计算机程序产品,包括计算机程序或指令,所述计算机程序或指令被处理器执行时,实现上述方法中的部分或全部步骤。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一些实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一些实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
这里需要指出的是:上文对各个实施例的描述倾向于强调各个实施例之间的不同之处,其相同或相似之处可以互相参考。以上设备、存储介质、计算机程序及计算机程序产品实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本公开设备、存储介质、计算机程序及计算机程序产品实施例中未披露的技术细节,请参照本公开方法实施例的描述而理解。
需要说明的是,图6为本公开实施例中计算机设备的一种硬件实体示意图,如图6所示,该计算机设备600的硬件实体包括:处理器601、通信接口602和存储器603,其中:
处理器601通常控制计算机设备600的总体操作。
通信接口602可以使计算机设备通过网络与其他终端或服务器通信。
存储器603配置为存储由处理器601可执行的指令和应用,还可以缓存待处理器601以及计算机设备600中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random AccessMemory,RAM)实现。处理器601、通信接口602和存储器603之间可以通过总线604进行数据传输。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本公开的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本公开的各种实施例中,上述各步骤/过程的序号的大小并不意味着执行顺序的先后,各步骤/过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。上述本公开实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本公开所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。另外,在本公开各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本公开上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本公开各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本公开的实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。
Claims (20)
1.一种数据处理方法,其特征在于,所述方法包括:
响应于上游请求源发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址;
针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果;
基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
2.根据权利要求1所述的数据处理方法,其特征在于,还包括:
在所述测试结果表征缓存行缺失的情况下,在所述缓存空间中为所述读取地址分配一个目标缓存行。
3.根据权利要求1所述的数据处理方法,其特征在于,所述基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,包括:
在所述测试结果表征缓存行缺失、且存在至少一个所述关联测试结果表征缓存行命中的情况下,基于所述测试结果和各所述关联测试结果,确定第一请求信息;
在所述行填充请求信息集合中存在与所述第一请求信息匹配的第二请求信息的情况下,将所述第一请求信息与所述第二请求信息聚合。
4.根据权利要求3所述的数据处理方法,其特征在于,所述请求信息中包括路标识标志序列和状态标志序列,所述路标识标志序列中的各路标识标志与所述预设地址集合中的各地址一一对应,所述状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应;
所述第二请求信息的状态标志序列中存在第一关联地址对应的状态标志为有效标志、且所述第二请求信息的路标识标志序列中所述第一关联地址对应的路标识标志与所述第一请求信息的路标识标志序列中所述第一关联地址对应的路标识标志相等。
5.根据权利要求3所述的数据处理方法,其特征在于,所述第一请求信息中包括第一路标识标志序列和第一状态标志序列;所述第一路标识标志序列中的各路标识标志与所述预设地址集合中的各地址一一对应,所述第一状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应;
所述基于所述测试结果和各所述关联测试结果,确定第一请求信息,包括:
基于所述测试结果,确定与所述读取地址对应的缓存行路标识和请求有效状态,并基于所述关联地址对应的所述关联测试结果,确定与所述关联地址对应的缓存行路标识和请求有效状态;
基于所述读取地址对应的缓存行路标识、以及至少一个所述关联地址分别对应的缓存行路标识,确定所述第一路标识标志序列;
基于所述读取地址对应的请求有效状态、以及至少一个所述关联地址分别对应的请求有效状态,确定所述第一状态标志序列。
6.根据权利要求3所述的数据处理方法,其特征在于,所述将所述第一请求信息与所述第二请求信息聚合,包括:
将所述第二请求信息的状态标志序列中与所述读取地址对应的状态标志更新为有效标志;
将所述第二请求信息的路标识标志序列中与所述读取地址对应的路标识标志,更新为所述第一请求信息的路标识标志序列中与所述读取地址对应的路标识标志。
7.根据权利要求3所述的数据处理方法,其特征在于,所述基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,还包括:
在所述行填充请求信息集合中不存在所述第二请求信息的情况下,基于所述测试结果,确定第三请求信息,并将所述第三请求信息添加至所述行填充请求信息集合中。
8.根据权利要求7所述的数据处理方法,其特征在于,所述第三请求信息中包括第二路标识标志序列和第二状态标志序列;所述第二路标识标志序列中的各路标识标志与所述预设地址集合中的各地址一一对应,所述第二状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应;
所述基于所述测试结果,确定第三请求信息,包括:
基于所述测试结果,确定与所述读取地址对应的缓存行路标识和请求有效状态;
基于所述读取地址对应的缓存行路标识,确定所述第二路标识标志序列;
基于所述读取地址对应的请求有效状态,确定所述第二状态标志序列。
9.根据权利要求3所述的数据处理方法,其特征在于,所述基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,还包括:
在所述测试结果表征缓存单元缺失、且各所述关联测试结果均表征缓存单元缺失的情况下,基于所述测试结果,确定第三请求信息,并将所述第三请求信息添加至所述行填充请求信息集合中。
10.根据权利要求1至9中任一项所述的数据处理方法,其特征在于,还包括:
针对所述行填充请求信息集合中的每一请求信息,基于所述请求信息,生成目标行填充请求,并将所述目标行填充请求发送至下游数据源。
11.根据权利要求10所述的数据处理方法,其特征在于,所述请求信息中包括状态标志序列,所述状态标志序列中的各状态标志与所述预设地址集合中的各地址一一对应;
所述基于所述请求信息,生成目标行填充请求,包括:
基于所述状态标志序列,从所述预设地址集合中确定最大目标地址与最小目标地址;所述最大目标地址为所述预设地址集合中在所述状态标志序列中对应的状态标志为有效标志的最大地址,所述最小目标地址为所述预设地址集合中在所述状态标志序列中对应的状态标志为有效标志的最小地址;
以所述最小目标地址作为请求起始地址、且以目标数量作为请求突发长度,生成所述目标行填充请求;其中,所述目标数量为所述预设地址集合中不小于所述最小目标地址、且不大于所述最大目标地址的地址的数量。
12.根据权利要求1至9中任一项所述的数据处理方法,其特征在于,所述预设地址范围包括属于同一对齐地址的地址范围。
13.根据权利要求1至9中任一项所述的数据处理方法,其特征在于,所述基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果,包括:
对所述读取地址进行解析,得到待测试的第一组标识信息和标签信息;
基于所述第一组标识信息和标签信息,在所述缓存空间中进行缓存行命中测试,得到测试结果。
14.根据权利要求13所述的数据处理方法,其特征在于,所述基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果,包括:
基于与所述关联地址对应的关联测试信息,在所述缓存空间中进行缓存行命中测试,得到所述关联地址的关联测试结果。
15.根据权利要求14所述的数据处理方法,其特征在于,所述与所述关联地址对应的关联测试信息包括与所述关联地址对应的第二组标识信息以及所述标签信息;
所述基于与所述关联地址对应的关联测试信息,在所述缓存空间中进行缓存行命中测试,得到所述关联地址的关联测试结果,包括:
基于所述第二组标识信息和所述标签信息,在所述缓存空间中进行缓存行命中测试,得到关联测试结果。
16.一种芯片,其特征在于,所述芯片包括:
计算模块,用于发送读数据请求;
缓存模块,用于:响应于所述计算模块发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址;针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果;基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
17.一种数据处理装置,其特征在于,所述装置包括:
第一测试模块,用于响应于上游请求源发送的读数据请求,基于所述读数据请求中携带的读取地址,在缓存空间中进行缓存行命中测试,得到测试结果;所述读取地址属于预设地址集合,所述预设地址集合中包括预设地址范围内的至少两个地址;
第二测试模块,用于针对所述预设地址集合中除所述读取地址之外的每一关联地址,基于所述关联地址,在所述缓存空间中进行缓存行命中测试,得到所述关联地址对应的关联测试结果;
聚合模块,用于基于所述测试结果以及各所述关联测试结果,对行填充请求信息集合进行聚合处理,得到聚合后的所述行填充请求信息集合;所述行填充请求信息集合中包括请求信息,所述请求信息用于得到至少一个行填充请求。
18.一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至15中任一项所述方法中的步骤。
19.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至15中任一项所述方法中的步骤。
20.一种计算机程序产品,包括计算机程序或指令,其特征在于,所述计算机程序或指令被处理器执行时,实现权利要求1至15中任一项所述方法中的步骤。
Publications (1)
Publication Number | Publication Date |
---|---|
CN118277330A true CN118277330A (zh) | 2024-07-02 |
Family
ID=
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105900076B (zh) | 用于处理多个交易的数据处理系统及方法 | |
US7698512B2 (en) | Compressing address communications between processors | |
CN105677580A (zh) | 访问缓存的方法和装置 | |
CN103678523A (zh) | 分布式高速缓存cache数据访问方法和装置 | |
CN116010109B (zh) | 缓存资源分配方法、装置、电子设备和存储介质 | |
CN116821011B (zh) | 参数确定及数据读写方法、处理器、装置、计算机设备 | |
CN115481054A (zh) | 数据处理方法、装置及系统、系统级soc芯片及计算机设备 | |
CN111803917A (zh) | 资源的处理方法和装置 | |
CN114036089A (zh) | 数据处理方法、装置、缓存器、处理器及电子设备 | |
CN112199039B (zh) | 虚拟存储管理方法及处理器 | |
EP2722763A1 (en) | Arithmetic processing unit, information processing device, and arithmetic processing unit control method | |
CN118277330A (zh) | 数据处理方法、装置以及芯片、设备、存储介质 | |
US9158682B2 (en) | Cache memory garbage collector | |
CN106164874B (zh) | 多核系统中数据访问者目录的访问方法及设备 | |
CN112115521B (zh) | 数据访问方法及装置 | |
US11036643B1 (en) | Mid-level instruction cache | |
CN115190102B (zh) | 信息广播方法、装置、电子单元、soc及电子设备 | |
CN110825521B (zh) | 一种内存使用管理方法、装置及存储介质 | |
CN109165172B (zh) | 缓存数据处理方法及相关设备 | |
US11829293B2 (en) | Processor and arithmetic processing method | |
CN116049032B (zh) | 基于光线追踪的数据调度方法、装置及设备、存储介质 | |
US20240202116A1 (en) | Method and Apparatus for Increasing Memory Level Parallelism by Reducing Miss Status Holding Register Allocation in Caches | |
US10977176B2 (en) | Prefetching data to reduce cache misses | |
CN113448958B (zh) | 数据处理方法和装置、电子设备、存储介质 | |
CN114637609B (zh) | 基于冲突检测的gpu的数据获取系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication |