一种数据写入方法、装置和电子设备转让专利

申请号 : CN201911420581.3

文献号 : CN111176583B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李浩洋阮元

申请人 : 北京百度网讯科技有限公司

摘要 :

本申请公开了一种数据写入方法、装置和电子设备,涉及数据读写技术领域。具体实现方案为:判断第一数据块的起始存储地址是否对齐存储器总线位宽;若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,其中,所述第二数据块为所述第一数据块前一数据块;若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,所以克服了存储器的写入性能比较差的技术问题,进而达到提高将数据写入存储器的写入性能的技术效果。

权利要求 :

1.一种数据写入方法,其特征在于,包括:判断第一数据块的起始存储地址是否对齐存储器总线位宽;

若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,其中,所述第二数据块为所述第一数据块前一数据块;

若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,其中,所述完整写的位宽等于所述存储器总线位宽。

2.如权利要求1所述的方法,其特征在于,所述对所述第一数据块的第一拍执行完整写之后,所述方法还包括:

将所述第一数据块的第一拍的掩码修改为表示完整写的掩码。

3.如权利要求1所述的方法,其特征在于,所述若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,包括:若所述第二数据块有进行压缩,依据所述第二数据块的原始长度和所述第二数据块压缩后的压缩长度,判断所述第二数据块是否存在压缩收益,若是,则对所述第一数据块的第一拍执行完整写。

4.如权利要求1所述的方法,其特征在于,所述若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,包括:若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断所述第一数据块的存储地址与所述第二数据块的存储地址是否为连续的存储地址,若是,则判断第二数据块是否有进行压缩。

5.如权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:判断所述第一数据块的结束存储地址是否对齐存储器总线位宽;

若所述第一数据块的结束存储地址未对齐存储器总线位宽,则判断所述第一数据块是否有进行压缩;

若所述第一数据块有进行压缩,则对所述第一数据块的最后一拍执行完整写。

6.一种数据写入装置,其特征在于,包括:第一判断模块,用于判断第一数据块的起始存储地址是否对齐存储器总线位宽;

第二判断模块,用于若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,其中,所述第二数据块为所述第一数据块前一数据块;

第一写模块,用于若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,其中,所述完整写的位宽等于所述存储器总线位宽。

7.如权利要求6所述的装置,其特征在于,所述装置还包括:修改模块,用于将所述第一数据块的第一拍的掩码修改为表示完整写的掩码。

8.如权利要求6所述的装置,其特征在于,所述第一写模块用于若所述第二数据块有进行压缩,依据所述第二数据块的原始长度和所述第二数据块压缩后的压缩长度,判断所述第二数据块是否存在压缩收益,若是,则对所述第一数据块的第一拍执行完整写。

9.如权利要求6所述的装置,其特征在于,所述第二判断模块用于若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断所述第一数据块的存储地址与所述第二数据块的存储地址是否为连续的存储地址,若是,则判断第二数据块是否有进行压缩。

10.如权利要求6至9中任一项所述的装置,其特征在于,所述装置还包括:第三判断模块,用于判断所述第一数据块的结束存储地址是否对齐存储器总线位宽;

第四判断模块,用于若所述第一数据块的结束存储地址未对齐存储器总线位宽,则判断所述第一数据块是否有进行压缩;

第二写模块,用于若所述第一数据块有进行压缩,则对所述第一数据块的最后一拍执行完整写。

11.一种电子设备,其特征在于,包括:至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1‑5中任一项所述的方法。

12.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1‑5中任一项所述的方法。

说明书 :

一种数据写入方法、装置和电子设备

技术领域

[0001] 本申请涉及计算机技术中的数据读写技术领域,尤其涉及一种数据写入方法、装置和电子设备。

背景技术

[0002] 数据写入存储器是一种常见的操作,例如:以神经网络为例,神经网络计算往往在神经网络处理器(Neural Processing Unit,NPU)内完成,而在执行神经网络计算后,需要
将计算结果写入片外存储器。然而,目前将数据写入存储器的写入操作存在部分写操作次
数过多的情况,其中,部分写是指写入数据的位宽小于存储器总线位宽。可见,目前将数据
写入存储器的写入性能比较差。

发明内容

[0003] 本申请提供一种数据写入方法、装置和电子设备,以解决将数据写入存储器的写入性能比较差的问题。
[0004] 第一方面,本申请提供一种数据写入方法,包括:
[0005] 判断第一数据块的起始存储地址是否对齐存储器总线位宽;
[0006] 若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,其中,所述第二数据块为所述第一数据块前一数据块;
[0007] 若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,其中,所述完整写的位宽等于所述存储器总线位宽。
[0008] 通过上述步骤可以实现将对所述第一数据块的第一拍由部分写调整为完整写,从而提高将数据写入存储器的写入性能。
[0009] 可选的,所述对所述第一数据块的第一拍执行完整写之后,所述方法还包括:
[0010] 将所述第一数据块的第一拍的掩码修改为表示完整写的掩码。
[0011] 由于将所述第一数据块的第一拍的掩码修改为表示完整写的掩码,这样通过掩码可以确定第一数据块的第一拍为完整写,以方便后续的数据读和管理。
[0012] 可选的,所述若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,包括:
[0013] 若所述第二数据块有进行压缩,依据所述第二数据块的原始长度和所述第二数据块压缩后的压缩长度,判断所述第二数据块是否存在压缩收益,若是,则对所述第一数据块
的第一拍执行完整写。
[0014] 由于只有在存在压缩收益,才进行第一数据块的第一拍执行完整写,从而避免写操作的错误,以进一步提高存储器的写入性能。
[0015] 可选的,所述若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,包括:
[0016] 若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断所述第一数据块的存储地址与所述第二数据块的存储地址是否为连续的存储地址,若是,则判断第二数
据块是否有进行压缩。
[0017] 由于只有在第一数据块的存储地址与第二数据块的存储地址是为连续的存储地址的情况下,才执行后续的相应操作,这样可以避免第一数据块和第二数据块不为连续存
储地址数据块的情况下,依据第二数据块的压缩情况执行第一数据块的完整导致的写入错
误。
[0018] 可选的,所述方法还包括:
[0019] 判断所述第一数据块的结束存储地址是否对齐存储器总线位宽;
[0020] 若所述第一数据块的结束存储地址未对齐存储器总线位宽,则判断所述第一数据块是否有进行压缩;
[0021] 若所述第一数据块有进行压缩,则对所述第一数据块的最后一拍执行完整写。
[0022] 由于对所述第一数据块的最后一拍执行完整写,这样可以进一步提高存储器的写入性能。
[0023] 第二方面,本申请提供一种数据写入装置,包括:
[0024] 第一判断模块,用于判断第一数据块的起始存储地址是否对齐存储器总线位宽;
[0025] 第二判断模块,用于若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,其中,所述第二数据块为所述第一数据块前一数据块;
[0026] 第一写模块,用于若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,其中,所述完整写的位宽等于所述存储器总线位宽。
[0027] 可选的,所述装置还包括:
[0028] 修改模块,用于将所述第一数据块的第一拍的掩码修改为表示完整写的掩码。
[0029] 可选的,所述第一写模块用于若所述第二数据块有进行压缩,依据所述第二数据块的原始长度和所述第二数据块压缩后的压缩长度,判断所述第二数据块是否存在压缩收
益,若是,则对所述第一数据块的第一拍执行完整写。
[0030] 可选的,所述第二判断模块用于若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断所述第一数据块的存储地址与所述第二数据块的存储地址是否为连续的
存储地址,若是,则判断第二数据块是否有进行压缩。
[0031] 可选的,所述装置还包括:
[0032] 第三判断模块,用于判断所述第一数据块的结束存储地址是否对齐存储器总线位宽;
[0033] 第四判断模块,用于若所述第一数据块的结束存储地址未对齐存储器总线位宽,则判断所述第一数据块是否有进行压缩;
[0034] 第二写模块,用于若所述第一数据块有进行压缩,则对所述第一数据块的最后一拍执行完整写。
[0035] 第三方面,本申请提供一种电子设备,包括:
[0036] 至少一个处理器;以及
[0037] 与所述至少一个处理器通信连接的存储器;其中,
[0038] 所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本申请提供的数据写入方法。
[0039] 第四方面,本申请提供一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行本申请提供的数据写入方法。
[0040] 上述申请中的一个实施例具有如下优点或有益效果:
[0041] 判断第一数据块的起始存储地址是否对齐存储器总线位宽;若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,其中,所述第二
数据块为所述第一数据块前一数据块;若所述第二数据块有进行压缩,则对所述第一数据
块的第一拍执行完整写,所以克服了存储器的写入性能比较差的技术问题,进而达到提高
将数据写入存储器的写入性能的技术效果。
[0042] 上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。

附图说明

[0043] 附图用于更好地理解本方案,不构成对本申请的限定。其中:
[0044] 图1是本申请提供的一种数据写入方法的流程图;
[0045] 图2是本申请提供的数据子分块的分割示意图;
[0046] 图3是本申请提供的另一种数据写入方法的流程图;
[0047] 图4是本申请提供的一种数据写入的示意图;
[0048] 图5是本申请提供的另一种数据写入方法的流程图;
[0049] 图6是本申请提供的一种数据写入装置的结构图;
[0050] 图7是本申请提供的一种数据写入装置的结构图;
[0051] 图8是本申请提供的一种数据写入装置的结构图;
[0052] 图9是根据本申请实施例的数据写入方法的电子设备的框图。

具体实施方式

[0053] 以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识
到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同
样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0054] 请参见图1,图1是本申请提供的一种数据写入方法的流程图,如图1所示,包括以下步骤:
[0055] 步骤S101、判断第一数据块的起始存储地址是否对齐存储器总线位宽。
[0056] 本申请中,数据块可以是神经网络中的搬运数据的数据子分块,例如:执行神经网络计算完成后得到的数据,如权重矩阵或者特征图(feature map)等数据的数据子分块。且
数据子分块可以是将上述搬运数据进行分割得到的数据子分块,例如:如图2所示,可以将
搬运数据分割成基础块、对齐块和无重映射块这些数据子分块,其中,每个基础块的数据大
小是固定的,该固定大小可以是预先配置的,具体可以根据实际需求进行配置,而对齐块和
无重映射块是将搬运数据块分割成多个基础块之后剩下的无法构成基础块的子分块,具体
可以如图2所示,右边剩下的子分块称作对齐块,而下面剩下的子分块称作无重映射块。
[0057] 进一步的,上述第一数据块可以是基础块。
[0058] 需要说明的是,本申请并不限定数据块为神经网络的数据块,也可以是其他需要执行写入操作的数据块。
[0059] 另外,上述存储地址可以是数据块在存储器中的存储地址。
[0060] 步骤S102、若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,其中,所述第二数据块为所述第一数据块前一数据块。
[0061] 判断上述第二数据块是否有进行压缩,可以是依据第二数据块的长度信息为判断,或者在处理第二数据块时,如果进行了压缩,则可以为第二数据块设定标记,以标记其
进行了压缩等。
[0062] 进一步的,如果第一数据块起始存储地址对齐存储器总线位宽,则可以直接对所述第一数据块的第一拍(beat)执行完整写。
[0063] 另外,若判断第二数据块未进行压缩,则可以对所述第一数据块的第一拍执行部分写。
[0064] 步骤S103、若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,其中,所述完整写的位宽等于所述存储器总线位宽。
[0065] 其中,上述对所述第一数据块的第一拍执行完整写可以是,在第一数据块的第一拍中写入的数据的位宽等于存储器总线位宽。
[0066] 需要说明的是,本申请提供的上述方法可以应用于用于神经网络计算的芯片(或者称作处理器),例如:神经网络处理器(Neural Processing Unit,NPU)或者硬件加速器,
且在该情况下,上述存储器可以片外存储器,即上述方法是用于神经网络计算的芯片将第
一数据块写入片外存储器。当然,对此不作限定,也可以应用于一些执行写入数据操作的电
子设备。
[0067] 本实施例中,在上述步骤中由于第一数据块的起始存储地址未对齐存储器总线位宽,这样第一数据块的第一拍原本为部分写,但由于第二数据块有进行压缩,从而对所述第
一数据块的第一拍执行完整写,进而实现将对所述第一数据块的第一拍由部分写调整为完
整写,从而提高将数据写入存储器的写入性能。
[0068] 请参见图3,图3是本申请提供的另一种数据写入方法的流程图,如图3所示,包括以下步骤:
[0069] 步骤S301、判断第一数据块的起始存储地址是否对齐存储器总线位宽。
[0070] 步骤S302、若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,其中,所述第二数据块为所述第一数据块前一数据块。
[0071] 其中,上述若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩可以是,若第一数据块的起始存储地址未对齐存储器总线位宽,
则判断第二数据块是否为基础块,若是,则判断第二数据块是否有进行压缩。当然,对此不
作限定,也可以直接判断。
[0072] 可选的,所述若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,包括:
[0073] 若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断所述第一数据块的存储地址与所述第二数据块的存储地址是否为连续的存储地址,若是,则判断第二数
据块是否有进行压缩。
[0074] 由于只有在第一数据块的存储地址与第二数据块的存储地址是为连续的存储地址的情况下,才执行后续的相应操作,这样可以避免第一数据块和第二数据块不为连续存
储地址数据块的情况下,依据第二数据块的压缩情况执行第一数据块的完整导致的写入错
误。
[0075] 步骤S303、若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,其中,所述完整写的位宽等于所述存储器总线位宽。
[0076] 上述若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写可以是,若第二数据块有进行压缩,则确定第一数据块的起始存储地址所在的第一行存储地
址的前段存储地址为无效存储地址(也可以称作无效数据部分),从而可以在该无效存储地
址写入第一数据块的数据。其中,这里的前段存储地址原本为第一数据块的存储地址,这里
的无效存储地址可以理解为第二数据块经过压缩后不需要的存储地址。例如:如图4所示,
第一数据块为数据块b,第二数据块为数据块a,其中,数据块a进行了压缩,从而第5行的白
色部分为无效存储地址,进而可以在该地址上写入数据块b的数据。
[0077] 可选的,所述若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,包括:
[0078] 若所述第二数据块有进行压缩,依据所述第二数据块的原始长度和所述第二数据块压缩后的压缩长度,判断所述第二数据块是否存在压缩收益,若是,则对所述第一数据块
的第一拍执行完整写。
[0079] 其中,上述第二数据块的原始长度和第二数据块压缩后的压缩长度可以是对第二数据块进行压缩处理时记得的长度信息。
[0080] 另外,上述依据所述第二数据块的原始长度和所述第二数据块压缩后的压缩长度,判断所述第二数据块是否存在压缩收益可以是,判断第二数据块压缩后的压缩长度是
否小于第二数据块的原始长度,若是,则判断第二数据块存在压缩收益,反之,确定不存在
压缩收益。或者可以是依据所述第二数据块的原始长度确定所述第二数据块传输的所需拍
数,以及依据第二数据块压缩后的压缩长度确定第二数据块压缩后的数据传输的所需拍
数,若所述第二数据块压缩后的数据传输的所需拍数小于第二数据块传输的所需拍数,则
确定第二数据块存在压缩收益,否则,确定不存在压缩收益。
[0081] 这样可以避免某一些数据块虽然进行了压缩,但不存在压缩收益的问题。
[0082] 进一步的,若所述第二数据块不存在压缩收益,则可以对所述第一数据块的第一拍执行部分写。
[0083] 进一步的,还可以依据所述第二数据块的原始长度和所述第二数据块压缩后的压缩长度判断第二数据块的压缩收益是否大于第一数据块的起始存储地址与存储器总线位
宽边界之间的地址区域,若大于,则对所述第一数据块的第一拍执行完整写,若小于,可以
执行部分写。当然,也可以不进行该判断,因为,在实际应用中如果存在压缩收益,则压缩收
益往往会大于起始存储地址与存储器总线位宽边界之间的地址区域。
[0084] 该实施方式中,由于只有在存在压缩收益,才进行第一数据块的第一拍执行完整写,从而避免写操作的错误,以进一步提高存储器的写入性能。
[0085] 可选的,所述对所述第一数据块的第一拍执行完整写之后,所述方法还包括:
[0086] 将所述第一数据块的第一拍的掩码修改为表示完整写的掩码。
[0087] 其中,上述将所述第一数据块的第一拍的掩码修改为表示完整写的掩码可以是,将第一数据块的第一拍的掩码全部修改为1,以表示完整写。当然,对此不作限定,例如:可
以通过其他数值表示完整写。
[0088] 由于将所述第一数据块的第一拍的掩码修改为表示完整写的掩码,这样通过掩码可以确定第一数据块的第一拍为完整写,以方便后续的数据读和管理。另外,由于每次只缓
存数据块的前一个数据块的相关信息,需要额外存储记录的信息少;且处理时数据掩码时
逻辑简单,额外逻辑增加少。
[0089] 可选的,如图3所示,上述方法还可以包括如下步骤:
[0090] 步骤S304、判断所述第一数据块的结束存储地址是否对齐存储器总线位宽。
[0091] 步骤S305、若所述第一数据块的结束存储地址未对齐存储器总线位宽,则判断所述第一数据块是否有进行压缩。
[0092] 步骤S306、若所述第一数据块有进行压缩,则对所述第一数据块的最后一拍执行完整写。
[0093] 其中,所述第一数据块的结束存储地址可以是,第一数据块的最后一拍的结束地址。另外,本申请在执行所述第一数据块的第一拍的写入操作后,可以继续执行中间一或者
多拍的写入,且这些拍的写入均可以是完整写。
[0094] 上述若所述第一数据块有进行压缩,则对所述第一数据块的最后一拍执行完整写可以是,由于第一数据块进行了压缩,从而最后一拍所在这一行在结束存储地址之后存储
地址为第一数据块经过压缩后不需要的存储地址,对该处写入随机数值不会影响整体数据
正确性,可以直接进行完整写。
[0095] 另外,若所述第一数据块的结束存储地址对齐存储器总线位宽,则可以直接进行完整写。若第一数据块未进行压缩,则可以直接进行部分写。
[0096] 该实施方式中,由于对所述第一数据块的最后一拍执行完整写,这样可以进一步提高存储器的写入性能。
[0097] 下面以第一数据块和第二数据块为图4所示的基础块进行举例:
[0098] 对基础块a,第一拍的前16B被其他数据占用,无法进行优化;最后一拍经过压缩后恰好对齐到了64B,不存在部分写,无需优化;
[0099] 对基础块b,第一拍的前16B为基础块a的无效数据部分,在处理基础块b时,基础块a已经处理完毕,且已知该16B为已知的无效数据部分,此时,可以进行部分写优化,即直接
按完整写写入基础块b的数据到存储器;最后一拍经过压缩后恰好对齐到了64B,不存在部
分写,无需优化;
[0100] 对对齐块c,第一拍的前16B为基础块b的无效数据部分,在处理对齐块c时,基础块b已经处理完毕,且已知该16B为已知的无效数据部分,此时,可以进行部分写优化,即直接
按完整写写入对齐块c的数据到存储器;最后一拍不对齐,但后48B为基础块d的有效部分,
不进行优化,由内存控制器通过写任务合并连同基础块d的第一拍一起完成优化;
[0101] 对基础块d,第一拍的前16B被对齐块c占用,不进行优化,由内存控制器通过写任务合并连同对齐块c的最后一拍一起完成优化;最后一拍不对齐,但后若干字节为基础块d
自身的无效数据部分,可以进行部分写优化,即直接按完整写写入基础块d的数据到存储
器;
[0102] 对基础块e,其前后的非对齐部分均为压缩后出现的无效数据,因此可以直接进行部分写优化,按完整写将数据写入存储器;
[0103] 对对齐块f和无重映射块g,也进行类似处理。
[0104] 可见,由于只有向压缩后存放无效数据的存储位置写入额外数据才不会导致数据错误,因此该方案的关键步骤即是需要记录和计算每一个子分块的非对齐部分是否为无效
数据,在判断该处写入不会导致有效数据被改写时,则修改原有写入命令的数据掩码部分,
将部分写拓展为完整写。
[0105] 请参见图5,图5是本申请提供的另一种数据写入方法的流程图,如图5所示,包括以下步骤:
[0106] 步骤S501、按照正常压缩步骤完成对当前子分块(例如:上述第一数据块,或者基础块b)的处理,得到其压缩后长度,计算子分块对应的数据掩码;
[0107] 该步骤可以是如果子分块为基础块则同时得到其压缩后长度,计算子分块对应的数据掩码;
[0108] 步骤S502、判断当前子分块的起始存储地址是否是对齐的,若是,执行步骤S503,否则,执行步骤S507;
[0109] 步骤S503、判断前一子分块(例如:上述第二数据块,或者基础块a)是否与当前子分块的存储地址连续,若是,执行步骤S504,否则,执行步骤S507;
[0110] 步骤S504、判断前一子分块是否为基础块,若是,执行步骤S505,否则,执行步骤S507;
[0111] 步骤S505、判断前一子分块是否进行了压缩,若是,执行步骤S56,否则,执行步骤S507;该步骤具体可以是判断是否有压缩收益。
[0112] 步骤S506、将当前子分块的第一拍数据的掩码填充为全1,即将部分写改为完整写;
[0113] 步骤S507、完成第一拍和中间各拍的数据写入;
[0114] 步骤S508、判断当前子分块的结束存储地址是否是对齐的,若不是,执行步骤S509,否则,执行步骤S5013;
[0115] 步骤S509、判断当前子分块是否为基础块,若是,执行步骤S5010,否则,执行步骤S5013;
[0116] 步骤S5010、判断当前子分块是否进行了压缩,若是,执行步骤S5011,否则,执行步骤S5012;该步骤具体可以是判断是否有压缩收益。
[0117] 步骤S5011、将当前子分块的最后一拍数据的掩码填充为全1,即将部分写改为完整写;
[0118] 步骤S5012、完成最后一拍的数据写入;
[0119] 步骤S5013、判断当前子分块是否为需要处理的最后一个子分块,若是,结束处理步骤;否则,开始下一个子分块的处理,开始执行步骤S501。
[0120] 本实施例中,可以优化存储器的写入性能。
[0121] 请参见图6,图6是本申请提供的一种数据写入装置的结构图,如图6所示,数据写入装置600包括:
[0122] 第一判断模块601,用于判断第一数据块的起始存储地址是否对齐存储器总线位宽;
[0123] 第二判断模块602,用于若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断第二数据块是否有进行压缩,其中,所述第二数据块为所述第一数据块前一数据
块;
[0124] 第一写模块603,用于若所述第二数据块有进行压缩,则对所述第一数据块的第一拍执行完整写,其中,所述完整写的位宽等于所述存储器总线位宽。
[0125] 可选的,如图7所示,所述装置还包括:
[0126] 修改模块604,用于将所述第一数据块的第一拍的掩码修改为表示完整写的掩码。
[0127] 可选的,所述第一写模块603用于若所述第二数据块有进行压缩,依据所述第二数据块的原始长度和所述第二数据块压缩后的压缩长度,判断所述第二数据块是否存在压缩
收益,若是,则对所述第一数据块的第一拍执行完整写。
[0128] 可选的,所述第二判断模块602用于若所述第一数据块的起始存储地址未对齐存储器总线位宽,则判断所述第一数据块的存储地址与所述第二数据块的存储地址是否为连
续的存储地址,若是,则判断第二数据块是否有进行压缩。
[0129] 可选的,如图8所示,所述装置还包括:
[0130] 第三判断模块605,用于判断所述第一数据块的结束存储地址是否对齐存储器总线位宽;
[0131] 第四判断模块606,用于若所述第一数据块的结束存储地址未对齐存储器总线位宽,则判断所述第一数据块是否有进行压缩;
[0132] 第二写模块607,用于若所述第一数据块有进行压缩,则对所述第一数据块的最后一拍执行完整写。
[0133] 需要说明的是,上述装置可以是用于神经网络计算的芯片,如NPU或者硬件加速器。
[0134] 本实施例提供的装置能够实现图1和图3所示的方法实施例中实现的各个过程,且可以达到相同有益效果,为避免重复,这里不再赘述。
[0135] 根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。
[0136] 如图9所示,是根据本申请实施例的数据写入方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、
服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式
的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装
置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制
本文中描述的和/或者要求的本申请的实现。
[0137] 如图9所示,该电子设备包括:一个或多个处理器901、存储器902,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安
装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进
行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的
显示设备)上显示GUI的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器
和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个
设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系
统)。图9中以一个处理器901为例。
[0138] 存储器902即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请所提供的数据
写入方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计
算机执行本申请所提供的数据写入方法。
[0139] 存储器902作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的数据写入方法对应的程序指令/模
块(例如,附图6所示的601、第二判断模块602和第一写模块603)。处理器901通过运行存储
在存储器902中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数
据处理,即实现上述方法实施例中的数据写入方法。
[0140] 存储器902可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据数据写入方法的电子设备的
使用所创建的数据等。此外,存储器902可以包括高速随机存取存储器,还可以包括非瞬时
存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施
例中,存储器902可选包括相对于处理器901远程设置的存储器,这些远程存储器可以通过
网络连接至数据写入方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、
局域网、移动通信网及其组合。
[0141] 数据写入方法的电子设备还可以包括:输入装置903和输出装置904。处理器901、存储器902、输入装置903和输出装置904可以通过总线或者其他方式连接,图9中以通过总
线连接为例。
[0142] 输入装置903可接收输入的数字或字符信息,以及产生与数据写入方法的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸
板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置904可以包括显
示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包
括但不限于,液晶显示器(LCD)、发光二极管(LED)显示器和等离子体显示器。在一些实施方
式中,显示设备可以是触摸屏。
[0143] 此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用ASIC(专用集成电路)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种
实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在
包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用
或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数
据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出
装置。
[0144] 这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些
计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指
令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光
盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读
介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何
信号。
[0145] 为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视
器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来
将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的
反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用
任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0146] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算
系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界
面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部
件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数
字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网
(LAN)、广域网(WAN)和互联网。
[0147] 计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计
算机程序来产生客户端和服务器的关系。
[0148] 根据本申请实施例的技术方案,本申请中,由于将对所述第一数据块的第一拍由部分写调整为完整写,从而提高存储器的写入性能。
[0149] 应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,
只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
[0150] 上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请
的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。