CN108897787B - 基于simd指令的图数据库中集合求交方法和装置 - Google Patents
基于simd指令的图数据库中集合求交方法和装置 Download PDFInfo
- Publication number
- CN108897787B CN108897787B CN201810588419.1A CN201810588419A CN108897787B CN 108897787 B CN108897787 B CN 108897787B CN 201810588419 A CN201810588419 A CN 201810588419A CN 108897787 B CN108897787 B CN 108897787B
- Authority
- CN
- China
- Prior art keywords
- base address
- graph
- vertex
- simd register
- domains
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 73
- 238000001914 filtration Methods 0.000 claims description 16
- 238000010586 diagram Methods 0.000 claims description 6
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 description 12
- 238000002372 labelling Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004904 shortening Methods 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 102000004169 proteins and genes Human genes 0.000 description 1
- 108090000623 proteins and genes Proteins 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
Images
Abstract
本申请属于数据库技术领域,具体涉及一种基于SIMD指令的图数据库中集合求交方法和装置。该方法通过将目标图中的每个图顶点的邻居顶点集合表示为一个对应的位图,然后将各位图划分为长度相等的数据域,为每个数据域设置一个对应的基址域,再利用SIMD指令对位图进行求交来获取目标图中图顶点的邻居顶点集合的求交结果,可以提高使用SIMD指令进行集合求交时的数据层级并行度,从而节省集合求交所用的时间;另外,通过字节检查方法过滤两个位图的基址域中不可能相等的基址域,再对两个位图的基址域中可能相等的基址域进行对齐比较,然后再获取相等的基址域对应的数据域的逻辑与操作结果,可以减少对两个集合的基址域进行比较的次数,节省了时间。
Description
技术领域
本申请属于数据库技术领域,具体涉及一种基于SIMD指令的图数据库中集合求交方法和装置。
背景技术
目前,基于图的应用场景十分广泛,如社交网络、生物蛋白质网络、有机化学结构、道路网络和语义网等都可以用图的形式便捷地进行表示。现在已有许多图数据库系统或者图计算引擎针对这些应用来支持图数据的存储和查询。在实践过程中,作为图算法中原子性计算单元的集合求交操作在图数据库或图计算引擎中是非常普遍的一项基本操作。
SIMD(Single instruction multiple data)即单指令多数据流,允许一条指令能够同时对多个数据进行运算,能够提高数据层级的并行度,从而提高程序的运行效率。现有技术中,在利用SIMD指令进行数据处理时的数据层级并行度依赖于SIMD指令本身的数据位宽,使数据处理的加速比有限,无法满足用户对计算速度的要求。
发明内容
有鉴于此,本申请实施例提供了一种基于SIMD指令的图数据库中集合求交方法和装置。该方法能提高使用SIMD指令进行集合求交时的数据层级并行度,并且可以减少进行集合求交时所需的CPU周期数,从而加快集合求交的速度。其技术方案如下:
第一方面,提供了一种基于SIMD指令的图算法加速方法,该方法包括:
将目标图中每个图顶点的邻居顶点集合表示为一个对应的位图,每个位图中的邻居顶点按第一顺序排列;
将每个位图划分为长度相等的数据域,删掉全零的数据域,为每个非全零的数据域设置一个对应的基址域,将每个位图中的基址域按第一顺序存储为基址域集合,每个数据域的长度等于SIMD指令的操作数的位数,基址域表示对应的数据域在位图中的位置;
对于目标图的每两个位图,从两个位图对应的基址域集合中分别从头开始连续提取数目与SIMD指令的并行度相同的基址域,并分别存储到第一SIMD寄存器和第二SIMD寄存器;
通过字节检查过滤掉第一SIMD寄存器与第二SIMD寄存器中存储的没有对应相等基址域的基址域,将剩下的第一SIMD寄存器中的基址域和第二SIMD寄存器中的基址域按第一顺序位置对齐后进行比较;
当对齐比较的基址域相等,且对齐比较的基址域所对应的数据域的逻辑与操作结果非全零时,将相等的对齐比较的基址域以及相等的对齐比较的基址域所对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器;
继续从两个位图对应的基址域集合此前未被提取过的基址域中获取存储至第三SIMD寄存器和第四SIMD寄存器中的基址域和对应的数据域的逻辑与操作结果,直至两个位图的基址域集合中不存在未经比较的基址域;
将第三SIMD寄存器和第四SIMD寄存器中存储的基址域和数据域的逻辑与操作结果作为两个位图的求交结果。
在一种可能的实现方式中,通过字节检查过滤掉第一SIMD寄存器与第二SIMD寄存器中存储的没有对应相等基址域的基址域,将第一SIMD寄存器中的基址域和第二SIMD寄存器中剩余的基址域按第一顺序位置对齐后进行比较包括:
将第一SIMD寄存器中的每个基址域的一个字节作为第一字节,将第二SIMD寄存器中的每个基址域的一个字节作为第二字节,该第一字节与第二字节在各所在基址域中的位置相同;
将每个第一字节分别复制成并行度个字节后按第一顺序排列并存储到第五SIMD寄存器,将每个第二字节按第一顺序排列后复制成并行度份并存储到第六SIMD寄存器;
将第五SIMD寄存器中存储的字节和第六SIMD寄存器中存储的字节进行对齐比较,得到指示对应字节是否相等的比较结果;
将本次得到的比较结果和前次得到的比较结果进行逻辑与操作,得到当前比较结果,若前次得到的比较结果不存在,则将本次得到的比较结果作为当前比较结果;
若当前比较结果指示第五SIMD寄存器中有一个字节在第六SIMD寄存器中对应有两个以上相等的字节,则将第一SIMD寄存器中的每个基址域的另一字节作为第一字节,并将第二SIMD寄存器中的每个基址域的另一字节作为第二字节,返回再次得到当前比较结果;
若当前比较结果指示第五SIMD寄存器中的任一个字节在第六SIMD寄存器中对应有零个或只有一个相等的字节,则过滤掉第一SIMD寄存器与第二SIMD寄存器中有零个相等字节的对应的基址域;
将第一SIMD寄存器与第二SIMD寄存器中只有一个相等字节的对应的基址域按第一顺序位置对齐后进行比较。
在一种可能的实现方式中,当对齐比较的基址域相等,且对齐比较的基址域所对应的数据域的逻辑与操作结果非全零时,将相等的对齐比较的基址域以及相等的对齐比较的基址域所对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器包括:
当对齐比较的基址域相等时,输出第一结果;当对齐比较的基址域不相等时,输出第二结果;将得到的所有第一结果和第二结果按照第一顺序存储在第七SIMD寄存器中;
将第七SIMD寄存器中存储的第一结果和第二结果对应的数据域对齐后进行逻辑与操作得到的逻辑与操作结果按照第一顺序存储在第八SIMD寄存器中;
将与第一结果对应且与非全零的逻辑与操作结果对应的基址域和非全零的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器的空闲位置。
在一种可能的实现方式中,继续从两个位图对应的基址域集合此前未被提取过的基址域中获取存储至第三SIMD寄存器和第四SIMD寄存器中的基址域和对应的数据域的逻辑与操作结果,直至两个位图的基址域集合中不存在未经比较的基址域包括:
判断第一SIMD寄存器中最后一个基址域和第二SIMD寄存器中最后一个基址域的大小是否相等;
若相等,则从两个位图对应的基址域集合中连续提取此前未被提取过的数目与SIMD指令的并行度相同的基址域分别存储到第一SIMD寄存器和第二SIMD寄存器,并再次获取存储至第三SIMD寄存器和第四SIMD寄存器的基址域和对应的数据域的逻辑与操作结果;
若不相等,则从最后一个基址域较小的SIMD寄存器对应的位图对应的基址域集合中提取此前未被提取过的数目与SIMD指令的并行度相同的基址域存储到最后一个基址域较小的SIMD寄存器中,并再次获取存储至第三SIMD寄存器和第四SIMD寄存器的基址域和对应的数据域的逻辑与操作结果;
当两个位图中的任一位图对应的基址域集合中未被提取过的基址域的个数小于SIMD指令的并行度时,将两个位图对应的基址域集合中未被提取过的基址域两两对齐后进行比较,并将两两对齐的基址域对应的数据域两两对齐后进行逻辑与操作;
当两两对齐的基址域相等,且相等的两两对齐的基址域对应的数据域的逻辑与操作结果非全零时,将相等的两两对齐的基址域和相等的两两对齐的基址域对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器。
在一种可能的实现方式中,在将目标图中每个图顶点的邻居顶点集合表示为一个对应的位图之前,该方法还包括:
设置初始值为全零的预设数量的预设数据域,每个预设数据域的长度等于SIMD指令的操作数的位数,所有预设数据域占据的位数与目标图的图顶点数量相同;
将目标图的图顶点按第二顺序放入预设数据域中,存储目标图的图顶点的原始标号与目标图的图顶点在预设数据域中的放入位置的对应关系;
根据目标图图顶点的原始标号与目标图图顶点在预设数据域中放入位置的对应关系为目标图的图顶点重标号。
在一种可能的实现方式中,将目标图的图顶点按第二顺序放入预设数据域中包括:
将目标图的所有图顶点按照邻居顶点数量的大小从大到小进行前后排序,并将排序后的图顶点同时存储在有序链表和优先队列中;
在当前预设数据域为全零时,将有序链表中当前最靠前的图顶点放入当前预设数据域中,并将已放入当前预设数据域的图顶点从有序链表和优先队列中删除;
在当前预设数据域为非全零时,将优先队列中当前权值最大的图顶点放入当前预设数据域中,并将已放入当前预设数据域的图顶点从有序链表和优先队列中删除,权值反映了如果将对应的图顶点放入当前预设数据域中,所能够减少的将目标图的所有位图划分的数据域的数量;
在将最靠前的图顶点或者当前权值最大的图顶点从优先队列中删除之后,更新优先队列中剩余的图顶点的权值。
在一种可能的实现方式中,优先队列中的图顶点的初始权值为零,更新优先队列中剩余的图顶点的权值包括:
对于有向目标图,根据下式更新剩余的图顶点的权值:
式中,vi表示目标图中第i个图顶点,αo(vi)表示图顶点vi每次权值的增加量,|NO(vi)|为图顶点vi的所有出边邻居顶点的数量,V为目标图中所有图顶点的集合,|NO(v)|为目标图的图顶点v的所有出边邻居顶点的数量,|NI(v)|为目标图的图顶点v的所有入边邻居顶点的数量;
对于无向目标图,根据下式更新剩余的图顶点的权值:
式中,|N(vi)|为图顶点vi的所有邻居顶点的数量,|N(v)|为目标图的图顶点v的所有邻居顶点的数量。
在一种可能的实现方式中,对于有向目标图,更新优先队列中剩余的图顶点的权值还包括:
在将最靠前的图顶点或者当前权值最大的图顶点放入当前预设数据域后,将最靠前的图顶点或者当前权值最大的图顶点的入边邻居顶点放入第一集合,并将最靠前的图顶点或者当前权值最大的图顶点的出边邻居顶点放入第二集合;
检验第一集合中的各顶点的每个出边邻居顶点是否已被放入任一预设数据域,若第一集合中任一顶点有未被放入任一预设数据域的出边邻居顶点,则增加未被放入任一预设数据域的出边邻居顶点的权值;
检验第二集合中的各顶点的每个入边邻居顶点是否已被放入任一预设数据域,若第二集合中任一顶点有未被放入任一预设数据域的入边邻居顶点,则增加未被放入任一预设数据域的入边邻居顶点的权值。
在一种可能的实现方式中,对于无向目标图,更新优先队列中剩余的图顶点的权值还包括:
在将最靠前的图顶点或者当前权值最大的图顶点放入当前预设数据域后,将最靠前的图顶点或者当前权值最大的图顶点的邻居顶点放入第三集合;
检验第三集合中的各顶点的每个邻居顶点是否已被放入任一预设数据域,若第三集合中的任一顶点有未被放入任一预设数据域的邻居顶点,则增加未被放入任一预设数据域的邻居顶点的权值。
第二方面,本申请实施例提供了一种计算机设备,该计算机设备包括处理器和存储器。其中,存储器存储有一个或者一个以上的程序,该一个或一个以上的程序被处理器用来执行上述实施例所述的基于SIMD指令的图数据库中集合求交方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
通过将目标图中的每个图顶点的邻居顶点集合表示为一个对应的位图,然后将各位图划分为长度相等的数据域,并删掉全零的数据域,为每个非全零的数据域设置一个对应的基址域,将各位图的基址域存储为一个对应的基址域集合,在对目标图的任意两个图顶点的邻居顶点集合进行求交操作时,可以先利用SIMD指令比较两个集合对应的位图的基址域是否相等以判断两个位图在相同的位置处是否都有非零的数据域,然后再获取相等的基址域对应的数据域的逻辑与操作结果;其中,在对两个位图的基址域进行比较时,先通过字节检查方法过滤两个基址域集合中不可能相等的基址域,从而可以减少对两个集合的基址域进行比较的次数,即可以减少进行集合求交时所需的CPU周期数;当相等的两个基址域对应的数据域的逻辑与操作结果非全零时,将相等的基址域和对应的数据域的逻辑与操作结果存储为两个集合的求交结果。该方法可以提高使用SIMD指令进行集合求交时的数据层级并行度,从而可以在保证结果准确性的前提下缩短集合求交所用的时间。通过将目标图的图顶点重新标号,可以有效减少将目标图的各顶点对应的位图进行划分后得到的数据域的数量,从而可以减少集合求交过程中的比较操作次数,进一步加速了集合求交操作的执行效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请第一实施例提供的基于SIMD指令的图数据库中集合求交方法的流程图;
图2是本申请第二实施例提供的基于SIMD指令的图数据库中集合求交方法的流程图;
图3示例性示出了一种BSR编码方案;
图4示例性示出了一种字节检查过滤方法;
图5示例性示出了一种对齐检查与数据域求交方法;
图6是本申请第三实施例提供的基于SIMD指令的图数据库中集合求交方法的流程图;
图7示例性示出了一种图顶点重新标号的结果。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在本申请一种示例性实施环境中:由于相关技术在采用SIMD指令处理数据时,过度依赖于SIMD指令本身的数据位宽,使得数据处理的加速比有限,无法满足用户对计算速度的要求。举例来说,若一条SIMD指令可以同时比较4个数据元素,则与不使用SIMD指令的算法相比,该算法最多可以达到4倍的加速比。为了突破这一限制,在一种可能的实现方式中,本申请提供的基于SIMD指令的图数据库中集合求交方法可以使SIMD指令的一个操作数表示集合中的多个数据元素,使一条SIMD指令能够同时处理更多的数据元素,提高在使用SIMD指令处理数据时数据层级的并行度,从而提高数据处理速度。
另外,在一种可能的实现方式中,以以邻接表形式存储的图为例,对本申请提供的基于SIMD指令的图数据库中集合求交方法进行说明。
通常情况下,图中的每一个顶点对应一个顶点ID,各顶点ID决定了图中的顶点和边在存储时的位置分布。在对以邻接表形式存储的图进行集合求交时,图的顶点ID是影响集合求交操作性能的一个重要因素。对于要进行集合求交操作的目标图G(V,E),其邻接表为|V|个有序集合,每个顶点对应一个有序集合,每个有序集合顺序地记录了对应顶点的邻居顶点的顶点ID。其中,V表示目标图G中的顶点,E表示目标图G中各顶点之间的边。需要说明的是,在使用邻接表存储有向目标图时,各顶点对应的有序集合中存储的是各顶点的出边顶点或者入边顶点的顶点ID。
本申请第一实施例提供了一种基于SIMD指令的图数据库中集合求交方法,如图1所示,该方法包括:
步骤S11,将目标图中每个图顶点的邻居顶点集合表示为一个对应的位图,每个位图中的邻居顶点按第一顺序排列;
步骤S12,将每个位图划分为长度相等的数据域,删掉全零的数据域,为每个非全零的数据域设置一个对应的基址域,将每个位图中的基址域按第一顺序存储为基址域集合,每个数据域的长度等于SIMD指令的操作数的位数,基址域表示对应的数据域在位图中的位置;
步骤S13,对于目标图的每两个位图,从两个位图对应的基址域集合中分别从头开始连续提取数目与SIMD指令的并行度相同的基址域,并分别存储到第一SIMD寄存器和第二SIMD寄存器;
步骤S14,通过字节检查过滤掉第一SIMD寄存器与第二SIMD寄存器中存储的没有对应相等基址域的基址域,将剩下的第一SIMD寄存器中的基址域和第二SIMD寄存器中的基址域按第一顺序位置对齐后进行比较;
步骤S15,当对齐比较的基址域相等,且对齐比较的基址域所对应的数据域的逻辑与操作结果非全零时,将相等的对齐比较的基址域以及相等的对齐比较的基址域所对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器;
步骤S16,继续从两个位图对应的基址域集合此前未被提取过的基址域中获取存储至第三SIMD寄存器和第四SIMD寄存器中的基址域和对应的数据域的逻辑与操作结果,直至两个位图的基址域集合中不存在未经比较的基址域;
步骤S17,将第三SIMD寄存器和第四SIMD寄存器中存储的基址域和数据域的逻辑与操作结果作为两个位图的求交结果。
在一种可能的实现方式中,通过字节检查过滤掉第一SIMD寄存器与第二SIMD寄存器中存储的没有对应相等基址域的基址域,将第一SIMD寄存器中的基址域和第二SIMD寄存器中剩余的基址域按第一顺序位置对齐后进行比较包括:
将第一SIMD寄存器中的每个基址域的一个字节作为第一字节,将第二SIMD寄存器中的每个基址域的一个字节作为第二字节,该第一字节与第二字节在各所在基址域中的位置相同;
将每个第一字节分别复制成并行度个字节后按第一顺序排列并存储到第五SIMD寄存器,将每个第二字节按第一顺序排列后复制成并行度份并存储到第六SIMD寄存器;
将第五SIMD寄存器中存储的字节和第六SIMD寄存器中存储的字节进行对齐比较,得到指示对应字节是否相等的比较结果;
将本次得到的比较结果和前次得到的比较结果进行逻辑与操作,得到当前比较结果,若前次得到的比较结果不存在,则将本次得到的比较结果作为当前比较结果;
若当前比较结果指示第五SIMD寄存器中有一个字节在第六SIMD寄存器中对应有两个以上相等的字节,则将第一SIMD寄存器中的每个基址域的另一字节作为第一字节,并将第二SIMD寄存器中的每个基址域的另一字节作为第二字节,返回再次得到当前比较结果;
若当前比较结果指示第五SIMD寄存器中的任一个字节在第六SIMD寄存器中对应有零个或只有一个相等的字节,则过滤掉第一SIMD寄存器与第二SIMD寄存器中有零个相等字节的对应的基址域;
将第一SIMD寄存器与第二SIMD寄存器中只有一个相等字节的对应的基址域按第一顺序位置对齐后进行比较。
在一种可能的实现方式中,当对齐比较的基址域相等,且对齐比较的基址域所对应的数据域的逻辑与操作结果非全零时,将相等的对齐比较的基址域以及相等的对齐比较的基址域所对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器包括:
当对齐比较的基址域相等时,输出第一结果;当对齐比较的基址域不相等时,输出第二结果;将得到的所有第一结果和第二结果按照第一顺序存储在第七SIMD寄存器中;
将第七SIMD寄存器中存储的第一结果和第二结果对应的数据域对齐后进行逻辑与操作得到的逻辑与操作结果按照第一顺序存储在第八SIMD寄存器中;
将与第一结果对应且与非全零的逻辑与操作结果对应的基址域和非全零的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器的空闲位置。
在一种可能的实现方式中,继续从两个位图对应的基址域集合此前未被提取过的基址域中获取存储至第三SIMD寄存器和第四SIMD寄存器中的基址域和对应的数据域的逻辑与操作结果,直至两个位图的基址域集合中不存在未经比较的基址域包括:
判断第一SIMD寄存器中最后一个基址域和第二SIMD寄存器中最后一个基址域的大小是否相等;
若相等,则从两个位图对应的基址域集合中连续提取此前未被提取过的数目与SIMD指令的并行度相同的基址域分别存储到第一SIMD寄存器和第二SIMD寄存器,并再次获取存储至第三SIMD寄存器和第四SIMD寄存器的基址域和对应的数据域的逻辑与操作结果;
若不相等,则从最后一个基址域较小的SIMD寄存器对应的位图对应的基址域集合中提取此前未被提取过的数目与SIMD指令的并行度相同的基址域存储到最后一个基址域较小的SIMD寄存器中,并再次获取存储至第三SIMD寄存器和第四SIMD寄存器的基址域和对应的数据域的逻辑与操作结果;
当两个位图中的任一位图对应的基址域集合中未被提取过的基址域的个数小于SIMD指令的并行度时,将两个位图对应的基址域集合中未被提取过的基址域两两对齐后进行比较,并将两两对齐的基址域对应的数据域两两对齐后进行逻辑与操作;
当两两对齐的基址域相等,且相等的两两对齐的基址域对应的数据域的逻辑与操作结果非全零时,将相等的两两对齐的基址域和相等的两两对齐的基址域对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器。
在一种可能的实现方式中,在将目标图中每个图顶点的邻居顶点集合表示为一个对应的位图之前,该方法还包括:
设置初始值为全零的预设数量的预设数据域,每个预设数据域的长度等于SIMD指令的操作数的位数,所有预设数据域占据的位数与目标图的图顶点数量相同;
将目标图的图顶点按第二顺序放入预设数据域中,存储目标图的图顶点的原始标号与目标图的图顶点在预设数据域中的放入位置的对应关系;
根据目标图图顶点的原始标号与目标图图顶点在预设数据域中放入位置的对应关系为目标图的图顶点重标号。
在一种可能的实现方式中,将目标图的图顶点按第二顺序放入预设数据域中包括:
将目标图的所有图顶点按照邻居顶点数量的大小从大到小进行前后排序,并将排序后的图顶点同时存储在有序链表和优先队列中;
在当前预设数据域为全零时,将有序链表中当前最靠前的图顶点放入当前预设数据域中,并将已放入当前预设数据域的图顶点从有序链表和优先队列中删除;
在当前预设数据域为非全零时,将优先队列中当前权值最大的图顶点放入当前预设数据域中,并将已放入当前预设数据域的图顶点从有序链表和优先队列中删除,权值反映了如果将对应的图顶点放入当前预设数据域中,所能够减少的将目标图的所有位图划分的数据域的数量;
在将最靠前的图顶点或者当前权值最大的图顶点从优先队列中删除之后,更新优先队列中剩余的图顶点的权值。
在一种可能的实现方式中,优先队列中的图顶点的初始权值为零,更新优先队列中剩余的图顶点的权值包括:
对于有向目标图,根据下式更新剩余的图顶点的权值:
式中,vi表示目标图中第i个图顶点,αO(vi)表示图顶点vi每次权值的增加量,|NO(vi)|为图顶点vi的所有出边邻居顶点的数量,V为目标图中所有图顶点的集合,|NO(v)|为目标图的图顶点v的所有出边邻居顶点的数量,|NI(v)|为目标图的图顶点v的所有入边邻居顶点的数量;
对于无向目标图,根据下式更新剩余的图顶点的权值:
式中,|N(vi)|为图顶点vi的所有邻居顶点的数量,|N(v)|为目标图的图顶点v的所有邻居顶点的数量。
在一种可能的实现方式中,对于有向目标图,更新优先队列中剩余的图顶点的权值还包括:
在将最靠前的图顶点或者当前权值最大的图顶点放入当前预设数据域后,将最靠前的图顶点或者当前权值最大的图顶点的入边邻居顶点放入第一集合,并将最靠前的图顶点或者当前权值最大的图顶点的出边邻居顶点放入第二集合;
检验第一集合中的各顶点的每个出边邻居顶点是否已被放入任一预设数据域,若第一集合中任一顶点有未被放入任一预设数据域的出边邻居顶点,则增加未被放入任一预设数据域的出边邻居顶点的权值;
检验第二集合中的各顶点的每个入边邻居顶点是否已被放入任一预设数据域,若第二集合中任一顶点有未被放入任一预设数据域的入边邻居顶点,则增加未被放入任一预设数据域的入边邻居顶点的权值。
在一种可能的实现方式中,对于无向目标图,更新优先队列中剩余的图顶点的权值还包括:
在将最靠前的图顶点或者当前权值最大的图顶点放入当前预设数据域后,将最靠前的图顶点或者当前权值最大的图顶点的邻居顶点放入第三集合;
检验第三集合中的各顶点的每个邻居顶点是否已被放入任一预设数据域,若第三集合中的任一顶点有未被放入任一预设数据域的邻居顶点,则增加未被放入任一预设数据域的邻居顶点的权值。
本申请实施例提供的技术方案带来的有益效果至少包括:
通过将目标图中的每个图顶点的邻居顶点集合表示为一个对应的位图,然后将各位图划分为长度相等的数据域,并删掉全零的数据域,为每个非全零的数据域设置一个对应的基址域,将各位图的基址域存储为一个对应的基址域集合,在对目标图的任意两个图顶点的邻居顶点集合进行求交操作时,可以先利用SIMD指令比较两个集合对应的位图的基址域是否相等以判断两个位图在相同的位置处是否都有非零的数据域,然后再获取相等的基址域对应的数据域的逻辑与操作结果;其中,在对两个位图的基址域进行比较时,先通过字节检查方法过滤两个基址域集合中不可能相等的基址域,从而可以减少对两个集合的基址域进行比较的次数,即可以减少进行集合求交时所需的CPU周期数;当相等的两个基址域对应的数据域的逻辑与操作结果非全零时,将相等的基址域和对应的数据域的逻辑与操作结果存储为两个集合的求交结果。该方法可以提高使用SIMD指令进行集合求交时的数据层级并行度,从而可以在保证结果准确性的前提下缩短集合求交所用的时间。通过将目标图的图顶点重新标号,可以有效减少将目标图的各顶点对应的位图进行划分后得到的数据域的数量,从而可以减少集合求交过程中的比较操作次数,进一步加速了集合求交操作的执行效率。
本申请第二实施例提供了一种基于SIMD指令的图数据库中集合求交方法,如图2所示,该方法包括:
步骤S21,将目标图中每个图顶点的邻居顶点集合表示为一个对应的位图,每个位图中的邻居顶点按第一顺序排列。
对于以邻接表形式存储的目标图,在对该目标图的有序集合进行集合求交操作时,为了使SIMD指令的一个操作数可以表示有序集合中的多个数据元素,本实施例提供的基于SIMD指令的图数据库中集合求交方法提出了一种BSR(Base and staterepresentation,基址域和数据域表示)编码方案,可以将目标图中每个图顶点对应的有序集合表示为对应的位图(Bitmap),如此就可以通过对两个位图进行求交来获取对应的集合的求交结果。由于各有序集合中的图顶点是按照各顶点在目标图中的位置进行排列的,所以在将各有序集合表示为位图时,各图顶点在位图中的表示顺序也是按照其在目标图中的位置进行排列的。在一种可能的实现方式中,各图顶点可以以数字的形式表示其在目标图中的位置,如v0表示目标图中顺序排在第0位的顶点,v1表示目标图中顺序排在第1位的顶点。举例来说,假如v0对应的有序集合为(v4,v6,v15),则用16位的位图表示该有序集合为0000 1010 0000 0001;假如v4对应的有序集合为(v0,v6,v8,v11,v13),则用16位的位图表示该有序集合为1000 0010 1001 0100。在求v0和v4对应的有序集合的交集时,就可以利用SIMD指令对二者对应的位图进行求交。由于位图在内存中一般使用整数数组的形式存储,所以可以用4个4位的整数表示v0和v4对应的位图。假设一个SIMD寄存器的位宽为16位,则一条SIMD指令就可以同时比较4个4位的整数,此时就可以利用SIMD指令对v0和v4对应的位图进行求交,得到的位图求交结果为0000 0010 0000 0000,即v0和v4对应的有序集合的交集为(v6)。
步骤S22,将每个位图划分为长度相等的数据域,删掉全零的数据域,为每个非全零的数据域设置一个对应的基址域,将每个位图中的基址域按第一顺序存储为基址域集合,每个数据域的长度等于SIMD指令的操作数的位数,基址域集合中的各基址域表示对应的数据域在位图中的位置。
在以位图表示有序集合时,如上所述的v0对应的有序集合对应的位图中,由于v0对应的有序集合中的数据元素较少但数据范围很大,就容易导致v0对应的有序集合对应的位图变的十分稀疏,即位图中绝大数位都是0,只有极少数的1。此时,一方面位图本身将会消耗大量空间来存储这些冗余的0;另一方面,在以位图的形式对两个集合进行求交操作中,对于全零的数据块进行求交也是冗余的。为了解决这一问题,在一种可能的实现方式中,本实施例提供的BSR编码方案对位图进行如下改进:
首先,将各位图切分成长度(位宽)相等的数据域,每个数据域表示了位图的部分信息,每个数据域的长度等于SIMD指令的操作数的位数。举例来说,假设一个SIMD指令寄存器的位宽为128位,则一条SIMD指令可以实现同时比较4个32位或者8个16位的数据元素,此时就可以将各位图切分为长度为32位或16位的数据域,且此时SIMD指令的并行度为4或者8。如图3所示,图3中各数据域的长度w为32位。需要说明的是,为了避免位图的长度不能被SIMD指令的操作数的位数整除,所以在将目标图中的有序集合表示为位图时,各位图的长度可以是SIMD指令的操作数的位数的整数倍。
在将位图划分为数据域之后,可以为每个数据域设置一个对应的基址域,基址域表示了对应的数据域在位图中的位置。如图3所示,base values(基址域集合)中的基址域“0、2、3、256”分别表示了将位图划分为数据域后的state chunks(数据域集合)中第1个、第3个、第4个和第257个数据域分别为“...0011、...1110、...0110、...1011”。
在将位图划分为数据域之后,删掉全零的数据域及其对应的基址域。在对各位图进行切分之后,如果某一数据域全部由0组成,则可以将该数据域及其对应的基址域进行删除。如图3所示,图3中的all zero chunk(全零数据域)表示该数据域全部由0组成,所以就可以将该数据域及其对应的基址域进行删除。
在对全零的数据域进行删除之后,一方面节省了存储空间,另一方面也可以避免在以位图的形式对两个集合进行求交操作时对全零的数据域进行求交的冗余操作。在将全零的数据域进行删除之后,为了便于SIMD指令能够一次将多个连续的基址域或数据域读取到SIMD寄存器中,可以将剩余的数据域和对应的基址域按顺序存储在数据域集合和基址域集合中。
步骤S23,对于目标图的每两个位图,从两个位图对应的基址域集合中分别从头开始连续提取数目与SIMD指令的并行度相同的基址域,并分别存储到第一SIMD寄存器和第二SIMD寄存器。
步骤S24,通过字节检查过滤掉第一SIMD寄存器与第二SIMD寄存器中存储的没有对应相等基址域的基址域,将剩下的第一SIMD寄存器中的基址域和第二SIMD寄存器中的基址域按第一顺序位置对齐后进行比较。
步骤S25,当对齐比较的基址域相等,且对齐比较的基址域所对应的数据域的逻辑与操作结果非全零时,将相等的对齐比较的基址域以及相等的对齐比较的基址域所对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器。
步骤S26,继续从两个位图对应的基址域集合此前未被提取过的基址域中获取存储至第三SIMD寄存器和第四SIMD寄存器中的基址域和对应的数据域的逻辑与操作结果,直至两个位图的基址域集合中不存在未经比较的基址域。
在利用SIMD指令对目标图中每两个有序集合对应的位图进行求交操作时,可以先分别从两个位图对应的基址域集合中从头开始连续提取数目与SIMD指令的并行度相同的基址域分别存储到第一SIMD寄存器和第二SIMD寄存器。与直接对第一SIMD寄存器和第二SIMD寄存器中存储的基址域进行两两比较不同的是,本实施例提供的基于SIMD指令的图数据库中集合求交方法提出了一种基于字节检查的快速过滤方法。
在一种可能的实现方式中,该快速过滤方法包括:
步骤101,读入基址域。举例来说,如图4所示,假如SIMD指令的并行度为4,并且是对位图a和位图b进行集合求交,则可以先使用SIMD指令分别从位图a和位图b对应的基址域集合base_a和base_b中从头开始连续提取4个基址域,并分别存储到第一SIMD寄存器bv_a和第二SIMD寄存器bv_b。
步骤102,通过字节检查对bv_a和bv_b中存储的基址域进行过滤。具体地操作方式可以是:(1)、将bv_a中每个基址域的一个字节作为第一字节,将bv_b中每个基址域的一个字节作为第二字节。其中,第一字节与第二字节在各所在基址域中的位置相同。举例来说,可以将bv_a和bv_b中基址域的最低字节分别作为第一字节和第二字节。
(2)、将每个第一字节分别复制成4个字节后按第一顺序排列并存储到第五SIMD寄存器,将每个第二字节按第一顺序排列后复制成4份并存储到第六SIMD寄存器(gather andscatter bytes,字节收集并重新分发)。该步骤可以通过具有排序功能的SIMD指令实现,如_mm_shuffle_epi8()(SIMD单字节数据重排列指令)等。
(3)、将第五SIMD寄存器中存储的字节和第六SIMD寄存器中存储的字节进行对齐比较,得到指示对应字节是否相等的比较结果。该步骤可以通过具有比较功能的SIMD指令实现,如_mm_cmpeq_epi8()(SIMD单字节数据相等比较指令)等。如图4所示,在将第一字节和第二字节复制并按顺序分别存储在第五SIMD寄存器和第六SIMD寄存器之后,可以将第五SIMD寄存器和第六SIMD寄存器中存储的16位字节分别对齐后进行比较(compare eachbyte pair,对齐比较每个字节),并将得到的比较结果存储在16位的过滤器(filter)中(shift resultto a 16-bit value,将比较结果存储在16位的过滤器中)。过滤器中的每一位均表示一对字节的比较结果,1表示相等,0表示不相等。
在得到过滤器中的16个比较结果之后,可以将过滤器中的16位划分为4个由4位组成的组,每一个组记录了bv_a中的一个基址域的第一字节与bv_b中4个基址域的第二字节的比较结果。如图4所示,可以把这4个组定义为以下三种情况:多匹配组(multi-hitgroup),即该组包含多个值为1的位;单匹配组(one-hit group),即该组包含恰好一个值为1的位;零匹配组(no-hit group),即该组的4位的值全部为0。在图4的例子中,过滤器中第一个组为“1001”,则该组表示bv_a中第一个基址域的第一字节与bv_b中第一个基址域的第二字节相等,同时也与bv_b中第四个基址域的第二字节相等,即该多匹配组意味着bv_a中第一个基址域有可能与bv_b中第一个基址域相等或者与bv_b中第四个基址域相等。需要说明的是,由于每个基址域集合中的基址域元素是各不相同的,因此不可能出现bv_a中的一个基址域与多个bv_b中的基址域相等的情况。但由于在字节检查中只比较了每个基址域的一个字节,所以在过滤器中会出现多匹配组的情况。若过滤器的4个组中有多匹配组的出现,则可以对bv_a和bv_b中的基址域进行下一轮字节检查,即可以再次比较bv_a和bv_b中的基址域的另一字节是否相等。举例来说,可以再将bv_a和bv_b中的基址域的次低字节分别作为第一字节和第二字节,然后再以相同的方法获取第一字节和第二字节的比较结果。在获得bv_a和bv_b中的基址域的次低字节的比较结果之后,可以将该结果与bv_a和bv_b中的基址域的最低字节的比较结果进行逻辑与(bitwise AND)操作,然后将逻辑与操作的结果保存在过滤器中。以此类推,直至过滤器中不出现多匹配组为止。可以理解地,如果两个基址域不同,则两个基址域对应的字节至少有一个字节不相等,所以通过继续比较bv_a和bv_b中基址域的其他字节,最终可以将多匹配组变为单匹配组或零匹配组。
对于过滤器中仅有零匹配组的情况,则表明bv_a和bv_b中的基址域至少有一个字节不相等,即表明bv_a和bv_b中的任意两个基址域都不相等,此时可以进入步骤106,直接进行下一轮基址域的比较。
在本步骤中,通过字节检查方法可以将bv_a和bv_b中不可能相等的基址域过滤掉,然后在接下来的步骤中,无需再将bv_a和bv_b中的基址域进行两两比较,而只需要将有可能的相等的基址域即单匹配组对应的基址域进行对齐比较即可,可以减少使用的SIMD指令的数量,从而减少集合求交所用的CPU周期数。
步骤103,读入数据域。如图5所示,可以使用SIMD指令分别从位图a和位图b对应的数据域集合state_a和state_b中连续提取4个与bv_a和bv_b中的基址域对应的数据域读入寄存器sv_a和sv_b中。
步骤104,对齐检查与数据域求交。由于在步骤102中仅对bv_a和bv_b中的基址域的有限个数的字节进行了检查,所以不能保证过滤器中单匹配组对应的字节对应的基址域一定相等,所以可以称单匹配组对应的基址域为一组潜在匹配组。为了验证潜在匹配组对应的基址域是否相等,可以对步骤102中获取的潜在匹配组对应的基址域进行对齐比较。
根据步骤102以及图4中的比较结果可知,bv_a中的第一个基址域、第三个基址域和第四个基址域分别与bv_b中的第一个基址域、第二个基址域和第三个基址域形成潜在匹配组。而由于bv_a中的第二个基址域在过滤器中对应了一个零匹配组,所以bv_a中的第二个基址域无法与bv_b中任一个基址域组成潜在匹配组。如图5所示,可以通过具有排序功能的SIMD指令将bv_b中的4个基址域进行重新排列(align chunks,基址域对齐)。通过将bv_b中的基址域位置进行调整,可以使三对潜在匹配的基址域进行对齐比较(compare 4basepairs,对齐比较基址域)。将潜在匹配的基址域进行对齐比较之后,可以将比较结果依次保存至第七SIMD寄存器(bv_mask)。在图5中,由于bv_a中的第二个基址域不可能与bv_b中任一个基址域相等,所以虽然bv_a中的第二个基址域没有潜在匹配,但仍可以保留一份bv_b中的第二个基址域在它的原始位置,这种对非潜在匹配组的基址域的处理方式并不会影响最终结果的正确性。在将潜在匹配的基址域进行比较时,由于比较结果只有相等或不相等两种结果,所以可以将比较结果设置为第一结果和第二结果。举例来说,可以将相等的比较结果设置为第一结果,并将不相等的比较结果设置为第二结果。进一步地,可以将第一结果设置为1....1,并将第二结果设置为0....0。由于在上述步骤中数据域的长度为32位,所以这里的1....1和0....0分别表示32位全1和32位全0。
相应地,可以将步骤103中提取的数据域中潜在匹配的基址域对应的数据域也按照与潜在匹配的基址域相同的位置对应关系对齐后进行逻辑与操作(bitwise-AND statechunks,进行数据域逻辑与操作),并将逻辑与操作的结果保存至第八SIMD寄存器(sv_c)。在本步骤中,判断基址域是否相等的目的是为了判断将两个位图进行划分后,在同样的位置处是否具有非全零的数据域。
步骤105,收集结果。在将潜在匹配的基址域和对应的数据域进行比较和逻辑与操作之后,可以将相等的基址域和相等的基址域对应的数据域的求交结果收集起来。判断一个基址域和其相对应的数据域的求交结果是否应当存储至第三SIMD寄存器和第四SIMD寄存器中,需要考虑两个方面:(1)在步骤104中对基址域比较后bv_mask中对应的结果为“1....1”;(2)且对应数据域求交后的结果非全零。
如图5所示,bv_a中第一个基址域和第三个基址域对应的bv_mask中的结果为“1....1”,说明bv_a中第一个基址域和第三个基址域分别和经重新排列后的bv_b中第一个基址域和第三个基址域相等。但是bv_a中第一个基址域对应的数据域和bv_b中第一个基址域对应的数据域的逻辑与操作结果为全零,说明该结果对应的两个数据域中不具有公共的集合元素,因此这两个数据域的逻辑与操作结果和对应的基址域不可以存储至第四SIMD寄存器和第三SIMD寄存器。最终,可以存储至第三SIMD寄存器和第四SIMD寄存器中的基址域和数据域求交结果为bv_a中的第三个基址域和其对应的数据域的逻辑与操作结果。由于第三SIMD寄存器和第四SIMD寄存器中可能已存储有上次获得的结果,所以,在将本次获得的比较结果存储至第三SIMD寄存器和第四SIMD寄存器中时,需要按照基址域的顺序依次存储至第三SIMD寄存器和第四SIMD寄存器的空闲位置。
步骤106,从base_a和base_b未被提取过的基址域中获取存储至第三SIMD寄存器中的基址域以及对应的存储至第四SIMD寄存器中的数据域求交结果。在将bv_a中的第三个基址域和其对应的数据域逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器之后,比较bv_a和bv_b中最后一个基址域的大小,即比较bv_a中和bv_b中第四个基址域的大小。
若bv_a中和bv_b中第四个基址域大小相等,则从base_a和base_b未被提取过的基址域中分别连续提取4个基址域存储至bv_a和bv_b中,然后再按照相同的方法获取存储至第三SIMD寄存器和第四SIMD寄存器的基址域和数据域的逻辑与操作结果。
若bv_a中和bv_b中第四个基址域大小不相等,如bv_a中第四个基址域小于bv_b中第四个基址域,则从base_a未被提取过的基址域中分别连续提取4个基址域存储至bv_a中,而bv_b中的基址域不变,然后再按照相同的方法获取存储至第三SIMD寄存器和第四SIMD寄存器的基址域和数据域的逻辑与操作结果。
当base_a和base_b中任一基址域的数量不能被SIMD指令的并行度整除时,即当base_a和base_b中任一未被提取过的基址域的个数小于SIMD指令的并行度时,则将base_a和base_b中剩余的基址域两两对齐后进行比较,并将剩余的基址域对应的数据域两两对齐后进行逻辑与操作。当两两对齐比较的基址域相等且相等的基址域对应的数据域的逻辑与操作结果非全零时,则将相等的基址域和对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器。
步骤S27,将第三SIMD寄存器和第四SIMD寄存器中存储的基址域和数据域的逻辑与操作结果作为两个位图的求交结果。
在经过上述各步骤之后,第三SIMD寄存器和第四SIMD寄存器中存储的基址域和数据域的逻辑与操作结果即为两个位图的求交结果。可以理解地,如果要对目标图中其他顶点的邻居顶点集合进行求交操作也可以采用类似的方法。如果要对整个目标图中所有顶点的邻居顶点集合进行求交操作,则可以将两两位图求交获得的求交结果采用类似的方法再次求交。
本实施例提供的基于SIMD指令的图数据库中集合求交方法所带来的有益效果至少在于:
通过将目标图中的每个图顶点的邻居顶点集合表示为一个对应的位图,根据SIMD指令的操作数的位数将每个位图划分为长度相等的数据域,删掉全零的数据域,为每个非全零的数据域设置一个对应的基址域,并将每个位图的基址域存储为基址域集合,可以提高使用SIMD指令对集合求交时的数据层级并行度,即可以在使用SIMD指令对集合求交时一次比较更多的数据,解决了现有技术中在采用SIMD指令时过于依赖SIMD指令本身的数据位宽而加速比有限的问题。另外,删掉全零的数据域可以节省位图所占的内存,同时也可以避免在以位图的形式对集合求交时对全零数据域求交的冗余操作,节省了时间。
在对目标图的任意两个图顶点的邻居顶点集合进行求交操作时,先利用SIMD指令比较两个集合对应的位图的基址域是否相等以判断两个位图在相同的位置处是否都有非零的数据域,然后再获取相等的基址域对应的数据域的逻辑与操作结果。其中,在对两个位图的基址域进行比较时,先通过字节检查方法过滤两个基址域集合中不可能相等的基址域,从而可以减少对两个集合的基址域进行比较的次数,即可以减少使用的SIMD指令的数量,从而减少集合求交所用的CPU周期数,节省了集合求交所用的时间。
本申请第三实施例提供了一种基于SIMD指令的图数据库中集合求交方法,如图6所示,该方法与上述第二实施例中的方法的不同之处在于,在对目标图的两个位图进行求交之前,对目标图的图顶点进行了重新标号。
在本实施例提供的基于SIMD指令的图数据库中集合求交方法的一种示例性实施环境中,在对目标图的两个位图进行求交操作时,目标图的顶点ID是影响集合求交操作性能的一个重要因素。举例来说,对于以邻接表形式存储的目标图,如果v3的邻居顶点集合为(v4,v6,v8,v14),则用16位的位图表示该邻居顶点集合为0000 1010 1000 0010。在采用BSR编码方案对目标图的各位图进行数据域切分时,如果数据域的长度为8,即目标图中的图顶点v0-v7被分配到一个数据域,图顶点v8-v15被分配到另一个数据域。所以对于v3来说,就需要将其对应的位图划分为两个数据域,即“0000 1010”和“1000 0010”。由于在进行集合求交操作时,数据域的数量越多,则获取到最终结果所用的时间会越长,所以如果将v3对应的位图划分为一个数据域,就会大大减少集合求交操作所用的时间。
在一种可能的实现方式中,为了减少对目标图进行集合求交操作时所用数据域的数量,本实施例提供的基于SIMD指令的图数据库中集合求交方法提出了一种目标图顶点重标号的方法。
步骤S61,设置初始值为全零的预设数量的预设数据域,每个预设数据域的长度等于SIMD指令的操作数的位数,所有预设数据域占据的位数与目标图的图顶点数量相同
对目标图顶点进行重标号的过程,可以看做是将目标图的顶点按一定的顺序放入一个个空篮子中的过程。重标号后具有相同BSR基址域的顶点相当于进入了同一个篮子,即在用BSR编码方案对以邻接表形式存储的目标图的各位图进行切分时,同一个篮子中的图顶点对应了相同基址域下的数据域中的不同位。
举例来说,可以先设置一定数量的初始值为全零的预设数据域,每个预设数据域的长度等于SIMD指令的操作数的位数,所有预设数据域占据的位数与目标图的图顶点的数量相同。这里可以理解为是先设置一定数量的空篮子,每个空篮子可以放入的图顶点的数量等于采用BSR编码方案划分的数据域的位数,所有空篮子能放入的图顶点的数量等于目标图的顶点的数量。假设目标图共有n个顶点,采用BSR编码方案对目标图的位图进行切分得到的数据域长度为w,则篮子的容量为w,在对目标图进行重标号的过程中总共需要n/w个篮子,每个篮子对应一个不同的数据域,即可以先设置n/w个初始值为全零的预设数据域。假设n恰好能够被w整除,则对于被放入第j个篮子的第m个顶点,为其赋予新顶点ID为j·w+m-1,其中j的取值范围为[0,n/w-1]中的整数。需要说明的是,在实际情况中,目标图的顶点的数量有可能不能被BSR编码方案划分的数据域的位数整除,比如目标图一共有132个图顶点,而BSR编码方案划分的数据域的长度为16,则此时就可以设置8个16位的初始值为全零的预设数据域以及1个4位的初始值为全零的预设数据域。
步骤S62,将目标图的图顶点按第二顺序放入预设数据域中,存储目标图的图顶点的原始标号与目标图的图顶点在预设数据域中的放入位置的对应关系。
步骤S63,根据目标图的图顶点的原始标号与目标图的图顶点在预设数据域中的放入位置的对应关系为目标图的图顶点重标号。
可以理解地,在设置好空篮子之后,就需要将目标图的图顶点按照一定的顺序放入这些空篮子之中。在一种可能的实现方式中,将目标图的图顶点放入空篮子的过程包括:
步骤201,将目标图的所有图顶点按照邻居顶点的数量的大小从大到小进行前后排序,并将排序后的图顶点同时存储在有序链表和优先队列中。
步骤202,在当前预设数据域为全零时,将有序链表中当前最靠前的图顶点放入当前预设数据域中,并将已放入当前预设数据域的图顶点从有序链表和优先队列中删除。这里可以理解为在将目标图的图顶点放入各个篮子的过程中,如果当前的篮子为空,则将有序链表中邻居顶点的数量最多的图顶点放入该空篮子,并将放入该空篮子的顶点从有序链表和优先队列中删除。
步骤203,在当前预设数据域为非全零时,将优先队列中当前权值最大的图顶点放入当前预设数据域中,并将已放入当前预设数据域的图顶点从有序链表和优先队列中删除。这里可以理解为在将目标图的图顶点放入各个篮子的过程中,如果当前的篮子为非空,即当前的篮子中已经存在至少一个图顶点时,则将优先队列中当前权值最大的图顶点放入当前篮子中,并将已放入当前篮子的图顶点从有序链表和优先队列中删除。其中,图顶点的权值越大则表示如果将对应的图顶点放入当前数据域中,则采用BSR编码方案将目标图的各位图划分得到的数据域的数量越少。举例来说,结合图7和表1,图7中括号内为对目标图各顶点进行重新标号后的对应的标号,表1中的V为目标图中的图顶点的原始标号,N(V)为未对目标图的图顶点进行重新标号时的有序集合,V′为对目标图中的图顶点进行重新标号后各图顶点对应的新标号,N(V′)为将目标图的图顶点进行重新标号后的有序集合。假设使用BSR编码方案对各位图进行划分时,各数据域的长度为8,则将未重新标号的各图顶点对应的位图划分为数据域后,总共可以得到27个数据域,而将经重标号后的各图顶点对应的位图划分为数据域后,总共可以得到17个数据域。此时,就可以理解为如果将权值最大的图顶点放入当前的空篮子,则将经重标号后的各图顶点对应的位图划分为数据域后所得到的数据域的数量越少。如表1中所示,由于此时设置的数据域的长度为8,则此时表1中处于同一下划线的顶点表示处于同一个数据域中。权值的数值确定方法将在步骤204中进行说明。
表1
步骤204,在将最靠前的图顶点或者当前权值最大的图顶点从优先队列中删除之后,更新优先队列中剩余的图顶点的权值。
在初始时,即目标图的所有图顶点都未被放入任何一个篮子时,设置优先队列中的每个图顶点的初始权值为0。当有图顶点被放入篮子后,则更新优先队列中剩余的图顶点的权值。其中,更新优先队列中剩余的图顶点的权值包括:
(1)、对于有向图:在将最靠前的图顶点或者当前权值最大的图顶点放入当前预设数据域后,可以将最靠前的图顶点或者当前权值最大的图顶点的入边邻居顶点放入第一集合,并将最靠前的图顶点或者当前权值最大的图顶点的出边邻居顶点放入第二集合。
检验第一集合中的各顶点的每个出边邻居顶点是否已被放入任一预设数据域,若第一集合中任一顶点有未被放入任一预设数据域的出边邻居顶点,则增加未被放入任一预设数据域的出边邻居顶点的权值。
举例来说,假设原顶点v9已被放入篮子中,v9的入边邻居顶点集合为(v0,v1,v7,v10,v11),此时就可以检验该集合中的每个顶点的每个出边邻居顶点是否已被放入任一篮子中。假如v10的一个出边邻居顶点v25还未被放入任一篮子,就增加v25的权值。可以理解地,因为v9已经被放入了当前的篮子,所以如果也将v25放入当前篮子的话,那么采用BSR编码方案将v10的邻居顶点集合对应的位图进行数据域的划分时,经重标号后的v9和v25就可以放入同一个数据域中,从而就有可能减少将v10的邻居顶点集合对应的位图划分后得到的数据域的数量。
检验第二集合中的各顶点的每个入边邻居顶点是否已被放入任一预设数据域,若第二集合中任一顶点有未被放入任一预设数据域的入边邻居顶点,则增加未被放入任一预设数据域的入边邻居顶点的权值。
其中,可以根据下式增加某一顶点的权值:
式中,vi表示目标图中第i个图顶点,αO(vi)表示图顶点vi每次权值的增加量,|NO(vi)|为图顶点vi的所有出边邻居顶点的数量,V为所述目标图中所有图顶点的集合,|NO(v)|为目标图的图顶点v的所有出边邻居顶点的数量,|NI(v)|为目标图的图顶点v的所有入边邻居顶点的数量。
(2)、对于无向图:在将最靠前的图顶点或者当前权值最大的图顶点放入当前预设数据域后,将最靠前的图顶点或者当前权值最大的图顶点的邻居顶点放入第三集合;
检验第三集合中的各顶点的每个邻居顶点是否已被放入任一预设数据域,若第三集合中的任一顶点有未被放入任一预设数据域的邻居顶点,则增加未被放入任一预设数据域的邻居顶点的权值。
其中,可以根据下式增加某一顶点的权值:
式中,|N(vi)|为图顶点vi的所有邻居顶点的数量,|N(v)|为目标图的图顶点v的所有邻居顶点的数量。
需要说明的是,在将目标图的所有图顶点放入各空篮子的过程中,需要存储各图顶点原始的标号与各图顶点在各预设数据域中放入位置的对应关系,以方便获取各图顶点的新标号。举例来说,在对目标图的图顶点进行重新标号时,如果将v5放进了第一个空篮子,则此时的原顶点v5为所有空篮子中第一个图顶点,此时就可以根据将v5放入空篮子的顺序为v5赋予一个新的ID为v0,如果接下来将原顶点v8再放入第一个篮子,则就可以为v8赋予一个新的ID为v1。
在本实施例提供的基于SIMD指令的图数据库中集合求交方法对目标图的图顶点进行重新标号之后,可以对目标图的两个位图进行求交操作。其中,对位图求交操作的具体实施方法与上述第二实施例中相同,在此不再赘述。
本实施例提供的基于SIMD指令的图数据库中集合求交方法通过将目标图的图顶点重新标号,可以有效减少将目标图的各顶点对应的位图进行划分后得到的数据域的数量,从而可以减少集合求交过程中的比较操作次数,进一步加速了集合求交操作的执行效率。
本申请第四实施例提供了一种计算机设备,该计算机设备包括处理器和存储器。其中,存储器存储有一个或者一个以上的程序,该一个或一个以上的程序被处理器用来执行上述实施例所述的基于SIMD指令的图数据库中集合求交方法。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种基于SIMD指令的图数据库中集合求交方法,其特征在于,所述方法包括:
将目标图中每个图顶点的邻居顶点集合表示为一个对应的位图,每个所述位图中的邻居顶点按第一顺序排列;
将每个所述位图划分为长度相等的数据域,删掉全零的数据域,为每个非全零的数据域设置一个对应的基址域,将每个所述位图中的基址域按所述第一顺序存储为基址域集合,每个所述数据域的长度等于所述SIMD指令的操作数的位数,所述基址域表示对应的数据域在所述位图中的位置;
对于所述目标图的每两个位图,从所述两个位图对应的基址域集合中分别从头开始连续提取数目与所述SIMD指令的并行度相同的基址域,并分别存储到第一SIMD寄存器和第二SIMD寄存器;
通过字节检查过滤掉所述第一SIMD寄存器与所述第二SIMD寄存器中存储的没有对应相等基址域的基址域,将剩下的所述第一SIMD寄存器中的基址域和所述第二SIMD寄存器中的基址域按所述第一顺序位置对齐后进行比较;
当所述对齐比较的基址域相等,且所述对齐比较的基址域所对应的数据域的逻辑与操作结果非全零时,将相等的所述对齐比较的基址域以及相等的所述对齐比较的基址域所对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器;
从所述两个位图对应的基址域集合中的此前未被提取过的基址域中,继续获取存储至第三SIMD寄存器和第四SIMD寄存器中的基址域和对应的数据域的逻辑与操作结果,直至所述两个位图的基址域集合中不存在未经比较的基址域;
将所述第三SIMD寄存器和所述第四SIMD寄存器中存储的基址域和数据域的逻辑与操作结果作为所述两个位图的求交结果。
2.根据权利要求1所述的方法,其特征在于,所述通过字节检查过滤掉所述第一SIMD寄存器与所述第二SIMD寄存器中存储的没有对应相等基址域的基址域,将所述第一SIMD寄存器中的基址域和所述第二SIMD寄存器中剩余的基址域按所述第一顺序位置对齐后进行比较包括:
将所述第一SIMD寄存器中的每个基址域的一个字节作为第一字节,将所述第二SIMD寄存器中的每个基址域的一个字节作为第二字节,所述第一字节与所述第二字节在各所在基址域中的位置相同;
将每个所述第一字节分别复制成所述并行度个字节后按所述第一顺序排列并存储到第五SIMD寄存器,将每个所述第二字节按所述第一顺序排列后复制成所述并行度份并存储到第六SIMD寄存器;
将所述第五SIMD寄存器中存储的字节和所述第六SIMD寄存器中存储的字节进行对齐比较,得到指示对应字节是否相等的比较结果;
将本次得到的比较结果和前次得到的比较结果进行逻辑与操作,得到当前比较结果,若所述前次得到的比较结果不存在,则将所述本次得到的比较结果作为所述当前比较结果;
若所述当前比较结果指示所述第五SIMD寄存器中有一个字节在所述第六SIMD寄存器中对应有两个以上相等的字节,则将所述第一SIMD寄存器中的每个基址域的另一字节作为所述第一字节,并将所述第二SIMD寄存器中的每个基址域的另一字节作为所述第二字节,返回再次得到所述当前比较结果;
若所述当前比较结果指示所述第五SIMD寄存器中的任一个字节在所述第六SIMD寄存器中对应有零个或只有一个相等的字节,则过滤掉所述第一SIMD寄存器与所述第二SIMD寄存器中有零个相等字节的对应的基址域;
将所述第一SIMD寄存器与所述第二SIMD寄存器中只有一个相等字节的对应的基址域按所述第一顺序位置对齐后进行比较。
3.根据权利要求1所述的方法,其特征在于,所述当所述对齐比较的基址域相等,且所述对齐比较的基址域所对应的数据域的逻辑与操作结果非全零时,将相等的所述对齐比较的基址域以及相等的所述对齐比较的基址域所对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器包括:
当所述对齐比较的基址域相等时,输出第一结果; 当所述对齐比较的基址域不相等时,输出第二结果;将得到的所有所述第一结果和所述第二结果按照所述第一顺序存储在第七SIMD寄存器中;
将所述第七SIMD寄存器中存储的所述第一结果和所述第二结果对应的数据域对齐后进行逻辑与操作得到的逻辑与操作结果按照所述第一顺序存储在第八SIMD寄存器中;
将与所述第一结果对应且与非全零的所述逻辑与操作结果对应的基址域和所述非全零的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器的空闲位置。
4.根据权利要求1所述的方法,其特征在于,所述从所述两个位图对应的基址域集合中的此前未被提取过的基址域中,继续获取存储至第三SIMD寄存器和第四SIMD寄存器中的基址域和对应的数据域的逻辑与操作结果,直至所述两个位图的基址域集合中不存在未经比较的基址域包括:
判断所述第一SIMD寄存器中最后一个基址域和所述第二SIMD寄存器中最后一个基址域的大小是否相等;
若相等,则从所述两个位图对应的基址域集合中连续提取此前未被提取过的数目与所述SIMD指令的并行度相同的基址域,分别存储到第一SIMD寄存器和第二SIMD寄存器,并再次获取存储至第三SIMD寄存器和第四SIMD寄存器的基址域和对应的数据域的逻辑与操作结果;
若不相等,则从最后一个基址域较小的SIMD寄存器对应的位图所对应的基址域集合中,提取此前未被提取过的数目与所述SIMD指令的并行度相同的基址域存储到所述最后一个基址域较小的SIMD寄存器中,并再次获取存储至第三SIMD寄存器和第四SIMD寄存器的基址域和对应的数据域的逻辑与操作结果;
当所述两个位图中的任一位图对应的基址域集合中未被提取过的基址域的个数小于所述SIMD指令的并行度时,将所述两个位图对应的基址域集合中未被提取过的基址域两两对齐后进行比较,并将所述两两对齐的基址域对应的数据域两两对齐后进行逻辑与操作;
当所述两两对齐的基址域相等,且相等的所述两两对齐的基址域对应的数据域的逻辑与操作结果非全零时,将相等的所述两两对齐的基址域和相等的所述两两对齐的基址域对应的数据域的逻辑与操作结果分别存储至第三SIMD寄存器和第四SIMD寄存器。
5.根据权利要求1所述的方法,其特征在于,在所述将目标图中每个图顶点的邻居顶点集合表示为一个对应的位图之前,所述方法还包括:
设置初始值为全零的预设数量的预设数据域,每个所述预设数据域的长度等于所述SIMD指令的操作数的位数,所有所述预设数据域占据的位数与所述目标图的图顶点数量相同;
将所述目标图的图顶点按第二顺序放入所述预设数据域中,存储所述目标图的图顶点的原始标号与所述目标图的图顶点在所述预设数据域中的放入位置的对应关系;
根据所述对应关系为所述目标图的图顶点重标号。
6.根据权利要求5所述的方法,其特征在于,所述将所述目标图的图顶点按第二顺序放入所述预设数据域中包括:
将所述目标图的所有图顶点按照邻居顶点数量的大小从大到小进行前后排序,并将排序后的所述图顶点同时存储在有序链表和优先队列中;
在当前所述预设数据域为全零时,将所述有序链表中当前最靠前的图顶点放入所述当前预设数据域中,并将已放入当前预设数据域的图顶点从所述有序链表和所述优先队列中删除;
在当前所述预设数据域为非全零时,将所述优先队列中当前权值最大的图顶点放入所述当前预设数据域中,并将已放入当前预设数据域的图顶点从所述有序链表和所述优先队列中删除,所述权值反映了如果将对应的图顶点放入所述当前预设数据域中,所能够减少的将所述目标图的所有位图划分的数据域的数量;
在将所述最靠前的图顶点或者所述当前权值最大的图顶点从所述优先队列中删除之后,更新所述优先队列中剩余的图顶点的权值。
7.根据权利要求6所述的方法,其特征在于,所述优先队列中的图顶点的初始权值为零,所述更新所述优先队列中剩余的图顶点的权值包括:
对于有向目标图,根据下式更新所述剩余的图顶点的权值:
式中,vi表示所述目标图中第i个图顶点,αO(vi)表示图顶点vi每次权值的增加量,|NO(vi)|为图顶点vi的所有出边邻居顶点的数量,V为所述目标图中所有图顶点的集合, |NO(v)|为所述目标图的图顶点v的所有出边邻居顶点的数量,|NI(v)|为所述目标图的图顶点v的所有入边邻居顶点的数量;
对于无向目标图,根据下式更新所述剩余的图顶点的权值:
式中,|N(vi)|为图顶点vi的所有邻居顶点的数量,|N(v)|为所述目标图的图顶点v的所有邻居顶点的数量。
8.根据权利要求7所述的方法,其特征在于,对于所述有向目标图,所述更新所述优先队列中剩余的图顶点的权值包括:
在将所述最靠前的图顶点或者所述当前权值最大的图顶点放入所述当前预设数据域后,将所述最靠前的图顶点或者所述当前权值最大的图顶点的入边邻居顶点放入第一集合,并将所述最靠前的图顶点或者所述当前权值最大的图顶点的出边邻居顶点放入第二集合;
检验所述第一集合中的各顶点的每个出边邻居顶点是否已被放入任一所述预设数据域,若所述第一集合中任一顶点有未被放入任一所述预设数据域的出边邻居顶点,则增加所述未被放入任一所述预设数据域的出边邻居顶点的权值;
检验所述第二集合中的各顶点的每个入边邻居顶点是否已被放入任一所述预设数据域,若所述第二集合中任一顶点有未被放入任一所述预设数据域的入边邻居顶点,则增加所述未被放入任一所述预设数据域的入边邻居顶点的权值。
9.根据权利要求7所述的方法,其特征在于,对于所述无向目标图,所述更新所述优先队列中剩余的图顶点的权值包括:
在将所述最靠前的图顶点或者所述当前权值最大的图顶点放入所述当前预设数据域后,将所述最靠前的图顶点或者所述当前权值最大的图顶点的邻居顶点放入第三集合;
检验所述第三集合中的各顶点的每个邻居顶点是否已被放入任一所述预设数据域,若所述第三集合中的任一顶点有未被放入任一所述预设数据域的邻居顶点,则增加所述未被放入任一所述预设数据域的邻居顶点的权值。
10.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器存储有一个或者一个以上的程序,所述一个或一个以上的程序被所述处理器用来执行如权利要求1至9任一所述的基于SIMD指令的图数据库中集合求交方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810588419.1A CN108897787B (zh) | 2018-06-08 | 2018-06-08 | 基于simd指令的图数据库中集合求交方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810588419.1A CN108897787B (zh) | 2018-06-08 | 2018-06-08 | 基于simd指令的图数据库中集合求交方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108897787A CN108897787A (zh) | 2018-11-27 |
CN108897787B true CN108897787B (zh) | 2020-09-29 |
Family
ID=64344379
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810588419.1A Active CN108897787B (zh) | 2018-06-08 | 2018-06-08 | 基于simd指令的图数据库中集合求交方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108897787B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115203487B (zh) * | 2022-09-15 | 2022-12-20 | 深圳市洞见智慧科技有限公司 | 基于多方安全图的数据处理方法及相关装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2463142A (en) * | 2008-09-05 | 2010-03-10 | Nvidia Corp | System and Method for Reducing Execution Divergence in Paralle Processing Architectures |
TW201732734A (zh) * | 2015-12-22 | 2017-09-16 | 英特爾股份有限公司 | 用於加速圖形分析的設備及方法 |
-
2018
- 2018-06-08 CN CN201810588419.1A patent/CN108897787B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2463142A (en) * | 2008-09-05 | 2010-03-10 | Nvidia Corp | System and Method for Reducing Execution Divergence in Paralle Processing Architectures |
TW201732734A (zh) * | 2015-12-22 | 2017-09-16 | 英特爾股份有限公司 | 用於加速圖形分析的設備及方法 |
Non-Patent Citations (3)
Title |
---|
"CPU/GPU平台下分布式集合求交算法的研究";王怀超;《中国优秀硕士学位论文全文数据库 信息科技辑》;20130315;全文 * |
Faster set intersection with SIMD instructions by reducing branch mispredictions;Hiroshi Inoue;《Proceedings of the VLDB Endowment》;20141130;全文 * |
基于单指令级并行的快速求交算法;宋省身等;《山东大学学报(理学版)》;20180331(第3期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108897787A (zh) | 2018-11-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20160342662A1 (en) | Multi-stage tcam search | |
US6005503A (en) | Method for encoding and decoding a list of variable size integers to reduce branch mispredicts | |
Ediger et al. | Massive streaming data analytics: A case study with clustering coefficients | |
US8069183B2 (en) | Fast identification of complex strings in a data stream | |
CN110837584B (zh) | 一种分块并行构造后缀数组的方法及系统 | |
US11669521B2 (en) | Accelerated filtering, grouping and aggregation in a database system | |
Cui et al. | On efficient external-memory triangle listing | |
CN108897787B (zh) | 基于simd指令的图数据库中集合求交方法和装置 | |
US7093102B1 (en) | Code sequence for vector gather and scatter | |
CN115982311B (zh) | 一种链表的生成方法、装置、终端设备及存储介质 | |
US11736119B2 (en) | Semi-sorting compression with encoding and decoding tables | |
Chan et al. | PUNAS: A parallel ungapped-alignment-featured seed verification algorithm for next-generation sequencing read alignment | |
CN107688727B (zh) | 生物序列聚类和全长转录组中转录本亚型识别方法和装置 | |
KR102425596B1 (ko) | 로우 레이턴시 하드웨어 메모리 관리를 위한 시스템 및 방법 | |
CN117271533B (zh) | 一种大型数据链表的构建方法、装置及终端设备 | |
US20240004954A1 (en) | Computer-implemented accumulation method for sparse matrix multiplication applications | |
Blelloch et al. | Class notes: Programming parallel algorithms | |
Kosolobov et al. | Compressed multiple pattern matching | |
WO2016018400A1 (en) | Data merge processing | |
CN110111837A (zh) | 基于两阶段结构比对的蛋白质相似性的搜索方法及系统 | |
Anderson et al. | An FPGA-based hardware accelerator supporting sensitive sequence homology filtering with profile hidden Markov models | |
CA2855398C (en) | Fast identification of complex strings in a data stream | |
CN117971826A (zh) | 一种自带验证功能的大型数据链表的构建方法及构建装置 | |
Bradshaw | Regular Expression Synthesis for BLAST Two-Hit Filtering | |
CN113918217A (zh) | 向量函数的处理方法及相关设备 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231130 Address after: Room 1009, 10th Floor, Building B, No. 18 Zhongguancun Street, Haidian District, Beijing, 100000 Patentee after: Tupu Intelligent Technology (Beijing) Co.,Ltd. Address before: No. 128 Zhongguancun North Street, Haidian District, Beijing, 100080 Patentee before: Peking University |
|
TR01 | Transfer of patent right |