一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

算子执行方法、装置、电子设备及存储介质与流程

2022-10-13 05:03:50 来源:中国专利 TAG:


1.本发明实施例涉及计算机技术领域,尤其涉及一种算子执行方法、装置、电子设备及存储介质。


背景技术:

2.现代硬件的发展为内存数据库执行数据带来新的挑战,多核或者众核机器提升计算速度,但是数据库算子由于没有复杂的计算,且cpu core(处理核)访问内存的延迟跟计算延迟的差距越拉越大,即内存墙越来越厚,使得数据库算子执行速度的提升受到了限制。
3.实际应用中,数据库算子执行瓶颈并不唯一,可包括cache misses(缓存未命中)、branch misses(分支预测未命中),以及tlb(translation lookaside buffer,页表缓冲器) misses,三者像是木桶原理一样,当把其中一个降低之后,另外两个则会成为数据库中的算子执行瓶颈,依然无法提升数据库算子的执行速度。


技术实现要素:

4.鉴于此,为解决现有技术中无法提升数据库算子执行速度的技术问题,本发明实施例提供一种算子执行方法、装置、电子设备及存储介质。
5.第一方面,本发明实施例提供一种算子执行方法,所述方法包括:确定待处理的目标数据表以及待执行的目标算子;将所述目标数据表进行分区,得到多个表数据分区;针对每个所述表数据分区,启动至少一个第一线程,其中,每个所述第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到所述表数据分区对应的哈希表,每个所述第一协程利用单指令多数据流执行所述数据项处理操作;基于每个所述表数据分区的所述哈希表执行所述目标算子。
6.在一个可能的实施方式中,所述将所述目标数据表进行分区,得到多个表数据分区,包括:根据数据项key值的比特位数以及设定的数据容量阈值对所述目标数据表进行分区,得到多个表数据分区,其中,每个所述表数据分区中的数据容量不超过所述数据容量阈值且同一所述表数据分区中数据项key值的比特位数相同。
7.在一个可能的实施方式中,所述数据容量阈值通过以下方式设定:根据所述目标算子的算子类型、页表缓存器tlb对应的数据容量,以及末级高速缓存llc对应的数据容量,确定所述数据容量阈值。
8.在一个可能的实施方式中,所述启动至少一个第一线程,包括:根据所述目标算子的算子类型,确定目标线程数量,所述目标线程数量为不小于1的整数;按照所述目标线程数量启动第一线程。
9.在一个可能的实施方式中,所述根据所述目标算子的算子类型,确定目标线程数
量,包括:在所述目标算子为第一类型算子的情况下,确定所述目标线程数量为一个,其中,所述第一类型算子的执行过程包括两个或两个以上执行阶段;在所述目标算子为第二类型算子的情况下,确定所述目标线程数量为两个或两个以上,其中,所述第二类型算子的执行过程包括一个执行阶段。
10.在一个可能的实施方式中,所述基于每个所述表数据分区的所述哈希表执行所述目标算子,包括:在所述目标算子为第二类型算子的情况下,将两个或者两个以上所述第一线程执行时得到的所述哈希表进行合并,得到合并哈希表;基于所述合并哈希表执行所述目标算子。
11.在一个可能的实施方式中,所述数据项处理操作包括两个或两个以上数据项处理子操作,所述第一线程通过以下方式实现启动多个第一协程交替执行所述数据项处理操作:创建多个第一协程;顺次针对每个所述数据项处理子操作,轮询所述多个第一协程,通过轮询到的所述第一协程执行所述数据项处理子操作。
12.在一个可能的实施方式中,所述通过轮询到的所述第一协程执行所述数据项处理子操作,包括:从表数据分区中选取n个未处理的数据项,所述n为预设的正整数;通过轮询到的所述第一协程对所述n个未处理的数据项执行所述数据项处理子操作。
13.在一个可能的实施方式中,所述基于每个所述表数据分区的所述哈希表执行所述目标算子,包括:基于每个所述表数据分区的所述哈希表,利用单指令多数据流执行所述目标算子。
14.在一个可能的实施方式中,在所述目标算子为哈希连接算子的情况下,所述目标数据表包括第一数据表和第二数据表,所述将所述目标数据表进行分区,得到多个表数据分区,包括:将所述第一数据表进行分区,得到多个第一表数据分区,以及将所述第二数据表进行分区,得到多个第二表数据分区;所述基于每个所述表数据分区的所述哈希表,利用单指令多数据流执行所述目标算子,包括:针对每个所述第二表数据分区的第二哈希表,启动一个第二线程,其中,所述第二线程启动多个第二协程交替执行预设的算子执行操作,每个所述第二协程利用单指令多数据流执行所述算子执行操作。
15.在一个可能的实施方式中,所述第二协程利用单指令多数据流执行所述算子执行操作,包括:从所述第二哈希表中选取m个第二哈希值;针对所述m个第二哈希值中的每个第二哈希值,从满足预设条件的第一哈希表中
查找与所述第二哈希值相匹配的目标第一哈希值;在从所述第一哈希表中查找到所述目标第一哈希值的情况下,将所述目标第一哈希值对应的数据项与所述第二哈希值对应的数据项连接。
16.第二方面,本发明实施例提供一种算子执行装置,包括:确定模块,用于确定待处理的目标数据表以及待执行的目标算子;分区模块,用于将所述目标数据表进行分区,得到多个表数据分区;启动模块,用于针对每个所述表数据分区,启动至少一个第一线程,其中,每个所述第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到所述表数据分区对应的哈希表,每个所述第一协程利用单指令多数据流执行所述数据项处理操作;执行模块,用于基于每个所述表数据分区的所述哈希表执行所述目标算子。
17.在一个可能的实施方式中,所述分区模块,包括:第一分区子模块,用于根据数据项key值的比特位数以及设定的数据容量阈值对所述目标数据表进行分区,得到多个表数据分区,其中,每个所述表数据分区中的数据容量不超过所述数据容量阈值且同一所述表数据分区中数据项key值的比特位数相同。
18.在一个可能的实施方式中,所述第一分区子模块具体用于:所述数据容量阈值通过以下方式设定:根据所述目标算子的算子类型、页表缓存器tlb对应的数据容量,以及末级高速缓存llc对应的数据容量,确定所述数据容量阈值。
19.在一个可能的实施方式中,所述启动模块,包括:第一确定子模块,用于根据所述目标算子的算子类型,确定目标线程数量,所述目标线程数量为不小于1的整数;第一启动子模块,用于按照所述目标线程数量启动第一线程。
20.在一个可能的实施方式中,所述第一确定子模块,具体用于:在所述目标算子为第一类型算子的情况下,确定所述目标线程数量为一个,其中,所述第一类型算子的执行过程包括两个或两个以上执行阶段;在所述目标算子为第二类型算子的情况下,确定所述目标线程数量为两个或两个以上,其中,所述第二类型算子的执行过程包括一个执行阶段。
21.在一个可能的实施方式中,所述执行模块,包括:合并子模块,用于在所述目标算子为第二类型算子的情况下,将两个或者两个以上所述第一线程执行时得到的所述哈希表进行合并,得到合并哈希表;执行子模块,用于基于所述合并哈希表执行所述目标算子。
22.在一个可能的实施方式中,所述数据项处理操作包括两个或两个以上数据项处理子操作,所述启动模块,包括:创建子模块,用于创建多个第一协程;轮询子模块,用于顺次针对每个所述数据项处理子操作,轮询所述多个第一协程,通过轮询到的所述第一协程执行所述数据项处理子操作。
23.在一个可能的实施方式中,所述轮询子模块,具体用于:从表数据分区中选取n个未处理的数据项,所述n为预设的正整数;通过轮询到的所述第一协程对所述n个未处理的数据项执行所述数据项处理子操
作。
24.在一个可能的实施方式中,所述执行模块,具体用于:基于每个所述表数据分区的所述哈希表,利用单指令多数据流执行所述目标算子。
25.在一个可能的实施方式中,所述分区模块,具体用于:在所述目标算子为哈希连接算子的情况下,所述目标数据表包括第一数据表和第二数据表,将所述第一数据表进行分区,得到多个第一表数据分区,以及将所述第二数据表进行分区,得到多个第二表数据分区;所述执行模块,包括:第二启动子模块,用于针对每个所述第二表数据分区的第二哈希表,启动一个第二线程,其中,所述第二线程启动多个第二协程交替执行预设的算子执行操作,每个所述第二协程利用单指令多数据流执行所述算子执行操作。
26.在一个可能的实施方式中,所述第二启动子模块,具体用于:从所述第二哈希表中选取m个第二哈希值;针对所述m个第二哈希值中的每个第二哈希值,从满足预设条件的第一哈希表中查找与所述第二哈希值相匹配的目标第一哈希值;在从所述第一哈希表中查找到所述目标第一哈希值的情况下,将所述目标第一哈希值对应的数据项与所述第二哈希值对应的数据项连接。
27.第三方面,本发明实施例提供一种电子设备,包括:处理器和存储器,所述处理器用于执行所述存储器中存储的一种算子执行程序,以实现第一方面中任一项所述的算子执行方法。
28.第四方面,本发明实施例提供一种存储介质,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现第一方面中任一项所述的算子执行方法。
29.本发明实施例提供的技术方案,通过确定待处理的目标数据表以及待处理的目标算子,将目标数据表进行分区,得到多个表数据分区,针对每个表数据分区,启动至少一个第一线程,其中,每个第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到表数据分区对应的哈希表,每个第一协程利用单指令多数据流执行上述数据项处理操作,基于每个表数据分区的哈希表执行上述目标算子。在这一技术方案中,通过将目标数据表进行分区,可将分布在多个数据页面的相同数值的数据项聚集到一个页面,降低运行时所需要访问的页面数量,减少了tlb misses,通过每个第一线程启动多个第一协程交替执行预设的数据项处理操作,可利用第一协程的交替执行进而减少cache misses,同时,在处理每个表数据分区的数据项时利用单指令多数据流,而单指令多数据流的向量代码避免了标量代码中的分支,从而可减少branch misses。实现了同时降低多个数据库算子执行瓶颈,提高了数据库算子的执行性能。
附图说明
30.图1为本发明实施例提供的一种算子执行方法的实施例流程图;图2为本发明实施例提供的另一种算子执行方法的实施例流程图;
图3为本发明实施例提供的一种多个第一协程交替执行数据项处理子操作的流程示意图;图4为本发明实施例提供的又一种算子执行方法的实施例流程图;图5为本发明实施例提供的一种多个哈希表合并的流程示意图;图6为本发明实施例提供的再一种算子执行方法的实施例流程图;图7为本发明实施例提供的一种算子执行操作的流程示意图;图8为本发明实施例提供的一种算子执行装置的实施例框图;图9为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
31.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
32.下面结合附图以具体实施例对本发明提供的算子执行方法做进一步的解释说明,实施例并不构成对本发明实施例的限定。
33.参见图1,为本发明实施例提供的一种算子执行方法的实施例流程图。如图1所示,该流程可包括以下步骤:步骤101、确定待处理的目标数据表以及待执行的目标算子。
34.上述目标数据表可为数据库中待进行处理的数据表。
35.上述目标算子可为在数据库对目标数据表进行处理的过程中涉及的算子,该算子可包括但不限于以下一种或几种:project(投影)算子、filter(过滤)算子、join(连接)算子,以及aggregation(聚合)算子等。
36.在一实施例中,本发明实施例的执行主体可从待执行的sql(structured query language,结构化查询语言)语句中确定待处理的目标数据表以及待执行的目标算子。
37.举个例子,假设待执行的sql语句为“select * from test1 t1 join test1 t2 on t1.a= t2.a”,由该sql语句可知,上述待处理的目标数据表为test1和test2,上述待执行的目标算子为join(连接)算子。
38.步骤102、将目标数据表进行分区,得到多个表数据分区。
39.本发明实施例中,为了降低算子执行瓶颈tlb misses,可将目标数据表进行分区,从而得到多个表数据分区。
40.作为一个可选的实现方式,可根据数据项key值的比特位数以及设定的数据容量阈值对上述目标数据表进行分区,得到多个表数据分区,其中,每个表数据分区中的数据容量不超过数据容量阈值,且同一表数据分区中数据项key值的比特位数相同。
41.需要说明的是,上述相同可以指比特位数一致,也可以指比特位数在同一预设区间(例如1~4)内,在此不做具体限制。
42.在一实施例中,上述数据容量阈值可根据目标算子的算子类型、tlb对应的数据容量,以及llc(last level cache,末级高速缓存)对应的数据容量来确定。
43.可选的,在上述目标算子的算子类型为第一类型算子的情况下,该第一类型算子
是指包括两个或者两个以上的执行阶段的算子,例如hash join(哈希连接)算子,相应的数据容量阈值s可通过以下式(一)计算得出:式(一)其中,上述tlb num为tlb中页表的数量,上述tlb entry为tlb中每个页表的数据容量,上述llc size则为llc对应的数据容量。
44.在上述目标算子的算子类型为第二类型算子的情况下,该第二类型算子是指包括一个执行阶段的算子,例如hash aggregation(哈希聚合)算子,相应的数据容量阈值s可通过以下式(二)计算得出:式(二)步骤103、针对每个表数据分区,启动至少一个第一线程,其中,每个第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到表数据分区对应的哈希表,每个第一协程利用单指令多数据流执行上述数据项处理操作。
45.上述第一线程用于处理该第一线程对应的表数据分区中的数据项,当同时启动两个或两个以上第一线程时,该两个或两个以上第一线程则并行处理其对应的上述表数据分区中的数据项。
46.其中,每个第一线程可包括多个串行的第一协程,该第一协程可利用单指令多数据流对上述表数据分区中的多个数据项同时进行处理操作,得到每个表数据分区对应的哈希表。
47.本发明实施例中,上述单指令多数据流指以同步方式,在同一时间内针对多个数据项执行同一条指令,即simd。
48.在一实施例中,针对每个表数据分区,可启动至少一个第一线程,其中,为了降低数据库的算子执行瓶颈cache misses,每个第一线程可启动多个第一协程交替执行预设的数据项处理操作,以得到表数据分区对应的哈希表。
49.具体第一线程是如何启动多个第一协程交替执行预设的数据项处理操作的,可在下文通过图2所示流程进行说明,此处先不详述。
50.步骤104、基于每个表数据分区的哈希表执行上述目标算子。
51.在一实施例中,在执行上述目标算子时,可基于每个表数据分区的哈希表,利用单指令多数据流执行上述目标算子。由于上述单指令多数据流中的向量代码避免了标量代码中的分支,从而可减少数据库算子执行瓶颈branch misses。
52.本发明实施例提供的技术方案,通过确定待处理的目标数据表以及待处理的目标算子,将目标数据表进行分区,得到多个表数据分区,针对每个表数据分区,启动至少一个第一线程,其中,每个第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到表数据分区对应的哈希表,每个第一协程利用单指令多数据流执行上述数据项处理操作,基于每个表数据分区的哈希表执行上述目标算子。在这一技术方案中,通过将目标数据表进行分区,可将分布在多个数据页面的相同数值的数据项聚集到一个页面,降低运行时所需要访问的页面数量,减少了tlb misses,通过每个第一线程启动多个第一协程交替执行预设的数据项处理操作,可利用第一协程的交替执行进而减少cache misses,同时,在处理每个表数据分区的数据项时利用单指令多数据流,而单指令多数据流的向量代码避免了标量代码中的分支,从而可减少branch misses。由此实现了降低数据库算子执行瓶颈,提高
了数据库算子的执行性能。
53.参见图2,为本发明实施例提供的另一种算子执行方法的实施例流程图。该图2所示流程在上述图1所示流程的基础上,着重描述在数据项处理操作包括两个或两个以上数据项处理子操作的情况下,第一线程是如何启动多个第一协程交替执行预设的数据项处理操作的。如图2所示,该流程可包括以下步骤:步骤201、确定待处理的目标数据表以及待执行的目标算子。
54.步骤202、将目标数据表进行分区,得到多个表数据分区。
55.步骤201和步骤202的详细描述可参见步骤101和步骤102中的描述,此处不再赘述。
56.步骤203、针对每个表数据分区,启动至少一个第一线程,其中,每个第一线程创建多个第一协程,并顺次针对每个数据项处理子操作,轮询多个第一协程,通过轮询到的第一协程执行数据项处理子操作,以得到表数据分区对应的哈希表。
57.上述数据项处理操作可包括两个或者两个以上的数据项处理子操作,例如,在哈希连接算子中,对表数据分区中的数据项处理并构建每个表数据分区的哈希表时,可包括两个数据项处理子操作:第一数据项处理子操作和第二数据项处理子操作。
58.其中,第一数据项处理子操作可包括以下步骤:利用单指令多数据流同时读取n个数据项的key值,并计算该n个key值的哈希值,之后,调用数据预取指令,读取每个哈希值对应的数据项的value值;第二数据项处理子操作可包括以下步骤:将每个数据项key值的哈希值写入哈希表中。
59.再例如,在哈希聚合算子中,对表数据分区中的数据项处理并构建每个表数据分区的哈希表时,可包括两个数据项处理子操作:第一数据项处理子操作和第二数据项处理子操作。
60.其中,第一数据项处理子操作可包括以下步骤:利用单指令多数据流同时读取n个数据项的key值,并计算该n个key值的哈希值,之后,调用数据预取指令,读取每个哈希值对应的数据项的value值;第二数据项处理子操作包括以下步骤:针对每个数据项,判断是否存在与该数据项key值相同的目标数据项,若存在该目标数据项,则不将上述数据项key值写入哈希表中,而是更新哈希表中该值对应的聚集项;若不存在该目标数据项,则将上述数据项key值写入哈希表中,并且初始化该值对应的聚集项。
61.在一实施例中,针对每个表数据分区,可启动至少一个第一线程,每个第一线程可创建多个第一协程,并顺次针对每个数据项处理子操作,轮询多个第一协程,通过轮询到的第一协程执行数据项处理子操作,以得到表数据分区对应的哈希表。
62.可选的,在通过轮询到的第一协程执行数据项处理子操作时,可从表数据分区中选取n个未处理的数据项,并通过轮询到的第一协程对n个未处理的数据项执行上述数据项处理子操作,上述n为预设的正整数。
63.举个例子,参见图3,为本发明实施例提供的一种多个第一协程交替执行数据项处理子操作的流程示意图。如图3所示,每个方框可代表一个未处理的数据项,白色区域可代表第一数据项处理子操作,黑色区域可代表第二数据项处理子操作。
64.由图3可知,在第一协程1执行完第一数据项处理子操作后,可暂停第一协程1,并启动第一协程2,利用第一协程2执行第一数据项处理子操作,在第一协程2执行完第一数据
项处理子操作后,可暂停第一协程2,并启动其他第一协程,依次类推,可针对第一数据项处理子操作轮询其他第一协程。
65.之后,在第一协程1重新开启之后,可利用第一协程1执行第二数据项处理子操作,并在第一协程1执行完成上述第二数据项处理子操作后,暂停第一协程1,启动第一协程2,并利用第一协程2执行第二数据项处理子操作,依次类推,可针对第二数据项处理子操作轮询其他第一协程,直至构建完成表数据分区对应的哈希表。
66.步骤204、基于每个表数据分区的哈希表执行目标算子。
67.步骤204中的详细描述可参见步骤104中的描述,此处不再赘述。
68.本发明实施例提供的技术方案,通过上述第一协程利用单指令多数据流同时针对多个数据项交替执行数据项处理操作,可有效降低数据库算子执行瓶颈cache misses和branch misses,进而提高了数据库算子的执行性能。
69.参见图4,为本发明实施例提供的又一种算子执行方法的实施例流程图。如图4所示,该流程可包括以下步骤:步骤401、确定待处理的目标数据表以及待执行的目标算子。
70.步骤402、将目标数据表进行分区,得到多个表数据分区。
71.步骤401和步骤402的详细描述可参见步骤101和步骤102的描述,此处不再赘述。
72.步骤403、针对每个表数据分区,根据目标算子的算子类型,确定目标线程数量,上述目标线程数量为不小于1的整数。
73.步骤404、按照目标线程数量启动第一线程,其中,每个第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到表数据分区对应的哈希表,每个第一协程利用单指令多数据流执行数据项处理操作。
74.步骤405、基于每个表数据分区的哈希表执行目标算子。
75.以下对步骤403~步骤405进行统一说明:上述算子类型可根据目标算子在执行过程中的执行阶段确定,例如,当目标算子的执行过程包括两个或两个以上执行阶段时,可将该目标算子确定为第一类型算子,例如哈希连接算子的执行过程包括建立阶段和探测阶段两个阶段,所以该哈希连接算子为第一类型算子;当目标算子的执行过程包括一个执行阶段时,可将该目标算子确定为第二类型算子,例如哈希聚合算子的执行过程仅包括一个执行阶段,所以该哈希聚合算子为第二类型算子。
76.在一实施例中,在上述目标算子为第一类型算子的情况下,可确定目标线程数量为一个;在上述目标算子为第二类型算子的情况下,可确定目标线程数量为两个或两个以上。
77.之后,可按照上述目标线程数量启动第一线程。
78.基于此,在目标算子为第二类型算子(例如哈希聚合算子)的情况下,由步骤404的描述可知,每个第一线程可得到一个哈希表,那么,当启动两个或两个以上第一线程时,可得到两个或两个以上哈希表,此时可将该两个或两个以上第一线程执行时得到的哈希表进行合并,得到合并哈希表。之后,可基于该合并哈希表执行上述目标算子。
79.具体的,在将两个或两个以上第一线程执行时得到的哈希表进行合并时,可将每个哈希表中哈希值相同的哈希桶合并到任一个哈希表对应的哈希桶中,参见图5,为本发明
实施例提供的一种多个哈希表合并的流程示意图,如图5所示,针对该表数据分区同时启动了4个第一线程:第一线程1、第一线程2、第一线程3,以及第一线程4,其中,每个第一线程可互斥遍历一个表数据分区的分区数据,每个第一线程可构建一个哈希表,将每个哈希表中相同位置(例如每个哈希表的最后一个哈希桶)处的哈希桶合并到第一线程4构建的哈希表的哈希桶中,可得到合并哈希表。
80.本发明实施例提供的技术方案,通过进一步根据目标算子的算子类型,确定目标线程数量,并按照目标线程数量启动第一线程,每个第一线程启动多个第一协程交替执行预设的数据项处理操作。这一技术方案,通过根据目标算子的算子类型启动不同数量的第一线程,避免了针对两个或两个以上执行阶段的目标算子,若开启第一线程较多,则需要对多个第一线程生成的多个哈希表进行合并,反而造成算子执行性能的下降,同时针对一个执行阶段的目标算子,开启多个第一线程可提高算子的执行性能。从而实现了提升数据库算子执行性能。
81.参见图6,为本发明实施例提供的再一种算子执行方法的实施例流程图。如图6所示,该流程可包括以下步骤:步骤601、确定待处理的目标数据表以及待执行的目标算子。
82.步骤601的详细描述可参见步骤101中的描述,此处不再赘述。
83.步骤602、在目标算子为哈希连接算子的情况下,将第一数据表进行分区,得到多个第一表数据分区,以及将第二数据表进行分区,得到多个第二表数据分区。
84.步骤603、针对每个表数据分区,启动一个第一线程,其中,第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到每个表数据分区对应的哈希表。
85.以下对步骤602和步骤603进行统一说明:上述哈希连接算子的执行过程可包括两个执行阶段:建立阶段和探测阶段。
86.相应的,上述目标数据表可包括第一数据表和第二数据表,基于此,在将目标数据表进行分区时,可将第一数据表进行分区,得到多个第一表数据分区,以及将第二数据表进行分区,得到多个第二表数据分区。
87.由图4的描述可知,当目标算子为哈希连接算子时,针对每个表数据分区可启动一个第一线程,该第一线程可启动多个第一协程交替执行预设的数据项处理操作,从而得到每个表数据分区对应的哈希表。由此,针对上述每个第一表数据分区和第二表数据分区,可分别得到对应的第一哈希表和第二哈希表。
88.步骤604、针对每个第二表数据分区的第二哈希表,启动一个第二线程,其中,第二线程启动多个第二协程交替执行预设的算子执行操作,每个第二协程利用单指令多数据流执行上述算子执行操作。
89.由图4的描述可知,当目标算子为哈希连接算子,也即目标算子的算子类型为第一类型算子时,针对每个表数据分区可启动一个线程(为便于区分,以下称为“第二线程”)。
90.基于此,针对每个表数据分区的第二哈希表,可启动一个第二线程来对该第二哈希表进行处理,其中,该第二线程可启动多个协程(为便于区分,以下称为第二协程)交替执行预设的算子执行操作,每个第二协程可利用单指令多数据流执行上述算子执行操作。具体第二线程是如何启动多个第二协程交替执行预设的算子执行操作的,可参考上述图2中的描述,这里不再赘述。
misses。实现了在目标算子的执行过程包括多个执行阶段时,可在每个执行阶段降低数据库算子的三个执行瓶颈,从而实现提升了数据库算子的执行性能。
100.参见图8,为本发明实施例提供的一种算子执行装置的实施例框图。如图7所示,该装置包括:确定模块81,用于确定待处理的目标数据表以及待执行的目标算子;分区模块82,用于将所述目标数据表进行分区,得到多个表数据分区;启动模块83,用于针对每个所述表数据分区,启动至少一个第一线程,其中,每个所述第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到所述表数据分区对应的哈希表,每个所述第一协程利用单指令多数据流执行所述数据项处理操作;执行模块84,用于基于每个所述表数据分区的所述哈希表执行所述目标算子。
101.在一个可能的实施方式中,所述分区模块82,包括:第一分区子模块,用于根据数据项key值的比特位数以及设定的数据容量阈值对所述目标数据表进行分区,得到多个表数据分区,其中,每个所述表数据分区中的数据容量不超过所述数据容量阈值且同一所述表数据分区中数据项key值的比特位数相同。
102.在一个可能的实施方式中,所述第一分区子模块具体用于:所述数据容量阈值通过以下方式设定:根据所述目标算子的算子类型、页表缓存器tlb对应的数据容量,以及末级高速缓存llc对应的数据容量,确定所述数据容量阈值。
103.在一个可能的实施方式中,所述启动模块83,包括:第一确定子模块,用于根据所述目标算子的算子类型,确定目标线程数量,所述目标线程数量为不小于1的整数;第一启动子模块,用于按照所述目标线程数量启动第一线程。
104.在一个可能的实施方式中,所述第一确定子模块,具体用于:在所述目标算子为第一类型算子的情况下,确定所述目标线程数量为一个,其中,所述第一类型算子的执行过程包括两个或两个以上执行阶段;在所述目标算子为第二类型算子的情况下,确定所述目标线程数量为两个或两个以上,其中,所述第二类型算子的执行过程包括一个执行阶段。
105.在一个可能的实施方式中,所述执行模块84,包括:合并子模块,用于在所述目标算子为第二类型算子的情况下,将两个或者两个以上所述第一线程执行时得到的所述哈希表进行合并,得到合并哈希表;执行子模块,用于基于所述合并哈希表执行所述目标算子。
106.在一个可能的实施方式中,所述数据项处理操作包括两个或两个以上数据项处理子操作,所述启动模块83,包括:创建子模块,用于创建多个第一协程;轮询子模块,用于顺次针对每个所述数据项处理子操作,轮询所述多个第一协程,通过轮询到的所述第一协程执行所述数据项处理子操作。
107.在一个可能的实施方式中,所述轮询子模块,具体用于:从表数据分区中选取n个未处理的数据项,所述n为预设的正整数;通过轮询到的所述第一协程对所述n个未处理的数据项执行所述数据项处理子操
作。
108.在一个可能的实施方式中,所述执行模块84,具体用于:基于每个所述表数据分区的所述哈希表,利用单指令多数据流执行所述目标算子。
109.在一个可能的实施方式中,所述分区模块82,具体用于:在所述目标算子为哈希连接算子的情况下,所述目标数据表包括第一数据表和第二数据表,将所述第一数据表进行分区,得到多个第一表数据分区,以及将所述第二数据表进行分区,得到多个第二表数据分区;所述执行模块84,包括:第二启动子模块,用于针对每个所述第二表数据分区的第二哈希表,启动一个第二线程,其中,所述第二线程启动多个第二协程交替执行预设的算子执行操作,每个所述第二协程利用单指令多数据流执行所述算子执行操作。
110.在一个可能的实施方式中,所述第二启动子模块,具体用于:从所述第二哈希表中选取m个第二哈希值;针对所述m个第二哈希值中的每个第二哈希值,从满足预设条件的第一哈希表中查找与所述第二哈希值相匹配的目标第一哈希值;在从所述第一哈希表中查找到所述目标第一哈希值的情况下,将所述目标第一哈希值对应的数据项与所述第二哈希值对应的数据项连接。
111.图9为本发明实施例提供的一种电子设备的结构示意图,图9所示的电子设备900包括:至少一个处理器901、存储器902、至少一个网络接口904和用户接口903。电子设备900中的各个组件通过总线系统905耦合在一起。可理解,总线系统905用于实现这些组件之间的连接通信。总线系统905除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图9中将各种总线都标为总线系统905。
112.其中,用户接口903可以包括显示器、键盘或者点击设备(例如,鼠标,轨迹球(trackball)、触感板或者触摸屏等)。
113.可以理解,本发明实施例中的存储器902可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(static ram,sram)、动态随机存取存储器(dynamic ram,dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double datarate sdram,ddrsdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synchlink dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,drram)。本文描述的存储器902旨在包括但不限于这些和任意其它适合类型的存储器。
114.在一些实施方式中,存储器902存储了如下的元素,可执行单元或者数据结构,或者他们的子集,或者他们的扩展集:操作系统9021和应用程序9022。
115.其中,操作系统9021,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序9022,包含各种应用程序,例如媒体播放器(media player)、浏览器(browser)等,用于实现各种应用业务。实现本发明实施例方法的程序可以包含在应用程序9022中。
116.在本发明实施例中,通过调用存储器902存储的程序或指令,具体的,可以是应用程序9022中存储的程序或指令,处理器901用于执行各方法实施例所提供的方法步骤,例如包括:确定待处理的目标数据表以及待执行的目标算子;将所述目标数据表进行分区,得到多个表数据分区;针对每个所述表数据分区,启动至少一个第一线程,其中,每个所述第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到所述表数据分区对应的哈希表,每个所述第一协程利用单指令多数据流执行所述数据项处理操作;基于每个所述表数据分区的所述哈希表执行所述目标算子。
117.上述本发明实施例揭示的方法可以应用于处理器901中,或者由处理器901实现。处理器901可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器901中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器901可以是通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器902,处理器901读取存储器902中的信息,结合其硬件完成上述方法的步骤。
118.可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(application specific integrated circuits,asic)、数字信号处理器(digital signal processing,dsp)、数字信号处理设备(dsp device,dspd)、可编程逻辑设备(programmable logic device,pld)、现场可编程门阵列(field-programmable gate array,fpga)、通用处理器、控制器、微控制器、微处理器、用于执行本技术所述功能的其它电子单元或其组合中。
119.对于软件实现,可通过执行本文所述功能的单元来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
120.本实施例提供的电子设备可以是如图9中所示的电子设备,可执行如图1、图2、图4,以及图6-7中算子执行方法的所有步骤,进而实现图1、图2、图4,以及图6-7中算子执行方法的技术效果,具体请参照图1、图2、图4,以及图6-7相关描述,为简洁描述,在此不作赘述。
121.本发明实施例还提供了一种存储介质(计算机可读存储介质)。这里的存储介质存储有一个或者多个程序。其中,存储介质可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘;存储器
还可以包括上述种类的存储器的组合。
122.当存储介质中一个或者多个程序可被一个或者多个处理器执行,以实现上述在电子设备侧执行的算子执行方法。
123.所述处理器用于执行存储器中存储的算子执行程序,以实现以下在电子设备侧执行的算子执行方法的步骤:确定待处理的目标数据表以及待执行的目标算子;将所述目标数据表进行分区,得到多个表数据分区;针对每个所述表数据分区,启动至少一个第一线程,其中,每个所述第一线程启动多个第一协程交替执行预设的数据项处理操作,以得到所述表数据分区对应的哈希表,每个所述第一协程利用单指令多数据流执行所述数据项处理操作;基于每个所述表数据分区的所述哈希表执行所述目标算子。
124.专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
125.结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
126.以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献