CN104731729A - 一种基于异构***的表连接优化方法、cpu和加速器 - Google Patents
一种基于异构***的表连接优化方法、cpu和加速器 Download PDFInfo
- Publication number
- CN104731729A CN104731729A CN201510127487.4A CN201510127487A CN104731729A CN 104731729 A CN104731729 A CN 104731729A CN 201510127487 A CN201510127487 A CN 201510127487A CN 104731729 A CN104731729 A CN 104731729A
- Authority
- CN
- China
- Prior art keywords
- connection attribute
- attribute row
- accelerator
- sequence
- join index
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于异构***的表连接优化方法、CPU和加速器,通过结合CPU和加速器各自的优势特性,将任务分配和调度等复杂的逻辑控制,以及表的拆解和元组的重构等复杂的数据结构的处理交由CPU完成;将两表连接的高密计算交由并行计算能力超强的加速器完成,这样有效适应了CPU和加速器各自不同的硬件特征,解决了异构平台下的计算能力不对等的情形。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种基于异构***的表连接优化方法、CPU和加速器。
背景技术
随着硬件技术的进步,芯片上集成的晶体管数目会按照摩尔定律的趋势进一步发展。由于频率墙和功耗墙的限制,处理器将加速从单核向多核,从多核向众核发展。而图形处理器(英文:Graphic Processing Unit,简称:GPU),众核协处理器(英文:Many Integrated Core,简称;MIC)等加速器的不断涌现,使得异构***将成为今后高性能计算的主流。
其中,异构***是由多种不同指令集架构(英文:Instruction Set Architecture,简称:ISA)的处理器组成的计算机***,一般包括了中央处理器(英文:Central Processing Unit,简称:CPU)和各种加速器,如GPU、MIC以及现场可编程门阵列(英文:Field Programmable Gate Array,简称:FPGA)等。如图1所示,为一种异构***的架构示例图,其中,CPU的型号为Intel Xeon E5-2699 v3,有18个核心,所支持的最大物理线程数为36,单核主频为2.6吉赫兹(单位:GHz),单指令多数据流(英文:Single Instruction Multiple Data,简称:SIMD)位宽为256位;加速器为型号为Intel Xeon Phi 7120X的MIC,有61个核心,所支持的最大物理线程数为244,单核主频为1.24 GHz,SIMD位宽为512位;CPU通过带宽为16吉字节每秒(单位:GB/s)的扩展外设部件互连标准(英文:Peripheral Component Interconnect Express,简称:PCI-E)总线连接MIC。
在主流的数据库中,排序合并连接是最基本的连接方式之一。这种连接方 式首先将待连接的多个表拆分成一系列的两表连接对。例如,当有A、B、C、D四个表时,则可以将A和B作为一个连接对,将C和D作为另一个连接对。又例如,当有A、B、C三个表时,可以将A和B作为一个连接对,剩余的一个表C则暂时轮空。针对每个连接对,执行以下操作:将连接对中的两个表均分别按照连接属性列进行排序生成两个排序表,再对两个排序表进行一次遍历得到合并后的的一个表。然后,在合并得到的表以及上轮形成两表连接对时可能轮空的表中再进行两两组合,形成新的两表连接对。重复上述操作,直至将待连接的多个表合并连接成最终的一个表。例如,当有A、B、C、D四个表,将A和B作为一个连接对处理后得到表E,将C和D作为另一个连接对处理后得到表F,则可以将E和F作为新的连接对进行排序合并,得到最终的表G。又例如,当有A、B、C三个表,将A和B作为一个连接对处理后得到表D,则可以将C和D作为新的连接对进行排序合并,得到最终的表E。
如图2所示,为目前三种高效的排序合并连接算法的性能示意图。其中,m-way是一种非统一内存访问(英文:Non Uniform Memory Access Architecture,简称:NUMA)敏感的多路归并排序合并连接算法,m-pass是一种多趟归并排序合并连接算法,mpsm是一种大规模并行排序合并连接算法。图2中,横轴表示并行度,用执行的线程数来表示,纵轴表示吞吐量,用每秒排序的元组数表示。由图2可见,随着线程数的增加,三种排序合并连接算法的性能均在提升,尤其在执行线程数达到64时,采用m-way算法时的峰值吞吐量可达到每秒处理315百万条元组,可见排序合并连接算法的并行可扩展性很好,适合于高并行的计算环境。
然而,现有的排序合并连接算法却难以无缝移植到新型异构***下,不能很好地发挥异构***的硬件特点。原因如下:
异构***中的CPU和加速器有着不同的硬件特性,所支持的最大物理线程数和SIMD位宽均差异显著,带来的并行计算能力极不对称。而现有的排序合并连接算法一般都基于计算能力对称的***,异构***这种非对称的并行计 算能力使得现有的排序合并连接算法不能充分发挥异构平台的潜在性能。
发明内容
本发明实施例提供一种基于异构***的表连接优化方法、CPU和加速器,用以解决现有的排序合并连接算法难以无缝移植到新型异构***下,不能很好地发挥异构***的硬件特点的问题。
第一方面,本发明实施例提供了一种基于异构***的表连接优化方法,包括:
CPU将当前待连接的任意两个表作为一个连接对;
所述CPU从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列,其中,所述第一连接属性列和第二连接属性列用于连接所述第一个表和第二个表;
所述CPU将所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理,以及接收所述加速器发送的对所述第一连接属性列和第二连接属性列进行排序连接处理后得到的连接索引;
所述CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
结合第一方面,在第一方面的第一种可能的实现方式中,从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列,包括:
若连接属性列的数据类型为整型,则直接从第一个表中提取第一连接属性列,并从第二个表中提取第二连接属性列;
若连接属性列的数据类型为非整型,则通过字典编码,将第一个表中和第二个表中的连接属性列映射为数据类型为整型的序列,并提取映射后的序列。
结合第一方面,在第一方面的第二种可能的实现方式中,所述CPU将所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理,包括:
所述CPU将所述第一连接属性列和第二连接属性列进行压缩处理;
所述CPU将压缩处理后的所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理。
结合第一方面,在第一方面的第三种可能的实现方式中,所述CPU接收所述加速器发送的连接索引,包括:
所述CPU接收所述加速器发送的第一局部连接索引和第二局部连接索引;
所述CPU根据所述连接索引对所述第一个表和第二个表进行合并连接,包括:
所述CPU根据第一局部连接索引第i位上指示的数据项的行序,从所述第一个表中提取对应的表项;以及
根据第二局部连接索引第i位上指示的数据项的行序,从所述第二个表中提取对应的表项;并
把提取的两个表项合并为一个表项;
其中,i分别等于1、2、3……n,n为第一局部连接索引和第二局部连接索引包含的总位数。
第二方面,本发明实施例提供了一种基于异构***的表连接优化方法,包括:
加速器接收CPU发送的第一连接属性列和第二连接属性列,其中,第一连接属性列和第二连接属性列为CPU分别从当前待连接的第一个表和第二个表中分别提取得到的;
所述加速器对所述第一连接属性列和第二连接属性列进行排序连接处理,得到连接索引;
所述加速器将所述连接索引发送给所述CPU,以用于CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
结合第二方面,在第二方面的第一种可能的实现方式中,所述加速器对所述第一连接属性列和第二连接属性列进行排序连接处理,得到连接索引,包括:
所述加速器依次从所述第一连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第一序列;
所述加速器依次从所述第二连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第二序列;
所述加速器将所述第一序列和第二序列拼接成第三序列;
所述加速器对所述第三序列进行排序,得到第四序列;
所述加速器对所述第四序列进行连接处理,得到连接索引。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述加速器对所述第四序列进行连接处理,得到连接索引,包括:
所述加速器将所述第四序列划分为p个不相交的子序列,其中,所述p不大于所述加速器所支持的最大物理线程数;
所述加速器开启p个线程,每个线程负责一个子序列;
所述加速器使用每个线程对子序列作如下处理,并重复如下过程直至完成对子序列的处理:
每次从子序列中提取一个数据块;
对提取的数据块中包含的数据项进行分组,将数据项的值相同的数据值归为同一分组;
依次统计每个分组内来自于所述第一连接属性列和第二连接属性列的数据项的个数,分别记为Li和Ri,其中Li表示第i分组内来自所述第一连接属性列的数据项的个数,Ri表示第i分组内来自所述第二连接属性列的数据项的个数;
若第i分组的Li和Ri均不为零,则依次对第i分组的每一个数据项作如下处理:若该数据项来自于所述第一连接属性列,则将该数据项的行序复制Ri份存储到第一局部连接索引数组中,若该数据项来自于所述第二连接属性列,则将该数据项的行序添加到临时向量中;将所述临时向量中存储的一个或多个数据项的行序作为一个整体,复制Li份到第二局部连接索引数组中。
结合第二方面的第一种可能的实现方式,在第二方面的第三种可能的实现 方式中,所述加速器对所述第三序列进行排序,包括:
所述加速器采用并行基数排序算法,对所述第三序列进行排序。
结合第二方面的第二种可能的实现方式,在第二方面的第四种可能的实现方式中,所述加速器将所述第四序列划分为p个不相交的子序列,包括:
所述加速器将所述第四序列划分为等长的p个子序列;
所述加速器在每个子序列的头部和尾部设置指针;
所述加速器调整每个子序列的头部指针和尾部指针的位置,直至得到p个不相交的子序列;
其中,子序列不相交表示所述p个子序列中的每一个子序列的头部指针指向的数据项的值与相邻的前一个子序列的尾部指针指向的数据项的值均不相等。
结合第二方面的第二种可能的实现方式,在第二方面的第五种可能的实现方式中,所述加速器使用每个线程每次从子序列中提取的一个数据块的大小与所述加速器的每个线程支持的私有缓存的大小匹配。
结合第二方面的第二种可能的实现方式,在第二方面的第六种可能的实现方式中,所述加速器将所述连接索引发送给所述CPU,包括:
所述加速器开启的p个线程中的任一个线程在完成对子序列的处理后,独立将所述任一个线程存储在第一局部连接索引数组和第二局部连接索引数组中的第一局部连接索引和第二局部连接索引,发送给所述CPU。
结合第二方面或第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式中,所述加速器将所述连接索引发送给所述CPU,包括:
所述加速器将所述连接索引进行压缩处理;
所述加速器将压缩处理后的所述连接索引发送给所述CPU。
第三方面,本发明实施例提供了一种中央处理器CPU,包括:
拆分单元,用于将当前待连接的任意两个表作为一个连接对;
提取单元,用于从所述连接对中提取第一个表的第一连接属性列和第二个 表的第二连接属性列,其中,所述第一连接属性列和第二连接属性列用于连接所述第一个表和第二个表;
发送单元,用于将所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理;
接收单元,用于接收所述加速器发送的对所述第一连接属性列和第二连接属性列进行排序连接处理后得到的连接索引;
连接单元,用于根据所述连接索引对所述第一个表和第二个表进行合并连接。
结合第三方面,在第三方面的第一种可能的实现方式中,所述提取单元具体用于:
若连接属性列的数据类型为整型,则所述提取单元直接从第一个表中提取第一连接属性列,并从第二个表中提取第二连接属性列;
若连接属性列的数据类型为非整型,则所述提取单元通过字典编码,将第一个表中和第二个表中的连接属性列映射为数据类型为整型的序列,并提取映射后的序列。
结合第三方面,在第三方面的第二种可能的实现方式中,所述发送单元具体用于:
将所述第一连接属性列和第二连接属性列进行压缩处理;
将压缩处理后的所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理。
结合第三方面,在第三方面的第三种可能的实现方式中,所述接收单元具体用于:
接收所述加速器发送的第一局部连接索引和第二局部连接索引;
所述连接单元具体用于:
根据第一局部连接索引第i位上指示的数据项的行序,从所述第一个表中提取对应的表项;以及
根据第二局部连接索引第i位上指示的数据项的行序,从所述第二个表中提取对应的表项;并
把提取的两个表项合并为一个表项;
其中,i分别等于1、2、3……n,n为第一局部连接索引和第二局部连接索引包含的总位数。
第四方面,本发明实施例提供了一种加速器,包括:
接收单元,用于接收CPU发送的第一连接属性列和第二连接属性列,其中,第一连接属性列和第二连接属性列为CPU分别从当前待连接的第一个表和第二个表中分别提取得到的;
处理单元,用于对所述第一连接属性列和第二连接属性列进行排序连接处理,得到连接索引;
发送单元,用于将所述连接索引发送给所述CPU,以用于CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
结合第四方面,在第四方面的第一种可能的实现方式中,所述处理单元具体用于:
依次从所述第一连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第一序列;
依次从所述第二连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第二序列;
将所述第一序列和第二序列拼接成第三序列;
对所述第三序列进行排序,得到第四序列;
对所述第四序列进行连接处理,得到连接索引。
结合第四方面的第一种可能的实现方式,在第四方面的第二种可能的实现方式中,在对所述第四序列进行连接处理得到连接索引时,所述处理单元具体用于:
将所述第四序列划分为p个不相交的子序列,其中,所述p不大于所述加 速器所支持的最大物理线程数;
开启p个线程,每个线程负责一个子序列;
使用每个线程对子序列作如下处理,并重复如下过程直至完成对子序列的处理:
每次从子序列中提取一个数据块;
对提取的数据块中包含的数据项进行分组,将数据项的值相同的数据值归为同一分组;
依次统计每个分组内来自于所述第一连接属性列和第二连接属性列的数据项的个数,分别记为Li和Ri,其中Li表示第i分组内来自所述第一连接属性列的数据项的个数,Ri表示第i分组内来自所述第二连接属性列的数据项的个数;
若第i分组的Li和Ri均不为零,则依次对第i分组的每一个数据项作如下处理:若该数据项来自于所述第一连接属性列,则将该数据项的行序复制Ri份存储到第一局部连接索引数组中,若该数据项来自于所述第二连接属性列,则将该数据项的行序添加到临时向量中;将所述临时向量中存储的一个或多个数据项的行序作为一个整体,复制Li份到第二局部连接索引数组中。
结合第四方面的第一种可能的实现方式,在第四方面的第三种可能的实现方式中,在对所述第三序列进行排序时,所述处理单元具体用于:
采用并行基数排序算法,对所述第三序列进行排序。
结合第四方面的第二种可能的实现方式,在第四方面的第四种可能的实现方式中,在将所述第四序列划分为p个不相交的子序列时,所述处理单元具体用于:
将所述第四序列划分为等长的p个子序列;
在每个子序列的头部和尾部设置指针;
调整每个子序列的头部指针和尾部指针的位置,直至得到p个不相交的子序列;
其中,子序列不相交表示所述p个子序列中的每一个子序列的头部指针指向的数据项的值与相邻的前一个子序列的尾部指针指向的数据项的值均不相等。
结合第四方面的第二种可能的实现方式,在第四方面的第五种可能的实现方式中,所述处理单元使用每个线程每次从子序列中提取的一个数据块的大小与所述加速器的每个线程支持的私有缓存的大小匹配。
结合第四方面的第二种可能的实现方式,在第四方面的第六种可能的实现方式中,所述发送单元具体用于:
在所述处理单元开启的p个线程中的任一个线程在完成对子序列的处理后,独立将所述任一个线程存储在第一局部连接索引数组和第二局部连接索引数组中的第一局部连接索引和第二局部连接索引,发送给所述CPU。
结合第四方面或第四方面的第六种可能的实现方式,在第四方面的第七种可能的实现方式中,所述发送单元具体用于:
将所述连接索引进行压缩处理;
将压缩处理后的所述连接索引发送给所述CPU。
利用本发明实施例提供的方案,通过结合CPU和加速器各自的优势特性,将任务分配和调度等复杂的逻辑控制,以及表的拆解和元组的重构等复杂的数据结构的处理交由CPU完成;将两表连接的高密计算交由并行计算能力超强的加速器完成,这样有效适应了CPU和加速器各自不同的硬件特征,解决了异构平台下的计算能力不对等的情形。
附图说明
图1为现有技术下一种异构***的架构示意图;
图2为现有技术下三种高效的排序合并连接算法的性能示意图;
图3为本发明实施例提供的一种CPU侧基于异构***的表连接优化方法的流程图;
图4为本发明实施例提供的一种两表连接对的示意图;
图5、图6为本发明实施例中对两表连接对中的其中一个表的连接属性列进行字典编码的示意图;
图7为本发明实施例中CPU根据连接索引构造输出元组的示意图;
图8为本发明实施例提供的一种加速器侧基于异构***的表连接优化方法的流程图;
图9为本发明实施例中加速器将连接属性列封装成新的组合对象的示意图;
图10为本发明实施例中加速器对拼接长序列进行排序的示意图;
图11为本发明实施例中加速器得到不相交子序列的示意图;
图12为本发明实施例中加速器对不相交子序列进行连接的第一操作示意图;
图13为本发明实施例中加速器对不相交子序列进行连接的第二操作示意图;
图14为本发明实施例提供的一种CPU的结构图;
图15为本发明实施例提供的一种加速器的结构图;
图16为本发明实施例提供的一种异构***的结构图;
图17为本发明实施例提供的一种异构***的硬件示意图。
具体实施方式
本发明实施例提供了一种基于异构***的表连接优化方法、CPU和加速器,通过结合CPU和加速器各自的优势特性,将任务分配和调度等复杂的逻辑控制,以及表的拆解和元组的重构等复杂的数据结构的处理交由CPU完成;将两表连接的高密计算交由并行计算能力超强的加速器完成,这样有效适应了CPU和加速器各自不同的硬件特征,解决了异构平台下的计算能力不对等的情形。
下面结合说明书附图和各实施例对本发明技术方案进行说明。
本发明实施例提供了一种基于异构***的表连接优化方法,参阅图3所示,在CPU侧该方法的实施流程如下:
步骤301:CPU将当前待连接的任意两个表作为一个连接对。
由于CPU的逻辑处理能力很强,因此任务的分配和调度等复杂的逻辑控制,以及表的拆解和元组的重构等复杂的数据结构的处理仍由CPU来完成,
例如,当CPU接收到用于指示对多个表进行连接的结构化查询语言(英文:Structured Query Language,简称:SQL)语句时,由CPU负责将该SQL语句指定的多个表拆分成一系列的两表连接对,并对该一系列的两表连接对重复执行步骤301至304,直至将该SQL语句指定的多个表合并为一个表。
步骤302:所述CPU从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列,其中,所述第一连接属性列和第二连接属性列用于连接所述第一个表和第二个表。
如图4中的R表和S表所示,RB和RS即分别为R表和S表的连接属性列,连接属性列的值域相同。
若连接属性列的数据类型为整型,则CPU直接从第一个表中提取第一连接属性列,并从第二个表中提取第二连接属性列。若连接属性列的数据类型为非整型,则CPU先通过字典编码,将第一个表中和第二个表中的连接属性列映射为数据类型为整型的序列后,再提取映射后的序列。
如图5和图6所示,由于R表中的序列RB和S表中的序列SB的数据类型为非整型,因此需要对序列RB和序列SB进行字典编码。
步骤303:所述CPU将所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理,以及接收所述加速器发送的对所述第一连接属性列和第二连接属性列进行排序连接处理后得到的连接索引。
由于异构***中的CPU和加速器之间通过低速的总线传输数据,如图1所示,CPU的带宽为85吉字节每秒(GB/s),MIC的带宽为352GB/s,而PCI-E 总线的带宽仅为16GB/s,可见,总线的带宽瓶颈大大限制了CPU和加速器之间的数据传输。因此,本发明实施例为了克服总线受限的带宽造成的影响,采用了向量传输的模式,即所述CPU只传输连接属性列给所述加速器,而所述加速器也只返回连接索引给所述CPU。
可选的,为了进一步最小化数据传输的开销,所述CPU可以将所述第一连接属性列和第二连接属性列进行压缩处理(如RLE-Bit Encoding压缩编码)后,再将压缩处理后的所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理。
步骤304:所述CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
可选的,步骤303中所述CPU接收到的所述加速器发送的连接索引可以包含了第一局部连接索引和第二局部连接索引,所述CPU根据所述第一局部连接索引和第二局部连接索引对所述第一个表和第二个表进行合并连接的具体过程为:所述CPU根据第一局部连接索引第i位上指示的数据项的行序,从所述第一个表中提取对应的表项,以及根据第二局部连接索引第i位上指示的数据项的行序,从所述第二个表中提取对应的表项,并把提取的两个表项合并为一个表项;其中,i分别等于1、2、3......n,n为第一局部连接索引和第二局部连接索引包含的总位数。
例如,如图7所示,CPU端启动多个执行线程(英文:Thread),监听并接收来自加速器传回的连接索引,其中,CPU接收到的加速器某个线程传回的第一局部连接索引为{1,1,5,5,11,11,12,12,4},第二局部连接索引为{-3,-7,-3,-7,-3,-7,-3,-7,-11}(其中,正负数用于区分该连接索引针对的是两表连接对中的哪个表),CPU根据连接索引指示的数据项的行序,将从R表中提取的第1行的表项与从S表中提取的第3行的表项进行合并,将从R表中提取的第1行的表项与从S表中提取的第7行的表项进行合并......依次类推,根据该连接索引得到的输出元组如图7中所示。
相应的,参阅图8所示,本发明实施例提供的一种基于异构***的表连接优化方法在加速器侧的实施流程如下:
步骤801:加速器接收CPU发送的第一连接属性列和第二连接属性列,其中,第一连接属性列和第二连接属性列为CPU分别从当前待连接的第一个表和第二个表中分别提取得到的。
步骤802:所述加速器对所述第一连接属性列和第二连接属性列进行排序连接处理,得到连接索引。
实际应用中,基于排序的连接算法已经比较成熟,本发明实施例可以基于现有的任一种排序连接算法对第一连接属性列和第二连接属性列处理得到连接索引。此外,本发明实施例还提出了一种新的排序连接算法,下面就如何基于该新的排序连接算法得到连接索引作详细介绍:
首先,所述加速器依次从所述第一连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第一序列。以及,所述加速器依次从所述第二连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第二序列。
例如,如图9所示,加速器可以开启多个线程,并使用每个线程将连接属性列RB和SB包含的每个数据项按照<数据项的值(Key),数据项的行序(RowId)>的二元组格式进行封装,从而构造新的组合对象(ComItem)。并且,为了区分分别来自RB和SB的数据项的行序,可以将来自RB的数据项的行序用正数表示,来自SB的数据项的行序用负数表示,由此,RowID的符号位即表征了该数据项的来源。
其次,所述加速器将所述第一序列和第二序列拼接成第三序列,并对所述第三序列进行排序,得到第四序列;
可选的,所述加速器可以采用并行基数排序(英文:Parallel Radix Sort)算法,对所述第三序列进行排序。Parallel Radix Sort算法有很多种实现方式, 若选择的排序基数不同,排序效果也不同。较佳的,本发明实施例可以采用排序基数为2的Parallel Radix Sort算法,即按照原始的二进制位串进行排序,如图10所示,加速器可以直接对数据项的值的二进制位串进行处理,排序过程中在每次进行0/1翻转以及前缀和扫描时均可利用加速器所提供的超长SIMD位操作指令,从而提高并行计算能力。
最后,所述加速器对所述第四序列进行连接处理,得到连接索引,其具体过程如下:
步骤A、所述加速器将所述第四序列划分为p个不相交的子序列,其中,所述p不大于所述加速器所支持的最大物理线程数。
可选的,为了得到p个不相交的子序列,所述加速器可以先将所述第四序列划分为等长的p个子序列,然后在每个子序列的头部和尾部设置指针,并调整每个子序列的头部指针和尾部指针的位置,直至得到p个不相交的子序列,其中,子序列不相交表示所述p个子序列中的每一个子序列的头部指针指向的数据项的值与相邻的前一个子序列的尾部指针指向的数据项的值均不相等。
例如,如图11所示,加速器将有序序列V划分为s个近似大小的子序列,并为每个子序列设置两个定位指针Phead和Ptail,初始状态的Phead和Ptail指向等分子序列的头部和尾部。除第0个子序列外,加速器将第i(i=1,2,…,s)个子序列的Phead指向的数据项的值与第i-1个子序列的Ptail指向的数据项的值进行比较,若二者相等,则表明子序列相交,则将第i个子序列的Phead和第i-1个子序列的Ptail一起上移(或下移)一个数据项的位置,并重复上述过程,直至每个子序列均不相交。
步骤B、所述加速器开启p个线程,每个线程负责一个子序列。所述加速器使用每个线程对子序列作如下处理,并重复如下过程直至完成对子序列的处理:
步骤B1、每次从子序列中提取一个数据块。
可选的,所述加速器使用每个线程每次从子序列中提取的一个数据块的大 小可以与所述加速器的每个线程支持的私有缓存的大小匹配。例如,若一级缓存(英文:L1 Cache)为每个线程独有的,则每个线程每次提取与一级缓存的大小匹配的数据块,如此可大大降低线程之间的缓存访问冲突,有效提高了缓存的利用率。
步骤B2、对提取的数据块中包含的数据项进行分组,将数据项的值相同的数据值归为同一分组。
步骤B3、依次统计每个分组内来自于所述第一连接属性列和第二连接属性列的数据项的个数,分别记为Li和Ri,其中Li表示第i分组内来自所述第一连接属性列的数据项的个数,Ri表示第i分组内来自所述第二连接属性列的数据项的个数。
例如,如图12所示,某个线程按照数据项的值是否相等将某个数据块包含的数据项分为8个分组,该线程在每个分组中依次取每个数据项的行序的符号位,若预先定义用正数表示来自第一连接属性列的行序,负数表示来自第二连接属性列的行序,则当符号位为0时,表示该数据项来自第一连接属性列,当符号位为1时,表示该数据项来自第二连接属性列。该线程通过设置两个计数器SL和SR,来统计每个分组内分别来自第一连接属性列和第二连接属性列的数据项的个数。在统计完一个分组包含的每个数据项的符号位后,若SL的值等于0或SR的值等于0,则表示该组所有的数据项均只来自于某个连接属性列,于是删除该组的所有数据项;若SL和SR的值均不等于0,则将该组的(SL,SR)作为一对数值存储在该线程私有的本地临时向量GroupPairArray中。在完成对一个分组的筛选后,该线程将SL和SR重置为0,并继续处理下一个分组。如图12中所示,从8个分组中筛选出了SL和SR的值均不为0的5个分组。
步骤B4、若第i分组的Li和Ri均不为零,则依次对第i分组的每一个数据项作如下处理:若该数据项来自于所述第一连接属性列,则将该数据项的行序复制Ri份存储到第一局部连接索引数组中,若该数据项来自于所述第二连接属 性列,则将该数据项的行序添加到临时向量中;将所述临时向量中存储的一个或多个数据项的行序作为一个整体,复制Li份到第二局部连接索引数组中。或者,也可以先将来自于所述第二连接属性列的数据项的行序复制Li份到第二局部连接索引数组中,将来自于所述第一连接属性列的数据项的行序暂时保存到临时向量中,再将所述临时向量中存储的一个或多个数据项的行序作为一个整体,复制Ri份存储到第一局部连接索引数组中。
例如,如图13所示,加速器的线程1从本地临时向量GroupPairArray中取出第1组的计数值为<1,3>,则将该组计数值对应的符号位为正数的行序2、6、10分别复制1份到第一局部连接索引数组ArrayLeftRowID中,以及将符号位为负数的行序-4先添加到临时向量tmpRightRowIDSet中,再将临时向量tmpRightRowIDSet整体复制3份到第二局部连接索引数组ArrayRightRowID中,然后将临时向量tmpRightRowIDSet清空,并继续处理下一个分组。
本发明实施例提出的上述连接方法,不同于现行比较通用的归并连接方法。现在的归并连接都是对两个有序序列进行合并,用两个指针分别指向两个序列,通过比较和判断,若两个指针所指向的值相同,则输出,否则将指针前移比较下一个,直到将两个序列扫描完毕;对于多对多的连接,指针还会回溯,这将带来很大的开销。而本发明实施例所提出的连接方法,只是针对一个有序序列进行处理,通过分别计算连接对中的两个表在每个值上匹配的条数,然后用地址复制的方式产生连接索引,大大减少了比较和判断的过程,更有利于并行化处理,而对于多对多的连接,也不存在指针回溯的问题,性能提升更是明显。
步骤803:所述加速器将所述连接索引发送给所述CPU,以用于CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
可选的,所述加速器开启的p个线程中的任一个线程在完成对子序列的处理后,可以独立将所述任一个线程存储在第一局部连接索引数组和第二局部连接索引数组中的第一局部连接索引和第二局部连接索引,发送给所述CPU。例 如,如图13所示,线程1在得到连接索引后,无需同步其他线程,可独立将该线程1得到的连接索引传输给CPU。
为了减少传输的数据字节数,所述加速器可以将所述连接索引进行压缩处理,然后将压缩处理后的所述连接索引发送给所述CPU。相应地,CPU端开启多线程并行接收、解压缩并根据连接索引构造输出元组。
参阅图14所示,本发明实施例提供了一种CPU14,用于实现本发明图3所示的CPU侧的基于异构***的表连接优化方法,所述CPU14包括:
拆分单元141,用于将当前待连接的任意两个表作为一个连接对。
提取单元142,用于从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列,其中,所述第一连接属性列和第二连接属性列用于连接所述第一个表和第二个表。
发送单元143,用于将所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理。
接收单元144,用于接收所述加速器发送的对所述第一连接属性列和第二连接属性列进行排序连接处理后得到的连接索引。
连接单元145,用于根据所述连接索引对所述第一个表和第二个表进行合并连接。
可选地,在从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列时,若连接属性列的数据类型为整型,则所述提取单元142可以直接从第一个表中提取第一连接属性列,并直接从第二个表中提取第二连接属性列;若连接属性列的数据类型为非整型,则所述提取单元142先通过字典编码,将第一个表中和第二个表中的连接属性列映射为数据类型为整型的序列,并提取映射后的序列。
可选地,所述发送单元143可以将所述第一连接属性列和第二连接属性列进行压缩处理,并将压缩处理后的所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理。
可选地,所述接收单元144接收到的是所述加速器发送的第一局部连接索引和第二局部连接索引。
可选地,所述连接单元145可以根据第一局部连接索引第i位上指示的数据项的行序,从所述第一个表中提取对应的表项;以及根据第二局部连接索引第i位上指示的数据项的行序,从所述第二个表中提取对应的表项;并把提取的两个表项合并为一个表项;其中,i分别等于1、2、3......n,n为第一局部连接索引和第二局部连接索引包含的总位数。
参阅图15所示,本发明实施例提供了一种加速器15,用于实现本发明图8所示的加速器侧的基于异构***的表连接优化方法,所述加速器15包括:
接收单元151,用于接收中央处理器CPU发送的第一连接属性列和第二连接属性列,其中,第一连接属性列和第二连接属性列为CPU分别从当前待连接的第一个表和第二个表中分别提取得到的。
处理单元152,用于对所述第一连接属性列和第二连接属性列进行排序连接处理,得到连接索引。
发送单元153,用于将所述连接索引发送给所述CPU,以用于CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
可选地,所述处理单元152可以对所述第一连接属性列和第二连接属性列作如下处理:依次从所述第一连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第一序列;依次从所述第二连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第二序列;将所述第一序列和第二序列拼接成第三序列;对所述第三序列进行排序,得到第四序列;对所述第四序列进行连接处理,得到连接索引。
可选地,在对所述第四序列进行连接处理得到连接索引时,所述处理单元152可以将所述第四序列划分为p个不相交的子序列,其中,所述p不大于所述加速器所支持的最大物理线程数;开启p个线程,每个线程负责一个子序列; 使用每个线程对子序列作如下处理,并重复如下过程直至完成对子序列的处理:每次从子序列中提取一个数据块;对提取的数据块中包含的数据项进行分组,将数据项的值相同的数据值归为同一分组;依次统计每个分组内来自于所述第一连接属性列和第二连接属性列的数据项的个数,分别记为Li和Ri,其中Li表示第i分组内来自所述第一连接属性列的数据项的个数,Ri表示第i分组内来自所述第二连接属性列的数据项的个数;若第i分组的Li和Ri均不为零,则依次对第i分组的每一个数据项作如下处理:若该数据项来自于所述第一连接属性列,则将该数据项的行序复制Ri份存储到第一局部连接索引数组中,若该数据项来自于所述第二连接属性列,则将该数据项的行序添加到临时向量中;将所述临时向量中存储的一个或多个数据项的行序作为一个整体,复制Li份到第二局部连接索引数组中。
可选地,在对所述第三序列进行排序时,所述处理单元152可以采用并行基数排序Parallel Radix Sort算法,对所述第三序列进行排序。
可选地,在将所述第四序列划分为p个不相交的子序列时,所述处理单元152可以将所述第四序列划分为等长的p个子序列;在每个子序列的头部和尾部设置指针;调整每个子序列的头部指针和尾部指针的位置,直至得到p个不相交的子序列;其中,子序列不相交表示所述p个子序列中的每一个子序列的头部指针指向的数据项的值与相邻的前一个子序列的尾部指针指向的数据项的值均不相等。
可选地,所述处理单元152使用每个线程每次从子序列中提取的一个数据块的大小可以与所述加速器的每个线程支持的私有缓存的大小匹配。
可选地,所述发送单元153可以在所述处理单元152开启的p个线程中的任一个线程在完成对子序列的处理后,独立将所述任一个线程存储在第一局部连接索引数组和第二局部连接索引数组中的第一局部连接索引和第二局部连接索引,发送给所述CPU。
可选地,所述发送单元153可以将所述连接索引进行压缩处理,将压缩处 理后的所述连接索引发送给所述CPU。
参阅图16所示,本发明实施例还提供了一种异构***,该异构***可以包含CPU161,加速器162,以及数据通道163;
CPU161和加速器162通过数据通道163相互连接;数据通道163可以是PCI总线或PCI-E总线,也可以是快速通道互联(英文:Quick Path Interconnect,简称:QPI)等。为便于表示,图16中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
CPU 161,可以是一颗多核处理器(如由QPI相连的多个Core),也可是由插槽(英语:Socket)相连的NUMA架构的多颗CPU,但逻辑上认为异构***只有一个CPU。CPU161可以支持多个物理线程的并发执行,有较高的主频,支持乱序执行,支持多级Cache,具有支持128位指令集(英文:Streaming SIMD Extensions,简称:SSE)或256位高级矢量扩展指令集(英文:Advanced Vector Extensions,简称:AVX)的SIMD指令的寄存器,可直接访问内存,支持I/O操作等。如图16所示,CPU161可以包含计算核心1611,核私有缓存1612,共享缓存1613和主机内存1614。其中,计算核心1611用于执行CPU端的程序指令,完成算术和逻辑运算,在本发明实施例中主要用于实现复杂的逻辑控制和任务的分配;核私有缓存1612属于每个物理核私有的缓存,用来加速内存的访问,减少访问内存的延迟,一般对应于L1 Cache和L2 Cache;共享缓存1613是CPU上所有的核都能访问的缓存,用于加速对内存的访问,一般对应于LLC Cache(即最末端缓存);主机内存1614在物理上不属于CPU的一部分,但只有CPU能直接访问主机内存1614,加速器不能直接访问,所以逻辑上属于CPU私有的本地存储器,用来存储大容量的数据,I/O缓存,程序等。
加速器162,可以是MIC卡,GPU,FPGA等。异构***中可以配置一个或多个加速器,图16中以2个加速器为例进行说明。每个加速器162均是一个独立的计算设备,有独立的存储器,该存储器的容量相比内存而言一般都比 较小(通常<16G);加速器162的核数众多,一般集成了数十个(如MIC)或数百个(如GPU)计算核心,可以同时支持数百甚至数千线程的执行;加速器162的设备内存1623与CPU161的主机内存1614是两个独立的存储器,有着不同的地址空间,相互之间不能直接访问,需要通过数据通道163将数据传输到本地存储器上才能进行访问;加速器162一般都支持SIMD,且SIMD的位宽一般比CPU要宽,如MIC的SIMD位宽为512位。如图16所示,加速器162可以包含计算核心1621,局部存储器1622,设备内存1623。其中,计算核心1621即处理器核心,用于执行加速器端的程序指令,在本发明实施例中主要用于实现排序和连接的向量处理;局部存储器1622用于存储线程私有的数据,或者程序中的临时变量;设备内存1623用于存储需在设备上运行的程序指令,待处理以及处理后的数据,也可以作为与CPU端通信的数据缓冲器。
由图16可见,CPU161中集成的计算核心数量相对较少,并行计算能力相对较弱但具有良好的逻辑处理能力,适合复杂的指令控制和复杂内存数据结构管理。而加速器162中集成了众多的计算核心,具有强大的并行计算能力和数据吞吐性能,但逻辑控制能力相对较弱,不适合管理复杂的内存数据结构。
CPU161的主机内存1614和加速器162的设备内存1623,可以用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。主机内存1614和设备内存1623,可能是动态随机存取存储器(英文:Dynamic Random Access Memory,简称:DRAM),Flash存储器,相变存储器(英文:Phase Change Memory,简称:PCM)等。如图17所示,为本发明实施例提供的一种异构***的硬件示意图。
CPU161,执行主机内存1614所存放的程序,实现本发明实施例提供的基于异构***的表连接优化方法,包括:
将当前待连接的任意两个表作为一个连接对;从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列,其中,所述第一连接属性 列和第二连接属性列用于连接所述第一个表和第二个表;将所述第一连接属性列和第二连接属性列发送到加速器162进行排序连接处理,以及接收所述加速器162发送的对所述第一连接属性列和第二连接属性列进行排序连接处理后得到的连接索引;根据所述连接索引对所述第一个表和第二个表进行合并连接。
可选地,在从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列时,所述方法包括:若连接属性列的数据类型为整型,则直接从第一个表中提取第一连接属性列,并从第二个表中提取第二连接属性列;若连接属性列的数据类型为非整型,则通过字典编码,将第一个表中和第二个表中的连接属性列映射为数据类型为整型的序列,并提取映射后的序列。
可选地,在将所述第一连接属性列和第二连接属性列发送到加速器162进行排序连接处理时,所述方法包括:将所述第一连接属性列和第二连接属性列进行压缩处理;将压缩处理后的所述第一连接属性列和第二连接属性列发送到加速器162进行排序连接处理。
可选地,在接收所述加速器162发送的连接索引时,所述方法包括:接收所述加速器162发送的第一局部连接索引和第二局部连接索引。
可选地,在根据所述连接索引对所述第一个表和第二个表进行合并连接时,所述方法可以是:根据第一局部连接索引第i位上指示的数据项的行序,从所述第一个表中提取对应的表项;以及根据第二局部连接索引第i位上指示的数据项的行序,从所述第二个表中提取对应的表项;并把提取的两个表项合并为一个表项;其中,i分别等于1、2、3……n,n为第一局部连接索引和第二局部连接索引包含的总位数。
加速器162,执行设备内存1623所存放的程序,实现本发明实施例提供的基于异构***的表连接优化方法,包括:
接收CPU发送的第一连接属性列和第二连接属性列,其中,第一连接属性列和第二连接属性列为CPU分别从当前待连接的第一个表和第二个表中分别提取得到的;对所述第一连接属性列和第二连接属性列进行排序连接处理, 得到连接索引;所述加速器将所述连接索引发送给所述CPU,以用于CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
可选地,在对所述第一连接属性列和第二连接属性列进行排序连接处理,得到连接索引时,所述方法包括:依次从所述第一连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第一序列;依次从所述第二连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第二序列;将所述第一序列和第二序列拼接成第三序列;对所述第三序列进行排序,得到第四序列;对所述第四序列进行连接处理,得到连接索引。
可选地,在对所述第四序列进行连接处理,得到连接索引时,所述方法包括:将所述第四序列划分为p个不相交的子序列,其中,所述p不大于所述加速器所支持的最大物理线程数;开启p个线程,每个线程负责一个子序列;使用每个线程对子序列作如下处理,并重复如下过程直至完成对子序列的处理:每次从子序列中提取一个数据块;对提取的数据块中包含的数据项进行分组,将数据项的值相同的数据值归为同一分组;依次统计每个分组内来自于所述第一连接属性列和第二连接属性列的数据项的个数,分别记为Li和Ri,其中Li表示第i分组内来自所述第一连接属性列的数据项的个数,Ri表示第i分组内来自所述第二连接属性列的数据项的个数;若第i分组的Li和Ri均不为零,则依次对第i分组的每一个数据项作如下处理:若该数据项来自于所述第一连接属性列,则将该数据项的行序复制Ri份存储到第一局部连接索引数组中,若该数据项来自于所述第二连接属性列,则将该数据项的行序添加到临时向量中;将所述临时向量中存储的一个或多个数据项的行序作为一个整体,复制Li份到第二局部连接索引数组中。
可选地,在对所述第三序列进行排序时,所述方法包括:采用Parallel Radix Sort算法,对所述第三序列进行排序。
可选地,在将所述第四序列划分为p个不相交的子序列时,所述方法包括: 将所述第四序列划分为等长的p个子序列;在每个子序列的头部和尾部设置指针;调整每个子序列的头部指针和尾部指针的位置,直至得到p个不相交的子序列;其中,子序列不相交表示所述p个子序列中的每一个子序列的头部指针指向的数据项的值与相邻的前一个子序列的尾部指针指向的数据项的值均不相等。
可选地,使用每个线程每次从子序列中提取的一个数据块的大小可以与所述加速器162的每个线程支持的私有缓存的大小匹配。
可选地,在将所述连接索引发送给所述CPU时,所述方法包括:开启的p个线程中的任一个线程在完成对子序列的处理后,独立将所述任一个线程存储在第一局部连接索引数组和第二局部连接索引数组中的第一局部连接索引和第二局部连接索引,发送给所述CPU。
可选地,在将所述连接索引发送给所述CPU时,所述方法包括:将所述连接索引进行压缩处理;将压缩处理后的所述连接索引发送给所述CPU。
综上所述,本发明实施例提供的技术方案,通过结合CPU和加速器各自的优势特性,将任务分配和调度等复杂的逻辑控制,以及表的拆解和元组的重构等复杂的数据结构的处理交由CPU完成,将两表连接的高密计算交由并行计算能力超强的加速器完成,这样有效适应了CPU和加速器各自不同的硬件特征,解决了异构平台下的计算能力不对等的情形。本发明实施例提供的技术方案将待连接的两个表的连接属性列从表中提取出来,以向量的形式存储在地址连续的一维数组中,随后在加速器上的输入、排序连接及结果输出均以向量这种简单的数据结构进行处理,有效克服了异构设备间处理复杂数据结构困难的问题,而通过压缩编码和向量传输模式,使得CPU和加速器之间只传输连接属性列和连接索引,最小化了数据传输开销,克服了异构平台节点设备间数据传输成本过高的问题。此外,本发明实施例还提出了一种新的基于排序的连接算法,该算法将传统的两个有序序列的归并连接改进为一个有序序列的计算连接,克服了现有的归并连接算法需要进行大量的比较和分支判读语句,减少了 大量复杂逻辑控制指令的执行,进一步提高了加速器的高并行计算能力。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机非易失性存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属 于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (24)
1.一种基于异构***的表连接优化方法,其特征在于,包括:
中央处理器CPU将当前待连接的任意两个表作为一个连接对;
所述CPU从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列,其中,所述第一连接属性列和第二连接属性列用于连接所述第一个表和第二个表;
所述CPU将所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理,以及接收所述加速器发送的对所述第一连接属性列和第二连接属性列进行排序连接处理后得到的连接索引;
所述CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
2.如权利要求1所述的方法,其特征在于,从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列,包括:
若连接属性列的数据类型为整型,则直接从第一个表中提取第一连接属性列,并从第二个表中提取第二连接属性列;
若连接属性列的数据类型为非整型,则通过字典编码,将第一个表中和第二个表中的连接属性列映射为数据类型为整型的序列,并提取映射后的序列。
3.如权利要求1所述的方法,其特征在于,所述CPU将所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理,包括:
所述CPU将所述第一连接属性列和第二连接属性列进行压缩处理;
所述CPU将压缩处理后的所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理。
4.如权利要求1所述的方法,其特征在于,所述CPU接收所述加速器发送的连接索引,包括:
所述CPU接收所述加速器发送的第一局部连接索引和第二局部连接索引;
所述CPU根据所述连接索引对所述第一个表和第二个表进行合并连接,包括:
所述CPU根据第一局部连接索引第i位上指示的数据项的行序,从所述第一个表中提取对应的表项;以及
根据第二局部连接索引第i位上指示的数据项的行序,从所述第二个表中提取对应的表项;并
把提取的两个表项合并为一个表项;
其中,i分别等于1、2、3……n,n为第一局部连接索引和第二局部连接索引包含的总位数。
5.一种基于异构***的表连接优化方法,其特征在于,包括:
加速器接收中央处理器CPU发送的第一连接属性列和第二连接属性列,其中,第一连接属性列和第二连接属性列为CPU分别从当前待连接的第一个表和第二个表中分别提取得到的;
所述加速器对所述第一连接属性列和第二连接属性列进行排序连接处理,得到连接索引;
所述加速器将所述连接索引发送给所述CPU,以用于CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
6.如权利要求5所述的方法,其特征在于,所述加速器对所述第一连接属性列和第二连接属性列进行排序连接处理,得到连接索引,包括:
所述加速器依次从所述第一连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第一序列;
所述加速器依次从所述第二连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第二序列;
所述加速器将所述第一序列和第二序列拼接成第三序列;
所述加速器对所述第三序列进行排序,得到第四序列;
所述加速器对所述第四序列进行连接处理,得到连接索引。
7.如权利要求6所述的方法,其特征在于,所述加速器对所述第四序列进行连接处理,得到连接索引,包括:
所述加速器将所述第四序列划分为p个不相交的子序列,其中,所述p不大于所述加速器所支持的最大物理线程数;
所述加速器开启p个线程,每个线程负责一个子序列;
所述加速器使用每个线程对子序列作如下处理,并重复如下过程直至完成对子序列的处理:
每次从子序列中提取一个数据块;
对提取的数据块中包含的数据项进行分组,将数据项的值相同的数据值归为同一分组;
依次统计每个分组内来自于所述第一连接属性列和第二连接属性列的数据项的个数,分别记为Li和Ri,其中Li表示第i分组内来自所述第一连接属性列的数据项的个数,Ri表示第i分组内来自所述第二连接属性列的数据项的个数;
若第i分组的Li和Ri均不为零,则依次对第i分组的每一个数据项作如下处理:若该数据项来自于所述第一连接属性列,则将该数据项的行序复制Ri份存储到第一局部连接索引数组中,若该数据项来自于所述第二连接属性列,则将该数据项的行序添加到临时向量中;将所述临时向量中存储的一个或多个数据项的行序作为一个整体,复制Li份到第二局部连接索引数组中。
8.如权利要求6所述的方法,其特征在于,所述加速器对所述第三序列进行排序,包括:
所述加速器采用并行基数排序Parallel Radix Sort算法,对所述第三序列进行排序。
9.如权利要求7所述的方法,其特征在于,所述加速器将所述第四序列划分为p个不相交的子序列,包括:
所述加速器将所述第四序列划分为等长的p个子序列;
所述加速器在每个子序列的头部和尾部设置指针;
所述加速器调整每个子序列的头部指针和尾部指针的位置,直至得到p个不相交的子序列;
其中,子序列不相交表示所述p个子序列中的每一个子序列的头部指针指向的数据项的值与相邻的前一个子序列的尾部指针指向的数据项的值均不相等。
10.如权利要求7所述的方法,其特征在于,所述加速器使用每个线程每次从子序列中提取的一个数据块的大小与所述加速器的每个线程支持的私有缓存的大小匹配。
11.如权利要求7所述的方法,其特征在于,所述加速器将所述连接索引发送给所述CPU,包括:
所述加速器开启的p个线程中的任一个线程在完成对子序列的处理后,独立将所述任一个线程存储在第一局部连接索引数组和第二局部连接索引数组中的第一局部连接索引和第二局部连接索引,发送给所述CPU。
12.如权利要求5或11所述的方法,其特征在于,所述加速器将所述连接索引发送给所述CPU,包括:
所述加速器将所述连接索引进行压缩处理;
所述加速器将压缩处理后的所述连接索引发送给所述CPU。
13.一种中央处理器CPU,其特征在于,包括:
拆分单元,用于将当前待连接的任意两个表作为一个连接对;
提取单元,用于从所述连接对中提取第一个表的第一连接属性列和第二个表的第二连接属性列,其中,所述第一连接属性列和第二连接属性列用于连接所述第一个表和第二个表;
发送单元,用于将所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理;
接收单元,用于接收所述加速器发送的对所述第一连接属性列和第二连接 属性列进行排序连接处理后得到的连接索引;
连接单元,用于根据所述连接索引对所述第一个表和第二个表进行合并连接。
14.如权利要求13所述的CPU,其特征在于,所述提取单元具体用于:
若连接属性列的数据类型为整型,则所述提取单元直接从第一个表中提取第一连接属性列,并从第二个表中提取第二连接属性列;
若连接属性列的数据类型为非整型,则所述提取单元通过字典编码,将第一个表中和第二个表中的连接属性列映射为数据类型为整型的序列,并提取映射后的序列。
15.如权利要求13所述的CPU,其特征在于,所述发送单元具体用于:
将所述第一连接属性列和第二连接属性列进行压缩处理;
将压缩处理后的所述第一连接属性列和第二连接属性列发送到加速器进行排序连接处理。
16.如权利要求13所述的CPU,其特征在于,所述接收单元具体用于:
接收所述加速器发送的第一局部连接索引和第二局部连接索引;
所述连接单元具体用于:
根据第一局部连接索引第i位上指示的数据项的行序,从所述第一个表中提取对应的表项;以及
根据第二局部连接索引第i位上指示的数据项的行序,从所述第二个表中提取对应的表项;并
把提取的两个表项合并为一个表项;
其中,i分别等于1、2、3……n,n为第一局部连接索引和第二局部连接索引包含的总位数。
17.一种加速器,其特征在于,包括:
接收单元,用于接收中央处理器CPU发送的第一连接属性列和第二连接属性列,其中,第一连接属性列和第二连接属性列为CPU分别从当前待连接 的第一个表和第二个表中分别提取得到的;
处理单元,用于对所述第一连接属性列和第二连接属性列进行排序连接处理,得到连接索引;
发送单元,用于将所述连接索引发送给所述CPU,以用于CPU根据所述连接索引对所述第一个表和第二个表进行合并连接。
18.如权利要求17所述的加速器,其特征在于,所述处理单元具体用于:
依次从所述第一连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第一序列;
依次从所述第二连接属性列提取每一个数据项对应的值和行序,并将提取的每一个数据项对应的值和行序作为二元数组进行存储,得到第二序列;
将所述第一序列和第二序列拼接成第三序列;
对所述第三序列进行排序,得到第四序列;
对所述第四序列进行连接处理,得到连接索引。
19.如权利要求18所述的加速器,其特征在于,在对所述第四序列进行连接处理得到连接索引时,所述处理单元具体用于:
将所述第四序列划分为p个不相交的子序列,其中,所述p不大于所述加速器所支持的最大物理线程数;
开启p个线程,每个线程负责一个子序列;
使用每个线程对子序列作如下处理,并重复如下过程直至完成对子序列的处理:
每次从子序列中提取一个数据块;
对提取的数据块中包含的数据项进行分组,将数据项的值相同的数据值归为同一分组;
依次统计每个分组内来自于所述第一连接属性列和第二连接属性列的数据项的个数,分别记为Li和Ri,其中Li表示第i分组内来自所述第一连接属性列的数据项的个数,Ri表示第i分组内来自所述第二连接属性列的数据项的个 数;
若第i分组的Li和Ri均不为零,则依次对第i分组的每一个数据项作如下处理:若该数据项来自于所述第一连接属性列,则将该数据项的行序复制Ri份存储到第一局部连接索引数组中,若该数据项来自于所述第二连接属性列,则将该数据项的行序添加到临时向量中;将所述临时向量中存储的一个或多个数据项的行序作为一个整体,复制Li份到第二局部连接索引数组中。
20.如权利要求18所述的加速器,其特征在于,在对所述第三序列进行排序时,所述处理单元具体用于:
采用并行基数排序Parallel Radix Sort算法,对所述第三序列进行排序。
21.如权利要求19所述的加速器,其特征在于,在将所述第四序列划分为p个不相交的子序列时,所述处理单元具体用于:
将所述第四序列划分为等长的p个子序列;
在每个子序列的头部和尾部设置指针;
调整每个子序列的头部指针和尾部指针的位置,直至得到p个不相交的子序列;
其中,子序列不相交表示所述p个子序列中的每一个子序列的头部指针指向的数据项的值与相邻的前一个子序列的尾部指针指向的数据项的值均不相等。
22.如权利要求19所述的加速器,其特征在于,所述处理单元使用每个线程每次从子序列中提取的一个数据块的大小与所述加速器的每个线程支持的私有缓存的大小匹配。
23.如权利要求19所述的加速器,其特征在于,所述发送单元具体用于:
在所述处理单元开启的p个线程中的任一个线程在完成对子序列的处理后,独立将所述任一个线程存储在第一局部连接索引数组和第二局部连接索引数组中的第一局部连接索引和第二局部连接索引,发送给所述CPU。
24.如权利要求17或23所述的加速器,其特征在于,所述发送单元具体 用于:
将所述连接索引进行压缩处理;
将压缩处理后的所述连接索引发送给所述CPU。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510127487.4A CN104731729B (zh) | 2015-03-23 | 2015-03-23 | 一种基于异构***的表连接优化方法、cpu和加速器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510127487.4A CN104731729B (zh) | 2015-03-23 | 2015-03-23 | 一种基于异构***的表连接优化方法、cpu和加速器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104731729A true CN104731729A (zh) | 2015-06-24 |
CN104731729B CN104731729B (zh) | 2018-07-13 |
Family
ID=53455635
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510127487.4A Active CN104731729B (zh) | 2015-03-23 | 2015-03-23 | 一种基于异构***的表连接优化方法、cpu和加速器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104731729B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095455A (zh) * | 2015-07-27 | 2015-11-25 | 中国联合网络通信集团有限公司 | 一种数据连接优化方法和数据运算*** |
CN105975498A (zh) * | 2016-04-27 | 2016-09-28 | 华为技术有限公司 | 数据查询的方法、装置和*** |
CN106250348A (zh) * | 2016-07-19 | 2016-12-21 | 北京工业大学 | 一种基于gpu访存特性的异构多核架构缓存管理方法 |
CN106933919A (zh) * | 2015-12-31 | 2017-07-07 | 北京国双科技有限公司 | 数据表的连接方法及装置 |
CN109408148A (zh) * | 2018-10-25 | 2019-03-01 | 北京计算机技术及应用研究所 | 一种国产化计算平台及其应用加速方法 |
CN109727376A (zh) * | 2018-12-29 | 2019-05-07 | 北京沃东天骏信息技术有限公司 | 生成配置文件的方法、装置及售货设备 |
CN110959156A (zh) * | 2017-06-23 | 2020-04-03 | 赛灵思公司 | 到数据库加速器的并行计算卸载 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5666525A (en) * | 1995-09-21 | 1997-09-09 | The Trustees Of Columbia University In The City Of New York | System and method for performing an efficient join operation on large tables with a small main memory |
CN101311930A (zh) * | 2007-05-21 | 2008-11-26 | Sap股份公司 | 具有重复值的表的块压缩 |
CN101685449A (zh) * | 2008-09-26 | 2010-03-31 | 国际商业机器公司 | 一种用于连接多个异构分布式数据库中的表的方法和*** |
CN102870088A (zh) * | 2010-04-30 | 2013-01-09 | 微软公司 | 对电子表格中的数据项的多线程排序 |
CN102968420A (zh) * | 2011-08-31 | 2013-03-13 | 国际商业机器公司 | 数据库查询的方法和*** |
-
2015
- 2015-03-23 CN CN201510127487.4A patent/CN104731729B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5666525A (en) * | 1995-09-21 | 1997-09-09 | The Trustees Of Columbia University In The City Of New York | System and method for performing an efficient join operation on large tables with a small main memory |
CN101311930A (zh) * | 2007-05-21 | 2008-11-26 | Sap股份公司 | 具有重复值的表的块压缩 |
CN101685449A (zh) * | 2008-09-26 | 2010-03-31 | 国际商业机器公司 | 一种用于连接多个异构分布式数据库中的表的方法和*** |
CN102870088A (zh) * | 2010-04-30 | 2013-01-09 | 微软公司 | 对电子表格中的数据项的多线程排序 |
CN102968420A (zh) * | 2011-08-31 | 2013-03-13 | 国际商业机器公司 | 数据库查询的方法和*** |
Non-Patent Citations (2)
Title |
---|
巨涛: "异构众核***及其编程模型与性能优化技术研究综述", 《电子学报》 * |
王翔 等: "SQL SERVER中表联接的三种形式", 《福建电脑》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095455A (zh) * | 2015-07-27 | 2015-11-25 | 中国联合网络通信集团有限公司 | 一种数据连接优化方法和数据运算*** |
CN105095455B (zh) * | 2015-07-27 | 2018-10-19 | 中国联合网络通信集团有限公司 | 一种数据连接优化方法和数据运算*** |
CN106933919A (zh) * | 2015-12-31 | 2017-07-07 | 北京国双科技有限公司 | 数据表的连接方法及装置 |
CN106933919B (zh) * | 2015-12-31 | 2020-03-03 | 北京国双科技有限公司 | 数据表的连接方法及装置 |
CN105975498A (zh) * | 2016-04-27 | 2016-09-28 | 华为技术有限公司 | 数据查询的方法、装置和*** |
CN106250348A (zh) * | 2016-07-19 | 2016-12-21 | 北京工业大学 | 一种基于gpu访存特性的异构多核架构缓存管理方法 |
CN106250348B (zh) * | 2016-07-19 | 2019-02-12 | 北京工业大学 | 一种基于gpu访存特性的异构多核架构缓存管理方法 |
CN110959156A (zh) * | 2017-06-23 | 2020-04-03 | 赛灵思公司 | 到数据库加速器的并行计算卸载 |
CN109408148A (zh) * | 2018-10-25 | 2019-03-01 | 北京计算机技术及应用研究所 | 一种国产化计算平台及其应用加速方法 |
CN109727376A (zh) * | 2018-12-29 | 2019-05-07 | 北京沃东天骏信息技术有限公司 | 生成配置文件的方法、装置及售货设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104731729B (zh) | 2018-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104731729A (zh) | 一种基于异构***的表连接优化方法、cpu和加速器 | |
Borkar et al. | Hyracks: A flexible and extensible foundation for data-intensive computing | |
CA2997061C (en) | Method and system for parallelization of ingestion of large data sets | |
CN103559016B (zh) | 一种基于图形处理器并行计算的频繁子图挖掘方法 | |
Teubner et al. | FPGA acceleration for the frequent item problem | |
CN103309958A (zh) | Gpu和cpu混合架构下的olap星型连接查询优化方法 | |
CN114647635B (zh) | 数据处理*** | |
Sukhwani et al. | A hardware/software approach for database query acceleration with FPGAs | |
Sukhwani et al. | Database analytics: A reconfigurable-computing approach | |
Polychroniou et al. | Towards practical vectorized analytical query engines | |
CN103995827B (zh) | MapReduce计算框架中的高性能排序方法 | |
Sukhwani et al. | Large payload streaming database sort and projection on FPGAs | |
Papaphilippou et al. | An adaptable high-throughput FPGA merge sorter for accelerating database analytics | |
Vilim et al. | Aurochs: An architecture for dataflow threads | |
Kumaigorodski et al. | Fast CSV loading using GPUs and RDMA for in-memory data processing | |
He et al. | Gcim: a near-data processing accelerator for graph construction | |
US20230214389A1 (en) | Pruner selector | |
Zhou et al. | A hardware-accelerated solution for hierarchical index-based merge-join | |
CN115982311A (zh) | 一种链表的生成方法、装置、终端设备及存储介质 | |
JP2024518587A (ja) | データ依存の不規則な演算のためのプログラム可能なアクセラレータ | |
Zhan et al. | Accelerating queries of big data systems by storage-side CPU-FPGA co-design | |
US12001427B2 (en) | Systems, methods, and devices for acceleration of merge join operations | |
Budiu et al. | Large-scale machine learning using DryadLINQ | |
Zhou et al. | Parallel cube computation on modern CPUs and GPUs | |
Koppehel et al. | CuART-a CUDA-based, scalable Radix-Tree lookup and update engine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |