数据写入方法及内存系统转让专利

申请号 : CN201310270239.6

文献号 : CN104252420B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 夏飞蒋德钧熊劲

申请人 : 华为技术有限公司中国科学院计算技术研究所

摘要 :

本发明实施例提供一种数据写入方法及内存系统,该方法适用于至少包括内存控制器与内存设备的内存系统,该方法包括:内存控制器接收高速缓存发送的变化信息,变化信息为高速缓存将最后一级缓存LLC的第一待写入高速缓存条Cache Line划分为至少一个数据块后,生成的指示各数据块上的数据是否发生变化的信息,内存控制器根据变化信息,对于数据发生变化的各变化数据块,向内存设备发送对应的列地址和数据,使内存设备对各变化数据块进行数据写入;对于数据未发生变化的数据块,不进行写入,从而实现对有效数据的快速写入,降低内存系统的能耗、提高内存系统的性能的目的。

权利要求 :

1.一种数据写入方法,适用于至少包括内存控制器与内存设备的内存系统,其特征在于,包括:

所述内存控制器接收高速缓存发送的变化信息,所述变化信息为所述高速缓存将最后一级缓存LLC的第一待写入高速缓存条Cache Line划分为至少一个数据块后,生成的指示各所述数据块上的数据是否发生变化的信息;

所述内存控制器根据所述变化信息,对于所述变化信息指示的未发生数据变化的各非变化数据块,不向所述内存设备发送各所述非变化数据块对应的列地址和各所述非变化数据块对应的数据;对于所述变化信息指示的发生数据变化的各变化数据块,向所述内存设备发送各所述变化数据块对应的列地址和各所述变化数据块对应的数据;

所述内存设备根据各所述变化数据块对应的列地址和各所述变化数据块对应的数据,对各所述变化数据块进行突发长度的数据写入,所述突发长度与所述至少一个数据块的数据块数量相等;

所述对于所述变化信息指示的发生数据变化的各变化数据块,向所述内存设备发送各所述变化数据块对应的列地址和各所述变化数据块对应的数据,包括:若所述第一待写入Cache Line的所述变化数据块的数量小于所述突发长度,则将所述第一待写入Cache Line的各变化数据块,以及至少一个第二待写入Cache Line的变化数据块对应的列地址与数据发送至所述内存设备,所述至少一个第二待写入Cache Line的变化数据块与所述第一待写入Cache Line的变化数据块的数量之和小于等于所述突发长度;

所述内存设备根据各所述变化数据块对应的列地址和各所述变化数据块对应的数据,对各所述变化数据块进行突发长度的数据写入,包括:所述内存设备根据所述第一待写入Cache Line的各列地址,以及所述至少一个第二待写入Cache Line的各列地址,对所述第一待写入Cache Line的各变化数据块,以及所述至少一个第二待写入Cache Line的各变化数据块,进行所述突发长度的数据写入,所述第二待写入Cache Line为所述LLC中除所述第一待写入Cache Line之外的待写入Cache Line。

2.根据权利要求1所述的方法,其特征在于,所述第一待写入Cache Line与所述至少一个第二待写入Cache Line属于同一个存储组Bank的相同行,且所述LLC中没有对所述相同行的读命令。

3.根据权利要求1~2任一项所述的方法,其特征在于,所述内存设备根据各所述变化数据块对应的列地址和各所述变化数据块对应的数据,对各所述变化数据块进行突发长度的数据写入,包括:所述内存设备上设置有所述突发长度数量的列地址缓存与所述突发长度数量的列译码器,对于每一所述变化数据块,采用独立的列地址缓存与列译码器进行数据写入。

4.一种内存系统,至少包括内存控制器与内存设备,其特征在于,包括:

所述内存控制器用于接收高速缓存发送的变化信息,所述变化信息为所述高速缓存将最后一级缓存LLC的第一待写入高速缓存条Cache Line划分为至少一个数据块后,生成的指示各所述数据块上的数据是否发生变化的信息;根据所述变化信息,对于所述变化信息指示的未发生数据变化的各非变化数据块,不向所述内存设备发送各所述非变化数据块对应的列地址和各所述非变化数据块对应的数据;对于所述变化信息指示的发生数据变化的各变化数据块,向所述内存设备发送各所述变化数据块对应的列地址和各所述变化数据块对应的数据;

所述内存设备用于根据各所述变化数据块对应的列地址和各所述变化数据块对应的数据,对各所述变化数据块进行突发长度的数据写入,所述突发长度与所述至少一个数据块的数据块数量相等;

所述内存控制器用于若所述第一待写入Cache Line的所述变化数据块的数量小于突发长度,则将所述第一待写入Cache Line的各变化数据块,以及至少一个第二待写入Cache Line的变化数据块对应的列地址与数据发送至所述内存设备,所述至少一个第二待写入Cache Line的变化数据块与所述第一待写入Cache Line的变化数据块的数量之和小于等于所述突发长度;

所述内存设备用于根据所述第一待写入Cache Line的各列地址,以及所述至少一个第二待写入Cache Line的各列地址,对所述第一待写入Cache Line的各变化数据块,以及所述至少一个第二待写入Cache Line的各变化数据块,进行所述突发长度的数据写入,所述第二待写入Cache Line为所述LLC中除所述第一待写入Cache Line之外的待写入Cache Line。

5.根据权利要求4所述的内存系统,其特征在于,所述第一待写入Cache Line与所述至少一个第二待写入Cache Line属于同一个存储组Bank的相同行,且所述LLC中没有对所述相同行的读命令。

6.根据权利要求4~5任一项所述的内存系统,其特征在于,所述内存设备上设置有所述突发长度数量的列地址缓存与所述突发长度数量的列译码器,对于每一所述变化数据块,采用独立的列地址缓存与列译码器进行数据写入。

说明书 :

数据写入方法及内存系统

技术领域

[0001] 本发明实施例涉及计算机技术,尤其涉及一种数据写入方法及内存系统。

背景技术

[0002] 当前的内存系统基本包括内存控制器(Memory Controller,MC)、内存设备等,MC与内存设备之间通过双倍数据频率(Double Data Rate,DDR)协议进行数据交互,MC采用突发(Burst)写的方式将数据写入内存设备,一次突发写的数据块大小为内存数据总线宽度,而高速缓存(Cache)与内存系统之间的数据交互以高速缓存条(Cache Line)为单位,一次读写的数据大小为Cache的最后一级Cache(Last Level Cache,LLC)的一个Cache Line的大小。因此,MC需要多次连续的突发写才能将一个Cache Line的数据写入内存设备中,其中,连续突发写的次数称之为突发长度(Burst Length,BL)。
[0003] DDR3协议中,BL一般等于8,以一次突发写的数据块大小为粒度,将一个Cache Line划分多个数据块。例如,若LLC的一个Cache Line的大小为64Byte,内存数据总线宽度为64bit,则在数据总线上出现突发写的数据时,MC需要在连续的4个时钟周期上,突发写8次才能将LLC的一个Cache Line的数据写入内存设备。然而,实际上,LLC的一个Cache Line数据写入内存设备时,很多数据块并没有改变,写入过程中,会存在某些次的突发写并向内存设备中写入无效数据的情况,导致有效数据的写入速度缓慢,且大量无效数据的写入使得内存系统能耗增大,从而降低了内存系统的性能。
[0004] DDR3协议支持的BC4技术中,MC向内存设备写数据时,连续的2个时钟周期共突发写4次,之后的2个时钟周期没有突发写数据,从而将一个Cache Line的前一半数据或者后一半数据写入内存设备。该过程中,前两个时钟周期内,不区分数据块上的数据是否改变的写入方式,也存在某些次的突发写并向内存设备中写入无效数据的情况,导致有效数据的写入速度缓慢,且大量无效数据的写入使得内存系统能耗增大,从而降低了内存系统的性能。

发明内容

[0005] 本发明实施例提供一种数据写入方法及内存系统,通过区分Cache Line中的数据块上的数据是否发生变化,仅对发生变化的数据块进行写入,从而实现有对有效数据的快速写入,降低内存系统的能耗、提高内存系统的性能的目的。
[0006] 第一个方面,本发明实施例提供一种数据写入方法,适用于至少包括内存控制器与内存设备的内存系统,包括:
[0007] 所述内存控制器接收高速缓存发送的变化信息,所述变化信息为所述高速缓存将最后一级缓存LLC的第一待写入高速缓存条Cache Line划分为至少一个数据块后,生成的指示各所述数据块上的数据是否发生变化的信息;
[0008] 所述内存控制器根据所述变化信息,对于所述变化信息指示的未发生数据变化的各非变化数据块,不向所述内存设备发送各所述非变化数据块对应的列地址和各所述非变化数据块对应的数据;对于所述变化信息指示的发生数据变化的各变化数据块,向所述内存设备发送各所述变化数据块对应的列地址和各所述变化数据块对应的数据;
[0009] 所述内存设备根据各所述变化数据块对应的列地址和各所述变化数据块对应的数据,对各所述变化数据块进行突发长度的数据写入,所述突发长度与所述至少一个数据块的数据块数量相等。
[0010] 在第一个方面的第一种可能的实现方式中,所述对于所述变化信息指示的发生数据变化的各变化数据块,向所述内存设备发送各所述变化数据块对应的列地址和各所述变化数据块对应的数据,包括:
[0011] 若所述第一待写入Cache Line的所述变化数据块的数量与所述突发长度相等,则所述内存控制器向所述内存设备发送各所述变化数据块对应的列地址和各所述变化数据块对应的数据;
[0012] 所述内存设备根据各所述变化数据块对应的列地址和各所述变化数据块对应的数据,对各所述变化数据块进行突发长度的数据写入,包括:
[0013] 所述内存设备根据各所述列地址和各所述变化数据块对应的数据,对所述第一待写入Cache Line的各变化数据块进行所述突发长度的数据写入。
[0014] 在第一个方面的第二种可能的实现方式中,所述对于所述变化信息指示的发生数据变化的各变化数据块,向所述内存设备发送各所述变化数据块对应的列地址和各所述变化数据块对应的数据,包括:
[0015] 若所述第一待写入Cache Line的所述变化数据块的数量小于所述突发长度,则将所述第一待写入Cache Line的各变化数据块,以及至少一个第二待写入Cache Line的变化数据块对应的列地址与数据发送至所述内存设备,所述至少一个第二待写入Cache Line的变化数据块与所述第一待写入Cache Line的变化数据块的数量之和小于等于所述突发长度;
[0016] 所述内存设备根据各所述变化数据块对应的列地址和各所述变化数据块对应的数据,对各所述变化数据块进行突发长度的数据写入,包括:
[0017] 所述内存设备根据所述第一待写入Cache Line的各列地址,以及所述至少一个第二待写入Cache Line的各列地址,对所述第一待写入Cache Line的各变化数据块,以及所述至少一个第二待写入Cache Line的各变化数据块,进行所述突发长度的数据写入,所述第二待写入Cache Line为所述LLC中除所述第一待写入Cache Line之外的待写入Cache Line。
[0018] 结合第一个方面的第二种可能的实现方式,在第一个方面的第三种可能的实现方式中,所述第一待写入Cache Line与所述至少一个第二待写入Cache Line属于同一个存储组Bank的相同行,且所述LLC中没有对所述相同行的读命令。
[0019] 结合第一个方面、第一个方面的第一种至第三种中任一种可能的实现方式,在第一个方面的第四种可能的实现方式中,所述内存设备根据各所述变化数据块对应的列地址和各所述变化数据块对应的数据,对各所述变化数据块进行突发长度的数据写入,包括:
[0020] 所述内存设备上设置有所述突发长度数量的列地址缓存与所述突发长度数量的列译码器,对于每一所述变化数据块,采用独立的列地址缓存与列译码器进行数据写入。
[0021] 第二个方面,本发明实施例提供一种内存系统,至少包括内存控制器与内存设备,包括:
[0022] 所述内存控制器用于接收高速缓存发送的变化信息,所述变化信息为所述高速缓存将最后一级缓存LLC的第一待写入高速缓存条Cache Line划分为至少一个数据块后,生成的指示各所述数据块上的数据是否发生变化的信息;根据所述变化信息,对于所述变化信息指示的未发生数据变化的各非变化数据块,不向所述内存设备发送各所述非变化数据块对应的列地址和各所述非变化数据块对应的数据;对于所述变化信息指示的发生数据变化的各变化数据块,向所述内存设备发送各所述变化数据块对应的列地址和各所述变化数据块对应的数据;
[0023] 所述内存设备用于根据各所述变化数据块对应的列地址和各所述变化数据块对应的数据,对各所述变化数据块进行突发长度的数据写入,所述突发长度与所述至少一个数据块的数据块数量相等。
[0024] 在第二个方面的第一种可能的实现方式中,所述内存控制器用于若所述第一待写入Cache Line的所述变化数据块的数量与所述突发长度相等,则所述内存控制器向所述内存设备发送各所述变化数据块对应的列地址和各所述变化数据块对应的数据;
[0025] 所述内存设备用于根据各所述列地址和各所述变化数据块对应的数据,对所述第一待写入Cache Line的各变化数据块进行所述突发长度的数据写入。
[0026] 在第二个方面的第二种可能的实现方式中,所述内存控制器用于若所述第一待写入Cache Line的所述变化数据块的数量小于突发长度,则将所述第一待写入Cache Line的各变化数据块,以及至少一个第二待写入Cache Line的变化数据块对应的列地址与数据发送至所述内存设备,所述至少一个第二待写入Cache Line的变化数据块与所述第一待写入Cache Line的变化数据块的数量之和小于等于所述突发长度;
[0027] 所述内存设备用于根据所述第一待写入Cache Line的各列地址,以及所述至少一个第二待写入Cache Line的各列地址,对所述第一待写入Cache Line的各变化数据块,以及所述至少一个第二待写入Cache Line的各变化数据块,进行所述突发长度的数据写入,所述第二待写入Cache Line为所述LLC中除所述第一待写入Cache Line之外的待写入Cache Line。
[0028] 结合第二个方面的第二种可能的实现方式,在第二个方面的第三种可能的实现方式中,所述第一待写入Cache Line与所述至少一个第二待写入Cache Line属于同一个存储组Bank的相同行,且所述LLC中没有对所述相同行的读命令。
[0029] 结合第二个方面、第二个方面的第一种、第二种或第三种可能的实现方式,在第二个方面的第四种可能的实现方式中,所述内存设备上设置有所述突发长度数量的列地址缓存与所述突发长度数量的列译码器,对于每一所述变化数据块,采用独立的列地址缓存与列译码器进行数据写入。
[0030] 本发明实施例提供的数据写入方法及内存系统,内存控制器根据高速缓存发送的变化信息,仅对数据块上的数据发生变化的数据块,向内存设备发送列地址和数据,使内存设备对各变化数据块进行数据写入,对数据未发生变化的数据块,不进行写入,从而实现有效数据的快速写入,降低内存系统的能耗、提高内存系统的性能的目的。

附图说明

[0031] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0032] 图1为本发明数据写入方法的流程图;
[0033] 图2为本发明数据写入方法中的LLC工作示意图;
[0034] 图3为本发明数据写入方法中的内存控制器工作示意图;
[0035] 图4为本发明数据写入方法中的内存设备的工作示意图;
[0036] 图5为本发明数据写入方法中写命令合并的时序图;
[0037] 图6为本发明内存系统的结构示意图。

具体实施方式

[0038] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0039] 图1为本发明数据写入方法实施例一的流程图。本实施例适用于向至少包括内存控制器与内存设备的内存系统写入数据的场景。具体的,本实施例包括以下步骤:
[0040] 101、内存系统接收高速缓存发送的变化信息,变化信息为高速缓存将最后一级缓存LLC的第一待写入高速缓存条Cache Line划分为至少一个数据块后,生成的指示各数据块上的数据是否发生变化的信息。
[0041] 高速缓存Cache位于中央处理器(central processing unit,CPU)与大容量的内存系统之间,有较高的存取速度。本步骤中,高速缓存将最后一级缓存LLC的第一待写入高速缓存条Cache Line划分为至少一个数据块,为每一个数据块增加一个标识位,用标识位表示该数据块上的数据是否发生变化,一个Cache Line需要多个标识位,每个Cache Line的多个标识位组成指示该Cache Line的各数据块上的数据是否发生变化的变化信息。例如,以内存数据线总线宽度为粒度,将一个Cache Line划分为多个数据块,为每一个数据块增加一个用0或1标识的标识位,0表示该数据块上的数据未发生变化,即数据块的值没有改变;1表示该数据块上的数据发生变化,即数据块的值发生了变化,各个Cache Line的标识位组成该Cache Line的改变块向量(Changed Block Vector,CBV),即变化信息。具体的,假设一个Cache Line大小为64字节,内存数据总线宽度为64比特,则可以将一个Cache Line划分为8个数据块,突发长度BL=8,即一个CBV的大小为8比特。
[0042] 图2为本发明数据写入方法中的LLC工作示意图。如图2所示,当高速缓存的上一级Cache向LLC的一个Cache Line写回数据时,先读出该Cache Line中原来的数据(old data),并与要写入的数据(new data)比较,如果一个数据块上的数据没有改变,则将该数据块的标识位标识为0;否则,若发生了变化,则将该数据块的标识位标识为1。当LLC将该Cache Line的数据写入内存系统时,同时该Cache Line对应的CBV信息传递给内存系统的内存控制器,内存控制器接收该CBV信息,即接收对应的变化信息。以标签为Tag1的数据块为例,上一级Cache执行①向LLC的某一Cache Line写数据时,读取该数据块原来的数据D1,先将D1与待写入的数据D2通过比较器比较,将比较结果记录在CBV中。同理,上一级Cache读出该Cache Line中其他数据块的数据并与待写入该些数据块的新数据做比较,将各数据块的比较结果记录在CBV中,从而得到该Cache Line的CBV信息,即变化信息。当LLC执行②向内存系统写回时,即向内存系统发送写回请求以写入数据的时候,同时执行③,将待写入Cache Line的变化信息也发送给内存系统。
[0043] 102、内存控制器根据变化信息,对于变化信息指示的未发生数据变化的各非变化数据块,不向内存设备发送各非变化数据块对应的列地址和各非变化数据块对应的数据;对于变化信息指示的发生数据变化的各变化数据块,向内存设备发送各变化数据块对应的列地址和各变化数据块对应的数据。
[0044] 本步骤中,内存系统的内存控制器根据接收到的变化信息,判断是否需要对第一待写入Cache Line的各个数据块进行写入。具体的,请参见图3.
[0045] 图3为本发明数据写入方法中的内存控制器工作示意图。请参照图3,内存系统的内存控制器包括请求队列(Tansaction Queue)和命令队列(Command Queue)等。LLC的写回请求首先被放到请求队列中,内存控制器将写回请求转换成操作内存设备的具体命令,并将命令存放到命令队列中。内存控制器根据第一待写入Cache Line的变化信息,判断是否需要对第一待写入Cache Line的各个数据块进行写入。具体的,对于数据块上的数据未发生变化的非变化数据块,不采用突发写进行写入,对于数据块上的数据发生变化的变化数据块,通过地址总线和数据总线等,每一拍向内存控制器发送一个数据块对应的列地址和数据。其中,由于DDR技术在一个时钟周期的上升沿和下降沿都传输数据,数据总线的数据频率是数据总线时钟频率的两倍,因此,每一拍即半个时钟周期。
[0046] 103、内存设备根据各变化数据块对应的列地址和各变化数据块对应的数据,对各变化数据块进行突发长度的数据写入,突发长度与至少一个数据块的数据块数量相等。
[0047] 一般来说,将第一待写入Cache Line划分为的数据块的数量即为连续突发写的次数。本步骤中,内存设备根据接收到的各列地址和数据,对各变化数据块进行突发长度的数据写入。
[0048] 可选的,相对于现有技术中一个内存设备中只有一个列地址缓存和一个列译码器,本实施例的内存设备包括多个列地址缓存和列译码器。图4为本发明数据写入方法中的内存设备的工作示意图。请参照图4,本实施例中,内存设备上包括行地址缓存(row address buffer)、行地址译码器(rowdecoder)、突发长度数量的列地址缓存(column address buffer)、突发长度数量的列地址译码器(column decoder)、传感放大阵列(Sense Amplifier Array,SAA),以及存储阵列(Memory Array)、写入数据缓存(Data in buffer)等,对每一变化数据块,内存设备采用独立的列地址缓存与列译码器进行数据写入。每次写入数据时,对于内存控制器发送的多个列地址,存放在不同的列地址缓存中,并通过不同的列译码器并向译码,选中SAA中的不同的列,并向这些被选中的列中写入数据,最后将SAA中的数据写回存储阵列中。
[0049] 本发明实施例提供的数据写入方法,内存控制器根据高速缓存发送的变化信息,仅对数据块上的数据发生变化的数据块,向内存设备发送列地址和数据,使内存设备对各变化数据块进行数据写入,对数据未发生变化的数据块,不进行写入,从而实现有效数据的快速写入,降低内存系统的能耗、提高内存系统的性能的目的。
[0050] 可选的,上述实施例一中,内存控制器根据变化信息,判断是否需要对各数据块进行写入,对于变化信息指示的发生数据变化的各变化数据块,若第一待写入Cache Line的变化数据块的数量与突发长度相等,则内存控制器向内存设备发送各变化数据块对应的列地址和各变化数据块对应的数据。相应的,内存设备根据各列地址,对第一待写入Cache Line的各变化数据块进行突发长度的数据写入。
[0051] 具体的,高速缓存将LLC的第一待写入Cache Line划分为至少一个数据块,对每一个数据块进行一次突发写,划分所得的数据块的数量即为突发写的次数,即突发长度。本实施例中,若变化数据块的数量与突发长度相等,即划分所得的每个数据块上的数据都发生了变化,内存控制器接收到的变化信息为指示该Cache line的每个数据块上的数据都发生了变化。此时,对于第一待写入Cache Line的每个数据块,内存控制器都向内存设备发送该数据块对应的列地址和数据,内存设备将接收到的多个列地址,存放到不同的列地址缓存中,并通过不同的列译码器并行译码,选中SAA中的不同的列,并向这些被选中的列中写入数据,最后将SAA中的数据写回存储阵列中,从而对第一待写入Cache Line的各个数据块进行写入。例如,将第一待写入Cache line以内存数据总线宽度为粒度划分为8个数据块,该8个数据块上的数据都发生了变化,则内存控制器向内存设备发送8个列地址和对应的数据,内存设备上设置有8个列地址缓存和列译码器,每个列地址缓存存放一个列地址,各列地址对应的列译码器并行译码。
[0052] 可选的,上述实施例一中,内存控制器根据变化信息,判断是否需要对各数据块进行写入,对于变化信息指示的发生数据变化的各变化数据块,若第一待写入Cache Line的变化数据块的数量小于突发长度,则将第一待写入Cache Line的各变化数据块,以及至少一个第二待写入Cache Line的变化数据块对应的列地址与数据发送至内存设备。其中,至少一个第二待写入Cache Line的变化数据块与第一待写入Cache Line的变化数据块之和小于等于突发长度。相应的,内存设备根据第一待写入Cache Line的各列地址,以及至少一个第二待写入Cache Line的各列地址,对第一待写入Cache Line的各变化数据块,以及至少一个第二待写入Cache Line的各变化数据块,进行突发长度的数据写入,第二待写入Cache Line为LLC中除第一待写入Cache Line之外的待写入Cache Line。
[0053] 一般来说,高速缓存将LLC的第一待写入Cache Line划分为至少一个数据块,对每一个数据块进行一次突发写,划分所得的数据块的数量即为突发写的次数,即突发长度。本实施例中,若变化数据块的数量小于突发长度,即划分所得的各数据块中只有部分数据块上的数据发生了变化。此时,内存控制器在进行命令调度时,进行写命令合并,通过写命令合并的方式,在一个固定突发长度的时钟周期内,完成多个写请求,从而避免时钟周期的浪费,降低内存系统的能耗,从而提高内存系统的性能。
[0054] 具体的,LLC向内存控制器发送的各请求写入Cache Line大小数据的写回请求首先存储在请求队列中,内存控制器将该些写回请求转换成操作内存设备的写命令,并将各写命令存放到命令队列中。内存设备发送第一待写入Cache Line的写命令时,若内存控制器根据第一待写入Cache Line的变化信息,发现该Cache Line的变化数据块小于突发长度,则从命令队列中选择至少一个第二待写入Cache line对应的写命令,各第二待写入Cache Line的变化数据块的数量与第一待写入Cache line的变化数据块的数量之和小于等于突发长度。在BL次的突发长度中,每一拍内存控制器将第一待写入Cache Line的一个变化数据块的对应的列地址和数据发送至内存设备,当第一待写入Cache Line的变化数据块对应的列地址和数据发送完毕后,后续每一拍继续向内存设备发送第二待写入Cache Line的一个变化数据块对应的列地址和数据,重复该过程,直到写入BL个数据块,或者在命令队列中找不到可以合并的写命令,即写入的数据块的个数小于BL。
[0055] 需要说明的是,上述若第一待写入Cache Line的变化数据块的数量小于突发长度,数据写入过程中需要对第一待写入Cache Line对应的写命令与至少一个第二待写入Cache Line对应的写命令进行写命令合并时,除了满足可合并的写命令对应的各第二待写入Cache Line的变化数据块的数量与第一待写入Cache Line的变化数据块的数量之和小于等于突发长度的条件外,各写命令还需满足以下条件:第一待写入Cache Line与至少一个第二待写入Cache Line属于同一个存储组Bank的相同行,且LLC中没有对相同行的读命令。即第一待写入Cache Line对应的写命令与各第二待写入Cache Line对应的写命令是对同一个存储组Bank的相同行的写入,且各个第二待写入Cache Line对应的写命令中不存在对该相同行的读请求。此时,请参照图4,内存设备中还包括一个行测试(Row Test),用于测试各个写命令是否是对相同存储组Bank的相同行的数据写入。
[0056] 具体的,假设LLC的一个Cache Line的大小为64Byte,内存数据总线宽度为64比特,突发长度BL=8。内存控制器的命令队列中的命令信息如下表1所示:三个写命令操作的是同一Bank,写命令Write1、写命令Write3写的是行Row1,写命令Write2写的是行Row2。
[0057] 表1
[0058]
[0059] 由表1可知,Write1和Write3写的是同一行,且CBV,即变化信息显示Write1对应的Cache Line的变化数据块的数量与Write3的对应的Cache Line的变化数据块的数量之和为8(如表1中阴影部分所示)。因此,可对Write1和Write3进行写命令合并,内存控制器在完成Write1和Write3的调度后,再调度Write2。具体的,请参照图5。
[0060] 图5为本发明数据写入方法中写命令合并的时序图。如图5所示,前4拍,即T0和T1时钟周期的上升沿和下降沿,内存控制器发送Write1和列地址列col1、col2、col3和col4,接下来的4拍,即T2和T3时钟周期的上升沿和下降沿发送Write3和列地址col3、col4、col5和col6。然后,再发送Write2及对应的列地址。在T5时刻,数据总线上出现突发写的数据Dn,突发写8次,从而将Write1对应的Cache Line和Write3对应的Cache Line的变化数据块写入到内存设备中。其中,col1表示Write1对应的Cache Line的8个数据块中第一个数据块对应的列地址,D1表示该第一个数据块对应的数据……以此类推。
[0061] 需要说明的是,上述实施例中是以Write1和Write3两个写命令合并、该可合并的两个写命令Write1对应的Cache Line和Write2的对应的Cache Line的变化数据的数量和为BL为例对本发明进行详细阐述,然而,本发明并不以此为限,在其他可能的实施方式中,也可以是多个写命令的合并,例如,当Write1对应的Cache Line和Write3的对应的Cache Line的变化数据的数量和小于BL时,可从命令队列中选择其他可合并的写命令。另外,若命令队列中所有可合并的写命令对应的Cache Line的变化数据块之和小于BL,此时,依旧进行BL次的突发写,该BL次突发写的某几个时钟周期或时钟周期的某几拍空闲。另外,图5中,仅示出了动态随机存取存储器(Dynamic Random Access Memory,DRAM)的3个内存时钟(internal CK),而实际上共有8个。
[0062] 图6为本发明内存系统的结构示意图,是与本发明图1实施例对应的装置实施例,具体实现过程在此不再赘述。具体的,本实施例提供的内存系统100至少包括内存控制器10与内存设备11。
[0063] 具体的,内存控制器10用于接收高速缓存发送的变化信息,变化信息为高速缓存将最后一级缓存LLC的第一待写入高速缓存条Cache Line划分为至少一个数据块后,生成的指示各数据块上的数据是否发生变化的信息;根据变化信息,对于变化信息指示的未发生数据变化的各非变化数据块,不向内存设备发送各非变化数据块对应的列地址和各非变化数据块对应的数据;对于变化信息指示的发生数据变化的各变化数据块,向内存设备发送各变化数据块对应的列地址和各变化数据块对应的数据;
[0064] 内存设备11用于根据各变化数据块对应的列地址和各变化数据块对应的数据,对各变化数据块进行突发长度的数据写入,突发长度与至少一个数据块的数据块数量相等。
[0065] 进一步的,内存控制器10用于若第一待写入Cache Line的变化数据块的数量与突发长度相等,则向内存设备10发送各变化数据块对应的列地址和各变化数据块对应的数据。
[0066] 内存设备11用于根据各列地址,对第一待写入Cache Line的各变化数据块进行突发长度的数据写入。
[0067] 进一步的,内存控制器10用于若第一待写入Cache Line的变化数据块的数量小于突发长度,则将第一待写入Cache Line的各变化数据块,以及至少一个第二待写入Cache Line的变化数据块对应的列地址与数据发送至内存设备11,至少一个第二待写入Cache Line的变化数据块与第一待写入Cache Line的变化数据块之和小于等于突发长度;
[0068] 内存设备11用于根据第一待写入Cache Line的各列地址,以及至少一个第二待写入Cache Line的各列地址,对第一待写入Cache Line的各变化数据块,以及至少一个第二待写入Cache Line的各变化数据块,进行突发长度的数据写入,第二待写入Cache Line为LLC中除第一待写入Cache Line之外的待写入Cache Line。
[0069] 进一步的,第一待写入Cache Line与至少一个第二待写入Cache Line属于同一个存储组Bank的相同行,且LLC中没有对相同行的读命令。
[0070] 进一步的,内存设备11上设置有突发长度数量的列地址缓存与突发长度数量的列译码器,对于每一变化数据块,采用独立的列地址缓存与列译码器进行数据写入。
[0071] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0072] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。