1.本发明涉及数据存储技术领域,更具体地说,涉及一种基于寄存器的数据存储方法、装置、设备及存储介质。
背景技术:
2.哈希表是一种常用的数据结构,主要用于信息加密或者数据查表中。哈希表根据数据的关键码值对数据进行直接的访问。存储数据时,首先将该数据的关键码值与数据存储位置建立一个映射关系,然后将数据存储到该位置中;读取时,首先获取待查询的数据的关键码值,然后按相同的方法计算出存储位置,然后去读该数据。这种由关键码值和存储地址的映射关系构建的数据存储结构叫做哈希表,该映射关系被称为哈希函数,存储位置被称为哈希地址,即:哈希地址=h(码值)。每个存储位置记录一个数据是一种常见的哈希表形式,然而,也有很多应用场景下,不同的数据会映射到同一个存储位置,这种现象叫做哈希碰撞。这些碰撞的数据往往使用链表的形式进行存放,因此,这种哈希表也称为哈希链表。
3.目前硬件实现通常以ram(random access memory,随机存取存储器)为基础实现哈希链表的存储,ram的地址位宽等于哈希值的位宽,每一个数据在ram中的地址就是该数据关键码值的哈希值,每一个ram即一张哈希表。为了实现链表的存储,一般需要多个这样的ram,每个ram对应链表中的一个位置。该ram的集合构成一个存储池。哈希链表的存储池一般具有多个写入端口,以提高吞吐率。有的存储池的写入端口可以独立的向链表中的任何一个位置写入,这样的存储池往往采用更多的ram来实现或者需要多周期来完成一次写入过程。采用更多的ram会造成较大的面积消耗,多周期完成一次写入过程对系统延迟和系统性能都有所损失。
技术实现要素:
4.本发明的目的在于提供一种基于寄存器的数据存储方法、装置、设备及存储介质,以降低存储资源的消耗,降低系统处理延迟和性能。
5.为实现上述目的,本发明提供一种基于寄存器的数据存储方法,包括:
6.确定多个哈希表寄存器组;其中,每个哈希表寄存器组具有与每个哈希地址对应的寄存器,每个寄存器包括h位字段,若h位字段为有效字段,则表示对应的寄存器为数据开始写入位置;
7.确定待存储的多个目标数据组;其中,每个目标数据组中的每个有效数据具有相同的哈希地址;
8.在存储目标数据组时,从多个哈希表寄存器组中确定与所述目标数据组的哈希地址对应的多个目标寄存器;
9.将目标数据组的首个有效数据存储至h位字段为有效字段的目标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄
存器中,并更新目标寄存器的h位字段。
10.为实现上述目的,本发明进一步提供一种基于寄存器的数据存储装置,包括:
11.第一确定模块,用于确定多个哈希表寄存器组;其中,每个哈希表寄存器组具有与每个哈希地址对应的寄存器,每个寄存器包括h位字段,若h位字段为有效字段,则表示对应的寄存器为数据开始写入位置;
12.第二确定模块,用于确定待存储的多个目标数据组;其中,每个目标数据组中的每个有效数据具有相同的哈希地址;
13.第三确定模块,用于在存储目标数据组时,从多个哈希表寄存器组中确定与所述目标数据组的哈希地址对应的多个目标寄存器;
14.存储模块,用于将目标数据组的首个有效数据存储至h位字段为有效字段的目标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄存器中,并更新目标寄存器的h位字段。
15.为实现上述目的,本发明进一步提供一种电子设备,包括:
16.存储器,用于存储计算机程序;
17.处理器,用于执行所述计算机程序时实现上述基于寄存器的数据存储方法的步骤。
18.为实现上述目的,本发明进一步提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述基于寄存器的数据存储方法的步骤。
19.通过以上方案可知,本发明实施例提供的一种基于寄存器的数据存储方法、装置、设备及存储介质;在本方案中,首先确定多个哈希表寄存器组,该多个哈希表寄存器组可以搭建哈希表,每个哈希表寄存器组具有与每个哈希地址对应的寄存器,每个寄存器包括h位字段,若h位字段为有效字段,则表示对应的寄存器为数据开始写入位置;并且,本方案在存储具有相同哈希地址的目标数据组时,首先查找与目标数据组的哈希地址对应的多个目标寄存器;然后将目标数据组的首个有效数据存储至h位字段为有效字段的目标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄存器中,并更新目标寄存器的h位字段。可见,本方案利用寄存器之间读写互不影响相对独立的特点,可基于寄存器搭建的哈希表完成单周期多个寄存器同时写操作,既降低了存储资源的消耗,又保证了系统处理的延迟和性能。
附图说明
20.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
21.图1为本发明实施例公开的一种基于寄存器的数据存储方法流程示意图;
22.图2为本发明实施例公开的寄存器哈希表示意图;
23.图3为本发明实施例公开的m*n组数据写入哈希表示意图;
24.图4为本发明实施例公开的每组输入数据对应的wr向量和last向量示意图;
25.图5a为本发明实施例公开的哈希表寄存器对应的h_vec向量示意图;
26.图5b为本发明实施例公开的哈希表寄存器对应的l_vec向量示意图;
27.图6a为本发明实施例公开的写入哈希表寄存器
00
的计算过程示意图;
28.图6b为本发明实施例公开的写入哈希表寄存器
01
的计算过程示意图;
29.图6c为本发明实施例公开的写入哈希表寄存器
02
的计算过程示意图;
30.图7为本发明实施例公开的一种基于寄存器的数据存储装置结构示意图;
31.图8为本发明实施例公开的一种电子设备结构示意图。
具体实施方式
32.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
33.本发明实施例公开了一种基于寄存器的数据存储方法、装置、设备及存储介质,以降低存储资源的消耗,降低系统处理延迟和性能。
34.参见图1,本发明实施例提供的一种基于寄存器的数据存储方法流程示意图,该方法具体包括:
35.s101、确定多个哈希表寄存器组;其中,每个哈希表寄存器组具有与每个哈希地址对应的寄存器,每个寄存器包括h位字段,若h位字段为有效字段,则表示对应的寄存器为数据开始写入位置;
36.在本实施例中,首先需要确定多个哈希表寄存器组,该多个哈希表寄存器组构建为寄存器哈希表。参见图2,为本发明实施例公开的寄存器哈希表示意图,其中,y为最大哈希地址,多个哈希表寄存器组组成哈希链表,l为哈希链表长度,每一个哈希表寄存器包括数据位字段和h位字段。数据位字段存储数据;h位字段为有效字段,如h位字段为1,表示接下来对应该哈希地址的数据应该从该位置开始存储在哈希链表中。初始化时,第0组寄存器的h位为1,其它组寄存器的h位为0,表示第一个数据从第0组的位置开始填写;在填入数据时,同时应该更新对应寄存器的h位字段,以指示出下一次数据应该存储的位置。如:存在两个数据要写入哈希地址为0的寄存器中,且哈希地址为0的第0组寄存器的h位为1,则第一个数据写入哈希地址为0的第0组寄存器,第二个数据写入哈希地址为0的第1组寄存器,哈希地址为0的第2组寄存器的h位字段为1,哈希地址为0的其他组寄存器的h位字段为0,表示下一次数据从哈希地址为0的第2组寄存器开始写入。
37.s102、确定待存储的多个目标数据组;其中,每个目标数据组中的每个有效数据具有相同的哈希地址;
38.在本实施例中,目标数据组的生成过程为:根据每个待存储数据的哈希码值生成多个目标数据组;其中,每个目标数据组中的每个有效数据的哈希码值相同;然后根据每个目标数据组的哈希码值确定对应的哈希地址。参见图3,为本实施例提供的m*n组数据写入哈希表示意图。若存在多个待存储数据,计算每个待存储数据的哈希码值,将哈希码值相同的待存储数据分为一个目标数据组,则本方案将多个待存储数据分为m个目标数据组,n表示每组最多可以有n个有效数据,因此本方案将待存储数据表示为m*n,m即表示单次最多可
以有m个有效写入端口,m要求不能大于y;n表示每组最多可以有n个有效数据,n要求不能大于l。参见图3,m0、m1、m2…mm-1
代表m个目标数据组的m个不同的哈希地址,即m个写入端口,以根据哈希表中对应的地址将对应的有效数据写入相应的哈希链表中;数
0,0
和数
0,1
的哈希地址相同,都为m0,即h(数
0,0
)=h(数
0,1
)=m0。其中灰色部分的数据表示无效数据,例如图3中的数
0,2
、数
0,n-1
以及m2组整组数据都为无效数据。同时要求,每组中的有效数据连续排布,中间不能有无效数据,因为每组数据只要找到第一个数据的写入位置,那么后续的组内数据依次跟在第一个数据写入位置的后面位置即可。
39.s103、在存储目标数据组时,从多个哈希表寄存器组中确定与目标数据组的哈希地址对应的多个目标寄存器;
40.在本实施例中,在存储目标数据组时,首先需要确定该目标数据组需要存储至哪些寄存器中,该寄存器即为与目标数据组对应的寄存器。如图3所示,第一个目标数据组为:数
0,0
和数
0,1
,数
0,0
和数
0,1
的哈希地址为0,则代表第一个目标数据组中的有效数据需要存储至哈希地址为0对应的寄存器中,参见图2,本实施例将哈希地址为0对应的第0组寄存器表示为寄存器
00
,则与第一个目标数据组的哈希地址0对应的多个目标寄存器为:寄存器
00
、~寄存器
0l-1
。但是在本实施例中,为了缩小计算量,若多个目标数据组中的最多有效数据的数量为n,每组最多有n个有效数据,则在存储目标数据组时,从前n个哈希表寄存器组中,确定与目标数据组的哈希地址对应的n个目标寄存器。也即:与第一个目标数据组的哈希地址0对应的多个目标寄存器为:寄存器
00
、~寄存器
0n-1
。
41.s104、将目标数据组的首个有效数据存储至h位字段为有效字段的目标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄存器中,并更新目标寄存器的h位字段。
42.在本实施例中,由于寄存器中的h位字段为1,表示接下来对应该哈希地址的数据应该从该位置开始存储在哈希链表中。因此本方案在存储数据时,主要以h位字段为1的寄存器为开始依次向后写入数据。需要说明的是,多个哈希表寄存器组之间具有预先设定的写入顺序,如图2所示,写入数据时,先写入寄存器
00
,再依次写入寄存器
01
、寄存器
02
、寄存器
03
等等。
43.在此,对了对s104进行清楚说明,仅以第一个目标数据组为:数
0,0
和数
0,1
为例进行说明。第一个目标数据组的哈希地址为0,则对应的目标寄存器为寄存器
00
、~寄存器
0n-1
,在这些目标寄存器中,寄存器
00
的h位字段为1,则将目标数据组的首个有效数据数
0,0
存储至寄存器
00
,然后将目标数据组中的数
0,1
存储至寄存器
00
之后的寄存器
01
中。执行完上述写入操作后,此时寄存器
01
、寄存器
02
均写入了数据,下次写入数据需要从寄存器
03
开始,则将寄存器
01
的h位字段设置为0,将寄存器
02
的h位字段设置为0,将寄存器
03
的h位字段设置为1,表示下次向哈希地址为0写入数据时,从寄存器
03
开始写入。
44.同理,其他组目标数据依然按照上述过程进行数据的写入。并且,本方案针对多端口读操作,由于本方案是基于寄存器搭建的哈希表,寄存器之间相互独立,因此可以完成单周期多个读操作。读操作控制相对简单,直接根据数据关键码值对应的哈希地址,从哈希表中直接读取即可,读端口数不能大于哈希地址的最大值,每个读端口对应的结果都是一个长度位l的链表。
45.综上可以看出,本方案充分利用了寄存器相对灵活、独立的特点实现了多端口读
写哈希表,硬件实现简单,保证了系统处理的延迟和性能,与多ram结构搭建的哈希表相比,节省了较多的存储资源,具有简单实用的效果。
46.基于上述实施例,在本实施例中,将目标数据组的首个有效数据存储至h位字段为有效字段的目标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄存器中,并更新目标寄存器的h位字段的过程,包括:
47.步骤一、确定与目标数据组对应的wr有效向量和last向量;其中,wr有效向量的向量值为1代表目标数据组对应位置的数据为有效数据,last向量的向量值为1代表目标数据组的最后一个有效数据的位置;
48.需要说明的是,为了准确的写入数据及更新寄存器的h位字段,在本实施例中,针对每组目标数据均设置了对应的wr有效向量和last向量。其中,wr有效向量表示该组数据中哪些数据有效;last向量,表示该组数据中的最后一个有效数据的位置。wr有效向量和last向量的向量值长度和输入数据的有效长度n保持一致,wr有效向量的第i个向量为1,代表目标数据组中第i个数据为有效数据,wr有效向量的第i个向量为0,代表目标数据组中第i个数据为无效数据,last向量的第i个向量为1,代表目标数据组中第i个数据为最后一个有效数据,last向量的第i个向量为0,代表目标数据组中第i个数据不是最后一个有效数据,i的取值范围为0~n-1。wr有效向量和last向量用来判断对应数据应该填入哈希链表中的具体位置。以上图3中的输入数据为例,每组输入数据的wr向量和last向量如图4所示,图4为本发明实施例公开的每组输入数据对应的wr向量和last向量示意图。
49.结合图3和图4,在此以m0组输入数据为例。m0组输入数据中,数
0,0
和数
0,1
为有效数据,该组中的其它数据均为无效数据,因此wr有效向量的[0]和[1]位置为1,其它位置为0;数
0,1
为该组数据中的最后一个有效数据,因此last向量的[1]位置为1,其它位置均为0。同理,m1组数据都为有效数据,因此wr有效向量的每一个位置均为1;last向量的最后一个位置[n-1]为1,其它位置为0;m2组数据都为无效数据,因此wr有效向量的每一个位置均为0,last向量的每一个位置均为0。
[0050]
步骤二、确定每个目标寄存器的h_vec向量及l_vec向量;h_vec向量为根据目标寄存器的h位字段的数值及目标寄存器之前的每个寄存器的h位字段的数值生成;l_vec向量为根据目标寄存器之前的每个寄存器的h位字段的数值生成;其中,h位字段的数值为0表示h位字段为有效字段;
[0051]
在本实施例中,h_vec向量与输入数据的wr向量结合,来判断各目标寄存器是否应该写入数据,以及应该被哪个数据填入;l_vec向量与输入数据的last向量结合,来更新各寄存器中的h位,即更新下一次数据填入的位置。若每组输入数据最多有n个有效数据,则步骤二生成h_vec向量及l_vec向量的过程为:按照预定顺序从n个目标寄存器中确定当前寄存器;其中,预定顺序为各目标寄存器所在的哈希表寄存器组之间的写入顺序;根据当前寄存器的h位字段的数值,以及当前寄存器之前的n-1个寄存器的h位字段的数值生成当前寄存器的h_vec向量;根据当前寄存器之前的n个寄存器的h位字段的数值生成当前寄存器的l_vec向量。
[0052]
具体来说,若n个目标寄存器为:寄存器
00
、~寄存器
0n-1
,此时则需要确定与每个寄存器对应的h_vec向量及l_vec向量,哈希表中每个寄存器的h_vec向量由该寄存器本身的h位,以及前面n-1个哈希表寄存器各自的h位构成;哈希表中每个寄存器l_vec向量由该哈希
表寄存器前面n个哈希表寄存器各自的h位构成。参见图5a,为本发明实施例公开的哈希表寄存器对应的h_vec向量示意图,参见图5b,为本发明实施例公开的哈希表寄存器对应的l_vec向量示意图,在此,仅以生成寄存器
00
所对应的h_vec向量和l_vec向量为例进行说明,每个哈希表寄存器的h_vec向量和l_vec向量都为n位。参见图5a,若以寄存器
00
为当前寄存器,则寄存器
00
的h_vec
0,0
向量由当前寄存器(寄存器
00
)的h位字段的数值h
0,0
,以及当前寄存器(寄存器
00
)之前的n-1个寄存器(寄存器
0l-1
~寄存器
0l-n+1
)的h位字段的数值(h
0 l-1
~h
0 l-n+1
)生成当前寄存器的h_vec
0,0
向量;寄存器
00
的l_vec
0,0
向量由当前寄存器(寄存器
00
)之前的n个寄存器(寄存器
0l-1
~寄存器
0l-n
)的h位字段的数值(h
0 l-1
~h
0l-n
)生成当前寄存器的l_vec
0,0
向量。
[0053]
需要说明的是,多个哈希表寄存器组之间具有预先设定的写入顺序,如图2所示,写入数据时,先写入寄存器
00
,再依次写入寄存器
01
、寄存器
02
、寄存器
03
等等,因此在确定当前寄存器之前的寄存器时,也是按照该顺序来选取,也即:寄存器
03
之前的寄存器为寄存器
02
,寄存器
02
之前的寄存器为寄存器
01
,寄存器
01
之前的寄存器为寄存器
0l-1
,寄存器
0l-1
之前的寄存器为寄存器
0l-2
,以此类推。
[0054]
步骤三、将每个目标寄存器的h_vec向量与wr有效向量进行按位与操作,得到每个目标寄存器的第一向量,若第一向量中存在向量值为1,则将向量值为1对应的有效数据存储至对应的目标寄存器;将目标寄存器的l_vec向量与last向量进行按位与操作,得到第二向量,并对第二向量进行按位或操作,根据操作结果更新目标寄存器的h位字段的数值。
[0055]
需要说明的是,在本方案中,输入的每个目标数据组所对应的哈希地址确定之后,便可以通过输入数据的wr向量和last向量,结合哈希表中对应哈希地址链表中每个哈希表寄存器的h_vec和l_vec向量,将有效数据填入哈希表中并更新哈希表寄存器中的h位。具体来说,本方案在写入各个有效数据时,首先需要将当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量;判断第一向量中是否存在向量值为1;若否,则按照预定顺序从n个目标寄存器中确定下一个当前寄存器,继续执行将当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量的步骤;若是,则将向量值为1对应位置的有效数据写入当前寄存器的数据位字段,并按照预定顺序从n个目标寄存器中确定下一个当前寄存器,继续执行将当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量的步骤。进一步,本方案还需要将当前寄存器的l_vec向量与last向量进行按位与操作,得到第二向量;对第二向量中各向量值进行按位或操作,根据操作结果更新当前寄存器的h位字段的数值。
[0056]
在此为了清楚说明,将第一个目标数据组(数
0,0
和数
0,1
)写入过程为例对本方案进行说明。第一个目标数据组对应的哈希地址为0,对应的多个目标寄存器为:寄存器
00
、~寄存器
0n-1
,也即:第一个目标数据组的有效数据将要填入哈希表中的第0行链表;寄存器
00
、~寄存器
0n-1
中,只有寄存器
00
的h位字段为1,其他寄存器的h位字段均为0。参见图6a,为本发明实施例公开的写入哈希表寄存器
00
的计算过程示意图,参见图6b,为本发明实施例公开的写入哈希表寄存器
01
的计算过程示意图,参见图6c,为本发明实施例公开的写入哈希表寄存器
02
的计算过程示意图。对于每个哈希表寄存器,不仅需要更新数据位字段,还需要更新h位字段。其中,图6a、图6b和图6c中左侧计算过程为更新数据位字段,右侧计算过程为更新h位字段。
[0057]
具体来说,在更新数据位字段时,首先用哈希表寄存器的h_vec向量和wr向量进行按位与操作,得到按位与之后的向量,哪一位为1,则代表这一位对应的数据,将要填入该哈希表寄存器数据位字段,上图5中使用箭头和实线框进行了标注;如果按位与之后得到的向量没有一位为1,则表示该哈希表寄存器数据位字段不需要更新数据位。如:图6a中,当前寄存器为寄存器
00
,当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量中,只有第一个向量值为1,则代表需要将第一个有效数据数
0,0
写入当前寄存器
00
。图6b中,当前寄存器为寄存器
01
,当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量中,只有第二个向量值为1,则代表需要将第二个有效数据数
0,1
写入当前寄存器
01
。图6c中,当前寄存器为寄存器
02
,当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量中,没有向量值为1,当前寄存器
01
不写入任何数据,并且所有有效数据均写入对应的寄存器,结束写入流程。
[0058]
本方案更新h位字段时,首先用哈希表寄存器的l_vec向量和last向量进行按位与操作,然后将按位与得到的向量按位或,最终得到的结果便是该哈希寄存器h位字段需要更新的值。如:图6a中,当前寄存器为寄存器
00
,当前寄存器的l_vec向量与last向量进行按位与操作,得到第二向量,对第二向量中各向量值进行按位或操作,得到的操作结果为0,也即当前寄存器
00
的h位字段的数值为0。图6b中,当前寄存器为寄存器
01
,当前寄存器的l_vec向量与last向量进行按位与操作,得到第二向量,对第二向量中各向量值进行按位或操作,得到的操作结果为0,也即当前寄存器
01
的h位字段的数值为0。图6c中,当前寄存器为寄存器
02
,当前寄存器的l_vec向量与last向量进行按位与操作,得到第二向量,对第二向量中各向量值进行按位或操作,得到的操作结果为1,也即当前寄存器
02
的h位字段的数值为1。也就是说:哈希表第0行链表填入了两个数据,后续对应该哈希地址的数据需要被填入哈希表寄存器
02
,因此哈希表寄存器
02
的h位被更新为1。同理,每次写入请求,每个哈希表寄存器都按照上述方式进行写入判断,来完成数据的写入。
[0059]
综上可以看出,在本方案中,在硬件实现复杂度上较多ram哈希表结构以及多周期写入单ram哈希表结构都有明显降低,随着读写端口数目的增加,本方案相较于多ram哈希表结构所需的存储资源更少;本方案利用寄存器独立的特性,较多周期写入单ram哈希表结构,在性能和系统延迟方面都存在明显优势。
[0060]
下面对本发明实施例提供的数据存储装置、设备及存储介质进行介绍,下文描述的数据存储装置、设备及存储介质与上文描述的数据存储方法可以相互参照。
[0061]
参见图7,本发明实施例提供的一种基于寄存器的数据存储装置结构示意图,包括:
[0062]
第一确定模块11,用于确定多个哈希表寄存器组;其中,每个哈希表寄存器组具有与每个哈希地址对应的寄存器,每个寄存器包括h位字段,若h位字段为有效字段,则表示对应的寄存器为数据开始写入位置;
[0063]
第二确定模块12,用于确定待存储的多个目标数据组;其中,每个目标数据组中的每个有效数据具有相同的哈希地址;
[0064]
第三确定模块13,用于在存储目标数据组时,从多个哈希表寄存器组中确定与目标数据组的哈希地址对应的多个目标寄存器;
[0065]
存储模块14,用于将目标数据组的首个有效数据存储至h位字段为有效字段的目
标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄存器中,并更新目标寄存器的h位字段。
[0066]
其中,所述第二确定模块具体用于:根据每个待存储数据的哈希码值生成多个目标数据组;其中,每个目标数据组中的每个有效数据的哈希码值相同;根据每个目标数据组的哈希码值确定对应的哈希地址。
[0067]
其中,所述存储模块包括:
[0068]
第一确定单元,用于确定与目标数据组对应的wr有效向量和last向量;其中,所述wr有效向量的向量值为1代表目标数据组对应位置的数据为有效数据,所述last向量的向量值为1代表目标数据组的最后一个有效数据的位置;
[0069]
第二确定单元,用于确定每个目标寄存器的h_vec向量及l_vec向量;其中,h_vec向量为根据目标寄存器的h位字段的数值及目标寄存器之前的每个寄存器的h位字段的数值生成;l_vec向量为根据目标寄存器之前的每个寄存器的h位字段的数值生成;其中,h位字段的数值为0表示h位字段为有效字段;
[0070]
第一执行单元,用于将每个目标寄存器的h_vec向量与wr有效向量进行按位与操作,得到每个目标寄存器的第一向量,若第一向量中存在向量值为1,则将向量值为1对应的有效数据存储至对应的目标寄存器;
[0071]
第二执行单元,用于将目标寄存器的l_vec向量与last向量进行按位与操作,得到第二向量,并对所述第二向量进行按位或操作,根据操作结果更新目标寄存器的h位字段的数值。
[0072]
其中,所述第三确定模块具体用于:若多个目标数据组中的最多有效数据的数量为n,则在存储所述目标数据组时,从前n个哈希表寄存器组中,确定与所述目标数据组的哈希地址对应的n个目标寄存器。
[0073]
其中,所述第二确定单元,包括:
[0074]
确定子单元,用于按照预定顺序从n个目标寄存器中确定当前寄存器;所述预定顺序为各目标寄存器所在的哈希表寄存器组之间的写入顺序;
[0075]
第一生成子单元,用于根据当前寄存器的h位字段的数值,以及当前寄存器之前的n-1个寄存器的h位字段的数值生成当前寄存器的h_vec向量;
[0076]
第二生成子单元,用于根据当前寄存器之前的n个寄存器的h位字段的数值生成当前寄存器的l_vec向量。
[0077]
其中,所述第一执行单元包括:
[0078]
操作子单元,用于将当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量;
[0079]
判断子单元,用于判断所述第一向量中是否存在向量值为1;若否,则按照预定顺序从n个目标寄存器中确定下一个当前寄存器,继续执行所述将当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量的步骤;若是,则将向量值为1对应位置的有效数据写入当前寄存器的数据位字段,并按照预定顺序从n个目标寄存器中确定下一个当前寄存器,继续执行所述将当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量的步骤。
[0080]
其中,所述第二执行单元具体用于:将当前寄存器的l_vec向量与last向量进行按
位与操作,得到第二向量;对所述第二向量中各向量值进行按位或操作,根据操作结果更新当前寄存器的h位字段的数值。
[0081]
参见图8,为本发明实施例提供的一种电子设备结构示意图,包括:
[0082]
存储器21,用于存储计算机程序;
[0083]
处理器22,用于执行所述计算机程序时实现上述任意方法实施例所述的基于寄存器的数据存储方法的步骤。
[0084]
在本实施例中,设备可以是pc(personal computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机等终端设备。
[0085]
该设备可以包括存储器21、处理器22和总线23。
[0086]
其中,存储器21至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、磁性存储器、磁盘、光盘等。存储器21在一些实施例中可以是设备的内部存储单元,例如该设备的硬盘。存储器21在另一些实施例中也可以是设备的外部存储设备,例如设备上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,存储器21还可以既包括设备的内部存储单元也包括外部存储设备。存储器21不仅可以用于存储安装于设备的应用软件及各类数据,例如执行数据存储方法的程序代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
[0087]
处理器22在一些实施例中可以是一中央处理器(central processing unit,cpu)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器21中存储的程序代码或处理数据,例如执行数据存储方法的程序代码等。
[0088]
该总线23可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0089]
进一步地,设备还可以包括网络接口24,网络接口24可选的可以包括有线接口和/或无线接口(如wi-fi接口、蓝牙接口等),通常用于在该设备与其他电子设备之间建立通信连接。
[0090]
可选地,该设备还可以包括用户接口25,用户接口25可以包括显示器(display)、输入单元比如键盘(keyboard),可选的用户接口25还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organic light-emitting diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在设备中处理的信息以及用于显示可视化的用户界面。
[0091]
图8仅示出了具有组件21-25的设备,本领域技术人员可以理解的是,图8示出的结构并不构成对设备的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
[0092]
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意方法实施例所述的基于寄存器的数据存储方法的步骤。
[0093]
其中,该存储介质可以包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0094]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0095]
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
技术特征:
1.一种基于寄存器的数据存储方法,其特征在于,包括:确定多个哈希表寄存器组;其中,每个哈希表寄存器组具有与每个哈希地址对应的寄存器,每个寄存器包括h位字段,若h位字段为有效字段,则表示对应的寄存器为数据开始写入位置;确定待存储的多个目标数据组;其中,每个目标数据组中的每个有效数据具有相同的哈希地址;在存储目标数据组时,从多个哈希表寄存器组中确定与所述目标数据组的哈希地址对应的多个目标寄存器;将目标数据组的首个有效数据存储至h位字段为有效字段的目标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄存器中,并更新目标寄存器的h位字段。2.根据权利要求1所述的数据存储方法,其特征在于,所述确定待存储的多个目标数据组,包括:根据每个待存储数据的哈希码值生成多个目标数据组;其中,每个目标数据组中的每个有效数据的哈希码值相同;根据每个目标数据组的哈希码值确定对应的哈希地址。3.根据权利要求1所述的数据存储方法,其特征在于,所述将目标数据组的首个有效数据存储至h位字段为有效字段的目标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄存器中,并更新目标寄存器的h位字段,包括:确定与目标数据组对应的wr有效向量和last向量;其中,所述wr有效向量的向量值为1代表目标数据组对应位置的数据为有效数据,所述last向量的向量值为1代表目标数据组的最后一个有效数据的位置;确定每个目标寄存器的h_vec向量及l_vec向量;其中,h_vec向量为根据目标寄存器的h位字段的数值及目标寄存器之前的每个寄存器的h位字段的数值生成;l_vec向量为根据目标寄存器之前的每个寄存器的h位字段的数值生成;其中,h位字段的数值为0表示h位字段为有效字段;将每个目标寄存器的h_vec向量与wr有效向量进行按位与操作,得到每个目标寄存器的第一向量,若第一向量中存在向量值为1,则将向量值为1对应的有效数据存储至对应的目标寄存器;将目标寄存器的l_vec向量与last向量进行按位与操作,得到第二向量,并对所述第二向量进行按位或操作,根据操作结果更新目标寄存器的h位字段的数值。4.根据权利要求3所述的数据存储方法,其特征在于,所述在存储目标数据组时,从多个哈希表寄存器组中确定与所述目标数据组的哈希地址对应的多个目标寄存器,包括:若多个目标数据组中的最多有效数据的数量为n,则在存储所述目标数据组时,从前n个哈希表寄存器组中,确定与所述目标数据组的哈希地址对应的n个目标寄存器。5.根据权利要求4所述的数据存储方法,其特征在于,所述确定每个目标寄存器的h_vec向量及l_vec向量;其中,h_vec向量为根据目标寄存器的h位字段的数值及目标寄存器之前的每个寄存器的h位字段的数值生成;l_vec向量为根据目标寄存器之前的每个寄存器的h位字段的数值生成,包括:
按照预定顺序从n个目标寄存器中确定当前寄存器;其中,所述预定顺序为各目标寄存器所在的哈希表寄存器组之间的写入顺序;根据当前寄存器的h位字段的数值,以及当前寄存器之前的n-1个寄存器的h位字段的数值生成当前寄存器的h_vec向量;根据当前寄存器之前的n个寄存器的h位字段的数值生成当前寄存器的l_vec向量。6.根据权利要求5所述的数据存储方法,其特征在于,所述将每个目标寄存器的h_vec向量与wr有效向量进行按位与操作,得到每个目标寄存器的第一向量,若第一向量中存在向量值为1,则将向量值为1对应的有效数据存储至对应的目标寄存器,包括:将当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量;判断所述第一向量中是否存在向量值为1;若否,则按照预定顺序从n个目标寄存器中确定下一个当前寄存器,继续执行所述将当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量的步骤;若是,则将向量值为1对应位置的有效数据写入当前寄存器的数据位字段,并按照预定顺序从n个目标寄存器中确定下一个当前寄存器,继续执行所述将当前寄存器的h_vec向量与wr有效向量进行按位与操作,得到当前寄存器的第一向量的步骤。7.根据权利要求6所述的数据存储方法,其特征在于,所述将目标寄存器的l_vec向量与last向量进行按位与操作,得到第二向量,并对所述第二向量进行按位或操作,根据操作结果更新目标寄存器的h位字段的数值,包括:将当前寄存器的l_vec向量与last向量进行按位与操作,得到第二向量;对所述第二向量中各向量值进行按位或操作,根据操作结果更新当前寄存器的h位字段的数值。8.一种基于寄存器的数据存储装置,其特征在于,包括:第一确定模块,用于确定多个哈希表寄存器组;其中,每个哈希表寄存器组具有与每个哈希地址对应的寄存器,每个寄存器包括h位字段,若h位字段为有效字段,则表示对应的寄存器为数据开始写入位置;第二确定模块,用于确定待存储的多个目标数据组;其中,每个目标数据组中的每个有效数据具有相同的哈希地址;第三确定模块,用于在存储目标数据组时,从多个哈希表寄存器组中确定与所述目标数据组的哈希地址对应的多个目标寄存器;存储模块,用于将目标数据组的首个有效数据存储至h位字段为有效字段的目标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄存器中,并更新目标寄存器的h位字段。9.一种电子设备,其特征在于,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现如权利要求1至7任一项所述的基于寄存器的数据存储方法的步骤。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的基于寄存器的数
据存储方法的步骤。
技术总结
本发明公开了一种基于寄存器的数据存储方法、装置、设备及存储介质;在本方案中,基于多个哈希表寄存器组搭建哈希表,在存储具有相同哈希地址的目标数据组时,首先查找与目标数据组的哈希地址对应的多个目标寄存器;然后将目标数据组的首个有效数据存储至h位字段为有效字段的目标寄存器中,将目标数据组中的其他有效数据依次存储至首个有效数据所存储的目标寄存器之后的目标寄存器中,并更新目标寄存器的h位字段。可见,本方案利用寄存器之间读写互不影响相对独立的特点,可基于寄存器搭建的哈希表完成单周期多个寄存器同时写操作,既降低了存储资源的消耗,又保证了系统处理的延迟和性能。和性能。和性能。
技术研发人员:张磊 魏永哲 袁涛 李树青
受保护的技术使用者:山东云海国创云计算装备产业创新中心有限公司
技术研发日:2021.11.26
技术公布日:2022/3/8