CN112015366A - 数据排序方法、数据排序装置及数据库系统 - Google Patents
数据排序方法、数据排序装置及数据库系统 Download PDFInfo
- Publication number
- CN112015366A CN112015366A CN202010639809.4A CN202010639809A CN112015366A CN 112015366 A CN112015366 A CN 112015366A CN 202010639809 A CN202010639809 A CN 202010639809A CN 112015366 A CN112015366 A CN 112015366A
- Authority
- CN
- China
- Prior art keywords
- data
- bitonic
- module
- sorting
- storage array
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/06—Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
- G06F7/08—Sorting, i.e. grouping record carriers in numerical or other ordered sequence according to the classification of at least some of the information they carry
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
Abstract
本发明提供了一种数据排序方法、数据排序装置及数据库系统,其中,该数据排序方法包括:接收并统计输入数据的数目;基于输入数据的数目确定大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值;将所有输入数据存储成存储阵列;存储阵列的列数为基本双调排序模块的输入数目的一半,存储阵列的行数为阵列数据数目值与存储阵列的列数的比值;为存储阵列的各行设置行索引;依据行索引成对读取存储阵列中的数据,以利用至少一个基本双调排序模块对存储阵列中的数据进行排序;根据存储阵列中的数据的排序结果得到接收的输入数据的排序结果。通过上述方案能够便于对各种数目的输入数据进行排序,并能兼顾硬件资源的高效利用。
Description
技术领域
本发明涉及数据和数据库处理技术领域,尤其涉及一种数据排序方法、数据排序装置及数据库系统。
背景技术
排序作为数据处理中的一种非常重要的基本操作,从操作系统API(应用程序接口)调用等底层层面到以数据库、金融计算等为代表的各种上层应用均有重要且广泛的应用;排序操作将数据状态从无序转变成有序,完成一个熵减少的过程,便于在此基础上的数据处理、统计分析等操作发掘出更多有用信息;代表性算法包含插入排序、冒泡排序、双调排序等,不同的排序算法其本身时间复杂度及空间复杂度有固有的区别,在不同的应用场景下不同的排序算法表现出来的性能也有所不同。其中,双调排序因其自身特有的并行性和数据-索引独立性在并行计算等领域有重要的应用价值。
现有双调排序在已知固定数目的输入时,可以在硬件上实现,然而,当其面对任意数目输入时,已经在硬件上固化的逻辑结构不能适配处理,不能随着输入数目的变化而动态调整。
发明内容
本发明提供了一种数据排序方法、数据排序装置及数据库系统,以便对各种数目的输入数据进行排序。
为了达到上述目的,本发明采用以下方案实现:
根据本发明实施例的一个方面,提供了一种数据排序方法,包括:接收输入数据,并统计输入数据的数目;基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值;将所有输入数据存储成存储阵列,其中,所述存储阵列的列数为基本双调排序模块的输入数目的一半,所述存储阵列的行数为所述阵列数据数目值与所述存储阵列的列数的比值;为所述存储阵列的各行设置行索引;依据行索引成对读取所述存储阵列中的数据,以利用至少一个所述基本双调排序模块对所述存储阵列中的数据进行排序;根据所述存储阵列中的数据的排序结果得到接收的输入数据的排序结果。
在一些实施例中,基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值,包括:在输入数据的数目为2的幂次且大于或等于基本双调排序模块的输入数目的情况下,将输入数据的数目确定为阵列数据数目值。
在一些实施例中,基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值,包括:在输入数据的数目不是2的幂次或输入数据的数目小于基本双调排序模块的输入数目的情况下,将大于或等于基本双调排序模块的输入数目的最小为2的幂次的数值确定为阵列数据数目值。将所有输入数据存储成存储阵列,包括:通过添加MAX/MIN值将输入数据的数目增加至所述阵列数据数目值,并将添加MAX/MIN值后的所有输入数据存储成一个存储阵列。根据所述存储阵列中的数据的排序结果得到接收的输入数据的排序结果,包括:从所述存储阵列中的数据的排序结果中剔除添加的MAX/MIN值后,得到接收的输入数据的排序结果。
在一些实施例中,依据行索引成对读取所述存储阵列中的数据,以利用至少一个所述基本双调排序模块对所述存储阵列中的数据进行排序,包括:根据所述存储阵列中的数据的数目的以2为底的对数值减去所述基本双调排序模块的输入数目的以2为底的对数值再加一得到的数值,确定利用所述基本双调排序模块对所述存储阵列中的数据进行排序所需的双调排序阶段的个数;在双调排序阶段的个数为多个的情况下,依据行索引成对读取所述存储阵列中的数据,以对为双调排序阶段的输入数目的所述存储阵列中的数据进行分级对半划分,得到为所述基本双调排序模块的输入数目的所述存储阵列中的数据,并利用至少一个所述基本双调排序模块完成对得到的所述存储阵列中的数据进行相应双调排序阶段的排序处理。
在一些实施例中,在双调排序阶段的个数为多个的情况下,依据行索引成对读取所述存储阵列中的数据,以对为双调排序阶段的输入数目的所述存储阵列中的数据进行分级对半划分,得到为所述基本双调排序模块的输入数目的所述存储阵列中的数据,并利用至少一个所述基本双调排序模块完成对得到的所述存储阵列中的数据进行相应双调排序阶段的排序处理,包括:在双调排序阶段的个数为多个的情况下,在每个双调排序阶段,依据行索引从所述存储阵列中的数据分级对半划分地读取出相应双调排序阶段对应的双调排序模块所需的输入,以通过并行利用相应双调排序阶段对应的双调排序模块和/或通过复用相应双调排序阶段对应的双调排序模块,或通过一个相应双调排序阶段对应的双调排序模块,完成对所述存储阵列的数据进行相应双调排序阶段的双调排序,然后将相应双调排序阶段的双调排序后的数据依次写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据进行的相应双调排序阶段的处理;其中,第一个双调排序阶段对应的双调排序模块为所述基本双调排序模块;后一个双调排序阶段对应的双调排序模块的输入数目为前一个双调排序阶段对应的双调排序模块的输入数目的两倍,而且,后一个双调排序阶段对应的双调排序模块是利用两个或复用得到的两个前一个双调排序阶段对应的双调排序模块得到;后一个双调排序阶段中对所述存储阵列中的数据对半划分的级数比前一个双调排序阶段中对所述存储阵列中的数据对半划分的级数多一级。
在一些实施例中,为所述存储阵列的各行设置行索引,包括:按行顺序对所述存储阵列的各行以二进制形式进行编号,并将编号作为行索引。
在一些实施例中,在双调排序阶段的个数为多个的情况下,在每个双调排序阶段,依据行索引从所述存储阵列中的数据分级对半划分地读取出相应双调排序阶段对应的双调排序模块所需的输入,以通过并行利用相应双调排序阶段对应的双调排序模块和/或通过复用相应双调排序阶段对应的双调排序模块,或通过一个相应双调排序阶段对应的双调排序模块,完成对所述存储阵列的数据进行相应双调排序阶段的双调排序,然后将相应双调排序阶段的双调排序后的数据依次写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据进行的相应双调排序阶段的处理,包括:在第一个双调排序阶段,从行索引中只有第一位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个所述基本双调排序模块,以通过并行利用或复用所述基本双调排序模块进行双调排序,并将本次双调排序后的数据写入所述存储阵列中的空闲区域;在第二个双调排序阶段,从行索引中只有第二位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个利用两个或复用的两个所述基本双调排序模块形成的第二个双调排序阶段的输入数目对应的双调排序模块,以通过并行利用、复用或利用一个第二个双调排序阶段的输入数目对应的双调排序模块进行第二个双调排序阶段的第一次双调排序,并将本第一次双调排序后的数据写入所述存储阵列中的空闲区域;从行索引中只有第一位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个所述基本双调排序模块,以通过并行利用或复用所述基本双调排序模块进行第二个双调排序阶段的第二次双调排序,并将本第二次双调排序后的数据写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据的第二个双调排序阶段的处理。
根据本发明实施例的另一个方面,提供了一种数据排序装置,包括:接收模块,用于接收输入数据;计数器模块,用于统计输入数据的数目;存储控制单元,用于基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值;将所有输入数据存储成存储阵列,其中,所述存储阵列的列数为基本双调排序模块的输入数目的一半,所述存储阵列的行数为所述阵列数据数目值与所述存储阵列的列数的比值;为所述存储阵列的各行设置行索引;双调排序单元,包括至少一个所述基本双调排序模块,用于依据行索引成对读取所述存储阵列中的数据,以利用至少一个所述基本双调排序模块对所述存储阵列中的数据进行排序;输出模块,用于根据所述存储阵列中的数据的排序结果得到接收的输入数据的排序结果。
在一些实施例中,双调排序单元,还用于:根据所述存储阵列中的数据的数目的以2为底的对数值减去所述基本双调排序模块的输入数目的以2为底的对数值再加一得到的数值,确定利用所述基本双调排序模块对所述存储阵列中的数据进行排序所需的双调排序阶段的个数;在双调排序阶段的个数为多个的情况下,依据行索引成对读取所述存储阵列中的数据,以对为双调排序阶段的输入数目的所述存储阵列中的数据进行分级对半划分,得到为所述基本双调排序模块的输入数目的所述存储阵列中的数据,并利用至少一个所述基本双调排序模块完成对得到的所述存储阵列中的数据进行相应双调排序阶段的排序处理。
在一些实施例中,存储控制单元,包括:行索引生成模块,用于按行顺序对所述存储阵列的各行以二进制形式进行编号,并将编号作为行索引。
在一些实施例中,双调排序单元,包括:各双调排序阶段对应的双调排序模块;第一个双调排序阶段对应的双调排序模块包括至少一个基本双调排序模块;第二个双调排序阶段及之后的双调排序阶段对应的双调排序模块包括复用的至少一个基本双调排序模块、相应双调排序阶段对应的划分模块、及相应双调排序阶段对应的合并模块;第三个双调排序阶段及之后的双调排序阶段对应的双调排序模块还包括复用的其之前双调排序阶段对应的划分模块和复用的其之前双调排序阶段对应的合并模块;划分模块,用于:依据行索引从所述存储阵列中的数据分级对半划分地读取出相应双调排序阶段对应的双调排序模块所需的输入,以通过并行利用相应双调排序阶段对应的双调排序模块和/或通过复用相应双调排序阶段对应的双调排序模块,或通过一个相应双调排序阶段对应的双调排序模块,完成对所述存储阵列的数据进行相应双调排序阶段的双调排序;合并模块,用于:将相应双调排序阶段的双调排序后的数据依次写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据进行的相应双调排序阶段的处理;其中,第一个双调排序阶段对应的双调排序模块为所述基本双调排序模块;后一个双调排序阶段对应的双调排序模块的输入数目为前一个双调排序阶段对应的双调排序模块的输入数目的两倍;后一个双调排序阶段中对所述存储阵列中的数据对半划分的级数比前一个双调排序阶段中对所述存储阵列中的数据对半划分的级数多一级。
在一些实施例中,所述数据排序装置基于FPGA或ASIC实现。
根据本发明实施例的又一个方面,提供了一种数据库系统,包括上述任一实施例所述的数据排序装置。
本发明实施例的数据排序方法、数据排序装置及数据库系统,通过对输入数据进行计数,根据输入数据的数目存储成存储阵列,并依据存储阵列的行索引读取输入数据,以此能够实现通过复用基本双调排序模块实现对任一数目的输入数据进行排序。而且,通过复用基本双调排序模块能够减少硬件资源闲置,从而能够提高硬件资源利用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例的数据排序方法的流程示意图;
图2是本发明一实施例的数据排序装置的结构示意图;
图3是本发明一实施例的对任意输入排序的模块复用流程示意图;
图4是本发明一实施例的32输入的数据排序装置的整体框架示意图;
图5是本发明一实施例的32输入双调排序模块复用实现的阶段2数据划分示意图;
图6是本发明一实施例的32输入双调排序模块复用实现的阶段1和阶段2数据读取示意图;
图7是本发明一实施例的32输入双调排序模块复用实现的阶段2和阶段3数据读取示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
双调排序的“双调”可以体现在处理的序列为双调序列,双调序列可以是一个先单调递增后单调递减的序列,或者可以是通过循环移位能够先单调递增后单调递减的序列,任意两个数据均可以看作一个双调序列。
发明人在进行双调排序的硬件具体实现过程中,发现双调排序网络需要应对多种不同的输入场景。具体地,当输入数目发生变化时,原有的已经固化好的硬件逻辑电路不能灵活地对当前输入进行处理。
现有已知固定数目输入的双调排序硬件设备,在面对任意数目输入时,需要设置多个不同输入端口数目的硬件模块以适应不同输入场景或者重新编译综合生成新的逻辑电路。根据不同输入重新编译综合生成新的硬件逻辑电路或部署多种不同输入的硬件处理模块,这极大地占用了硬件资源,对于硬件资源稀缺的设备器件更是一个需要解决的瓶颈问题,如灵活性、可扩展性等方面的诸多问题。而且,双调排序作为一种按阶段顺序比较处理数据的算法,每一阶段对应的硬件资源处理完相应数据后便处于空闲状态,硬件资源面临着浪费,硬件资源利用率不高。
对此,本发明提供了一种数据排序方法、数据排序装置及数据库系统,以便对各种数目的输入数据进行排序,并兼顾硬件资源的高效利用。
图1是本发明一实施例的数据排序方法的流程示意图。如图1所示,一些实施例的数据排序方法可包括以下步骤S110~步骤S160。
下面将对步骤S110至步骤S160的具体实施方式进行详细说明。
步骤S110:接收输入数据,并统计输入数据的数目。
可通过计数器统计输入数据数目N(N为正整数),便于后续确定基本双调排序模块的复用次数和存储阵列的空间分配。
步骤S120:基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值。
步骤S130:将所有输入数据存储成存储阵列,其中,所述存储阵列的列数为基本双调排序模块的输入数目的一半,所述存储阵列的行数为所述阵列数据数目值与所述存储阵列的列数的比值。
该步骤S120中,可以根据输入数据的数目N的情况,确定一个阵列数据数目值2^p(p为正整数),该阵列数据数目值2^p大于或等于基本双调排序模块的输入数目n(n为正整数),以便利用基本双调排序模块作为最小排序单元实现对所有输入数据排序。其中,该基本双调排序模块可以利用现有方式实现,具体参数(如输入数目)可以根据需要设置,输入数目为2的幂次,可以是4、8、16等。
在一些实施例中,输入数据的数目恰好匹配(整数倍)基本双调排序模块的输入数目。示例性地,该步骤S120,即,基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值,具体地,可包括步骤:在输入数据的数目为2的幂次且大于或等于基本双调排序模块的输入数目的情况下,将输入数据的数目确定为阵列数据数目值。阵列数据数目值2^p=输入数据的数目N。
在其他实施例中,不排除可以将输入数据增加至大于输入数据的数目N且为基本双调排序模块的输入数目n的整数倍的数目来进行并行排序处理。
在另一些实施例中,输入数据的数目不能匹配基本双调排序模块的输入数目。示例性地,该步骤S120,即,基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值,具体地,可包括步骤:在输入数据的数目不是2的幂次或输入数据的数目小于基本双调排序模块的输入数目的情况下,将大于或等于基本双调排序模块的输入数目的最小为2的幂次的数值确定为阵列数据数目值。阵列数据数目值2^p>输入数据的数目N。
进一步地,可以通过填补数据至输入数据,使得数据的数目匹配基本双调排序模块的输入数目。示例性地,该步骤S130中,将所有输入数据存储成存储阵列,具体地,可包括步骤:通过添加MAX/MIN值将输入数据的数目增加至所述阵列数据数目值,并将添加MAX/MIN值后的所有输入数据存储成一个存储阵列。例如,阵列数据数目值2^p=输入数据的数目N+填补数据数目。
其中,添加MAX/MIN可以依据现有方法实现,添加MAX/MIN值可以是各种能够容易地从所有输入数据中识别出的数据,例如,是比所有接收的输入数据都大或都小的数据。
在此情况下,排序结束后,需要删除填补的数据。进一步地,后续步骤S160,即,根据所述存储阵列中的数据的排序结果得到接收的输入数据的排序结果,具体地,可包括步骤:从所述存储阵列中的数据的排序结果中剔除添加的MAX/MIN值后,得到接收的输入数据的排序结果。
对于输入数据的数目不能匹配基本双调排序模块的输入数目的情况,在其他实施例中,不排除通过减少输入数据数目的方式先对一部分输入数据排序,然后在利用其他方式对剩余数据排序,以实现对所有输入数据排序。
该步骤S130中,存储阵列的列数为n/2,行数为2p/(n/2),2p为阵列数据数目值,n为基本双调排序模块的输入数目。
另外,在将输入数据存入存储阵列时,可以同时为输入数据设置数据类型,如整型、浮点型和字符型等。在确定存储阵列的行数和列数以及数据的类型后,可以申请相应的存储空间资源来存储数据。
步骤S140:为所述存储阵列的各行设置行索引。
该存储阵列可以为多行多列的阵列。该行索引可以是二进制数的形式。示例性地,该步骤S140,即,为所述存储阵列的各行设置行索引,具体地,可包括步骤:按行顺序对所述存储阵列的各行以二进制形式进行编号,并将编号作为行索引。更具体地,对存储阵列中的行从低地址到高地址从0开始进行二进制编号。在其他实施例中,不排除采用其他方式对存储阵列的各行进行标记作为索引。
步骤S150:依据行索引成对读取所述存储阵列中的数据,以利用至少一个所述基本双调排序模块对所述存储阵列中的数据进行排序。
在进行排序时,可以先确认各种所需参数,例如,阶段数等,再利用基本双调排序模块对各种输入数据数目对应的存储阵列中的数据进行排序。
示例性地,该步骤S150,即,依据行索引成对读取所述存储阵列中的数据,以利用至少一个所述基本双调排序模块对所述存储阵列中的数据进行排序,具体地,可包括步骤:S151,根据所述存储阵列中的数据的数目的以2为底的对数值减去所述基本双调排序模块的输入数目的以2为底的对数值再加一得到的数值,确定利用所述基本双调排序模块对所述存储阵列中的数据进行排序所需的双调排序阶段的个数;S152,在双调排序阶段的个数为多个的情况下,依据行索引成对读取所述存储阵列中的数据,以对为双调排序阶段的输入数目的所述存储阵列中的数据进行分级对半划分,得到为所述基本双调排序模块的输入数目的所述存储阵列中的数据,并利用至少一个所述基本双调排序模块完成对得到的所述存储阵列中的数据进行相应双调排序阶段的排序处理。
在双调排序阶段的个数为一个时,可以利用一个或多个基本双调排序模块来对输入数据进行排序。基本双调排序模块不够一次对所有输入数据完成排序时,可以通过复用基本双调排序模块的方式完成排序。基本双调排序模块有多个时,可以利用多个基本双调排序模块并行对不同部分的输入数据进行排序。
在双调排序阶段的个数为多个(两个或以上)时,输入数据的数量超过基本双调排序模块的输入数目,可以通过多个基本双调排序模块或复用基本双调排序模块来形成输入数目更多的双调排序模块来实现更多输入的排序处理,不同阶段的输入数目不同。
该步骤S152中,依据行索引成对读取所述存储阵列中的数据是根据双调排序的需要确定的,而双调排序读取数据的原则是比较对之间的独立性。每行可以有2p/(n/2)个输入数据,通过一个行索引可以找到一行数据。通过找到两行,依次读取这两行中的数据,可以实现成对读取数据。可以通过分级对半划分的方式来读取数据,所谓分级,例如可指将一组数据分成两半,再将其中一半再分成两半。可以根据确定行索引来找到哪两行确定将存储阵列中的数据如何分级对半划分。
进一步地,可以分阶段对输入数据进行双调排序处理。示例性地,上述步骤S152,即,在双调排序阶段的个数为多个的情况下,依据行索引成对读取所述存储阵列中的数据,以对为双调排序阶段的输入数目的所述存储阵列中的数据进行分级对半划分,得到为所述基本双调排序模块的输入数目的所述存储阵列中的数据,并利用至少一个所述基本双调排序模块完成对得到的所述存储阵列中的数据进行相应双调排序阶段的排序处理,更具体地,可包括步骤:S1521,在双调排序阶段的个数为多个的情况下,在每个双调排序阶段,依据行索引从所述存储阵列中的数据分级对半划分地读取出相应双调排序阶段对应的双调排序模块所需的输入,以通过并行利用相应双调排序阶段对应的双调排序模块和/或通过复用相应双调排序阶段对应的双调排序模块,或通过一个相应双调排序阶段对应的双调排序模块,完成对所述存储阵列的数据进行相应双调排序阶段的双调排序,然后将相应双调排序阶段的双调排序后的数据依次写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据进行的相应双调排序阶段的处理;其中,第一个双调排序阶段对应的双调排序模块为所述基本双调排序模块;后一个双调排序阶段对应的双调排序模块的输入数目为前一个双调排序阶段对应的双调排序模块的输入数目的两倍,而且,后一个双调排序阶段对应的双调排序模块是利用两个或复用得到的两个前一个双调排序阶段对应的双调排序模块得到;后一个双调排序阶段中对所述存储阵列中的数据对半划分的级数比前一个双调排序阶段中对所述存储阵列中的数据对半划分的级数多一级。
使后一个双调排序阶段对应的双调排序模块利用复用两个前一个双调排序阶段对应的双调排序模块得到,最根本的是,可以是通过利用本阶段新增的读取方式和写入方式(划分模块和合并模块),以及复用基本双调排序模块和之前阶段新增的读取方式和写入方式(划分模块和合并模块)实现各种输入数目的双调排序。
该步骤S1521中,不同双调排序阶段所对应的双调排序模块的输入数目不同,例如,前一双调排序阶段所对应的双调排序模块的输入数目是n,则后一双调排序阶段所对应的双调排序模块的输入数目可以是2n,再向后一个双调排序阶段所对应的双调排序模块的输入数目可以是4n,以此类推。后一双调排序阶段所对应的双调排序模块可以利用两个前一双调排序阶段所对应的双调排序模块以及该后一双调排序阶段所对应的划分模块和合并模块形成。例如,后一双调排序阶段所对应的双调排序模块的输入数目是16,前一双调排序阶段所对应的双调排序模块的输入数目是8,则可以利用两个8输入的双调排序模块、能够将16输入对半划分为两组各含8数据的划分模块、以及能够将各组8数据利用各自8输入的双调排序模块的排序结果组合成一个完整单调序列的合并模块。
在上述步骤S140设置行索引的具体实施方式是,按行顺序对所述存储阵列的各行以二进制形式进行编号,并将编号作为行索引。可以根据行索引的二进制数规律确定如何读取数据,以实现双调排序。
在此情况下,对于包含多个双调排序阶段的情况来说,必然包含第一双调排序阶段和第二双调排序阶段,当然还可以包含第三双调排序阶段等。该第一双调排序阶段对应的双调排序模块可以是上述基本双调排序模块。示例性地,上述步骤S1521,更具体地,可包括步骤:S15211,在第一个双调排序阶段,从行索引中只有第一位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个所述基本双调排序模块(第一个双调排序阶段对应的双调排序模块),以通过并行利用或复用所述基本双调排序模块进行双调排序,并将本次双调排序后的数据写入所述存储阵列中的空闲区域;S15212,在第二个双调排序阶段,从行索引中只有第二位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个利用两个或复用的两个所述基本双调排序模块形成的第二个双调排序阶段的输入数目对应的双调排序模块,以通过并行利用、复用或利用一个第二个双调排序阶段的输入数目对应的双调排序模块进行第二个双调排序阶段的第一次双调排序,并将本第一次双调排序后的数据写入所述存储阵列中的空闲区域;从行索引中只有第一位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个所述基本双调排序模块,以通过并行利用或复用所述基本双调排序模块进行第二个双调排序阶段的第二次双调排序,并将本第二次双调排序后的数据写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据的第二个双调排序阶段的处理。
该示例中,只是以两个阶段为例,在其他实施例中,还可以包含更多的阶段。当包含更多阶段时,可以基于上述步骤S15211和上述步骤S15212示出的规律依次实施后续阶段。
通过上述步骤S15211可以知道,该在第一个双调排序阶段,对应的双调排序模块可以是上述基本双调排序模块,当然可以是多个相同的基本双调排序模块。在其他实施例中,不排除不同的基本双调排序模块的输入数目可能不同,例如,包含8输入基本双调排序模块和16输入基本双调排序模块,但基本思想可以是一致的。可以利用适用于该阶段的相应基本双调排序模块来配合进行排序处理,例如,以最低输入的模块(8输入基本双调排序模块)作为上述步骤S15211中的基本双调排序模块,利用16输入基本双调排序模块作为上述步骤S15212中的基本双调排序模块。而且,对于读取或划分数据的次数而言,后一双调排序阶段比前一双调排序阶段会多一次。步骤S15212中,例如,基本双调排序模块的输入数目为8,则第二个双调排序阶段的输入数目为16,第二个双调排序阶段的输入数目对应的双调排序模块为16输入双调排序模块。
需要说明的是,经过一次双调排序,会更新一次存储阵列中的数据为排序后的顺序,例如,从存储阵列中第一行的第一位置读取的第一数据,从第二行的第一位置读取了第二数据(读取第一数据、第二数据后可以认为相应的存储位置变为空闲区域),则对该第一数据和第二数据比较后需要调换顺序,则可在存储阵列中第一行的第一位置写入第二数据,将第二行的第一位置写入第一数据,所以后一次双调排序是基于前一次或阶段双调排序更新后的存储阵列进行的。另外,还需要说明的是,二进制数形式的行索引的位的顺序,从右向左依次是第0位、第1位等,依次类推。
另一实施例中,还可以包含第三双调排序阶段,则上述步骤S15212之后,还可包括步骤:在第三个双调排序阶段,从行索引中只有第三位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个利用两个或复用的两个第二双调排序阶段的输入数目对应的双调排序模块形成的第三双调排序阶段的输入数目对应的双调排序模块,以通过并行利用、复用或利用一个第三双调排序阶段的输入数目对应的双调排序模块进行第三个双调排序阶段的第一次双调排序,并将本第一次双调排序后的数据写入所述存储阵列中的空闲区域;从行索引中只有第二位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个第二个双调排序阶段的输入数目对应的双调排序模块,以通过并行利用或复用第二个双调排序阶段的输入数目对应的双调排序模块进行第三个双调排序阶段的第二次双调排序,并将本第二次双调排序后的数据写入所述存储阵列中的空闲区域;从行索引中只有第一位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个所述基本双调排序模块,以通过并行利用或复用所述基本双调排序模块进行第二个双调排序阶段的第二次双调排序,并将本第二次双调排序后的数据写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据的第二个双调排序阶段的处理。
由此可见,后一阶段比前一阶段多一次双调排序过程,多出的这次双调排序中读取数据时所依据的行索引的二进制位向左移一位,其他次的双调排序过程可以是多个前一阶段的双调排序过程。后一阶段对应的输入数目是前一阶段对应的输入数目两倍。
步骤S160:根据所述存储阵列中的数据的排序结果得到接收的输入数据的排序结果。
经过排序后,存储阵列中的数据可以为单调顺序,此时,可以直接进行输出作为排序结果,或者挑选出需要的数据进行输出,或者说剔除不需要的数据进行输出。可以输出到硬件其他部分进行其他处理,或者直接输出到硬件外部,如CPU端。
基于与图1所示的数据排序方法相同的发明构思,本申请实施例还提供了一种数据排序装置,如下面实施例所述。由于该数据排序装置解决问题的原理与数据排序方法相似,因此该数据排序装置的实施可以参见数据排序方法的实施,重复之处不再赘述。
图2是本发明一实施例的数据排序装置的结构示意图。如图2所示,该些实施例的数据排序装置可包括:接收模块210、计数器模块220、存储控制单元230、双调排序单元240、输出模块250等。其中,双调排序单元240可以包括至少一个所述基本双调排序模块241。
接收模块210可用于接收输入数据。计数器模块220可用于统计输入数据的数目。存储控制单元230可用于基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值;将所有输入数据存储成存储阵列,其中,所述存储阵列的列数为基本双调排序模块的输入数目的一半,所述存储阵列的行数为所述阵列数据数目值与所述存储阵列的列数的比值;为所述存储阵列的各行设置行索引。双调排序单元240,包括至少一个所述基本双调排序模块241,可用于依据行索引成对读取所述存储阵列中的数据,以利用至少一个所述基本双调排序模块对所述存储阵列中的数据进行排序。输出模块250可用于根据所述存储阵列中的数据的排序结果得到接收的输入数据的排序结果。
在一些实施例中,双调排序单元240,还(具体地)用于:根据所述存储阵列中的数据的数目的以2为底的对数值减去所述基本双调排序模块的输入数目的以2为底的对数值再加一得到的数值,确定利用所述基本双调排序模块对所述存储阵列中的数据进行排序所需的双调排序阶段的个数;在双调排序阶段的个数为多个的情况下,依据行索引成对读取所述存储阵列中的数据,以对为双调排序阶段的输入数目的所述存储阵列中的数据进行分级对半划分,得到为所述基本双调排序模块的输入数目的所述存储阵列中的数据,并利用至少一个所述基本双调排序模块完成对得到的所述存储阵列中的数据进行相应双调排序阶段的排序处理。
在一些实施例中,存储控制单元230可包括:行索引生成模块。行索引生成模块,可用于按行顺序对所述存储阵列的各行以二进制形式进行编号,并将编号作为行索引。
在一些实施例中,再参见图2所示,双调排序单元240可包括各双调排序阶段对应的双调排序模块2401。第一个双调排序阶段对应的双调排序模块2401包括至少一个基本双调排序模块241;第二个双调排序阶段及之后的双调排序阶段对应的双调排序模块2401包括复用的至少一个基本双调排序模块241、相应双调排序阶段对应的划分模块242、及相应双调排序阶段对应的合并模块243;第三个双调排序阶段及之后的双调排序阶段对应的双调排序模块2401还包括复用的其之前双调排序阶段对应的划分模块242和复用的其之前双调排序阶段对应的合并模块243。
划分模块242,可用于:依据行索引从所述存储阵列中的数据分级对半划分地读取出相应双调排序阶段对应的双调排序模块所需的输入,以通过并行利用相应双调排序阶段对应的双调排序模块和/或通过复用相应双调排序阶段对应的双调排序模块,或通过一个相应双调排序阶段对应的双调排序模块,完成对所述存储阵列的数据进行相应双调排序阶段的双调排序。
合并模块243,可用于:将相应双调排序阶段的双调排序后的数据依次写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据进行的相应双调排序阶段的处理。
其中,第一个双调排序阶段对应的双调排序模块为所述基本双调排序模块;后一个双调排序阶段对应的双调排序模块的输入数目为前一个双调排序阶段对应的双调排序模块的输入数目的两倍;后一个双调排序阶段中对所述存储阵列中的数据对半划分的级数比前一个双调排序阶段中对所述存储阵列中的数据对半划分的级数多一级。
通过后一个双调排序阶段对应的双调排序模块复用基本双调排序模块,包括本阶段对应的划分模块和合并模块,或者还包括前一个双调排序阶段对应的划分模块和合并模块,可使后一个双调排序阶段对应的双调排序模块利用复用两个前一个双调排序阶段对应的双调排序模块得到,最根本的是,可以通过利用本阶段新增的划分模块和合并模块,以及复用基本双调排序模块和之前阶段新增的划分模块和合并模块实现各种输入数目的双调排序。
在其他实施例中,不排除后一双调排序阶段不复用前一阶段的划分模块、合并模块(可以根据需要再增加)。
在一些实施例中,双调排序单元240具体还可用于:在第一个双调排序阶段,从行索引中只有第一位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个所述基本双调排序模块,以通过并行利用或复用所述基本双调排序模块进行双调排序,并将本次双调排序后的数据写入所述存储阵列中的空闲区域;在第二个双调排序阶段,从行索引中只有第二位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个利用两个或复用的两个所述基本双调排序模块形成的第二个双调排序阶段的输入数目对应的双调排序模块,以通过并行利用、复用或利用一个第二个双调排序阶段的输入数目对应的双调排序模块进行第二个双调排序阶段的第一次双调排序,并将本第一次双调排序后的数据写入所述存储阵列中的空闲区域;从行索引中只有第一位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个所述基本双调排序模块,以通过并行利用或复用所述基本双调排序模块进行第二个双调排序阶段的第二次双调排序,并将本第二次双调排序后的数据写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据的第二个双调排序阶段的处理。
在一些实施例中,所述数据排序装置基于FPGA(现场可编程门阵列)或ASIC(专用集成电路)实现。
在一些实施例中,存储控制单元230具体还可用于在输入数据的数目为2的幂次且大于或等于基本双调排序模块的输入数目的情况下,将输入数据的数目确定为阵列数据数目值。
在另一些实施例中,存储控制单元230具体还可用于在输入数据的数目不是2的幂次或输入数据的数目小于基本双调排序模块的输入数目的情况下,将大于或等于基本双调排序模块的输入数目的最小为2的幂次的数值确定为阵列数据数目值;通过添加MAX/MIN值将输入数据的数目增加至所述阵列数据数目值,并将添加MAX/MIN值后的所有输入数据存储成一个存储阵列。输出模块250具体还可用于从所述存储阵列中的数据的排序结果中剔除添加的MAX/MIN值后,得到接收的输入数据的排序结果。
此外,本发明实施例还提供了一种数据库系统,包括任一实施例所述的数据排序装置。该数据排序装置可以是如FPGA、ASIC等的硬件。数据库系统还可包括CPU端的设备,如计算机、服务器等,还可包括CPU端的软件数据库。
为使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。
在一具体实施例中,提供了一种数据排序方法,该方法为任意数目输入的双调排序模块复用方法,其基于模块复用解决双调排序任意数目输入的问题。
图3是本发明一实施例的对任意输入排序的模块复用流程示意图。如图3所示,一实施例的数据排序方法可包括输入处理、模块复用及结果整理三个过程。
在输入处理过程中,可通过计数器统计输入数据数目(记为N),便于后续确定模块复用次数和存储阵列空间分配,具体来说,对于非2的幂次(N!=2^p)的输入情况,可以通过添加MAX/MIN值来补充至2的幂次,其余任意有意义的输入总是小于(或大于)MAX(或MIN),在最终的输出结果中将MAX/MIN值剔除掉即可。
输入数目的不同会涉及到存储空间的分配问题。为便于模块复用,需维持一个多行多列的存储阵列,具体列数要视基本排序模块的输入数目n而定,列数需设置为n/2;行数为输入数据总数目与列数的比值,按行进行编号得到行索引,行索引采取二进制形式。以基本排序模块的输入设置为8为例,存储阵列空间需要分配总空间大小为N,列数目为4,行数目为N/4,输入数据类型依需要可以设置为整型、浮点型和字符型等,数据类型的不同仅影响数据所占空间的大小,对于整体模块复用操作没有影响。
设置基本排序模块:基本排序模块BSn可包括n输入双调划分模块Compn、n输入双调合并模块BMn及两个n/2输入双调排序模块BSn/2。依据需求不同和整体的复用性考虑n的值可设置为4、8、16等2的幂次数值,如设置基本排序模块为8输入双调排序模块BS8,则其包括8输入双调合并模块BM8、8输入双调划分模块Comp8及两个4输入双调排序模块BS4。其中,8输入双调划分模块Comp8输入是双调序列,将数据进行对半划分,假设分为A和B两部分,两部分中的数据一一对应进行比较,将每次比较中较大的数据放入A中,较小的数据放入B中,此时输出A、B两部分均为双调序列;8输入双调合并模块BM8输入为双调序列,输出为单调序列;4输入双调排序模块BS4输入为长度为4的序列,输出为单调序列。从而8输入双调排序模块BS8输入为任意长度为8的序列,输出为单调序列。
在模块复用过程中:模块复用的基础是同一双调排序阶段两两需要比较的数据形成的比较对之间的独立性,这保证了比较对可以被重新划分整合。通过将比较对重新划分整合,使得原本超出当前模块承载量的数据可以被重新划归至其他模块进行比较,复用后的不同模块并行处理这些数据仍可得到正确的处理结果。
输入数目的不同,会影响存储阵列模块读写操作的次数,以及基本排序模块复用的次数。具体来说,例如,当输入数目为N,基本排序模块设置为BS8,包括8输入双调划分模块Comp8、8输入双调合并模块BM8等时,对于N不大于8的情况,添加MAX/MIN值补充至8,无需模块复用直接可以得出相应的结果;对于N大于8的情况,双调排序按阶段复用基本排序模块,从算法上来说,N输入的双调排序会分成个阶段(N=2^p),在本实施例中,若采取BS8作为基本排序模块,就将前三个阶段(2输入双调排序阶段BS2(包括Comp2、BM2)、4输入双调排序阶段BS4(包括Comp4、BS2、BM4)、8输入双调排序阶段BS8(包括Comp8、BS4、BM8))合并视为阶段1(第一双调排序模块),类似地,采取BS16作为基本排序模块时,前四个阶段(2输入双调排序阶段、4输入双调排序阶段、8输入双调排序阶段、16输入双调排序阶段(包括Comp16、BS8、BM16))会被合并视为阶段1,以此类推。
在阶段1时,若所复用到的基本排序模块为BS8,基本排序模块总计可能需要调用N/8次,BS8可以只部署一个,也可以视情况部署多个并行使用;从第二阶段开始的后续阶段,Comp8基本排序模块在每两个阶段之间均需要调用,第一阶段和第二阶段之间(或称为第二阶段中)需要调用1次,此时数据来源于只有第1位不同的两行数据,第二阶段和第三阶段之间需要调用两次,此时数据依次分别来源于只有第2位不同的两行数据和只有第1位不同的两行数据,以此类推。
在结果整理过程中:存在MAX/MIN补充值的情况下,需要将补充值剔除。从存储阵列中按行依次读取出数据,即可为排序结果。
图4是本发明一实施例的32输入的数据排序装置的整体框架示意图,如图4所示,灰色方块区域所示模块表示其输出序列为降序(按索引值从低到高排序,输出从大到小),白色方块区域所示模块表示其输出序列为升序(按索引值从低到高排序,输出从小到大),由图4可以看出,一个32输入的双调排序可以划分为8输入基本双调排序模块BS8、16输入双调合并模块BM16和32输入双调合并模块BM32模块,还可包括16输入双调划分模块Comp16和32输入双调划分模块Comp32模块。如图4所示,8输入基本双调排序模块BS8包含四个2输入双调合并模块BM2、两个4输入双调合并模块BM4和一个8输入双调合并模块BM8,另外,还可包括未示出的四个2输入双调划分模块Comp2、2个4输入双调划分模块Comp4及1个8输入双调划分模块Comp8。此外,对于16输入的双调合并模块BM16和32输入的双调合并模块BM32前,可复用8输入基本双调排序模块BS8完成相应阶段的排序,其结构未在图4中示出。
在图4中,若以BS8为基本双调排序模块,则可分为阶段1~阶段3,若以最小的单元BS2为基本双调排序模块,则可以分为stage1~stage5。以最小的单元BS2为基本双调排序模块来看,BS2可包括Comp2和BM2(两个数据比较一次即可确定顺序,所以没有BS1),BS4可包括Comp4、BS2(包括Comp2和BM2)和BM4,BS8可包括Comp8、BS4(包括Comp4、BS2(包括Comp2和BM2)和BM4)和BM4,BS16可包括Comp16、BS8(Comp8、BS4(包括Comp4、BS2(包括Comp2和BM2)和BM4)、BM8)和BM18,BS32可包括Comp32、BS16(Comp16、BS8(Comp8、BS4(包括Comp4、BS2(包括Comp2和BM2)和BM4)、BM8)和BM18)和BM32,以此类推。所以,图4中显示了各BMn(或者BMn),其中,Compn未示出。
如图4所示,以BS8为基本双调排序模块,32输入的双调排序可以划分为三个阶段(阶段1、阶段2阶段3),其中,阶段1中的基本排序模块为BS8,完成阶段1所示操作需要4次BS8基本排序模块调用(并行或复用);阶段2含两组16输入的双调合并模块BM16和16输入的双调划分模块Comp16(未在图4中示出),该阶段2还可复用阶段1的基本排序模块为BS8。图5是本发明一实施例的32输入双调排序模块复用实现的阶段2数据划分示意图,如图5所示,该16输入的双调排序模块BS16包括一个16输入的双调划分模块Comp16模块和两个8输入的双调排序模块BS 8(包括Comp8和BM8),还可包括一个16输入的双调合并模块BM8。通过Comp16模块将16输入拆分成两组,拆分得到的两组输入继续Comp8模块拆分从而可以通过复用8输入的双调排序模块BS 8进行排序,拆分得到的两组输入通过复用BS8排序后可由BM16合并为单调序列,所以,最终,阶段2整体可以视作由Comp16、BS8和BM18模块组成;换言之,该16输入的双调合并模块由一个Comp16模块和两个BM8模块组成,通过将Comp16模块拆分成两组Comp8模块,最终阶段2整体可以视作由Comp8和BM8模块复用实现;类似地,阶段3含32输入的双调划分模块BM32、16输入的双调排序模块BS16(包括Comp16、BS8和BM18)、32输入的双调合并模块BM32,可以将Comp32模块以4个Comp8复用实现,可以将Comp16模块以2个Comp8复用实现,即阶段3仍可由Comp8、BM8等复用实现。
图6是本发明一实施例的32输入双调排序模块复用实现的阶段1和阶段2数据读取示意图,如图6所示,在阶段1中,BS8可以多次载入不同数据重复使用。在硬件电路上,数据是随时钟一拍一拍进入,当输入缓存单元每缓存得到8个有效的输入数据时,便可将该数据压入BS8基本排序模块,BS8基本排序模块在完成操作后将结果依次写入存储阵列单元中的空闲区域,然后重新获取新的8个有效的输入数据进行处理操作,BS8输出为单调递增或单调递减的序列。与没有考虑复用的双调排序硬件实现相比而言,在第一阶段需要占用的BS8模块数目大大减少,BS8基本排序模块的复用使得数据可以超前进行比较操作,而非等待所有数据准备就绪再整体进行阶段1操作,节省了存储空间的同时也加快了整体运行速度;除此之外,硬件资源的节省也意味着可以在相同硬件资源条件下可以承载更多的数据输入。BS8基本排序模块依需要可以设置一至多个,设置多个的目的在于利用局部的并行性以避免新的数据已经缓存好而旧有数据BS8还未处理完,进而导致空闲时钟周期造成整体性能的下降。
当所有输入数据经过阶段1处理完毕,双调排序进入阶段2,阶段2的主要复用模块为Comp8和BM8。Comp8的输入数据来源于存储模块的特定行,将存储模块中行索引以二进制形式表示,在此形式下将只有第一位(从0开始计数)不同的两行(如0000和0010、0001和0011等)读出,在经过Comp8处理完成后依次放入数据来源的两行;之后将数据按行依次从存储单元中读出,由BM8基本排序模块处理后再依次写回。
图7是本发明一实施例的32输入双调排序模块复用实现的阶段2和阶段3数据读取示意图。如图7所示,在阶段3中,Comp8首先从行索引中只有第2位不同的两行取出数据进行处理,处理完成后将数据再依次写回该两行,之后再从只有第1位不同的两行取出数据进行同样的处理,最终再由BM8按行依次读取数据完成相应操作,得到最终排序结果。
综上所述,本发明实施例的数据排序方法、数据排序装置及数据库系统,通过对输入数据进行计数,根据输入数据的数目存储成存储阵列,并依据存储阵列的行索引读取输入数据,以此能够实现通过复用基本双调排序模块实现对任一数目的输入数据进行排序。而且,通过复用基本双调排序模块能够减少硬件资源闲置,从而能够提高硬件资源利用率。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (13)
1.一种数据排序方法,其特征在于,包括:
接收输入数据,并统计输入数据的数目;
基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值;
将所有输入数据存储成存储阵列,其中,所述存储阵列的列数为基本双调排序模块的输入数目的一半,所述存储阵列的行数为所述阵列数据数目值与所述存储阵列的列数的比值;
为所述存储阵列的各行设置行索引;
依据行索引成对读取所述存储阵列中的数据,以利用至少一个所述基本双调排序模块对所述存储阵列中的数据进行排序;
根据所述存储阵列中的数据的排序结果得到接收的输入数据的排序结果。
2.如权利要求1所述的数据排序方法,其特征在于,基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值,包括:
在输入数据的数目为2的幂次且大于或等于基本双调排序模块的输入数目的情况下,将输入数据的数目确定为阵列数据数目值。
3.如权利要求1所述的数据排序方法,其特征在于,
基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值,包括:
在输入数据的数目不是2的幂次或输入数据的数目小于基本双调排序模块的输入数目的情况下,将大于或等于基本双调排序模块的输入数目的最小为2的幂次的数值确定为阵列数据数目值;
将所有输入数据存储成存储阵列,包括:
通过添加MAX/MIN值将输入数据的数目增加至所述阵列数据数目值,并将添加MAX/MIN值后的所有输入数据存储成一个存储阵列;
根据所述存储阵列中的数据的排序结果得到接收的输入数据的排序结果,包括:
从所述存储阵列中的数据的排序结果中剔除添加的MAX/MIN值后,得到接收的输入数据的排序结果。
4.如权利要求1所述的数据排序方法,其特征在于,依据行索引成对读取所述存储阵列中的数据,以利用至少一个所述基本双调排序模块对所述存储阵列中的数据进行排序,包括:
根据所述存储阵列中的数据的数目的以2为底的对数值减去所述基本双调排序模块的输入数目的以2为底的对数值再加一得到的数值,确定利用所述基本双调排序模块对所述存储阵列中的数据进行排序所需的双调排序阶段的个数;
在双调排序阶段的个数为多个的情况下,依据行索引成对读取所述存储阵列中的数据,以对为双调排序阶段的输入数目的所述存储阵列中的数据进行分级对半划分,得到为所述基本双调排序模块的输入数目的所述存储阵列中的数据,并利用至少一个所述基本双调排序模块完成对得到的所述存储阵列中的数据进行相应双调排序阶段的排序处理。
5.如权利要求4所述的数据排序方法,其特征在于,在双调排序阶段的个数为多个的情况下,依据行索引成对读取所述存储阵列中的数据,以对为双调排序阶段的输入数目的所述存储阵列中的数据进行分级对半划分,得到为所述基本双调排序模块的输入数目的所述存储阵列中的数据,并利用至少一个所述基本双调排序模块完成对得到的所述存储阵列中的数据进行相应双调排序阶段的排序处理,包括:
在双调排序阶段的个数为多个的情况下,在每个双调排序阶段,依据行索引从所述存储阵列中的数据分级对半划分地读取出相应双调排序阶段对应的双调排序模块所需的输入,以通过并行利用相应双调排序阶段对应的双调排序模块和/或通过复用相应双调排序阶段对应的双调排序模块,或通过一个相应双调排序阶段对应的双调排序模块,完成对所述存储阵列的数据进行相应双调排序阶段的双调排序,然后将相应双调排序阶段的双调排序后的数据依次写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据进行的相应双调排序阶段的处理;
其中,第一个双调排序阶段对应的双调排序模块为所述基本双调排序模块;后一个双调排序阶段对应的双调排序模块的输入数目为前一个双调排序阶段对应的双调排序模块的输入数目的两倍,而且,后一个双调排序阶段对应的双调排序模块是利用两个或复用得到的两个前一个双调排序阶段对应的双调排序模块得到;后一个双调排序阶段中对所述存储阵列中的数据对半划分的级数比前一个双调排序阶段中对所述存储阵列中的数据对半划分的级数多一级。
6.如权利要求5所述的数据排序方法,其特征在于,为所述存储阵列的各行设置行索引,包括:
按行顺序对所述存储阵列的各行以二进制形式进行编号,并将编号作为行索引。
7.如权利要求6所述的数据排序方法,其特征在于,在双调排序阶段的个数为多个的情况下,在每个双调排序阶段,依据行索引从所述存储阵列中的数据分级对半划分地读取出相应双调排序阶段对应的双调排序模块所需的输入,以通过并行利用相应双调排序阶段对应的双调排序模块和/或通过复用相应双调排序阶段对应的双调排序模块,或通过一个相应双调排序阶段对应的双调排序模块,完成对所述存储阵列的数据进行相应双调排序阶段的双调排序,然后将相应双调排序阶段的双调排序后的数据依次写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据进行的相应双调排序阶段的处理,包括:
在第一个双调排序阶段,从行索引中只有第一位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个所述基本双调排序模块,以通过并行利用或复用所述基本双调排序模块进行双调排序,并将本次双调排序后的数据写入所述存储阵列中的空闲区域;
在第二个双调排序阶段,从行索引中只有第二位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个利用两个或复用的两个所述基本双调排序模块形成的第二个双调排序阶段的输入数目对应的双调排序模块,以通过并行利用、复用或利用一个第二个双调排序阶段的输入数目对应的双调排序模块进行第二个双调排序阶段的第一次双调排序,并将本第一次双调排序后的数据写入所述存储阵列中的空闲区域;从行索引中只有第一位不同的两行依次读取所述存储阵列的数据,并将依次读取的成对数据输入至至少一个所述基本双调排序模块,以通过并行利用或复用所述基本双调排序模块进行第二个双调排序阶段的第二次双调排序,并将本第二次双调排序后的数据写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据的第二个双调排序阶段的处理。
8.一种数据排序装置,其特征在于,包括:
接收模块,用于接收输入数据;
计数器模块,用于统计输入数据的数目;
存储控制单元,用于基于输入数据的数目确定一个大于或等于基本双调排序模块的输入数目且为2的幂次的阵列数据数目值;将所有输入数据存储成存储阵列,其中,所述存储阵列的列数为基本双调排序模块的输入数目的一半,所述存储阵列的行数为所述阵列数据数目值与所述存储阵列的列数的比值;为所述存储阵列的各行设置行索引;
双调排序单元,包括至少一个所述基本双调排序模块,用于依据行索引成对读取所述存储阵列中的数据,以利用至少一个所述基本双调排序模块对所述存储阵列中的数据进行排序;
输出模块,用于根据所述存储阵列中的数据的排序结果得到接收的输入数据的排序结果。
9.如权利要求8所述的数据排序装置,其特征在于,双调排序单元,还用于:根据所述存储阵列中的数据的数目的以2为底的对数值减去所述基本双调排序模块的输入数目的以2为底的对数值再加一得到的数值,确定利用所述基本双调排序模块对所述存储阵列中的数据进行排序所需的双调排序阶段的个数;在双调排序阶段的个数为多个的情况下,依据行索引成对读取所述存储阵列中的数据,以对为双调排序阶段的输入数目的所述存储阵列中的数据进行分级对半划分,得到为所述基本双调排序模块的输入数目的所述存储阵列中的数据,并利用至少一个所述基本双调排序模块完成对得到的所述存储阵列中的数据进行相应双调排序阶段的排序处理。
10.如权利要求9所述的数据排序装置,其特征在于,存储控制单元,包括:
行索引生成模块,用于按行顺序对所述存储阵列的各行以二进制形式进行编号,并将编号作为行索引。
11.如权利要求10所述的数据排序装置,其特征在于,双调排序单元,包括:各双调排序阶段对应的双调排序模块;第一个双调排序阶段对应的双调排序模块包括至少一个基本双调排序模块;第二个双调排序阶段及之后的双调排序阶段对应的双调排序模块包括复用的至少一个基本双调排序模块、相应双调排序阶段对应的划分模块、及相应双调排序阶段对应的合并模块;第三个双调排序阶段及之后的双调排序阶段对应的双调排序模块还包括复用的其之前双调排序阶段对应的划分模块和复用的其之前双调排序阶段对应的合并模块;
划分模块,用于:依据行索引从所述存储阵列中的数据分级对半划分地读取出相应双调排序阶段对应的双调排序模块所需的输入,以通过并行利用相应双调排序阶段对应的双调排序模块和/或通过复用相应双调排序阶段对应的双调排序模块,或通过一个相应双调排序阶段对应的双调排序模块,完成对所述存储阵列的数据进行相应双调排序阶段的双调排序;
合并模块,用于:将相应双调排序阶段的双调排序后的数据依次写入所述存储阵列中的空闲区域,以完成对所述存储阵列的数据进行的相应双调排序阶段的处理;
其中,第一个双调排序阶段对应的双调排序模块为所述基本双调排序模块;后一个双调排序阶段对应的双调排序模块的输入数目为前一个双调排序阶段对应的双调排序模块的输入数目的两倍;后一个双调排序阶段中对所述存储阵列中的数据对半划分的级数比前一个双调排序阶段中对所述存储阵列中的数据对半划分的级数多一级。
12.如权利要求8所述的数据排序装置,其特征在于,所述数据排序装置基于FPGA或ASIC实现。
13.一种数据库系统,其特征在于,包括如权利要求8至12任一项所述的数据排序装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010639809.4A CN112015366B (zh) | 2020-07-06 | 2020-07-06 | 数据排序方法、数据排序装置及数据库系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010639809.4A CN112015366B (zh) | 2020-07-06 | 2020-07-06 | 数据排序方法、数据排序装置及数据库系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112015366A true CN112015366A (zh) | 2020-12-01 |
CN112015366B CN112015366B (zh) | 2021-09-10 |
Family
ID=73498410
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010639809.4A Active CN112015366B (zh) | 2020-07-06 | 2020-07-06 | 数据排序方法、数据排序装置及数据库系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112015366B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113076312A (zh) * | 2021-03-11 | 2021-07-06 | 中科驭数(北京)科技有限公司 | 归并树形排序装置、排序系统及排序方法 |
CN113672530A (zh) * | 2021-10-21 | 2021-11-19 | 苏州浪潮智能科技有限公司 | 一种服务器及其排序设备 |
WO2023071566A1 (zh) * | 2021-10-25 | 2023-05-04 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机设备、计算机可读存储介质及计算机程序产品 |
Citations (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6427148B1 (en) * | 1998-11-09 | 2002-07-30 | Compaq Computer Corporation | Method and apparatus for parallel sorting using parallel selection/partitioning |
CN101350779A (zh) * | 2008-08-26 | 2009-01-21 | 北京大学深圳研究生院 | 基于自路由集线器的电路式分组交换方法 |
US20110004521A1 (en) * | 2009-07-06 | 2011-01-06 | Yahoo! Inc. | Techniques For Use In Sorting Partially Sorted Lists |
CN102750131A (zh) * | 2012-06-07 | 2012-10-24 | 中国科学院计算机网络信息中心 | 一种面向gpu的双调归并排序方法 |
CN103019646A (zh) * | 2013-01-09 | 2013-04-03 | 西安电子科技大学 | 并行排序电路及并行排序方法 |
CN104123304A (zh) * | 2013-04-28 | 2014-10-29 | 国际商业机器公司 | 数据驱动的并行排序系统和方法 |
CN104317549A (zh) * | 2014-10-15 | 2015-01-28 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种实现数据排序的级联结构电路和方法 |
US20160171030A1 (en) * | 2014-12-12 | 2016-06-16 | International Business Machines Corporation | Sorting an array consisting of a large number of elements |
CN106250097A (zh) * | 2016-06-22 | 2016-12-21 | 中国科学院计算技术研究所 | 一种面向大数据的加速排序装置、方法、芯片、处理器 |
CN106462386A (zh) * | 2014-05-30 | 2017-02-22 | 华为技术有限公司 | 并行归并排序 |
WO2017090122A1 (ja) * | 2015-11-25 | 2017-06-01 | 株式会社日立製作所 | 多数決回路 |
CN107102839A (zh) * | 2017-04-13 | 2017-08-29 | 青岛蓝云信息技术有限公司 | 一种基于硬件排序MapReduce的数据处理方法 |
CN107315632A (zh) * | 2017-06-27 | 2017-11-03 | 郑州云海信息技术有限公司 | 一种双调合并排序方法及系统 |
CN107729135A (zh) * | 2016-08-11 | 2018-02-23 | 阿里巴巴集团控股有限公司 | 按序进行并行数据处理的方法和装置 |
CN109426484A (zh) * | 2017-08-28 | 2019-03-05 | 华为技术有限公司 | 一种数据排序装置、方法及芯片 |
CN109964203A (zh) * | 2016-11-14 | 2019-07-02 | 谷歌有限责任公司 | 数据并行计算设备的排序 |
CN110187969A (zh) * | 2019-05-30 | 2019-08-30 | 北京理工大学 | 一种基于gpu的分布式大数据并行计算方法 |
US20200125326A1 (en) * | 2018-08-31 | 2020-04-23 | International Business Machines Corporation | Hardware sort accelerator sharing first level processor cache |
US20200143234A1 (en) * | 2018-11-05 | 2020-05-07 | Regents Of The University Of Minnesota | Sorting networks using unary processing |
CN111277276A (zh) * | 2018-12-05 | 2020-06-12 | 深圳市中兴微电子技术有限公司 | 一种排序方法及装置 |
CN111309776A (zh) * | 2020-01-15 | 2020-06-19 | 成都深思科技有限公司 | 基于数据排序的分布式网络流量聚合降维统计方法 |
CN111309285A (zh) * | 2019-12-09 | 2020-06-19 | 深圳云天励飞技术有限公司 | 多媒体数据排序方法、装置、终端设备及存储介质 |
-
2020
- 2020-07-06 CN CN202010639809.4A patent/CN112015366B/zh active Active
Patent Citations (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6427148B1 (en) * | 1998-11-09 | 2002-07-30 | Compaq Computer Corporation | Method and apparatus for parallel sorting using parallel selection/partitioning |
CN101350779A (zh) * | 2008-08-26 | 2009-01-21 | 北京大学深圳研究生院 | 基于自路由集线器的电路式分组交换方法 |
US20110004521A1 (en) * | 2009-07-06 | 2011-01-06 | Yahoo! Inc. | Techniques For Use In Sorting Partially Sorted Lists |
CN102750131A (zh) * | 2012-06-07 | 2012-10-24 | 中国科学院计算机网络信息中心 | 一种面向gpu的双调归并排序方法 |
CN103019646A (zh) * | 2013-01-09 | 2013-04-03 | 西安电子科技大学 | 并行排序电路及并行排序方法 |
CN104123304A (zh) * | 2013-04-28 | 2014-10-29 | 国际商业机器公司 | 数据驱动的并行排序系统和方法 |
CN106462386A (zh) * | 2014-05-30 | 2017-02-22 | 华为技术有限公司 | 并行归并排序 |
CN104317549A (zh) * | 2014-10-15 | 2015-01-28 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种实现数据排序的级联结构电路和方法 |
US20160171030A1 (en) * | 2014-12-12 | 2016-06-16 | International Business Machines Corporation | Sorting an array consisting of a large number of elements |
WO2017090122A1 (ja) * | 2015-11-25 | 2017-06-01 | 株式会社日立製作所 | 多数決回路 |
CN106250097A (zh) * | 2016-06-22 | 2016-12-21 | 中国科学院计算技术研究所 | 一种面向大数据的加速排序装置、方法、芯片、处理器 |
CN107729135A (zh) * | 2016-08-11 | 2018-02-23 | 阿里巴巴集团控股有限公司 | 按序进行并行数据处理的方法和装置 |
CN109964203A (zh) * | 2016-11-14 | 2019-07-02 | 谷歌有限责任公司 | 数据并行计算设备的排序 |
CN107102839A (zh) * | 2017-04-13 | 2017-08-29 | 青岛蓝云信息技术有限公司 | 一种基于硬件排序MapReduce的数据处理方法 |
CN107315632A (zh) * | 2017-06-27 | 2017-11-03 | 郑州云海信息技术有限公司 | 一种双调合并排序方法及系统 |
CN109426484A (zh) * | 2017-08-28 | 2019-03-05 | 华为技术有限公司 | 一种数据排序装置、方法及芯片 |
US20200125326A1 (en) * | 2018-08-31 | 2020-04-23 | International Business Machines Corporation | Hardware sort accelerator sharing first level processor cache |
US20200143234A1 (en) * | 2018-11-05 | 2020-05-07 | Regents Of The University Of Minnesota | Sorting networks using unary processing |
CN111277276A (zh) * | 2018-12-05 | 2020-06-12 | 深圳市中兴微电子技术有限公司 | 一种排序方法及装置 |
CN110187969A (zh) * | 2019-05-30 | 2019-08-30 | 北京理工大学 | 一种基于gpu的分布式大数据并行计算方法 |
CN111309285A (zh) * | 2019-12-09 | 2020-06-19 | 深圳云天励飞技术有限公司 | 多媒体数据排序方法、装置、终端设备及存储介质 |
CN111309776A (zh) * | 2020-01-15 | 2020-06-19 | 成都深思科技有限公司 | 基于数据排序的分布式网络流量聚合降维统计方法 |
Non-Patent Citations (3)
Title |
---|
HAGEN PETERS 等: "A Novel Sorting Algorithm for Many-core Architectures Based on Adaptive Bitonic Sort", 《2012 IEEE 26TH INTERNATIONAL PARALLEL AND DISTRIBUTED PROCESSING SYMPOSIUM》 * |
ZEHRA YILDIZ 等: "Parallelization of bitonic sort and radix sort algorithms on many core GPUs", 《2013 INTERNATIONAL CONFERENCE ON ELECTRONICS, COMPUTER AND COMPUTATION (ICECCO)》 * |
顾乃杰 等: "并行双调排序算法的有效实现及性能分析", 《计算机研究与发展》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113076312A (zh) * | 2021-03-11 | 2021-07-06 | 中科驭数(北京)科技有限公司 | 归并树形排序装置、排序系统及排序方法 |
CN113672530A (zh) * | 2021-10-21 | 2021-11-19 | 苏州浪潮智能科技有限公司 | 一种服务器及其排序设备 |
CN113672530B (zh) * | 2021-10-21 | 2022-02-18 | 苏州浪潮智能科技有限公司 | 一种服务器及其排序设备 |
WO2023071566A1 (zh) * | 2021-10-25 | 2023-05-04 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机设备、计算机可读存储介质及计算机程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN112015366B (zh) | 2021-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112015366B (zh) | 数据排序方法、数据排序装置及数据库系统 | |
US9647684B2 (en) | Memory-based history search | |
CN109426484B (zh) | 一种数据排序装置、方法及芯片 | |
CN109325032B (zh) | 一种索引数据存储及检索方法、装置及存储介质 | |
CN112200713B (zh) | 一种联邦学习中的业务数据处理方法、装置以及设备 | |
US9892149B2 (en) | Parallelized in-place radix sorting | |
WO2003091872A1 (fr) | Dispositif de tri par fusion en parallele, procede et programme y relatifs | |
CN108073687A (zh) | 随机游走、基于集群的随机游走方法、装置以及设备 | |
CN111292805A (zh) | 一种三代测序数据重叠检测方法及系统 | |
US10101965B1 (en) | Method and apparatus for high speed streaming sorter | |
US9823896B2 (en) | Parallelized in-place radix sorting | |
CN110008382B (zh) | 一种确定TopN数据的方法、系统及设备 | |
CN109597768B (zh) | 对存储器地址请求进行分类以用于并行存储器访问 | |
AU2002322113A1 (en) | BT sorting method and apparatus for large volumes of seismic data | |
CN107122242B (zh) | 一种有效提升分布式运算性能的大数据均衡切片方法 | |
CN115563116A (zh) | 一种数据库表扫描方法、装置以及设备 | |
WO2015143708A1 (zh) | 后缀数组的构造方法及装置 | |
CN114356512A (zh) | 一种数据处理方法、设备以及计算机可读存储介质 | |
CN108958702B (zh) | 一种排序网络、排序方法及排序装置 | |
Krusche et al. | Parallel longest increasing subsequences in scalable time and memory | |
CN108491187B (zh) | 一种基于top-k分割超立方体模型的并行处理方法 | |
WO2018036336A1 (zh) | 一种数据处理方法和装置 | |
JPH07191827A (ja) | スペース適応方式でシーケンシャル・リストを安定的にソート、又はマージするための方法、及び装置 | |
CN116737390B (zh) | 原子操作的处理方法、装置、电子设备和存储介质 | |
US20240192918A1 (en) | Sorting |
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 |