CN114090592A - 一种数据处理方法、装置、设备及可读存储介质 - Google Patents
一种数据处理方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN114090592A CN114090592A CN202210077002.5A CN202210077002A CN114090592A CN 114090592 A CN114090592 A CN 114090592A CN 202210077002 A CN202210077002 A CN 202210077002A CN 114090592 A CN114090592 A CN 114090592A
- Authority
- CN
- China
- Prior art keywords
- fpga
- data structure
- original
- operand
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 16
- 238000013507 mapping Methods 0.000 claims abstract description 66
- 230000014509 gene expression Effects 0.000 claims abstract description 64
- 238000000034 method Methods 0.000 claims description 30
- 239000000872 buffer Substances 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 7
- 230000000694 effects Effects 0.000 abstract description 2
- 238000004364 calculation method Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 11
- 230000001133 acceleration Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Abstract
本申请公开了一种数据处理方法、装置、设备及可读存储介质。本申请将目标表达式转换为二叉树加链表的数据结构后,为该数据结构的每个节点的操作数分配不同的FPGA缓存区,并标记该数据结构中的原始节点;然后创建原始操作数映射表,针对数据结构的每个层分别生成指令,将原始操作数映射表和生成的指令发送至FPGA,FPGA根据原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取原始节点对应的FPGA缓存区中的原始操作数后,从数据结构的底层开始并行处理数据结构中处于同一层的操作码,从而针对同一层的操作码并行处理,因此提升了表达式并行处理效率。本申请提供的一种数据处理装置、设备及可读存储介质,也同样具有上述技术效果。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种数据处理方法、装置、设备及可读存储介质。
背景技术
在传统的CPU(Central Processing Unit,中央处理器)编码方案中,数据库可以将表达式编码为二叉树加链表的数据结构,并通过对二叉树加链表的数据结构的遍历串行处理各个节点的操作码。尽管CPU编码方案中可以针对每个节点,以SIMD(SingleInstruction Multiple Data)方式实现该节点中多个操作码的并行处理。但对于复杂的表达式,仍需要逐个执行操作码,无法实现多个操作码的并行处理。SIMD即单指令多数据,在一条指令内批量操作多个数据。
目前,可以借助FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)提升处理速度,但现有FPGA进行异构加速的方案中利用真值表仅能针对与、或、非等逻辑操作码并行处理,不能支持对比较、计算等表达的执行。其它方案中在FPGA中实现固定的查询语句的模板来实现异构加速,不能支持表达式的动态变化,限制了FPGA的异构加速使用场景。
因此,如何提高FPGA针对表达式的并行处理效率,是本领域技术人员需要解决的问题。
发明内容
有鉴于此,本申请的目的在于提供一种数据处理方法、装置、设备及可读存储介质,以提高FPGA针对表达式的并行处理效率。其具体方案如下:
第一方面,本申请提供了一种数据处理方法,包括:
获取目标表达式,并将所述目标表达式转换为二叉树加链表的数据结构;
遍历所述数据结构,为所述数据结构的每个节点的操作数分配一个FPGA缓存区,并标记所述数据结构中的原始节点;
创建原始操作数映射表,并针对所述数据结构的每个层分别生成指令;
将所述原始操作数映射表和生成的指令发送至FPGA,以使所述FPGA根据所述原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取所述原始节点对应的FPGA缓存区中的原始操作数后,从所述数据结构的底层开始并行处理所述数据结构中处于同一层的操作码。
优选地,所述遍历所述数据结构,包括:
对所述数据结构进行前序遍历。
优选地,所述为所述数据结构的每个节点的操作数分配一个FPGA缓存区,包括:
将FPGA缓存划分为固定大小的多个FPGA缓存区,并为每个FPGA缓存区分配缓存索引;
为所述数据结构的每个节点的操作数分配一个缓存索引,并以数组方式进行记录。
优选地,为不同节点分配的各FPGA缓存区连续。
优选地,所述原始操作数映射表用于记录:各个原始操作数与相应FPGA缓存区之间的映射关系。
优选地,任一个指令包括至少一个操作码,任一操作码对应有操作函数及操作数所在的FPGA缓存区的缓存索引。
优选地,所述针对所述数据结构的每个层分别生成指令,包括:
将所述数据结构每个层的操作码组成一个队列;
若所述FPGA中用于处理任一队列的计算资源充足,则将该队列中的各操作码编入同一个指令;
若所述FPGA中用于处理任一队列的计算资源不充足,则按照所述FPGA中用于处理该队列的空闲计算资源量将该队列中的各操作码编入不同指令。
第二方面,本申请提供了一种数据处理装置,包括:
获取模块,用于获取目标表达式,并将所述目标表达式转换为二叉树加链表的数据结构;
分配模块,用于遍历所述数据结构,为所述数据结构的每个节点的操作数分配一个FPGA缓存区,并标记所述数据结构中的原始节点;
映射及指令生成模块,用于创建原始操作数映射表,并针对所述数据结构的每个层分别生成指令;
处理模块,用于将所述原始操作数映射表和生成的指令发送至FPGA,以使所述FPGA根据所述原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取所述原始节点对应的FPGA缓存区中的原始操作数后,从所述数据结构的底层开始并行处理所述数据结构中处于同一层的操作码。
第三方面,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现前述公开的数据处理方法。
第四方面,本申请提供了一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的数据处理方法。
通过以上方案可知,本申请提供了一种数据处理方法,包括:获取目标表达式,并将所述目标表达式转换为二叉树加链表的数据结构;遍历所述数据结构,为所述数据结构的每个节点的操作数分配一个FPGA缓存区,并标记所述数据结构中的原始节点;创建原始操作数映射表,并针对所述数据结构的每个层分别生成指令;将所述原始操作数映射表和生成的指令发送至FPGA,以使所述FPGA根据所述原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取所述原始节点对应的FPGA缓存区中的原始操作数后,从所述数据结构的底层开始并行处理所述数据结构中处于同一层的操作码。
可见,本申请将目标表达式转换为二叉树加链表的数据结构后,可以为该数据结构的每个节点的操作数分配不同的FPGA缓存区,并标记该数据结构中的原始节点;然后创建原始操作数映射表,并针对数据结构的每个层分别生成指令,之后将原始操作数映射表和生成的指令发送至FPGA,FPGA根据原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取原始节点对应的FPGA缓存区中的原始操作数后,从数据结构的底层开始并行处理数据结构中处于同一层的操作码,从而实现同一层的操作码的并行处理,从而提升了FPGA针对表达式的并行处理效率和方案通用性。该方案无需借助真值表或FPGA中的固定并行计算模板,可针对任意表达式、任意逻辑操作码和计算操作码并行处理,也支持表达式的动态变化,因此扩展了FPGA的异构加速使用场景。
相应地,本申请提供的一种数据处理装置、设备及可读存储介质,也同样具有上述技术效果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种数据处理方法流程图;
图2为本申请公开的一种二叉树加链表的数据结构示意图;
图3为本申请公开的一种FPGA缓存区分配示意图;
图4为本申请公开的一种数据处理装置示意图;
图5为本申请公开的一种电子设备示意图;
图6为本申请公开的一种FPGA加速卡结构示意图;
图7为本申请公开的另一种FPGA缓存区分配示意图;
图8为本申请公开的一种指令码流结构示意图;
图9为本申请公开的一种指令生成流程示意图;
图10为本申请公开的另一种二叉树加链表的数据结构示意图;
图11为本申请公开的又一种FPGA缓存区分配示意图;
图12为本申请公开的一种队列示意图;
图13为本申请公开的数据库CPU和本发明对比示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前FPGA异构加速方案中,FPGA利用真值表的方式仅能针对与、或、非等逻辑操作码并行处理,但不能对比较、计算等操作码并行处理。
为此,本申请提供了一种数据处理方案,能够提高FPGA针对表达式的并行处理效率。
参见图1所示,本申请实施例公开了一种数据处理方法,包括:
S101、获取目标表达式,并将目标表达式转换为二叉树加链表的数据结构。
在本实施例中,目标表达式可以是查询数据库的表达式,也可以是其他场景中的表达式。
其中,将目标表达式转换为二叉树加链表的数据结构即:用二叉树加链表的数据结构表示目标表达式。二叉树加链表的数据结构即:二叉树+链表结构。例如:目标表达式为(a+b)>(c+d)&(e+f)(g+h),那么二叉树加链表的数据结构可参照图2。
S102、遍历二叉树加链表的数据结构,为二叉树加链表的数据结构的每个节点的操作数分配一个FPGA缓存区,并标记二叉树加链表的数据结构中的原始节点。
其中,为不同节点分配的FPGA缓存区不同。
在一种具体实施方式中,遍历二叉树加链表的数据结构,包括:对二叉树加链表的数据结构进行前序遍历。当然,还可以以其他遍历方式对二叉树加链表的数据结构进行遍历。
在本实施例中,一个FPGA缓存区即:FPGA的RAM(Random Access Memory,随机存取存储器)中的一部分存储区域,该RAM可以被划分为多个FPGA缓存区。
在一种具体实施方式中,为二叉树加链表的数据结构的每个节点分配一个FPGA缓存区,包括:将FPGA缓存(即FPGA的RAM)划分为固定大小(如64B)的多个FPGA缓存区,并为每个FPGA缓存区分配缓存索引;为二叉树加链表的数据结构的每个节点分配一个缓存索引,并以数组方式进行记录。
例如:目标表达式为(a*b*c)>(a*c-100),相应的二叉树加链表的数据结构以及遍历后为每个节点分配的FPGA缓存区可参见图3。如图3所示,从图3最左边的节点a开始遍历,依次给遍历到的每个节点标号:1、2、3、4、5、6、7、8、9、10、11。此示例中各个FPGA缓存区的缓存索引也是1、2、3、4、5、6、7、8、9、10、11。故而标号为1的节点对应FPGA缓存区1,标号为2的节点对应FPGA缓存区2,标号为3的节点对应FPGA缓存区3,其他以此类推。如此一来,各操作数独立存储于不同缓存区,为实现同一层不同操作码的并行处理提供了可能。
其中,在图3所示的树中,表达式(a*b*c)>(a*c-100)中的各原始操作数a、b、c、a、c、100分别对应的节点即为该树中的原始节点,其他节点对应的操作数为相应原始操作数的运算结果。如:a*b的运算结果对应节点3,而节点3对应FPGA缓存区3。为区分运算结果对应的FPGA缓存区和原始操作数对应的FPGA缓存区,图3用虚线框标示了各运算结果对应的FPGA缓存区,用实线框标示了各原始操作数对应的FPGA缓存区。
如图3所示,当并行处理最底层的a*b、a*c后,所得的两个运算结果就可以存储在FPGA缓存区3和FPGA缓存区8中。相应地,其他层的数据及操作码也可以并行处理。
在一种具体实施方式中,为不同节点分配的各FPGA缓存区连续,如图3所示的FPGA缓存区1-11。
S103、创建原始操作数映射表,并针对二叉树加链表的数据结构的每个层分别生成指令。
以图3为例,原始节点映射的原始操作数为:a、b、c、a、c、100,那么这些数据分别存储在FPGA缓存区1、FPGA缓存区2、FPGA缓存区4、FPGA缓存区6、FPGA缓存区7、FPGA缓存区9中,以便FPGA实际处理时读取。需要说明的是,FPGA严格按照原始操作数映射表记录的映射关系来缓存数据,此时无需考虑同一数据的缓存次数的多少。因为只有严格按照原始操作数映射表记录的映射关系来缓存数据,才能实现同一层操作数的并行处理。
如在此示例中,按照原始操作数映射表缓存数据后,原始操作数a、c各缓存了两次,此时无需考虑同一数据多次缓存带来的开销,因为该示例中的a*b、a*c处于同一层,只有按照原始操作数映射表将原始操作数a拷贝到缓存区1和缓存区6,将原始操作数c拷贝到缓存区4和缓存区7,才能为处于同一层的a*b、a*c的并行处理提供执行条件。因为并行执行a*b、a*c,需要同时读取两个a,将这两个a存储在不同缓存区,才可以实现这两个a的同时读取。
其中,待查询的数据表袁术数据以DMA(Direct Memory Access,存储器直接访问)方式从数据库拷贝至FPGA本地的DDR中,DMA是一种高速的数据传输操作。FPGA从本地的DDR中,根据原始操作数映射表,将所需要的字段拷贝到RAM缓存区中。
S104、将原始操作数映射表和生成的指令发送至FPGA,以使FPGA根据原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取原始节点对应的FPGA缓存区中的原始操作数后,从二叉树加链表的数据结构的底层开始,并行处理二叉树加链表的数据结构中处于同一层的操作码。
在一种具体实施方式中,将原始节点映射的原始操作数存储至原始节点对应的FPGA缓存区,包括:创建原始操作数映射表;原始操作数映射表用于记录:各个原始操作数与相应FPGA缓存区之间的映射关系,具体可以为各原始操作数在数据库中的列与相应FPGA缓存区之间的映射关系;根据原始操作数映射表将原始节点映射的原始操作数存储至原始节点对应的FPGA缓存区。
例如:针对图3所示的表达式(a*b*c)>(a*c-100),其中涉及的各字段位于如下表1中。
表1
那么,a位于第1列,b位于第2列,c位于第3列,100为一个常数。相对应地,按照图3所示的缓存对应关系,原始操作数映射表可参照表2。
表2
将相同的列号或常量进行归并,那么得到最终的映射表如表3所示。
表3
在一种具体实施方式中,任一个指令包括至少一个操作码,操作码对应有操作函数及操作数所在的FPGA缓存区的缓存索引。
在一种具体实施方式中,针对二叉树加链表的数据结构的每个层分别生成指令,包括:将二叉树加链表的数据结构每个层的操作码组成一个队列;若FPGA中用于处理任一队列的计算资源充足,则将该队列中的各操作码编入同一个指令;若FPGA中用于处理任一队列的计算资源不充足,则按照FPGA中用于处理该队列的空闲计算资源量将该队列中的各操作码编入不同指令。如此便可得到二叉树加链表的数据结构其中一个层的指令。可见,针对二叉树加链表的数据结构其中的一个层,可得到至少一个指令。当然,针对一个层得到的指令个数越少越好。若针对一个层得到一个指令,FPGA就可以一次性并行完成这一个层的所有操作码的处理,可见处理效率显著提升。若针对一个层得到两个指令,FPGA就需要分两次完成这一个层的所有操作码的处理。
例如:若某一个队列需要计算a*b、e*f、h*i,且FPGA中有5个乘法计算单元可以用,那么将a*b、e*f、h*i编入同一个指令,从而针对该队列得到1个指令。若某一个队列需要计算a*b、e*f、h*i,但FPGA中只有2个乘法计算单元可以用,那么只能将a*b、e*f编入同一个指令,将h*i编入另一个指令,从而针对该队列得到2个指令。如此针对每个队列进行处理,可得到所有层的指令。FPGA拿到这些指令,就可以据此执行,从而实现:FPGA并行处理二叉树加链表的数据结构中处于同一层的操作码。
可见,本实施例将目标表达式转换为二叉树加链表的数据结构后,可以为该数据结构的每个节点的操作数分配不同的FPGA缓存区,并标记该数据结构中的原始节点;然后创建原始操作数映射表,并针对数据结构的每个层分别生成指令,之后将原始操作数映射表和生成的指令发送至FPGA,FPGA根据原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取原始节点对应的FPGA缓存区中的原始操作数后,从数据结构的底层开始并行处理数据结构中处于同一层的操作码,从而实现同一层的操作码的并行处理,从而提升了FPGA针对表达式的并行处理效率和方案通用性。该方案无需借助真值表或FPGA中的固定并行计算模板,可针对任意表达式、任意逻辑操作码和计算操作码并行处理,也支持表达式的动态变化,因此扩展了FPGA的异构加速使用场景。
下面对本申请实施例提供的一种数据处理装置进行介绍,下文描述的一种数据处理装置与上文描述的一种数据处理方法可以相互参照。
参见图4所示,本申请实施例公开了一种数据处理装置,包括:
获取模块401,用于获取目标表达式,并将目标表达式转换为二叉树加链表的数据结构;
分配模块402,用于遍历二叉树加链表的数据结构,为二叉树加链表的数据结构的每个节点的操作数分配一个FPGA缓存区,并标记二叉树加链表的数据结构中的原始节点;
映射及指令生成模块403,用于创建原始操作数映射表,并针对二叉树加链表的数据结构的每个层分别生成指令;
处理模块404,用于将原始操作数映射表和生成的指令发送至FPGA,以使FPGA根据原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取原始节点对应的FPGA缓存区中的原始操作数后,从二叉树加链表的数据结构的底层开始,并行处理二叉树加链表的数据结构中处于同一层的操作码。
在一种具体实施方式中,分配模块具体用于:
对二叉树加链表的数据结构进行前序遍历。
在一种具体实施方式中,分配模块具体用于:
将FPGA缓存划分为固定大小的多个FPGA缓存区,并为每个FPGA缓存区分配缓存索引;
为二叉树加链表的数据结构的每个节点的操作数分配一个缓存索引,并以数组方式进行记录。
在一种具体实施方式中,为不同节点分配的各FPGA缓存区连续。
在一种具体实施方式中,原始操作数映射表用于记录:各个原始操作数与相应FPGA缓存区之间的映射关系。
在一种具体实施方式中,任一个指令包括至少一个操作码,任一操作码对应有操作函数及操作数所在的FPGA缓存区的缓存索引。
在一种具体实施方式中,处理模块具体用于:
将所述数据结构每个层的操作码组成一个队列;
若所述FPGA中用于处理任一队列的计算资源充足,则将该队列中的各操作码编入同一个指令;
若所述FPGA中用于处理任一队列的计算资源不充足,则按照所述FPGA中用于处理该队列的空闲计算资源量将该队列中的各操作码编入不同指令。
其中,关于本实施例中各个模块、单元更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
可见,本实施例提供了一种数据处理装置,能够使FPGA根据生成的指令码从原始节点对应的FPGA缓存区中读取原始操作数,然后从二叉树加链表的数据结构的底层开始并行处理二叉树加链表的数据结构中处于同一层的操作码,实现:同一层的操作码的并行处理,从而提升了FPGA针对表达式的并行处理效率和方案通用性。
下面对本申请实施例提供的一种电子设备进行介绍,下文描述的一种电子设备与上文描述的一种数据处理方法及装置可以相互参照。
参见图5所示,本申请实施例公开了一种电子设备,包括:
存储器501,用于保存计算机程序;
处理器502,用于执行所述计算机程序,以实现上述任意实施例公开的方法。
下面对本申请实施例提供的一种可读存储介质进行介绍,下文描述的一种可读存储介质与上文描述的一种数据处理方法、装置及设备可以相互参照。
一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的数据处理方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
为了更清楚地介绍本申请,下述实施例详细介绍本申请针对二叉树加链表的数据结构的每个层生成指令的具体过程,即:一种指令集编码的具体方式。该编码方式所生成的指令集,用于与数据库FPGA加速卡进行交互,控制数据库表达式在FPGA加速卡中的执行。编码时,处于二叉树同一层的操作码尽可能编入同一指令,从而使得FPGA并行处理二叉树某一层的所有操作码,提升并行处理效率。
本实施例包括:读取FPGA计算单元信息、操作码分配缓存索引、创建原始操作数映射表、创建并行操作指令这几部分。
(1)读取FPGA计算单元信息。
本实施例针对数据库的FPGA加速卡进行设计。数据库可将自己需要执行的计算过程卸载至FPGA加速卡进行,从而提升数据库处理速度。该FPGA加速卡具备如下特征:
1)对于数据库中常见的数据类型如:整型、浮点型、日期、字符、字符串等,在该加速卡中都实现了相应数据类型的比较与计算功能。
2)不同数据类型之间进行运算使用位宽扩展的方式,形成单独的功能单元。
在生成指令前,数据库软件会先读取板卡信息,获取板卡上所有的计算功能单元,各种计算功能单元的个数为后续指令的编码提供参数。
1)读取板卡上的支持各种数据类型的计算单元的数量。
例如:FPGA中可以实现如表4所示的各种计算,表4以整型(int)、浮点数类型(float)的计算操作符为例。
表4
例如:FPGA中还可以实现如表5所示的各种计算,表5以整型(int)、计算操作符为例。
表5
上述每一种数据类型的计算,在FPGA加速卡中,可能会例化为一个或者多个计算单元,形成计算单元池。
如图6所示,一种FPGA加速卡可参见图6。图6所示的FPGA加速卡包括:1个整型计算单元池、1个浮点数计算单元池、1个整型浮点扩展计算单元池、1个日期计算单元池。其中,整型计算单元池包括:2个整型计算单元和1个整型比较单元。浮点数计算单元池包括:4个浮点数计算单元和2个浮点数比较单元。整型浮点扩展计算单元池包括:1个整型浮点数计算单元。日期计算单元池包括:1个日期比较单元。
具体的,对图6中的各种计算单元统计其数量,可得到表6。
表6
(2)操作码分配缓存索引。
一般地,数据库对于表达式中的各种操作,分为三种类型,按照优先级顺序由低到高为:
A、逻辑表达式:与、或、非。
B、比较表达式:大于、小于、等于,大于等于、小于等于。
C、计算表达式:加、减、乘、除
其中,用户输入的表达式在数据库会通过编译,按照运算优先级生成链表+二叉树结构。其中,逻辑表达式位于顶层以链表的形式组织,比较表达式位于中间同样以链表的形式组织,计算表达式以二叉树的形式进行组织。
在FPGA中由于有多个计算单元,每次运算时,二叉树上的、同一级的叶子节点是可以并行执行的。但要并行执行,则不能够使用栈结构暂存中间运算结果,否则将导致运算结果的错误。为了支持并行运算,本实施例先对各个运算节点使用到的缓存进行预先编号和映射。
数据库软件会在FPGA缓存上,提前规划每一个操作码的输入与输出结果所对应的缓存位置,用于支持二叉树中位于同一层的操作码的并行执行。
1)创建一片连续缓存,以数组的形式进行索引。数组中每个元素位宽64B,可同时容纳8个浮点数运算或16个整型数据的运算。
2)创建索引号N,并初始化为0。
3)依次遍历链表上的每一个二叉树,对二叉树进行前序遍历,遇到每一个左操作数、右操作数、操作符,均将N加1,作为对应操作数及结果的缓存下标。
4)遍历的过程中,设置每个节点的缓存下标,并标记是否为原始叶子节点(即原始节点)。
具体可参照图3及相关介绍进行设置,设置完成后,对应的结果如表7所示。表7中的索引即:相应节点对应的缓存区的缓存索引。
表7
(3)创建原始操作数映射表。
表达式中原始叶子节点所需的操作数,来源于数据库中各个字段或用户输入的常量。FPGA在执行叶子节点的运算时,需要知道从哪里获取操作所需的数据。
一般地,在数据库中,用户输入的字段名与字段所在的列号一一关联,而用户输入的常量会单独存储在数据库的一块内存空间内。通过创建原始操作数映射表,创建数据库字段列号或常量与目标缓存之间的映射关系,FPGA在解析到计算所需原始列或常量时,根据映射表就可以将数据库相应字段或常量,拷贝到相应目标缓存中。
具体操作步骤可以包括:
1)遍历所有的原始叶子节点,根据其原始左右操作数的类型与缓存索引建立映射。
如果操作数为数据库的某个字段,则以字段所在的列号,建立列号与缓存索引的映射,并标记类型为列号。如果操作数为常量,则以常量值,建立常量与缓存索引的映射,并标记类型为常量。
2)将相同列号或常量的映射关系进行合并。
3)将映射关系表按如表8所示的格式编码为指令码。
表8
具体的映射表可参见表2及表3,表2及表3所示的映射表是基于表达式(a*b*c)>(a*c-100)确定。该表达式可拆分为表9所示的内容。表9示意了缓存索引号与字段之间的关系。
表9
FPGA根据表3所示的映射表,即可将数据库中的目标字段或常量拷贝到相应的缓存中。
一个浮点数占用8B,本实施例给一个缓存区预留了64B,因此可以一次拷贝8行浮点数到指定的缓存中。针对每个操作码,FPGA一次性可以操作8个浮点数,如图7所示。
(4)创建并行操作指令。
经过缓存分配后,各个操作码的输入与输出所使用的缓存互相独立,因此,在表达式所形成的二叉树+链表中,位于同一层的操作码是可以并行执行的。位于同一层的操作码,只要所需的运算单元在FPGA中为空闲状态,即可将多个操作码编在同一个指令中并行执行。
由于数据之间的运算存在依赖关系,需要优先底层的运算完成后,才能确保上层的运算所需要的操作数已经计算完成。
据此原理可得到一个表达式对应的指令码流,如图8所示。在图8中,指令码流的头部cmd_cnt记录了一个表达式对应的所有指令的数量,而指令码流由多个指令组成,其中记录了每一个指令中的操作码个数,每个操作码的函数及左右操作数。
如图8所示,指令码流中的cmd_cnt表示有多少个指令。op_cnt表示一个指令中有多少个操作码。op_func表示操作码的函数。l_index表示左操作数的缓存索引。r_index表示右操作数的缓存索引。
相应的,指令码流的结构释义及位宽可参照表10。
表10
请参见图9,图9示意了指令的具体生成流程。按照图9所示的流程,示例如下。
假设有如表11所示的数据表。
表11
假设需要执行的表达式为:a*b*c+100>e*f*g–(h*i+j*k)。
假设FPGA中具备的浮点数运算单元:3个乘法运算单元、2个加法运算单元、2个减法运算单元、1个比较运算单元。
那么表达式在数据库中会编码为二叉树+链表的数据结构,具体可参照图10。
对该表达式中各个操作码分配的缓存索引如图11所示。图11中的各个三角形中的数字即为相应缓存索引值。
针对图10所示的树可生成4个队列,这4个队列作为一个新链表的各节点,如图12所示。
队列1中有4个乘法运算,但FPGA中只有3个乘法计算单元。因此,只能将a*b、e*f、h*i这三个运算编码到一个指令中,将剩下的j*k编码到另一个指令中,从而针对队列1得到2个指令。
针对队列1得到的包括三个运算的指令,该指令共有三个操作码,该指令的具体内容可参照表12。
表12
针对队列1得到包括j*k运算的指令后,此时队列1为空,将其从队列的链表中删除。包括j*k运算的指令共有1个操作码,该指令的具体内容可参照表13。
表13
针对其他队列重复据此处理。
那么针对队列2可得到一个指令,该指令共有3个操作码,该指令的具体内容可参照表14。
表14
针对队列3可得到一个指令,该指令共有2个操作码,该指令的具体内容可参照表15。
表15
针对队列4可得到一个指令,该指令共有1个操作码,该指令的具体内容可参照表16。
表16
当所有队列都遍历完,队列的链表为空时,设置指令个数字段cmd_cnt=5,完成编码操作。
可见,本实施例根据FPGA中不同类型计算单元的数量,动态生成指令码,便于适配不同场景的需求,且支持在一条指令内并行运算多个计算操作,在复杂计算场景下有效提高运算效率。按照本实施例可针对一个表达式编码得到可在FPGA上执行的指令集,从而可提升FPGA处理表达式的效率。
当然,本实施例同样适用于其它以计算单元为划分的异构加速体系中,不局限于在数据库方向上的应用。同时,本实施例所使用的FPGA的数据位宽为512bit,因此一个缓存区划为64B,实现一条指令可以操作8行浮点数。随着硬件技术的发展,FPGA有更高的位宽时,则可以将一个缓存区设计的更大,使得一次操作更多的数据。当然,一个缓存区也可以设计的更小。
若按照本实施例所示的方案处理表达式(a+b)>(c+d)&(e+f)<(g+h),那么在FPGA中资源充足的情况下,运行3个周期就可以完成。但若是使用数据库CPU处理表达式(a+b)>(c+d)&(e+f)<(g+h),那么需要运行7个周期。此二者针对表达式(a+b)>(c+d)&(e+f)<(g+h)的处理周期对比图可参照图13。其中,数据库CPU在每个处理周期内得到的中间结果都会进行压栈处理,以供下一周期使用。
本申请涉及的“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法或设备固有的其它步骤或单元。
需要说明的是,在本申请中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的可读存储介质中。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种数据处理方法,其特征在于,包括:
获取目标表达式,并将所述目标表达式转换为二叉树加链表的数据结构;
遍历所述数据结构,为所述数据结构的每个节点的操作数分配一个FPGA缓存区,并标记所述数据结构中的原始节点;
创建原始操作数映射表,并针对所述数据结构的每个层分别生成指令;
将所述原始操作数映射表和生成的指令发送至FPGA,以使所述FPGA根据所述原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取所述原始节点对应的FPGA缓存区中的原始操作数后,从所述数据结构的底层开始并行处理所述数据结构中处于同一层的操作码。
2.根据权利要求1所述的方法,其特征在于,所述遍历所述数据结构,包括:
对所述数据结构进行前序遍历。
3.根据权利要求1所述的方法,其特征在于,所述为所述数据结构的每个节点的操作数分配一个FPGA缓存区,包括:
将FPGA缓存划分为固定大小的多个FPGA缓存区,并为每个FPGA缓存区分配缓存索引;
为所述数据结构的每个节点的操作数分配一个缓存索引,并以数组方式进行记录。
4.根据权利要求3所述的方法,其特征在于,为不同节点分配的各FPGA缓存区连续。
5.根据权利要求1所述的方法,其特征在于,所述原始操作数映射表用于记录:各个原始操作数与相应FPGA缓存区之间的映射关系。
6.根据权利要求1-5任意一项所述的方法,其特征在于,任一个指令包括至少一个操作码,任一操作码对应有操作函数及操作数所在的FPGA缓存区的缓存索引。
7.根据权利要求1-5任意一项所述的方法,其特征在于,所述针对所述数据结构的每个层分别生成指令,包括:
将所述数据结构每个层的操作码组成一个队列;
若所述FPGA中用于处理任一队列的计算资源充足,则将该队列中的各操作码编入同一个指令;
若所述FPGA中用于处理任一队列的计算资源不充足,则按照所述FPGA中用于处理该队列的空闲计算资源量将该队列中的各操作码编入不同指令。
8.一种数据处理装置,其特征在于,包括:
获取模块,用于获取目标表达式,并将所述目标表达式转换为二叉树加链表的数据结构;
分配模块,用于遍历所述数据结构,为所述数据结构的每个节点的操作数分配一个FPGA缓存区,并标记所述数据结构中的原始节点;
映射及指令生成模块,用于创建原始操作数映射表,并针对所述数据结构的每个层分别生成指令;
处理模块,用于将所述原始操作数映射表和生成的指令发送至FPGA,以使所述FPGA根据所述原始操作数映射表将每个节点的操作数拷贝至相应FPGA缓存区,并根据生成的指令读取所述原始节点对应的FPGA缓存区中的原始操作数后,从所述数据结构的底层开始并行处理所述数据结构中处于同一层的操作码。
9.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求1至7任一项所述的方法。
10.一种可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210077002.5A CN114090592B (zh) | 2022-01-24 | 2022-01-24 | 一种数据处理方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210077002.5A CN114090592B (zh) | 2022-01-24 | 2022-01-24 | 一种数据处理方法、装置、设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114090592A true CN114090592A (zh) | 2022-02-25 |
CN114090592B CN114090592B (zh) | 2022-04-26 |
Family
ID=80309188
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210077002.5A Active CN114090592B (zh) | 2022-01-24 | 2022-01-24 | 一种数据处理方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114090592B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114647635A (zh) * | 2022-03-31 | 2022-06-21 | 苏州浪潮智能科技有限公司 | 数据处理系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326421A (zh) * | 2016-08-24 | 2017-01-11 | 中国科学院上海微系统与信息技术研究所 | 基于索引树和数据链表的fpga并行排序方法及系统 |
CN107111623A (zh) * | 2014-10-21 | 2017-08-29 | 华为技术有限公司 | 用于基于词典的压缩的并行历史搜索和编码 |
US20200151019A1 (en) * | 2019-03-14 | 2020-05-14 | Rednova Innovations,Inc. | OPU-based CNN acceleration method and system |
WO2021062981A1 (zh) * | 2019-09-30 | 2021-04-08 | 深圳忆联信息系统有限公司 | Ssd数据存储节点管理方法、装置及计算机设备 |
-
2022
- 2022-01-24 CN CN202210077002.5A patent/CN114090592B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107111623A (zh) * | 2014-10-21 | 2017-08-29 | 华为技术有限公司 | 用于基于词典的压缩的并行历史搜索和编码 |
CN106326421A (zh) * | 2016-08-24 | 2017-01-11 | 中国科学院上海微系统与信息技术研究所 | 基于索引树和数据链表的fpga并行排序方法及系统 |
US20200151019A1 (en) * | 2019-03-14 | 2020-05-14 | Rednova Innovations,Inc. | OPU-based CNN acceleration method and system |
WO2021062981A1 (zh) * | 2019-09-30 | 2021-04-08 | 深圳忆联信息系统有限公司 | Ssd数据存储节点管理方法、装置及计算机设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114647635A (zh) * | 2022-03-31 | 2022-06-21 | 苏州浪潮智能科技有限公司 | 数据处理系统 |
CN114647635B (zh) * | 2022-03-31 | 2024-01-23 | 苏州浪潮智能科技有限公司 | 数据处理系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114090592B (zh) | 2022-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Lemire et al. | Roaring bitmaps: Implementation of an optimized software library | |
Abrams | An APL machine | |
JP2006509306A (ja) | 関係アプリケーションへのデータ処理システム相互参照用セルエンジン | |
Markus | Modern Fortran in practice | |
Park et al. | High-performance algebraic multigrid solver optimized for multi-core based distributed parallel systems | |
US5787287A (en) | Representation of control flow and data dependence for machine | |
JP2000347876A (ja) | スタック・スロット割当て方法および装置 | |
US10102043B2 (en) | Method and system for mapping an integral into a thread of a parallel architecture | |
CN114090592B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN109992559A (zh) | 多插槽系统中的远程原子操作 | |
KR102128037B1 (ko) | 다계층 메모리 구조에 최적화된 데이터 인덱스 방법 및 그 방법에 의해 인덱스된 데이터의 검색 방법 | |
US5748486A (en) | Breadth-first manipulation of binary decision diagrams | |
Smith et al. | SYMBOL: A large experimental system exploring major hardware replacement of software | |
Welch et al. | Extending the OpenSHMEM memory model to support user-defined spaces | |
US7647368B2 (en) | Data processing apparatus and method for performing data processing operations on floating point data elements | |
CA1115425A (en) | Data processor with address extension | |
JP3896238B2 (ja) | コンピュータシステム及びプログラムの実行時表現方法 | |
CN115495226A (zh) | 内存管理方法、装置、设备及计算机可读存储介质 | |
CN101300544A (zh) | 大数乘法方法和装置 | |
CN111324354B (zh) | 一种融合寄存器对需求的寄存器选择方法 | |
Bilotta et al. | Design and implementation of particle systems for meshfree methods with high performance | |
Sætra | Shallow water simulation on GPUs for sparse domains | |
CN116909755B (zh) | 一种访存方法、处理器、电子设备及可读存储介质 | |
CN116880775B (zh) | 存储空间的硬件管理模组、芯片、电子设备及方法 | |
Fuentes-Sepúlveda et al. | Parallel construction of succinct trees |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |