一种双调合并排序方法及系统与流程

文档序号:12863601阅读:598来源:国知局
一种双调合并排序方法及系统与流程

本申请涉及可重构计算技术领域,特别涉及一种双调合并排序方法及系统。



背景技术:

由于信息技术快速发展,信息化改造的进程也逐步加快,同时用户使用各项服务发送的请求以及服务提供商采集的数据也越来越多,导致数据量的暴增。在面对海量数据涌入的情况下,对数据的处理速度决定了用户请求的响应时间,影响了用户使用时的体验。尤其在云计算中的应用,云计算需要为不同的服务提供商提供不同的服务,面对海量数据下,同时需要快速响应海量的数据,占用了大量的计算资源。会严重影响云计算数据处理中心的性能和功耗。

目前,在数据搜索领域需要大量应用到排序处理,其中常用的是双调合并排序方法。在应用此方法时,已有很多研究和技术对此算法进行了改进,以使该方法进一步提高性能。常用的是在cpu和gpu的环境中改进该算法,但是该改进方法无法实现数据的并行处理,因此在现有硬件条件环境下,性能提升的空间有限。

因此,如何提高双调合并算法的性能和运行效率,是本领域技术人员需要改进的重点问题。



技术实现要素:

本申请的目的是提供一种双调合并排序方法及系统,通过处理器和fpga组成异构加速平台,可以使双调合并排序算法提高性能,增加运行效率。

为解决上述技术问题,本申请提供一种双调合并排序方法,所述方法包括:

处理器调用第一程序文件,将原始数据传输至第一缓存中;其中所述第一程序文件是gcc编译器编译生成;

fpga调用第二程序文件,读取所述第一缓存中的所述原始数据,对所述原始数据进行双调合并排序处理得到单调序列,并将所述单调序列写入所述第一缓存;其中所述第二程序文件是采用opencl对kernel程序文件编译生成;

所述处理器从所述第一缓存读取所述单调序列。

可选的,在所述处理器调用第一程序文件,将原始数据传输至第一缓存中之前,还包括:

创建所述处理器与所述fpga进行数据通讯的所述第一缓存。

可选的,所述fpga读取所述缓存中的所述原始数据,对所述原始数据进行双调合并排序处理,得到单调序列,包括:

所述fpga读取所述第一缓存中的所述原始数据,通过双调序列的生成方法,形成双调序列;

所述fpga通过双调序列的排序方法处理所述双调序列,形成单调序列;

所述fpga将所述单调序列写入所述第一缓存。

可选的,所述处理器调用第一程序文件,将原始数据传输至第一缓存中,还包括:

所述处理器调用所述第一程序文件,设置所述fpga运行时所需要的参数信息。

本申请还提供一种双调合并排序系统,所述系统包括:

处理器,用于调用第一程序文件,将原始数据传输至第一缓存中;其中所述第一程序文件是gcc编译器编译生成;从所述第一缓存读取所述单调序列;

fpga,用于调用第二程序文件,读取所述第一缓存中的所述原始数据,对所述原始数据进行双调合并排序处理得到单调序列,并将所述单调序列写入所述第一缓存;其中所述第二程序文件是采用opencl对kernel程序文件编译生成。

可选的,所述处理器还用于创建所述处理器与所述fpga进行数据通讯的所述第一缓存。

可选的,所述fpga具体用于读取所述第一缓存中的所述原始数据,通过双调序列的生成方法,形成双调序列;通过双调序列的排序方法处理所述双调序列,形成单调序列;将所述单调序列写入所述第一缓存。

可选的,所述处理器还用于调用所述第一程序文件,设置所述fpga运行时所需要的参数信息。

本申请所提供的一种双调合并排序方法,包括:处理器调用第一程序文件,将原始数据传输至第一缓存中;其中所述第一程序文件是gcc编译器编译生成;fpga调用第二程序文件,读取所述第一缓存中的所述原始数据,对所述原始数据进行双调合并排序处理得到单调序列,并将所述单调序列写入所述第一缓存;其中所述第二程序文件是采用opencl对kernel程序文件编译生成;所述处理器从所述第一缓存读取所述单调序列。

通过处理器和fpga运行不同的程序文件,相互配合,组成异构加速平台。可以在不占用处理器的资源的情况下,使用fpga处理待排序的数据,可以节约处理器资源。同时,fpga模块执行双调合并算法,可以通过并行化的方式提高算法的并行度,使其满足fpga运行时的特性,同时并行化处理速度可以大大加快数据处理时的效率。在设计双调合并算法时,使用opencl描述双调合并算法,可以映射生成更高效的fpga硬件电路结构,进而可以提升fpga对双调合并排序算法的硬件加速效果,同时可以提高产品的研发周期。

本申请还提供一种双调合并排序系统,具有以上有益效果,在此不作赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的双调合并排序的流程图;

图2为本申请实施例所提供的双调排序并行化处理的流程图;

图3为本申请实施例所提供的双调合并排序系统的框图;

图4为本申请实施例所提供的双调合并排序的程序流程图;

图5为本申请实施例所提供的双调排序处理的数据流程图。

具体实施方式

本申请的核心是提供一种双调合并排序方法,通过处理器和fpga组成异构加速平台,有效提高异构平台在处理数据时的性能,提高运行效率。还提供一种双调合并排序系统。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图1,图1为本申请实施例所提供的双调合并排序的流程图。

本实施例提供一种双调合并排序方法,可以包括步骤:

s100,处理器调用第一程序文件,将原始数据传输至第一缓存中;其中所述第一程序文件是gcc编译器编译生成;

s200,fpga调用第二程序文件,读取所述第一缓存中的所述原始数据,对所述原始数据进行双调合并排序处理得到单调序列,并将所述单调序列写入所述第一缓存;其中所述第二程序文件是采用opencl对kernel程序文件编译生成;

s300,所述处理器从所述第一缓存读取所述单调序列。

对应的请参考图4,图4为本申请实施例所提供的双调合并排序的程序流程图。

其中,一般需要硬件执行程序时都需要将编程代码文件编译为硬件可以理解的机器码,也就是机器可读的程序文件。因此,在此实施例中有两个硬件去执行相应的代码,需要不同的编译器去编译代码。处理器在本实施例中指的是cpu,因此选用gcc编译器对主机端程序进行编译,生成可以在通用处理器上执行的可执行程序文件。

对于fpga,即现场可编辑门阵列,一般选用rtl硬件描述语言实现算法。与rtl语言实现相比,在本实施例中选用opencl语言描述程序,可以有效改善算法实现的效率,减少算法实现的开发周期。使用opencl开发出的算法程序,更加符合fpga的硬件逻辑,并行化程度更高,运行时的效率也更高。因此选用opencl描述fpga的程序文件。

fpga具有并行化处理数据的特点,而由于双调合并排序算法的设计并非适合并行化处理。因此,选用opencl语言描述算法,可以获得并行化程度较高的程序文件,对于fpga的数据处理特征来说也更为合理。将描述后的kernel文件通过aoc编译为aocx文件。

通过opencl描述的算法文件,处理数据,可以并行化处理数据,具有较高的性能,同时通过处理器和fpga组成的异构平台在fpga处理数据时不影响处理器的使用,提高系统整体的使用效率。

在此,需要说明的是在处理器调用程序文件之前,创建处理器与fpga进行数据通讯的第一缓存。该缓存是存放在fpga开发板的内存上,也就是在fpga的buffer中申请一块专用内存。

处理器通过pci-e总线将需要排序的数据发送至第一缓存后,处理器还需要设置所述fpga运行时的参数信息,以配置fpga正常运行。

请参考图2,图2为本申请实施例所提供的双调排序并行化处理的流程图。

基于上述实施例,本实施例可以包括:

s210,所述fpga读取所述第一缓存中的所述原始数据,通过双调序列的生成方法,形成双调序列;

s220,所述fpga通过双调序列的排序方法处理所述双调序列,形成单调序列;

s230,所述fpga将所述单调序列写入所述第一缓存。

对应的请参考图5,图5为本申请实施例所提供的双调排序处理的数据流程图。

其中,在并行化处理开始前会申请与第一缓存大小相同的第二缓存,用于存放并行化处理中的数据,也就是该图中的片上缓存。

在处理过程中,步骤s210与步骤s220会交替读写第二缓存,当算法完成后会将最终的结果写入第一缓存也就是图中的ddr,等待被读取。

本申请实施例提供了一种双调合并排序方法,可以通过处理器和fpga组成的异构加速平台,同时通过fpga的并行化处理数据的特征,提高双调合并排序算法的性能,加快数据处理的速度,提高整体系统的运行效率。

下面对本申请实施例提供的一种双调合并排序系统进行介绍,下文描述的双调合并排序系统与上文描述的双调合并排序方法可相互对应参照。

请参考图3,图3为本申请实施例所提供的双调合并排序系统的框图。

本实施例可以包括:

处理器100,用于调用第一程序文件,将原始数据传输至第一缓存中;其中所述第一程序文件是gcc编译器编译生成;从所述第一缓存读取所述单调序列;

fpga200,用于调用第二程序文件,读取所述第一缓存中的所述原始数据,对所述原始数据进行双调合并排序处理得到单调序列,并将所述单调序列写入所述第一缓存;其中所述第二程序文件是采用opencl对kernel程序文件编译生成;

基于上述实施例,本实施例中的处理器100,还可以用于:

创建所述处理器与所述fpga进行数据通讯的所述第一缓存;

调用所述第一程序文件,设置所述fpga运行时所需要的参数信息。

基于上述实施例,本实施例中的fpga200,具体用于:

读取所述第一缓存中的所述原始数据,通过双调序列的生成方法,形成双调序列;通过双调序列的排序方法处理所述双调序列,形成单调序列;将所述单调序列写入所述第一缓存。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的双调合并排序方法及系统进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1