一种基于比较器网络的topK数据并行获取方法及装置
文献发布时间:2024-04-18 19:58:30
技术领域
本发明涉及计算机领域,尤其涉及到一种基于比较器网络的topK数据并行获取方法及装置。
背景技术
在计算机科学和信号与信息处理中,常需要在N元数据集中,根据指定的标准,找出最重要(例如最大或最小)的前k个数据(k≤N),这就是topK问题。这里的数据集可以是正数序列、实数序列或者其它非数值序列。topK问题涉及了数据挖掘、图像处理、信息检索、排序和统计分析等众多领域,因此许多研究人员都曾投入该问题的研究,并提出了多种算法和技术。
目前解决topK问题的方法都是串行的,其基本方法是排序,常用算法有快速排序算法和堆排序算法等,许多高效的方法都是在此基础上做优化。快速排序算法是最高效的排序算法之一,它基于分治的思想,不需要额外的空间占用,就能在O(N log N)的时间复杂度内完成排序。在topK问题中,该算法可以做剪枝优化:在将数据集分而治之的过程中,舍弃掉确定不包含重要数据(任何前k个最大或最小数据)的子集。在k远小于N的情况下,剪枝可以使数据规模急速降低,优化后的算法平均时间复杂度只需要O(N log k)。尽管快速排序效率很高,然而在最坏情况下时间复杂度可能达到O(N
以上两种改进后的算法是解决topK问题的最高效的两种串行方法,然而这两种方法却难以并行化、向量化。在高性能计算中,现代计算机通常使用多核心并行结构,例如图形处理单元(GPU),与中央处理器(CPU)不同,GPU具有众多处理核心、使用向量处理器架构进行计算。在处理topK问题上,传统的串行方法因为难以向量化只能使用CPU做处理,无法充分利用现代计算机的并行计算资源。
在使用GPU等多核心处理器解决排序、查找等相关问题时,比较器网络是一种高效的方法。比较器是一种2输入2输出的元件,它将比较两个输入的值,并在b端(即big端)输出较大值,s端(即small端)输出较小值,如图1所示。比较器网络是由多个比较器连线组成的网络,各个比较器的输入端是输入数据或上一级比较器的输出,输出端是下一级比较器的输入或网络的输出。输入数据经过网络的多层比较处理后,将在输出端得到有序结果。图2给出了一个简单的比较器网络示意图,该网络由5个比较器组成,可以对4个元素的输入序列做排序,如图所示,输入的随机序列4231经过比较器网络后,调整为1234的有序序列。
基于比较器网络的经典排序算法是双调排序(Bitonic sort),其基本思想是通过比较器网络使得无序序列形成双调序列,然后逐级双调归并(Bitonic merge)排序实现单调排序。双调序列指前半部分单调递减,后半部分单调递增的序列,或者反之。双调排序是一种可并行计算的高效排序算法,其中整个排序的过程完全由比较器网络实现,尤其适合使用GPU实现。使用GPU实现比较器网络时,可以将网络中每个比较器视为一次比较和交换操作,用一个计算核心来执行。由于网络中各个比较器几乎相互独立,因此基于比较器网络的算法具有天然的并行性,可以使用向量指令编程实现,在多核心处理器上运行能够充分利用计算资源。
然而,GPU等多核心处理器的核心资源毕竟有限,实现大规模的比较器网络时,一个核心往往需要模拟多个比较器,比较器网络的执行速度取决于所有核心中需要模拟比较器次数的最大值。然而,使用排序方法来解决topK问题并不是最佳的,这是因为寻找最大或最小的k个元素并不需要对所有N个元素做排序,这会造成算力的浪费,在长序列topK问题(k<<N)中,这种浪费更为明显。因此本发明针对多核心处理器(如GPU),如何高效解决长序列topK问题,提出了具体的解决方案。
发明内容
针对目前的解决topK问题的方法执行效率低以及难以直接并行化实现的问题,本发明提出一种基于比较器网络的topK数据并行获取方法及装置,利用比较器网络可以在多核心处理器上从海量输入数据中进行快速排序,并通过设计的归并操作,找出最重要的前k个数据,能够高效求解topK问题。
为实现上述目的,本发明采用的技术方案如下:
一种基于比较器网络的topK数据并行获取方法,用于从输入数据中获取topK数据,其包括以下步骤:
数据分组步骤:将输入数据划分为多组等长无序序列;
分组排序步骤:使用基于比较器网络的并行排序方法,对所述多组等长无序序列进行并行排序,得到多组有序序列;
多组归并步骤:基于比较器网络对所述多组有序序列进行多组归并解序列操作,根据问题所需,按照升序或降序每次归并两组有序序列为一组有序序列,该有序序列为单调序列,保留序列中前多个元素,使归并后的有序序列与原有序序列等长,经过多次归并,最终得到一组有序序列,提取该有序序列中所需的前k个元素即为topK数据。
进一步地,数据分组步骤中,输入数据在划分为多组时,若无法被整除,则向输入数据中填充数据以被整除。
进一步地,向输入数据中填充数据的方法为向输入数据中填充与topK数据调性相反的数据,且填充的数据不含topK数据,包括:若topK数据为topK个最大值数据,则补充的数据为不大于topK数据中最小值的数据;若topK数据为topK个最小值数据,则补充的数据为不小于topK数据中最大值的数据。
进一步地,使用多核心处理器执行数据分组步骤时,将输入数据从主存拷贝到多核心处理器专用内存中进行数据分组。
进一步地,分组排序步骤中,基于比较器网络的并行排序方法是指基于双调归并排序网络的双调排序方法,其中,对于长度为m的无序序列,该双调归并排序网络含有t=log
进一步地,分组排序步骤中,使用并行排序方法对单个无序序列进行排序的步骤包括:
输入长度为m的无序序列,使用多级双调归并排序网络进行如下排序;
每级双调归并排序网络执行输入合并和分层排序两个步骤,其中,
输入合并,是指将每两个相邻的排序相反的等长子序列合并为一个2倍长度的双调序列;
分层排序,是指对每个双调序列从中间分为两个1/2序列,并将两个1/2序列的对应位次的元素两两送入比较器进行比较,得到一个有序序列;
重复执行上述的输入合并和分层排序两个步骤,直至达到双调归并排序网络的最大级数,最终得到长度为m的有序序列。
进一步地,使用多核心处理器执行分层排序步骤时,对于t级双调归并排序网络,用一个核心执行比较和交换操作来模拟一个比较器,若核心数
进一步地,多组归并步骤中,每次归并排序操作的步骤包括:
1)从多组长度为m的有序序列中提取两组有序序列,即序列0和序列1;
2)将序列0中按正序排列的每个元素依次对应地与序列1中按反序排列的每个元素两两送入比较器中进行比较,筛选出所需元素,丢弃不需要的元素,两组序列全部元素比较完成后,得到一个长度为m的双调序列;
3)将由2)得到的长度为m的双调序列按照双调排序方法进行t次比较交换排序,形成一个新的单调有序序列,加入原多组序列,总的序列组数减1;
进一步地,重复上述1)-3)的步骤,经过多次归并解序列操作,直至序列组只剩1组长度为m的有序序列,这也是输入数据中最大的前m个数,从该序列中取出前k个数,即为topK数据。
进一步地,使用多核心处理器执行1次两组归并步骤时,步骤2)中每个核心模拟2个比较器,步骤3)中每个核心模拟1个比较器;对于长度为m的有序序列,若核心数
进一步地,多组归并步骤中,使用优先归并操作方法对所述多组有序序列进行多组归并解序列操作,该优先归并操作方法的步骤包括:
对于编号为j(2≤j≤l)的序列,找到其优先归并操作对象即编号为alloc(j)的序列;
对编号为j和alloc(j)的两组序列进行归并解序列操作,得到归并后的序列,如果j是偶数,那么alloc(j)=j/alloc(j);如果j是奇数,那么alloc(j)=alloc(j-1)+1。
一种基于比较器网络的topK数据并行获取装置,用于从输入数据中获取topK数据,其包括:
数据分组模块,用于将输入数据划分为多组等长无序序列;
分组排序模块,用于使用基于比较器网络的并行排序方法,对所述多组等长无序序列进行并行排序,得到多组有序序列;
多组归并模块,基于比较器网络对所述多组有序序列进行多组归并解序列操作,每次归并两组有序序列为一组有序排序,保留序列中前多个元素,使归并后的有序序列与原有序序列等长,经过多次归并,最终得到一组有序序列,提取该有序序列中的前k个元素即为topK数据。
本发明的技术方案具有的优点如下:
1、高效性:本发明采用并行方法来提取topK数据,通过分组排序和多组归并的技术方案,无需对数据序列进行全序列排序即可获得所需的top k个数据,相比传统的串行方法和基于全序列排序的并行方法,具有更高的执行速度。
2、全并行性,通过本发明的优先归并操作方法,采用一种最优的任务分配方案,使得每次两组归并对象不依赖其它归并的结果,具有独立性,因而可以用最少的并行批次完成归并,实现全并行处理;
3、节省比较器模拟次数:相比其他方法,本发明的技术方案通过精细的设计和优化,最大程度优化了多核心的使用,在执行时节省了大量的比较器模拟次数,减少了比较和交换的操作次数,从而提高了算法的执行效率。
4、可扩展性:本发明采用并行计算的思想,适用于多核心系统,并且可以根据具体的计算资源进行调整,通过增加计算核心数量,可以进一步提升算法的执行速度和处理能力。
5、适用性广泛:本发明的技术方案可以应用于解决长序列topK问题,适用于各种规模的数据集和不同的k值,该方法在大规模数据和较小的k值下更具有优越性。
附图说明
图1是比较器的示意图;
图2是比较器网络的数据排序示意图。
图3是本发明的一种基于比较器网络的topK数据并行获取装置的流程图;
图4是分组排序模块的比较器网络的示意图;
图5是多组归并模块的归并解操作的示意图;
图6是理想状态下多组归并的示意图;
图7是多组归并模块的归并任务执行顺序的示意图。
具体实施方式
为使本发明的上述技术方案中各项技术特征和各项优点或技术效果能更明显易懂,下文配合附图进行详细说明。
本实施例具体提出一种基于比较器网络的topK数据并行获取方法及装置,如图3所示。为方便下文叙述,本实施例中约定输入数据的规模是长度为nm(n≥2)的序列,预期输出结果是最大(或最小)的k个元素。输入数据经过数据分组模块得到多组无序标准序列,分组排序模块将使用基于比较器网络的排序方法对已分组标准序列分别进行排序,多组归并模块将归并排序后的标准序列,并输出所有数据最大的k个元素。
接下来将依次介绍每个模块:
第一、数据分组模块。
数据分组模块将按照问题的规模将输入数据经填充后划分为多组等长标准序列。记m为不小于k的最小2的整数次幂,即2
上述用于补足的“最不重要的数据”取决于拟待处理的topK问题,对于最大值topK问题,用不大于最小值的数值补足;对于最小值topK问题,用不小于最大值的数值补足;例如对于最大值topK问题,实数序列填充-INF,非数值序列填充不大于序列中其他元素的任意元素;对于最小值topK问题,实数序列填充+INF,非数值序列填充不小于序列中其他元素的任意元素。
这里需要特别指出的是,在使用GPU进行计算时,通常需要把数据从主存拷贝到GPU专用内存中,数据分组模块就是将主存中的原始输入数据经填充后迁移到GPU专用内存中,形成l组长度为m的处理单元。
第二、分组排序模块。
分组排序模块使用并行排序方法对上述数据分组模块得到的各组(l组)标准序列分别进行排序。上述的并行排序方法可以采用基于比较器网络的双调排序方法来实现。以某一组长度为m的无序序列举例,在本模块中该序列将经过t=log
图4是这部分比较器网络示意图,图中m=16。
分组排序模块中对单个序列的具体排序流程如下:
a.载入长度为m的无序序列(可视为长度为1的单调序列),各个元素序号依次为0,1,2,…,m-1。初始化排序网络组序数t
b.执行第t
b1)输入合并:本级网络的输入是前一级(第t
b2)分层排序:本步骤对b1步的每个子单元(
本级排序网络对b1步的全部
本级排序网络包括t
c.序数t
d.排序操作完成,得到输出长度为m的有序序列。
排序过程中,每层比较器排序(步骤b2)将同时用到
以图4为例,m=4,该比较器共有4级用虚线隔开的排序网络,每级排序网络由对应层数的比较器构成。单个粗方框中的所有比较器同时操作构成了一次比较器排序,示例中的每层排序由8个比较器完成。使用GPU模拟该网络时,每次使用8个计算核心同时对16个元素的序列进行排序,完成本层排序操作,每个核心执行10次比较和交换操作。
对于核心数c大于
特别地,当仅需要找到一组数据的最大值(或最小值),即k=m=1时,该方法将跳过分组排序模块直接进入多组归并模块。
第三、多组归并模块。
多组归并模块完成多组归并解序列操作,每次归并2组单调序列并排序,丢弃小值序列,变成1组与原组等长的单调序列,经多次归并,直至只剩1组单调序列。
经过分组排序模块后,原始数据变成了l组长度为m的单调序列。本模块将进行l-1次归并解序列操作,直至只剩1组长度为m的单调序列。每次归并解序列会从序列组中取出两组单调序列归并为一组,进行排序,保留该组中最大(或最小)的前m个元素,作为新的有序序列加入序列组中。每次归并解序列会使序列数减1,但各组序列长度仍然为m,且保证输入数据的最大m个数仍然在序列组中。
经过l-1次归并解序列操作后,序列组只剩1组长度为m的有序序列,这也是输入数据中最大的前m个数。从该序列中取出前k个数,便是所求的topK问题的解。
多组归并模块中归并解序列的具体流程如下:
a.从序列组中取出两组序列,分别记为序列0和序列1。
b.筛选数据:将序列0的最大值和序列1的最小值、序列0的次大值和序列1的次小值、序列0的第三大值和序列1的第三小值、…、序列0的最小值和序列1的最大值两两送入比较器,保留比较器的大值(或小值)输出,得到m个筛选值,记各个筛选值序号依次为0,1,2,…,m-1,组成大值(或小值)序列。
c.对大值(或小值)序列做排序:初始化比较器间隔
d.比较器排序:将序号间隔为s的元素对(如序号i和序号i+s)两两送入比较器。
e.如果s等于1则转步骤f,否则间隔减半
f.排序完成,将排序后的大值(或小值)序列加入序列组,丢弃其余数据序列,具体丢弃小值或大值序列视topK问题而定。
归并过程中,筛选数据(步骤b)将使用m个比较器,比较器排序(步骤c)将使用
图5给出了m=16时归并解序列操作的流程示意图。输入的序列0和序列1由整数0,1,2,…随机分成两组构成。筛选数据后,得到由16-31组成的大值序列,随后由比较器网络对序列做排序。经过4次比较器排序后得到有序序列,每次比较器排序由同时执行的8个比较器组成。使用GPU模拟该过程,使用8个计算核心,每个核心共执行6次比较和交换操作。
与分组排序模块不同,归并过程中l-1组归并解序列操作并不能并行执行。在一次并行任务中,一个序列只能参与一次归并解序列操作。当处理器核心足够多时,每次并行任务不断将所有序列两两一组做归并解序列操作。每执行完一组归并后序列总数减半,l组序列一共要做
然而,在长序列topK问题中,计算核心或者小于
下文将给出一种最优的归并任务分配方案,作为归并解序列操作的一种优选的方案,该方案能用最少的并行批次完成归并,实现真正意义上的全并行性处理。为方便叙述,这里给出优先归并操作的定义:记有序序列组中序列编号依次为1,2,…,l,依序列编号递减,各组与优先归并对象(组)依次做归并,称为优先归并操作。现定义编号j(2≤j≤l)的序列的优先归并操作对象是编号为alloc(j)的序列,优先归并操作对编号为j,alloc(j)的两组序列做归并解序列操作,归并结果作为新的编号alloc(j)序列加入序列组中。其中,
Lowbit函数的定义是;lowbit(j)表示数j转为二进制后,最后一个1的位置所代表的数值,例如lowbit(8)的值是8,lowbit(6)的值是2。编号为…,8,7,6,5,4,3,2的序列所对应的优先归并操作对象分别是编号为…,1,4,3,2,1,2,1的各组,即依次对…,(8,1),(7,4),(6,3),(5,2),(4,1),(3,2),(2,1)两组序列做归并。
可以证明,对于l组序列,编号
因此,在拥有c个计算核心的处理器上作l组序列的归并任务,一种最优的任务分配方案是:假设当前存在l
最后,当所有序列归并为唯一的长度为m的有序序列时,该有序序列就是原始输入的最大m个元素。取该序列中前k个元素,便得到topK问题的解。
本发明取得的技术效果如下:
本发明的技术方案在使用有限核心在从输入数据中获取topK数据(或称求解长序列topK问题(k<<n))中,执行速度远快于传统的串行方法,也远快于基于全序列排序的并行排序方法。以改进的堆排序方法为例,串行方法需要比较和交换的次数为4k+(n-k)log
需要特别说明的是,上述实施例是以最大值或最小值的topK问题为例进行的说明,但本发明并限于此,亦可以用于解决其他规则的topK问题,换言之,本发明的技术方案不限于从输入数据中提取最大值或最小值的topK数据,亦可提取服从其他规则的topK数据,例如按照元素的长度规则或字典顺序规则来提取topK数据,这在进行具体的数据分组排序和数据归并步骤时,只需要相应地更改比较器的比较规则(例如按照元素的长度规则或字典顺序规则)即可筛选出所需要的元素,亦可排序出符合该规则的序列,最终得到符合该规则的topK数据,应可理解。
本领域内的技术人员应明白,本发明提供的方法可采用完全硬件实施例、完全软件实施例、或结合和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用储存介质上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备、和计算机程序产品的流程图或方框图来描述的。应理解可由计算机程序指令实现流程图中每一处流程或方框。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个或多个流程和方框图一个或多个方框中指定的功能和装置。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
- 一种植入式控制系统数据获取装置及数据获取方法
- 一种获取温湿度数据信息的方法及装置
- 一种数据获取方法及装置
- 一种获取音视频数据的方法及装置
- 一种局域网地质数据的检索与获取方法、装置
- 一种基于CUDA的种子分布数据并行获取方法
- 基于串并行结构网络安全数据处理方法及系统、社交网络