数据的处理方法、装置、电子设备及介质与流程

文档序号:31774947发布日期:2022-10-12 08:09阅读:104来源:国知局
数据的处理方法、装置、电子设备及介质与流程

1.本技术涉及数据处理领域,尤其涉及一种数据的处理方法、装置、电子设备及介质。


背景技术:

2.数据的处理是计算机工作的核心,通常包括:在控制单元的控制下,执行数据的处理指令,将待处理数据从内存转存至cpu的寄存器,并通过运算单元对寄存器中的待处理数据进行运算,并将运算的结果存储至预定的结果存储地址。上述处理指令包括向量指令和标量指令,其中向量指令可以直接操作向量,一条向量指令可以并行处理多个元素,标量指令只能对数据的单一元素进行操作。因而相比标量指令,向量指令的处理效率更高。
3.相关技术的数据的处理方法中,先基于向量指令对待处理数据以向量宽度为单位进行循环处理,在处理部分数据后,如果剩余的未处理数据的宽度小于向量指令宽度,则使用标量指令对这些未处理的数据逐个循环处理。然而标量的数据处理宽度较小,使得数据的处理次数较多,进而导致数据的处理效率较低。


技术实现要素:

4.本技术提供一种数据的处理方法、装置、电子设备及介质,旨在解决数据的处理次数较多,进而导致数据的处理效率较低技术问题。
5.第一方面,本技术提供一种数据的处理方法,包括:确定待处理数据中当前未处理的第一数据的宽度;若所述第一数据的宽度不小于向量指令的向量指令宽度,则使用所述向量指令,在所述第一数据中以所述向量指令宽度为单位循环进行向量运算,并将所得的第一运算结果分别逐次存至预定的结果存储地址;若所述第一数据的宽度小于向量指令的向量指令宽度,则使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储;其中,所述偏移数据由所述第一数据以及所述第一数据的起始地址前的第一数量个数的已处理数据组成,所述第一数量为所述向量指令宽度与所述第一数据的宽度之差。
6.可选的,所述待处理数据的地址为连续地址,所述使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储,包括:将所述第一数量个数的已处理数据的起始地址,确定为所述向量指令的源地址;以及将所述结果存储地址中与所述第一运算结果对应关联的地址作为所述向量指令的当前目标地址;使用所述向量指令,以对当前源地址为起始的所述偏移数据进行向量运算,并将所得的所述第二运算结果存至当前目标地址。
7.可选的,所述待处理数据的地址为不连续地址;所述使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储,包括:确定所述向量指令的当前源地址,所述当前源地址包括所述偏移数据对应的地址区间;以及将所述结果存储地址中与所述第一运算结果对应关联
的地址作为所述向量指令的当前目标地址;使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并将所得的所述第二运算结果存至当前目标地址。
8.可选的,所述结果存储地址为连续地址;所述使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储,包括:确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,通过将上一次循环运算获得的第一运算结果的结果存储地址中的末尾地址,向前移动所述第一数量,确定所述向量指令的当前目标地址;使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并以所述当前目标地址为起始,将所得的第二运算结果与所述第一运算结果关联存储。
9.可选的,所述结果存储地址为连续地址;所述使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储,包括:确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,将上一次循环运算获得的第一运算结果的结果存储地址中,末尾地址的下一地址确定为所述向量指令的当前目标地址;使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并以所述当前目标地址为起始,将所得的第二运算结果存储;以及,将所述第二运算结果根据所述当前目标地址向前位移所述第一数量。
10.可选的,所述结果存储地址为不连续地址;所述使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储,包括:确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,将所述结果存储地址中与最后一次运算结果对应的地址,确定为所述向量指令的当前目标地址;使用所述向量指令,对所述偏移数据进行向量运算,获得所述第二运算结果;以及,基于上一次循环运算获得的第一运算结果,对所述第二运算结果进行去重后,存至所述当前目标地址。
11.第二方面,本技术提供一种数据的处理装置,包括:确定模块,用于确定待处理数据中当前未处理的第一数据的宽度;处理模块,用于若所述第一数据的宽度不小于向量指令的向量指令宽度,则使用所述向量指令,在所述第一数据中以所述向量指令宽度为单位循环进行向量运算,并将所得的第一运算结果分别逐次存至预定的结果存储地址;所述处理模块,还用于若所述第一数据的宽度小于向量指令的向量指令宽度,则使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储;其中,所述偏移数据由所述第一数据以及所述第一数据起始地址前的第一数量个数的已处理数据组成,所述第一数量为所述向量指令宽度与所述第一数据的宽度之差。
12.可选的,所述待处理数据的地址为连续地址;所述处理模块,具体用于将所述第一数量个数的已处理数据的起始地址,确定为所述向量指令的源地址;以及将所述结果存储地址中与所述第一运算结果对应关联的地址作为所述向量指令的目标地址;所述处理模块,具体还用于使用所述向量指令,对以当前源地址为起始的所述偏移数据进行向量运算,并将所得的所述第二运算结果存至当前目标地址。
13.可选的,所述待处理数据的地址为不连续地址;所述处理模块,具体用于确定所述向量指令的当前源地址,所述当前源地址包括所述偏移数据对应的地址区间;以及将所述
结果存储地址中与所述第一运算结果对应关联的地址作为所述向量指令的当前目标地址;所述处理模块,具体还用于使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并将所得的所述第二运算结果存至当前目标地址。
14.可选的,所述结果存储地址为连续地址;所述处理模块,具体用于确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,通过将上一次循环运算获得的第一运算结果的结果存储地址中的末尾地址,向前移动所述第一数量,确定所述向量指令的当前目标地址;所述处理模块,具体用于使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并以所述当前目标地址为起始,将所得的第二运算结果与所述第一运算结果关联存储。
15.可选的,所述结果存储地址为连续地址;所述处理模块,具体用于确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,将上一次循环运算获得的第一运算结果的结果存储地址中,末尾地址的下一地址确定为所述向量指令的当前目标地址;所述处理模块,具体还用于使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并以所述当前目标地址为起始,将所得的第二运算结果存储;以及,将所述第二运算结果根据所述当前目标地址向前位移所述第一数量。
16.可选的,所述结果存储地址为不连续地址;所述处理模块,具体用于确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,将所述结果存储地址中与最后一次运算结果对应的地址,确定为所述向量指令的当前目标地址;所述处理模块,具体还用于使用所述向量指令,对所述偏移数据进行向量运算,获得所述第二运算结果;以及,基于上一次循环运算获得的第一运算结果,对所述第二运算结果进行去重后,存至所述当前目标地址。
17.第三方面,本技术提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器。
18.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如前所述的方法。
19.本技术提供的数据的处理方法、装置、电子设备及介质中,当前内存中未处理的第一数据的宽度小于向量指令的向量指令宽度时,执行向量指令,将由第一数据以及第一数据的起始地址前的第一数量个数的已处理数据组成的偏移数据转存至寄存器中,并通过运算单元对寄存器中的偏移数据进行向量运算,将所得的第二运算结果在结果存储地址中与第一运算结果关联存储。上述方案使得小于向量指令宽度的第一数据也可以使用向量指令进行处理,即针对内存中小于向量指令宽度的未处理的第一数据,可通过向量指令进行一次处理,而无需通过标量指令进行多次处理,从而能够降低处理次数,提高cpu对数据的处理效率。
附图说明
20.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术实施例的实施例,并与说明书一起用于解释本技术实施例的原理。
21.通过上述附图,已示出本技术实施例明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术实施例构思的范围,而是通过参考
特定实施例为本领域技术人员说明本技术实施例的概念。
22.图1为本技术实施例一提供的一种数据的处理方法的流程示意图;
23.图2为本技术实施例一提供的另一种数据的处理方法的流程示意图;
24.图3为本技术实施例一提供的又一种数据的处理方法的流程示意图;
25.图4为本技术实施例一提供的又一种数据的处理方法的流程示意图;
26.图5为本技术实施例一提供的又一种数据的处理方法的流程示意图;
27.图6为本技术实施例二提供的一种数据的处理装置的结构示意图;
28.图7为本技术实施例三提供的电子设备的结构示意图。
29.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
30.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
31.数据的处理包括:在cpu控制单元的控制下,从待处理数据所在的存储单元中,读取待处理数据,基于向量指令,并通过运算单元对待处理数据进行运算,将运算的结果存储至预定的结果存储地址。
32.当需要对待处理数据进行处理时,可以通过执行指令来实现。举例来说,假设待处理数据的字节长度较长,则可能需要根据指令的指令宽度,将待处理数据拆分成多段数据,通过多次执行指令对每段数据进行处理,直至整个待处理数据的所有数据均完成处理。
33.实际应用中,指令包含源地址和目标地址,源地址用于确定每次处理的数据所在的地址,目标地址用于确定每次处理的结果需要存至的地址。可以理解,在针对待处理数据进行多次执行指令的过程中,需要更新每次执行的源地址和目标地址。例如,加载指令ld(dst,src)中,dst为目标地址,src为源地址。执行该指令,将src对应的数据加载至dst对应的地址。
34.上述指令可以是向量指令,也可以是标量指令,其中向量指令可以直接操作向量,一条向量指令可以并行计算很多个元素,如:d=a*(b+c),其中a、b、c、d是长度为n的向量,a=(a1,a2,a3…an
),b=(b1,b2,b3…bn
),c=(c1,c2,c3…cn
),d=(d1,d2,d3…dn
);而标量指令只能对数据的单一元素进行操作,例如,d=a*(b+c),也就是说,向量指令相比于标量指令,每次处理数据的数据量较大,因此处理的效率高。
35.在一种方案中,在通过向量指令对待处理数据的部分数据进行处理后,如果剩余的未处理数据的宽度小于向量指令宽度,则使用标量指令对这些未处理的数据逐个循环处理。例如:对一个宽度为353个字节的待处理数据进行处理,使用向量指令宽度为128个字节的向量指令处理两次后,剩余97个字节的未处理数据,由于97个字节小于向量指令宽度的128个字节,因此使用标量指令进行处理,标量指令的宽度为1,则需要对97个字节的未处理数据进行97次的循环处理,因此,353个字节的数据的总处理次数为99次,数据的处理次数
较多,处理效率较低。
36.下面以具体的实施例对本技术的技术方案以及本技术的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。在本技术的描述中,除非另有明确的规定和限定,各术语应在本领域内做广义理解。下面将结合附图,对本技术的实施例进行描述。
37.实施例一
38.图1为本技术实施例一提供的数据的处理方法的流程示意图,如图1所示,本实施例提供的数据的处理方法包括:
39.s101:确定待处理数据中当前未处理的第一数据的宽度;
40.s102:若所述第一数据的宽度不小于向量指令的向量指令宽度,则使用所述向量指令,在所述第一数据中以所述向量指令宽度为单位循环进行向量运算,并将所得的第一运算结果分别逐次存至预定的结果存储地址;
41.s103:若所述第一数据的宽度小于向量指令的向量指令宽度,则使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储;其中,所述偏移数据由所述第一数据以及所述第一数据的起始地址前的第一数量个数的已处理数据组成,所述第一数量为所述向量指令宽度与所述第一数据的宽度之差。
42.实际应用中,待处理数据可以是二进制数据。向量指令宽度为使用向量指令以单位形式一次能处理的数据的字节数,如向量指令宽度可以为8b、16b或32b等。
43.其中,待处理数据中未被处理的第一数据,是基于当前未处理数据对应的处理进度确定的。实际应用中,待处理数据的宽度(可以理解为字节数)可能较大,比如,大于向量指令宽度,则每次基于向量指令完成部分数据的处理后,都可以对当前未处理的第一数据的宽度进行确定,直至所有的待处理数据处理完毕。示例性的,假设待处理数据的宽度为798个字节,向量指令宽度为128个字节,依据向量指令完成一次处理后,当前的第一数据的宽度为670个字节;下次循环时,再次依据向量指令完成一次处理,确认当前的第一数据的宽度为542个字节;再次循环时,依据向量指令完成一次处理,再次确认第一数据的宽度,以此循环,直至798个字节数据全部处理完毕。
44.确定当前第一数据的宽度后,将第一数据的宽度与向量指令宽度进行比较,若第一数据的宽度不小于向量指令宽度,则可正常使用向量指令进行数据处理。作为示例,可以使用向量指令对第一数据中以向量指令宽度为单位循环进行向量运算,将所得的第一运算结果保存至预定的结果存储地址。若当前第一数据的宽度小于向量指令宽度时,为防止出现地址越界(向量指令处理的对象超出待处理数据的范围),在本实施例的一种示例中,先计算向量指令宽度与当前第一数据的宽度之间的差值,作为第一数量;然后使用向量指令,对第一数据对应的偏移数据,进行基于向量指令的处理。其中偏移数据由第一数据以及所述第一数据前的第一数量个数的已处理数据组成,偏移数据的宽度等于向量指令的宽度。也就是说,通过对第一数量个数的已处理的数据进行重复处理,使得当前要处理的数据的宽度等于向量指令宽度,形成单位化的向量指令形式,这样就可以使用向量指令,在下一次循环执行时实现对第一数据的一次性处理。
45.对于所述基于向量指令的处理,作为示例,处理可以包括对这些数据进行向量运
data15。15个字节的地址连续,地址依次为s1-s15,假设向量指令宽度为8个字节,则经过一次正常的向量指令处理后,当前未处理的第一数据22的宽度为7个字节,对应的数据片段为data9-data15,地址分别为s9-s15。为满足向量指令宽度,可知需要向第一数据22补入第一数量为1的字节以组成偏移数据,结合本示例的方案,则下一次循环运算中,将一个已处理的数据21,即补入数据data8的起始地址s8作为当前源地址。可以理解,以起始的s8作为向量指令的源地址,连续向后获取向量指令宽度(8)个字节的数据,即为数据片段data8-data15,其宽度刚好满足8个字节的向量指令宽度,则对数据片段data8-data15使用向量指令进行运算,并将运算结果保存至当前目标地址23中,从而实现通过一次处理完成宽度未达到向量指令宽度的数据处理。
56.本方案中,利用待处理数据的地址的连续性,将第一数量个数的已处理数据的起始地址作为当前的源地址开始读取数据,形成向量指令宽度大小的偏移数据后,简便地实现通过一次的向量运算处理宽度未达到向量指令宽度的第一数据,从而实现待处理数据的快速运算。
57.示例二
58.当待处理数据的地址为不连续地址,s103中所述使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储,包括:
59.确定所述向量指令的当前源地址,所述当前源地址包括所述偏移数据对应的地址区间;以及将所述结果存储地址中与所述第一运算结果对应关联的地址作为所述向量指令的目标地址;
60.使用所述向量指令对当前源地址下的所述偏移数据进行向量运算,并将所得的所述第二运算结果与上一次循环所得的第一运算结果关联存至当前目标地址。
61.本示例可以应用于待处理数据的地址为不连续的场景,待处理数据以各片段的形式分散存储在内存中,各片段的存储地址之间通过链表等数据结构设定关联关系。在已知部分片段的地址时,则可以通过查表等方式获得其他部分片段的地址,因此已知第一数据的地址的前提下,则可获取到第一数量个数的已处理数据对应的地址。将偏移数据对应的地址区间确定为当前源地址,使用向量指令对当前源地址下的偏移数据进行向量运算,并将结果存储地址中与第一运算结果对应关联的地址作为向量指令的当前目标地址;
62.结合具体实例进行说明,图3为本技术实施例一提供的又一种数据的处理方法的流程示意图,如图3所示,待处理数据包括10个不连续存储的字节,分别为data1-data10,存储地址依次为s2、s3、s4、s5、s7、s8、s9、s10、s12、s13,data1-data10是一个完整数据的10个片段,data1-data10之间通过既定的链表结构设定关联,则已知部分数据的地址,则可以通过查表的方式查找到对应的其他部分片段的地址。
63.假设向量指令宽度为8个字节,经过一次向量运算后,待处理数据中当前未处理的第一数据32的宽度为2个字节,分别为存储在s12中的data9及存储在s13中的data10,结合前述示例的方案计算得到第一数量为6,则将6个已处理数据31以及未处理的第一数据32进行组合,即数据data3-data8以及数据data9-data10对应的地址s4、s5、s7、s8、s9、s10以及s12和s13。则将地址区间s4-s13或s4、s5、s7、s8、s9、s10、s12、s13作为当前源地址,向量指令基于当前源地址及数据间地址的关联关系获取一个向量指令宽度的第一数据,并进行向
量运算,将所得的第二运算结果与上一次循环所得的第一运算结果关联保存至当前目标地址33中。
64.本示例中,待处理数据的地址为不连续地址,将已知的第一数据的地址及依据关联关系获取的第一数量个数的已处理数据对应的地址作为当前源地址,依据当前源地址对应的地址区间获取了满足向量指令宽度的第一数据,从而实现了基于向量指令的运算。
65.示例三
66.当结果存储地址为连续地址时,s103中所述使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储,包括:
67.确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,通过将上一次循环进行向量运算获得的第一运算结果的结果存储地址中的末尾地址,向前移动所述第一数量,确定所述向量指令的当前目标地址;
68.本示例中,通过当前源地址获取了满足向量指令宽度的数据片段,并基于向量指令对该数据片段进行了向量运算,将运算结果依据当前目标地址存储至结果存储地址。其中当前目标地址表征偏移数据的运算结果存储时的对应地址,结合结果存储地址连续的场景,指令中的当前目标地址可以仅包含这些连续个地址的起始地址。
69.作为示例,可以将上一次循环向量运算获得的第一运算结果的结果存储地址中的末尾地址向前移动第一数量后的地址,作为当前目标地址。运算结果从该当前目标地址开始向后顺序存储。可以理解,本次循环的向量运算结果与上次循环的向量运算结果有重复的部分,本次循环的运算结果覆盖了上次循环的运算结果中与之重复的部分,从而则完整的保存了数据结果。
70.结合具体实例进行说明,如图2所示,假设待处理数据有15个字节,分别为data1-data15,向量指令宽度为8个字节,则经过一次正常的向量运算后,当前的第一数据21的宽度为7个字节,数据片段为data9-data15。
71.预定的结果存储地址为d1-d15,其中结果存储地址d1-d8中已存储之前第一运算的结果result1-result8,因第一数据21的宽度为7个字节,向量指令宽度为8个字节,则表示偏移数据的第一数量为8-7=1,则将结果存储地址的顺次地址d9向前偏移1位,即将d8作为当前目标地址23。本次第一数据的数据片段data8-data15的向量运算对应第二运算结果为result8-result15,将result8-result15从d8开始依次连续存储,则本次的第二运算结果result8覆盖了d8中的上次的运算结果result8,相应的,result9-result15分别存储在d9-d15中。
72.本实例中,结果存储地址为连续地址,通过将上一次循环进行向量运算获得的第一运算结果的结果存储地址中的末尾地址向前移动所述第一数量,确定当前目标地址,也即采用了覆盖的方式去除重复的向量运算结果,实现所得的第二运算结果与第一运算结果关联存储,原理简单,处理效率更高。
73.示例四
74.当结果存储地址为连续地址时,s103中所述使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储,包括:
75.确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,将上一次循环进行向量运算获得的第一运算结果的结果存储地址中,末尾地址的下一地址确定为所述向量指令的当前目标地址;
76.使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并以所述当前目标地址为起始,将所得的第二运算结果存储;以及,将所述第二运算结果根据所述当前目标地址向前位移所述第一数量。
77.本示例同样结合了结果存储地址连续的场景,通过当前源地址获取了满足向量指令宽度的数据片段,并基于向量指令对该数据片段进行了向量运算,将依据当前目标地址存储运算结果。本示例中,可以将上一次循环进行向量运算获得的第一运算结果对应的末尾地址的下一地址,确定为当前目标地址,运算结果从当前目标地址开始连续的存储。可以理解,本次的运算结果与上次的运算结果中重复的部分,分别存储在不同的位置,即本次运算结果中重复部分连续的接在上次运算结果重复部分之后。
78.后续,在将第二运算结果依据当前目标地址存储后,将当前目标地址及之后的向量指令宽度个数的数据,向前位移第一数量个数的地址,可以理解,剔除了重复的运算结果,且所有的运算结果的地址保持了连续性。
79.结合具体施例进行说明,图4为本技术实施例一提供的又一种数据的处理方法的流程示意图,如图4所示,假定待处理数据有15个字节,分别为data1-data15,向量指令宽度为8个字节,经过一次正常的向量指令处理运算后,当前的第一数据42的宽度为7个字节,数据片段为分别为data9-data15。
80.预定的结果存储地址为d1-d15,其中结果存储地址d1-d8中已存储之前的第一运算结果result1-result8,因第一数据42的宽度为7个字节,向量指令宽度为8个字节,则第一数量为8-7=1,则将第一运算结果result1-result8末尾地址d8的下一地址d9作为向量指令的当前目标地址43。对本次循环的偏移数据data8-data15进行向量运算,对应的第二运算结果为result8-result15,将result8-result15从d9开始依次连续存储在d10-d16中,则d8中存储的是result8,d9中存储的也是result8。将d9及d10-d16中的8个字节的数据分别向前移动一个地址,即d8-d15中分别存储在result8-result15中。
81.本示例中,当结果存储地址为连续地址,通过数据位移的方式对存储的第二预算结果位置进行调整、整合,以关联上一次循环进项向量运算获得的第一运算结果的存储地址,无需调整向量指令中的目标地址,实现所得的所述第二运算结果与所述第一运算结果关联存储。
82.示例五
83.当结果存储地址为不连续地址时,s103中所述使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储,包括:
84.确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,将所述结果存储地址中与最后一次运算结果对应的地址,确定为所述向量指令的当前目标地址;
85.使用所述向量指令,对所述偏移数据进行向量运算,获得所述第二运算结果;以及,基于上一次循环运算获得的第一运算结果,对所述第二运算结果进行去重后,存至所述
当前目标地址。
86.本示例中,结果存储地址与待处理数据的运算结果间存在对应关系,依据对应关系可以使得待处理数据的运算结果存储找到对应的地址。结合结果存储地址不连续的场景,偏移数据基于向量指令运算后,得到第二运算结果,依据对应关系,获取运算结果对应的地址。删除本次运算结果与上一次循环运算获得的第一运算结果重复的部分及该重复的部分对应的地址,将剩余部分的地址作为当前目标地址,并将剩余部分结果存至当前目标地址中。
87.结合具体施例进行说明,图5为本技术实施例一提供的又一种数据的处理方法的流程示意图,如图5所示,假定待处理数据有10个字节,向量指令宽度为8个字节,执行了一次向量指令运算后,当前第一数据52的宽度为2个字节,第一数量个数的已处理数据51为data3-data8,共计8-2=6个数据片段,设定的第二运算结果存储地址为d2、d3、d4、d5、d7、d8、d9、d10、d12、d13。其中d2、d3、d4、d5、d7、d8、d9、d10中已存储之前的第一运算结果result1-result8,存储地址d12、d13则对应存储第二运算结果result9、result10。
88.本示例的方案中,s3-s10为本次向量指令的数据的存储地址,由于待处理数据的存储地址连续,确定s3为源地址。最后一次运算中result9、result10对应的地址为d12、d13,确定d12、d13为当前目标地址,基于向量指令对源地址下的data3-data10进行向量运算,得到运算结果result3-result10。删除本次处理结果中的result3-result8及其本次目标地址中的d4、d5、d7、d8、d9、d10,将剩余结果result9、result10保存至d12、d13中,从而实现所得的第二运算结果与第一运算结果的完整存储。
89.本示例中,当结果存储地址为不连续地址,基于对未处理数据进行数据补充后的数据,在完成向量运算后,通过删除运算结果中与上一次循环进行向量运算获得的第一运算结果重复的部分,并调整当前目标地址,实现第二运算结果与第一运算结果的完整存储。
90.实际应用中,为了加快cpu的处理速度,在控制单元的控制下,常常将待处理数据转存至寄存器。基于向量指令,并通过运算单元对寄存器中的数据进行运算,将运算的结果存储至预定的结果存储地址。因此在对待处理数据的处理过程中可能包括多个向量指令。例如,将待处理数据加载至寄存器中的加载指令及后续对待处理数据的运算指令,每个向量指令都有对应的源地址及目标地址,但本实施例中,仅对开始获取待处理数据的指令的源地址,以及最后存储运算结果至结果存储地址的指令的目的地址做了示例性介绍。对于中间处理所涉及的向量指令的源地址及目标地址,依据具体场景确定,示例性的,可确定为具体的缓存寄存器。
91.本实施例提供的数据的处理方法,当前内存中未处理的第一数据的宽度小于向量指令的向量指令宽度时,执行向量指令,将由第一数据以及第一数据的起始地址前的第一数量个数的已处理数据组成的偏移数据转存至寄存器中,并通过运算单元对寄存器中的偏移数据进行向量运算,将所得的第二运算结果在结果存储地址中与第一运算结果关联存储。上述方案使得小于向量指令宽度的第一数据也可以使用向量指令进行处理,即针对内存中小于向量指令宽度的未处理的第一数据,可通过向量指令进行一次处理,而无需通过标量指令进行多次处理,从而能够降低数据的处理次数,提高cpu对数据的处理效率。
92.实施例二
93.图6为本技术实施例二提供的一种数据的处理装置的结构示意图,如图6所示,本
实施例提供的数据的处理装置包括:
94.确定模块61,用于确定待处理数据中当前未处理的第一数据的宽度;
95.处理模块62,用于若所述第一数据的宽度不小于向量指令的向量指令宽度,则使用所述向量指令,在所述第一数据中以所述向量指令宽度为单位循环进行向量运算,并将所得的第一运算结果分别逐次存至预定的结果存储地址;
96.处理模块62,还用于若所述第一数据的宽度小于向量指令的向量指令宽度,则使用所述向量指令,对所述第一数据对应的偏移数据进行向量运算,并将所得的第二运算结果在所述结果存储地址中与所述第一运算结果关联存储;其中,所述偏移数据由所述第一数据以及所述第一数据的起始地址前的第一数量个数的已处理数据组成,所述第一数量为所述向量指令宽度与所述第一数据的宽度之差。
97.实际应用中,待处理数据可以是二进制数据。向量指令宽度为使用向量指令以单位形式一次能处理的数据的字节数,如向量指令宽度可以为8b、16b或32b等。
98.其中,待处理数据中未被处理的第一数据,是基于当前未处理数据对应的处理进度确定的。实际应用中,待处理数据的宽度(可以理解为字节数)可能较大,比如,大于向量指令宽度,则每次基于向量指令完成部分数据的处理后,都可以对当前未处理的第一数据的宽度进行确定,直至所有的待处理数据处理完毕。示例性的,假设待处理数据的宽度为798个字节,向量指令宽度为128个字节,依据向量指令完成一次处理后,当前的第一数据的宽度为670个字节;下次循环时,再次依据向量指令完成一次处理,确认当前的第一数据的宽度为542个字节;再次循环时,依据向量指令完成一次处理,再次确认第一数据的宽度,以此循环,直至798个字节数据全部处理完毕。
99.确定当前第一数据的宽度后,将第一数据的宽度与向量指令宽度进行比较,若第一数据的宽度不小于向量指令宽度,则可正常使用向量指令进行数据处理。作为示例,可以使用向量指令对第一数据中以向量指令宽度为单位循环进行向量运算,将所得的第一运算结果保存至预定的结果存储地址。若当前第一数据的宽度小于向量指令宽度时,为防止出现地址越界(向量指令处理的对象超出待处理数据的范围),在本实施例的一种示例中,先计算向量指令宽度与当前第一数据的宽度之间的差值,作为第一数量;然后使用向量指令,对第一数据对应的偏移数据,进行基于向量指令的处理。其中偏移数据由第一数据以及所述第一数据前的第一数量个数的已处理数据组成,偏移数据的宽度等于向量指令的宽度。也就是说,通过对第一数量个数的已处理的数据进行重复处理,使得当前要处理的数据的宽度等于向量指令宽度,形成单位化的向量指令形式,这样就可以使用向量指令,在下一次循环执行时实现对第一数据的一次性处理。
100.对于所述基于向量指令的处理,作为示例,处理可以包括对这些数据进行向量运算,并将所得的第二运算结果在结果存储地址中与第一运算结果关联存储。
101.值得说明的是,在上述处理过程中,第二运算结果在结果存储地址中与第一运算结果进行关联存储,具体需关联循环过程中上一次循环运算获得的第一运算结果。可以理解,待处理数据是完整的数据,处理后的结果也是完整的结果,因此,为了避免上述过程中被重复处理的数据字节影响最终存储的处理结果数据,本实施例中,在存储针对偏移数据对应的处理结果时,需要与之前运算所存储的第一运算结果部分关联。也就是说,通过多次循环执行向量指令处理的过程,虽然类似是将完整的待处理数据及得到的运算结果因循环
执行而被分成了多个部分,但这些部分之间彼此关联存储,能够对完整的待处理数据进行向量运算,并得到对应完整的运算结果。
102.在一种情况下,运算结果中各部分之间的关联可以通过分布在连续的地址形成,比如,以处理结果作为示例,在结果存储地址为连续地址的情况下,假设上一次循环处理的处理结果被存至的结果地址为d128-d255,则本次处理的结果承接上述地址,顺序保存至d256及之后的连续地址。
103.在另一种情况下,运算结果中各部分可以分布在不连续的地址中,但各部分的地址之间是相互关联的,能够组成完整的运算结果数据。实际应用中,可以将各部分的地址之间的关联关系以链表等数据结构进行记录,以便于读取完整的运算结果数据。具体方式可以参考相关技术。
104.考虑到实际应用中,数据连续分布和不连续分布的场景,下面结合示例处理模块做进一步说明。
105.示例一
106.当待处理数据的地址为连续地址时,处理模块62,具体用于将所述第一数量个数的已处理数据的起始地址,确定为所述向量指令的源地址;以及将所述结果存储地址中与所述第一运算结果对应关联的地址作为所述向量指令的当前目标地址;
107.处理模块62,具体还用于使用所述向量指令,对以当前源地址为起始的所述偏移数据进行向量运算,并将所得的所述第二运算结果存至当前目标地址。
108.具体的,源地址表征本次处理的数据片段(待处理数据的其中一部分)所在的地址,在本示例中,针对未处理数据的宽度未达到向量指令宽度的场景,处理模块62通过向未处理数据补入之前已处理的数据,来使得补入后的数据片段的宽度等于向量指令宽度,从而支持以向量指令为单位的数据处理。相应的,补入数据可以通过确定本次运算对应的源地址来实现。具体的,本次运算对应的源地址表征偏移数据的地址,结合连续地址的场景,只需将第一数量个数的已处理数据的起始地址,确定为向量指令的当前源地址,依据起始地址向后依次读取向量指令宽度个数的数据,则即获取包含补入数据和未处理数据的满足向量指令宽度的数据片段,再使用向量指令为单位对该数据片段进行向量运算,将运算结果存至本次运算对应的当前目标地址。
109.本方案中,处理模块利用待处理数据的地址的连续性,将第一数量个数的已处理数据的起始地址作为当前的源地址开始读取数据,形成向量指令宽度大小的偏移数据后,简便地实现通过一次的向量运算处理宽度未达到向量指令宽度的第一数据,从而实现待处理数据的快速运算。
110.示例二
111.当待处理数据的地址为不连续地址,处理模块62,具体用于确定所述向量指令的当前源地址,所述当前源地址包括所述偏移数据对应的地址区间;以及将所述结果存储地址中与所述第一运算结果对应关联的地址作为所述向量指令的当前目标地址;
112.处理模块62,具体还用于使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并将所得的所述第二运算结果存至当前目标地址。
113.本示例可以应用于待处理数据的地址为不连续的场景,待处理数据以各片段的形式分散存储在内存中,各片段的存储地址之间通过链表等数据结构设定关联关系。在已知
部分片段的地址时,处理模块62则可以通过查表等方式获得其他部分片段的地址,因此已知第一数据的地址的前提下,则可获取到第一数量个数的已处理数据对应的地址。将偏移数据对应的地址区间确定为当前源地址,使用向量指令对当前源地址下的偏移数据进行向量运算,并将结果存储地址中与第一运算结果对应关联的地址作为向量指令的当前目标地址;
114.本示例中,待处理数据的地址为不连续地址,处理模块将已知的第一数据的地址及依据关联关系获取的第一数量个数的已处理数据对应的地址作为当前源地址,依据当前源地址对应的地址区间获取了满足向量指令宽度的第一数据,从而实现了基于向量指令的运算。
115.示例三
116.当结果存储地址为连续地址时,处理模块62,具体用于确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,通过将上一次循环运算获得的第一运算结果的结果存储地址中的末尾地址,向前移动所述第一数量,确定所述向量指令的当前目标地址;
117.处理模块62,具体用于使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并以所述当前目标地址为起始,将所得的第二运算结果与所述第一运算结果关联存储。
118.本示例中,处理模块62通过当前源地址获取了满足向量指令宽度的数据片段,并基于向量指令对该数据片段进行了向量运算,将运算结果依据当前目标地址存储至结果存储地址。其中当前目标地址表征偏移数据的运算结果存储时的对应地址,结合结果存储地址连续的场景,指令中的当前目标地址可以仅包含这些连续个地址的起始地址。
119.作为示例,可以将上一次循环向量运算获得的第一运算结果的结果存储地址中的末尾地址向前移动第一数量后的地址,作为当前目标地址。运算结果从该目标地址开始向后顺序存储。可以理解,本次循环的向量运算结果与上次循环的向量运算结果有重复的部分,本次循环的运算结果覆盖了上次循环的运算结果中与之重复的部分,从而则完整的保存了数据结果。
120.本实例中,结果存储地址为连续地址,处理模块通过将上一次循环进行向量运算获得的第一运算结果的结果存储地址中的末尾地址向前移动所述第一数量,确定当前目标地址,也即采用了覆盖的方式去除重复的向量运算结果,实现所得的第二运算结果与第一运算结果关联存储,原理简单,处理效率更高。
121.示例四
122.当结果存储地址为连续地址时,处理模块62,具体用于确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,将上一次循环运算获得的第一运算结果的结果存储地址中,末尾地址的下一地址确定为所述向量指令的当前目标地址;
123.处理模块62,具体还用于使用所述向量指令,对当前源地址下的所述偏移数据进行向量运算,并以所述当前目标地址为起始,将所得的第二运算结果存储;以及,将所述第二运算结果根据所述当前目标地址向前位移所述第一数量。
124.本示例同样结合了结果存储地址连续的场景,处理模块62通过当前源地址获取了
满足向量指令宽度的数据片段,并基于向量指令对该数据片段进行了向量运算,将依据当前目标地址存储运算结果。本示例中,可以将上一次循环进行向量运算获得的第一运算结果对应的末尾地址的下一地址,确定为当前目标地址,运算结果从当前目标地址开始连续的存储。可以理解,本次的运算结果与上次的运算结果中重复的部分,分别存储在不同的位置,即本次运算结果中重复部分连续的接在上次运算结果重复部分之后。
125.后续,在将第二运算结果依据当前目标地址存储后,处理模块62将当前目标地址及之后的向量指令宽度个数的数据,向前位移第一数量个数的地址,可以理解,剔除了重复的运算结果,且所有的运算结果的地址保持了连续性。
126.本示例中,当结果存储地址为连续地址,处理模块通过数据位移的方式对存储的第二预算结果位置进行调整、整合,以关联上一次循环进项向量运算获得的第一运算结果的存储地址,无需调整向量指令中的目标地址,实现所得的所述第二运算结果与所述第一运算结果关联存储。
127.示例五
128.当结果存储地址为不连续地址时,处理模块62,具体用于确定所述向量指令的当前源地址,所述当前源地址表征所述偏移数据对应的地址;以及,将所述结果存储地址中与最后一次运算结果对应的地址,确定为所述向量指令的当前目标地址;
129.处理模块62,具体还用于使用所述向量指令,对所述偏移数据进行向量运算,获得所述第二运算结果;以及,基于上一次运算获得的第一运算结果,对所述第二运算结果进行去重后,存至所述当前目标地址。
130.实际应用中,结果存储地址与待处理数据的运算结果间存在对应关系,处理模块62依据对应关系可以使得待处理数据的运算结果存储找到对应的地址。结合结果存储地址不连续的场景,偏移数据基于向量指令运算后,得到第二运算结果,依据对应关系,获取运算结果对应的地址。删除本次运算结果与上一次循环运算获得的第一运算结果重复的部分及该重复的部分对应的地址,将剩余部分的地址作为当前目标地址,并将剩余部分结果存至当前目标地址中。
131.本示例中,当结果存储地址为不连续地址,基于对未处理数据进行数据补充后的数据,在完成向量运算后,通过删除运算结果中与上一次循环进行向量运算获得的第一运算结果重复的部分,并调整目标地址,实现第二运算结果与第一运算结果的完整存储。
132.本实施例提供的数据装置中,当前内存中未处理的第一数据的宽度小于向量指令的向量指令宽度时,执行向量指令,将由第一数据以及第一数据的起始地址前的第一数量个数的已处理数据组成的偏移数据转存至寄存器中,并通过运算单元对寄存器中的偏移数据进行向量运算,将所得的第二运算结果在结果存储地址中与第一运算结果关联存储。上述方案使得小于向量指令宽度的第一数据也可以使用向量指令进行处理,即针对内存中小于向量指令宽度的未处理的第一数据,可通过向量指令进行一次处理,而无需通过标量指令进行多次处理,从而能够降低数据的处理次数,提高cpu对数据的处理效率。
133.实施例三
134.图7为本技术实施例五提供的电子设备的结构示意图,如图7所示,该电子设备包括:
135.处理器(processor)291,电子设备还包括了存储器(memory)292;还可以包括通信
接口(communication interface)293和总线294。其中,处理器291、存储器292、通信接口293、可以通过总线294完成相互间的通信。通信接口293可以用于信息传输。处理器291可以调用存储器292中的逻辑指令,以执行上述实施例的方法。
136.此外,上述的存储器292中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
137.存储器292作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序,如本技术实施例中的方法对应的程序指令/模块。处理器291通过运行存储在存储器292中的软件程序、指令以及模块,从而执行功能应用以及数据处理,即实现上述方法实施例中的方法。
138.存储器292可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器292可以包括高速随机存取存储器,还可以包括非易失性存储器。
139.本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现任一实施例中所述的方法。
140.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由权利要求书指出。
141.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求书来限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1