具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
高速缓存(cache)应用于计算机***中。通常为中央处理器(CPU)或图形处理器(GPU)等计算单元提供数据缓冲。
高速缓存包含写回(write back)机制。当写数据时,若缓存行(cache line)未命中,则需要从内存(memory)中读取该缓存行至缓存中,然后基于缓存中的缓存行完成写操作。完成写操作后,会将该缓存行写入至内存。当后续需要读取该缓存行时,再从内存中将该缓存行读取到缓存。
可见目前在执行写操作时,尤其是写操作请求的目标缓存行不在缓存中时,需要将目标缓存行从内存中读入缓存。然而随着数量庞大的缓存数据处理,该过程将导致缓存数据读写效率受限。
针对上述技术问题,本申请提出如下技术构思:在写操作时,取消将目标缓存行读取到缓存,而是在缓存中对申请的空闲缓存执行写操作对应的目标数据位的内容,形成第一缓存行。当触发读操作时,将第一缓存行与内存中的目标缓存行进行合并,得到第二缓存行。并将第二缓存行反馈至上级单元。进而无需在写操作时从内存中读取目标缓存行,进而能够提高缓存的读写效率。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图1为本申请实施例提供的缓存数据处理方法适用的硬件结构示意图,包括流处理器1、零级缓存2(L0 Cache)、一级缓存3(L1 Cache)以及内存4(Memory)。需要说明的是,流处理器1与内存4之间可以包括一层或多层缓存。图1给出了一种两层缓存的示例。其中多个流处理器1可以共用一个零级缓存2,多个零级缓存2共用一个一级缓存3,一级缓存3与内存4连接。可选的,本发明实施例适用的硬件结构还可以为流处理器1、零级缓存2和内存4组成。流处理器可以为中央处理器(CPU)中的流处理器,也可以为图形处理器(GPU)中的流处理器。
本发明实施例中的缓存可以为任何一级的缓存,缓存接收到上级单元触发的写操作或读操作。上级单元为趋向流处理器1方向,与缓存相邻的单元。示例性的,若写操作发生在一级缓存3,则上级单元为零级缓存2,零级缓存2的写操作由流处理器1触发。示例性的,若写操作发生在零级缓存2,则上级单元为流处理器1。
图2为本申请实施例提供的缓存数据处理方法的流程图一,本实施例可适用于通过缓存对缓存行(cache line)数据进行读写的情况,该方法可以由具有图形处理器的电子设备来执行。如图2所示,本申请提供的缓存数据处理方法,包括:
S101、上级单元触发目标缓存行的写操作时,若所述目标缓存行不存在于缓存,申请空闲缓存行。
写操作面向一条缓存行,写操作携带有目标缓存行标记(tag),目标缓存行标记用于标记一条缓存行。触发写操作时,进行命中测试(hit miss test)。判断缓存中是否存在具有目标缓存行标记(tag)的缓存行(Cache line)。若存在,则确定目标缓存行存在于缓存。若不存在,则确定目标缓存行不存在于缓存。
S102、根据所述写操作对所述空闲缓存行进行一个或多个目标数据位的写入,得到第一缓存行。
写操作用于对目标缓存行中一个或多个目标数据位中的数据进行写入。在步骤S101申请到空闲缓存行后,可以根据写操作将数据写入到空闲缓存行中的目标数据位,得到第一缓存行。第一缓存行可以保留在缓存中。
S103、上级单元触发目标缓存行的读操作时,获取内存中的目标缓存行。
读操作用于存储在缓存或存储在内存中的某个缓存行。上级单元触发读操作时,进行命中测试(hit miss test)。判断缓存中是否存在具有目标缓存行标记(tag)的缓存行(Cache line)。若存在,则确定目标缓存行存在于缓存。若不存在,则确定目标缓存行不存在于缓存。
对于写操作阶段通过对空闲缓存行进行目标数据位写入得到的第一缓存行,其具有目标缓存行标记。且可以通过增加读操作标记对第一缓存行进行标记。当触发读操作时,若读操作请求的缓存行位于缓存且具有读操作标记,则说明第一缓存行仅记载了写操作对目标数据位的写入数据,未包含目标缓存行的其它数据位内容。因此从内存中根据目标缓存行标识获取目标缓存行。
S104、根据所述第一缓存行中写入的目标数据位与所述目标缓存行进行合并,得到第二缓存行。
使用第一缓存行中的写入数据替换目标缓存行的相应数据位,实现第一缓存行与目标缓存行的合并(merge),得到的第二缓存行相对于对目标缓存行执行了步骤101中的写操作的结果。
S105、将所述第二缓存行反馈至所述上级单元。
可选的,在S101、上级单元触发目标缓存行的写操作之后,还包括:
若所述目标缓存行位于所述缓存中,则根据所述目标缓存行执行所述写操作;
配置所述目标缓存行的脏数据标记为有效;
根据所述写操作对应的数据位配置所述目标缓存行的数据位置标记。
对目标缓存行进行命中测试后,测试结果还可以为命中,说明目标缓存行位于缓存中。此时可以在缓存中直接对目标缓存行执行写操作。在对目标缓存行执行写操作后,为目标缓存行配置脏数据标记的有效状态。脏数据标记有效标识缓存行中保存有写入的数据,且该写入数据未被读取。此外,还可以根据写操作指向的数据位对目标缓存行的数据位置标记进行配置,以便数据位置标记能够记载写操作写入的数据位的具***置。实现对于已存储在缓存中的目标缓存行执行写操作。
本申请提供的缓存数据处理方法,上级单元触发目标缓存行的写操作时,若所述目标缓存行不存在于缓存,申请空闲缓存行;根据所述写操作对所述空闲缓存行进行一个或多个目标数据位的写入,得到第一缓存行;上级单元触发目标缓存行的读操作时,获取内存中的目标缓存行;根据所述第一缓存行中写入的目标数据位与所述目标缓存行进行合并,得到第二缓存行; 将所述第二缓存行反馈至所述上级单元。相对于目前写回操作存在冗余的读操作导致缓存读写效率受限的问题,本发明实施例提供的缓存数据处理方法能够执行写操作时申请空闲缓存行,在空闲缓存行的目标数据位写入数据,得到第一缓存行。在写操作过程中无需读取内存中的目标缓存行。当执行读操作时,将内存中的目标缓存行与第一缓存行进行合并,得到第二缓存行。实现读数据时得到的第二缓存行与写操作相匹配。上述过程无需在写操作时读取内存中的目标缓存行,进而提高缓存读写效率。
图3为本申请实施例提供的缓存数据处理方法的流程图二,作为对上述实施例的进一步说明,该方法包括:
S201、上级单元触发目标缓存行的写操作时,若所述目标缓存行不存在于缓存,申请空闲缓存行。
S202、根据所述写操作将目标数据写入所述空闲缓存行,得到第一缓存行。
本发明实施例提供了一种新的缓存行标记栏,如表1所示,包括:
表1
缓存行标记(TAG)用于标记缓存行。可选的,可以根据缓存行数据的前8位数据内容确定缓存行标记。有效性标记(V)用于表示缓存行内容是否有效。脏数据标记(D)用于表示缓存行中是否存在未被读取的写入数据。读数据标记(S)用于标记缓存行在被读取时,是否需要与内存中的缓存行进行融合。数据位置标记用于表示缓存行中最近一次被写入的数据位的位置。可以通过“0”“1”组成的字符串表示。例如00101000表示第三位和第五位数据被写入,则在后续合并时,通过内存获取的目标缓存行的第三位和第五位数据替换为第一缓存行的第三位和第五位的数据内容。缓存行数据内容(Cacheline Data)用于记载缓存行的数据内容。
本发明实施例中,申请到空闲缓存行后,根据写操作写入数据到空闲缓存行,得到第一缓存行。第一缓存行的缓存行数据内容(Cache line Data)为空闲缓存行执行了写操作后的内容。除了执行写操作,还需要为第一缓存行的标签栏的其它标记进行配置,具体包括S203和S204,S203和S204执行顺序不分先后。
S203、根据所述目标缓存行标记配置所述第一缓存行的第一缓存行标记。
第一缓存行标记(tag)上级单元请求的目标缓存行标记相同。
S204、配置所述第一缓存行的数据位置标记,所述数据位置标记用于表示所述目标数据在所述第一缓存行中对应的位置;配置所述第一缓存行的读操作标记为无效状态;所述第一缓存行保存在所述缓存中。
根据写操作写入的数据位位置生成第一缓存行标记。第一缓存行标记用于表示写操作写入的目标数据位置。
S205、上级单元触发目标缓存行的读操作时,若所述缓存中存在具有目标缓存行标记的第一缓存行,且所述第一缓存行的读操作标记为无效,则通过内存读取目标缓存行,所述目标缓存行具有所述目标缓存行标记。
S206、根据所述第一缓存行中写入的目标数据位与所述目标缓存行进行合并,得到第二缓存行。
S207、将所述第二缓存行反馈至所述上级单元。
进一步的,在S205、上级单元触发目标缓存行的读操作之后,还包括:
若所述缓存中存在具有目标缓存行标记的第四缓存行,且所述第四缓存行的读操作标记为有效,则将所述第四缓存反馈至所述上级单元。
本发明实施例提供的缓存数据处理方法,在原有缓存行标记的基础上增加了读操作标记S和数据位置标记BWM,通过上述两个标记能够准确的对缓存行的数据写入状态进行记载,实现快速准确的获取缓存行的数据内容状态,提高缓存数据读写稳定性。
图4为本申请实施例提供的缓存数据处理方法的流程图三,作为对上述实施例的进一步说明,该方法包括:
S301、上级单元触发目标缓存行的写操作时,若所述目标缓存行不存在于缓存,申请第三缓存行。
S302、判断所述第三缓存行是否包含脏数据。
S303、若包含脏数据,则将所述脏数据写回至内存,配置所述第三缓存的多个标记,得到空闲缓存行。
空闲缓存行可能包含脏数据,为了避免丢失脏数据,将脏数据写回至内存。
可选的,配置脏数据标记为无效;配置数据位置标记为无效。
S304、若不包含脏数据,则配置所述第三缓存行的读操作标记为无效状态,使所述第三缓存成为空闲缓存行。
S305、根据所述写操作对所述空闲缓存行进行一个或多个目标数据位的写入,得到第一缓存行。
S306、上级单元触发目标缓存行的读操作时,获取内存中的目标缓存行。
S307、根据所述第一缓存行中写入的目标数据位与所述目标缓存行进行合并,得到第二缓存行;
S308、将所述第二缓存行反馈至所述上级单元。
本发明实施例提供的缓存数据处理方法,能够在申请空闲缓存行时,根据申请的第三缓存行的脏数据标记内容进行数据的内存回写,并脏数据标记以及数据位置标记进行配置,实现空闲缓存行的可靠性。
图5为本申请实施例提供的缓存数据处理方法的流程图四,作为对上述实施例的一种示例,该方法可通过下述步骤实施:
步骤一、响应于读写请求,进行命中测试(hitmisstest)。命中测试可以为:将读写操作所请求的缓存行标记(tag)与缓存(cache)中的所有缓存行的缓存行标记(tag)进行比较。如果有相同的,则命中(hit),如果都不相同,则未命中(miss)。如果缓存行的有效性标记(V)为无效,则判定为未命中。如果命中转入步骤六。如果未命中,转入步骤二。
步骤二、根据缓存(cache)的缓存行(line)替换策略,申请一条新的cacheline,作为空闲缓存行。如果该空闲缓存行的脏数据标记(D)为有效,则说明该空闲缓存行存在脏数据(dirty)。将该缓存行的数据写回到内存或者下一级缓存(cache)中。然后将该缓存行的有效性标记(V)、脏数据标记(D)、读数据标记(S)以及数据位置标记(BWM)设置为无效,完成空闲缓存行的初始化。如果是读操作,进入步骤三,如果是写操作,进入步骤五。
步骤三、从内存或者下一级缓存中将目标缓存行读取到缓存,写入该缓存,并标注读数据标记(S)有效。转入步骤四。
步骤四、将读请求的cacheline的数据返回至上级单元,结束流程。
步骤五、将写请求的数据写入缓存行,然后脏数据标记(D)和数据位置标记(BWM)有效,结束流程。
步骤六、如果是写操作,转到步骤五。如果是读操作,判读目标缓存行的读数据标记(S)是否有效。如果S有效,转入步骤四,如果S无效,转入步骤七。
步骤七、从内存或者下一级缓存将数据读取回来,将数据位置标记(BWM)为无效的地址的数据写入该cache,并标注S有效,转入步骤四。
需要说明的是,在写操作未命中的情况下,直接写数据到空闲缓存行,得到第一缓存行,并标缓存行级别的脏数据标记(D),和字节(byte)级别的dirtyflagBWM,延迟回读memory数据。
在读操作命中的情况下,根据读数据标记(S)判断是否需要读取memory数据,如果读数据标记(S)有效,直接返回缓存行数据到上级单元。如果读数据标记(S)无效,将上次写数据延迟回读的数据从内存读回,然后根据数据位置标记(BWM)将内存中的目标缓存行数据与缓存中的第一缓存行合并,得到第二缓存行。其中数据位置标记BWM有效的数据不变,BWM无效的数据写入从memory读回的数据,然后置上标志位S,并将内村行的数据返回到上级单元。
图6为本申请实施例提供的缓存数据处理装置的结构示意图。如图6所示,该缓存数据处理装置,包括:申请模块41、写操作模块42、读操作响应模块43、合并模块44以及反馈模块45。
申请模块41,用于上级单元触发目标缓存行的写操作时,若所述目标缓存行不存在于缓存,申请空闲缓存行;
写操作模块42,用于根据所述写操作对所述空闲缓存行进行一个或多个目标数据位的写入,得到第一缓存行;
读操作响应模块43,用于上级单元触发目标缓存行的读操作时,获取内存中的目标缓存行;
合并模块44,用于根据所述第一缓存行中写入的目标数据位与所述目标缓存行进行合并,得到第二缓存行;
反馈模块45,用于将所述第二缓存行反馈至所述上级单元。
在上述实施方式的基础上,写操作模块42用于:
根据所述写操作将目标数据写入所述空闲缓存行,得到第一缓存行;
根据所述目标缓存行标记配置所述第一缓存行的第一缓存行标记;
配置所述第一缓存行的数据位置标记,所述数据位置标记用于表示所述目标数据在所述第一缓存行中对应的位置;
配置所述第一缓存行的读操作标记为无效状态;所述第一缓存行保存在所述缓存中。
在上述实施方式的基础上,读操作响应模块43用于:
上级单元触发目标缓存行的读操作时,若所述缓存中存在具有目标缓存行标记的第一缓存行,且所述第一缓存行的读操作标记为无效,则通过内存读取目标缓存行,所述目标缓存行具有所述目标缓存行标记。
在上述实施方式的基础上,申请模块41用于:
申请第三缓存行;
判断所述第三缓存行是否包含脏数据;
若包含脏数据,则将所述脏数据写回至内存,配置所述第三缓存的多个标记,得到空闲缓存行;
若不包含脏数据,则配置所述第三缓存行的读操作标记为无效状态,使所述第三缓存成为空闲缓存行。
在上述实施方式的基础上,申请模块41用于:
配置脏数据标记为无效;
配置数据位置标记为无效。
在上述实施方式的基础上,读操作响应模块43还用于:
若所述缓存中存在具有目标缓存行标记的第四缓存行,且所述第四缓存行的读操作标记为有效,则将所述第四缓存反馈至所述上级单元。
在上述实施方式的基础上,写操作模块42还用于:
若所述目标缓存行位于所述缓存中,则根据所述目标缓存行执行所述写操作;
配置所述目标缓存行的脏数据标记为有效;
根据所述写操作对应的数据位配置所述目标缓存行的数据位置标记。
本申请提供的缓存数据处理装置,申请模块41,用于上级单元触发目标缓存行的写操作时,若所述目标缓存行不存在于缓存,申请空闲缓存行;写操作模块42,用于根据所述写操作对所述空闲缓存行进行一个或多个目标数据位的写入,得到第一缓存行;读操作响应模块43,用于上级单元触发目标缓存行的读操作时,获取内存中的目标缓存行;合并模块44,用于根据所述第一缓存行中写入的目标数据位与所述目标缓存行进行合并,得到第二缓存行; 反馈模块45,用于将所述第二缓存行反馈至所述上级单元。相对于目前写回操作存在冗余的读操作导致缓存读写效率受限的问题,本发明实施例提供的缓存数据处理方法能够执行写操作时申请空闲缓存行,在空闲缓存行的目标数据位写入数据,得到第一缓存行。在写操作过程中无需读取内存中的目标缓存行。当执行读操作时,将内存中的目标缓存行与第一缓存行进行合并,得到第二缓存行。实现读数据时得到的第二缓存行与写操作相匹配。上述过程无需在写操作时读取内存中的目标缓存行,进而提高缓存读写效率。
本申请实施例提供的缓存数据处理装置,可用于执行上述实施例中缓存数据处理方法的技术方案,其实现原理和技术效果类似,在此不再赘述。
需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,写操作模块42可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上写操作模块42的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
图7为本申请实施例提供的电子设备的结构示意图。如图7所示,该电子设备可以包括:收发器51、处理器52、存储器53。
处理器52执行存储器存储的计算机执行指令,使得处理器52执行上述实施例中的方案。处理器52可以是通用处理器,包括中央处理器CPU、网络处理器(network processor,NP)等;还可以是数字信号处理器DSP、专用集成电路ASIC、现场可编程门阵列FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
存储器53通过***总线与处理器52连接并完成相互间的通信,存储器53用于存储计算机程序指令。
收发器51可以用于与客户端进行数据交互。
***总线可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。***总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。收发器用于实现数据库访问装置与其他计算机(例如客户端、读写库和只读库)之间的通信。存储器可能包含随机存取存储器(randomaccess memory,RAM),也可能还包括非易失性存储器(non-volatile memory)。
本申请实施例提供的电子设备,可以是上述实施例的具有图形处理器,具体可以为终端。
本申请实施例还提供一种运行指令的芯片,该芯片用于执行上述实施例中缓存数据处理方法的技术方案。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在计算机上运行时,使得计算机执行上述实施例缓存数据处理方法的技术方案。
本申请实施例还提供一种计算机程序产品,该计算机程序产品包括计算机程序,其存储在计算机可读存储介质中,至少一个处理器可以从计算机可读存储介质读取计算机程序,至少一个处理器执行计算机程序时可实现上述实施例中缓存数据处理方法的技术方案。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。