CN111562898B - 一种基于fpga实现的多级归并排序方法 - Google Patents
一种基于fpga实现的多级归并排序方法 Download PDFInfo
- Publication number
- CN111562898B CN111562898B CN202010391104.5A CN202010391104A CN111562898B CN 111562898 B CN111562898 B CN 111562898B CN 202010391104 A CN202010391104 A CN 202010391104A CN 111562898 B CN111562898 B CN 111562898B
- Authority
- CN
- China
- Prior art keywords
- data
- queue
- none
- last
- sorted
- 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 34
- 230000009191 jumping Effects 0.000 claims description 48
- 238000012163 sequencing technique Methods 0.000 claims description 33
- 238000010586 diagram Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000001174 ascending effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005587 bubbling Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
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/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/24—Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于FPGA实现的多级归并排序方法,包括以下步骤:步骤1,分别检测多个2归并排序模块,每个2归并排序模块包括待排序队列A和待排序队列B;步骤2,分别对多个2归并排序模块进行归并排序,并分别输出排列结果;步骤3,排列结果作为下一级的待排序队列,进入下一级的2归并排序模块,重复步骤1和步骤2,直到输出最终排列结果。本发明的一种基于FPGA实现的多级归并排序方法,使归并排序数增加时,门级数恒定,并且可以实现任意长度排序队列进行归并。
Description
技术领域
本发明涉及计算机通信领域,尤其涉及一种基于FPGA实现的多级归并排序方法。
背景技术
排序是计算机应用领域中非常重要、研究和应用都非常广泛的一类问题。例如,在数据处理、数据库、数据压缩、分布式计算、图像处理和计算机图形学中排序算法都有着非常广泛的应用。主流的排序算法往往基于CPU开发的,如冒泡排序、***排序、二叉树排序、快速排序等等,为了充分提升排序问题的解决效率,提升算法运行速度,研究人员除了设计出针对不同问题的各种排序算法之外,还结合排序问题的可并行性特点,结合具体处理器(CPUs,GPUs以及FPGAs)的结构特点设计出了很多并行排序算法,其中,基于FPGAs的并行排序算法在性能、功耗比上表现得最优。归并排序(Merge Sort)的思想非常适合多线程并发执行,因此在并行排序算法的最后阶段通常都会使用归并排序,因而,在数字电路领域多采用归并排序。而基于FPGA的归并排序,根据结构的不同,一般分为两类:基于顺序结构的归并排序和基于归并树结构的并行归并排序。
D.Bitton等提出的基于顺序结构的归并排序可以对大数据集进行排序,但排序速率通常为每周期1个数据,如此低的速度极大限制了FPGA并行处理数据的优势。因此WeiSong、Casper and Olukotun等提出了并行归并树结构,基于归并树结构的并行归并排序相比传统的顺序归并排序,排序速率从每周期1个数据提高到每周期每序列E个数据,因此基于归并树结构的排序也被称为E-数据归并逻辑。基于归并树结构的并行归并排序可以分为两种模型:WeiSong等提出的并行归并树结构包含两组输入序列FIFO,两个输入管理器和一个合并器,其合并器基于双音网络;因为从输入FIFO对记录进行出队和重新排序的复杂性,使在增加并行排序数时很难以较高的频率运行。Casper and Olukotun等提出的并行归并树结构包含两组输入序列FIFO,一个选择器和一个合并网络,该合并网络是基于络基于Batcher等人提出的的奇偶合并网络;该结构随着并行排序数增加,合并网络中门级数增加,导致很难在较高频率运行。Casper and Olukotun模型相比于WeiSong模型消除了复杂的管理器交叉开关,便于实现高性能数据排序。
发明内容
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是现有技术的基于FPGA的归并排序方法存在的处理速度低、随着排序数增加难以以高频运行的问题,提供一种基于FPGA实现的多级归并排序方法,使归并排序数增加时,门级数恒定,并且可以实现任意长度排序队列进行归并。
为实现上述目的,本发明提供了一种基于FPGA实现的多级归并排序方法,包括以下步骤:
步骤1,分别检测多个2归并排序模块,每个2归并排序模块包括待排序队列A和待排序队列B;
步骤2,分别对多个2归并排序模块进行归并排序,并分别输出排列结果;
步骤3,排列结果作为下一级的待排序队列,进入下一级的2归并排序模块,重复步骤1和步骤2,直到输出最终排列结果。
进一步地,采用K级级联的方式实现2M个输入通道同时进行归并排序的操作,每一级包括一个或多个2归并排序模块,并且每一级的每一个2归并排序模块采用相同的结构和实现方法。
进一步地,步骤1中,第一级包括M个2归并排序模块,2归并排序模块包括待排序队列A和待排序队列B,第1级的待排序队列A和待排序队列B设置为首数据预读模式,待排序队列A和待排序队列B中分别存储了已按一定规则排序的数据队列,待排序队列A与待排序队列B可分别输出待排序数据data_A、data_B以及本次排序数据是否最后一个的标志位last_A、last_B以及本次待排序数据是否为有效的标志位none_A、none_B以及本次待排序队列是否为空的标志位fifo_empty_A、fifo_empty_B。
进一步地,第一级的所有M个2归并排序模块中的的待排序队列A和待排序队列B都必须存储至少一个待归并排序数据;每一级进行2归并排序的待排序队列必须存储一个last或none标志为高电平的任意数据。
进一步地,2归并排序模块中的待排序队列A包含待排序数据data_A,待排序数据标志位last_A和none_A;待排序队列B包含待排序数据data_B、待排序数据标志位last_B和none_B;排序结果队列包含已排序数据、已排序数据标志位last_flag和none_flag;
每个2归并排序模块的归并排序方法包括以下步骤:
步骤2-1),检测待排序数据data_A标志位none_A,待排序数据data_B标志位none_B电平,若none_A为低电平,none_B为低电平,则跳转到步骤2-2);若none_A为高电平,none_B为低电平,则跳转到步骤2-7);若none_A为低电平,none_B为高电平,则跳转到步骤2-8);若none_A为高电平,none_B为高电平,则跳转到步骤2-9);
步骤2-2),检测last_A,last_B,若last_A为高电平,last_B为低电平,跳转到步骤2-4);若last_A为低电平,last_B为高电平,跳转到步骤2-5);若last_A为高电平,last_B为高电平,跳转到步骤2-6);若last_A为低电平,last_B为低电平,跳转到步骤2-3);
步骤2-3),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_A排在前面将data_A写入排序结果队列,读出待排序队列A下一个数据data_A继续同data_B比较,跳转到步骤2-2);否则将data_B写入排序结果队列,读出待排序队列B下一个数据data_B继续同data_A比较,跳转到步骤2-2);
步骤2-4),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_A排在前面将data_A写入排序结果队列,然后将待排序队列B所有数据写入排序结果队列,当last_B为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步2-1);否则将data_B写入排序结果队列,读出待排序队列B下一数据data_B继续比较,跳转到步骤2-2);
步骤2-5),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_B排在前面将data_B写入排序结果队列,然后将待排序队列A所有数据写入排序结果队列,当last_A为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);否则将data_A写入排序结果队列,读出待排序队列A下一数据data_A继续比较,跳转到步骤2-2);
步骤2-6),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_A排在前面将data_A写入排序结果队列,然后将data_B写入排序结果队列并设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);否则,将data_B写入排序结果队列,然后将data_A写入排序结果队列并设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);
步骤2-7),读空待排序队列A,将待排序队列B所有数据写入排序结果队列,当last_B为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);
步骤2-8),读空待排序队列B,将待排序队列A所有数据写入排序结果队列,当last_A为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);
步骤2-9),将data_A写入排序结果队列并设置last_flag为高电平,none_flag为高电平,读空待排序队列A和待排序队列B,跳转到步骤2-1)。
进一步地,none_A为高电平,none_B为低电平,则只将data_B写入排序结果队列;none_B为高电平,none_A为低电平,则只将data_A写入排序结果队列;none_A与none_B皆为高电平,则只将data_A写入排序结果队列。
进一步地,2归并排序模块中的待排序队列A和待排序队列B的数据长度可以是任意的。
技术效果
本发明提出了一种基于FPGA实现的多级归并排序方法,支持任意长度排序队列以及大数据量数据排序,通过读取控制,实现两个任意长度排序队列归并为一个有序队列,并通过多级数据归并排序,在满足时序要求的同时,满足海量数据的高效快速数据排序。克服了传统基于FPGA归并排序实现方法两组输入队列相同长度的弊端,实现两组比较队列任意长度进行比较。
以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
图1是本发明的一个较佳实施例的基于FPGA实现的多级归并排序方法的***框架示意图;
图2是本发明的一个较佳实施例的基于FPGA实现的多级归并排序方法的2归并排序模块处理流程示意图;
图3是本发明实施例一的波形图;
图4是本发明实施例二的波形图;
图5是本发明实施例二的波形图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
以下描述中,为了说明而不是为了限定,提出了诸如特定内部程序、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的***、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
如图1所示,本发明提供了一种基于FPGA实现的多级归并排序方法,包括以下步骤:
步骤1,分别检测多个2归并排序模块,每个2归并排序模块包括待排序队列A和待排序队列B;
步骤2,分别对多个2归并排序模块进行归并排序,并分别输出排列结果;
步骤3,排列结果作为下一级的待排序队列,进入下一级的2归并排序模块,重复步骤1和步骤2,直到输出最终排列结果。
如图1所示,本发明公开的一种基于FPGA实现的多级归并排序方法采用K级级联的方式实现2M个输入通道同时进行归并排序的操作,每一级包括一个或多个2归并排序模块,并且每一级的每一个2归并排序模块采用相同的结构和实现方法。其中,第一级包括M个2归并排序模块,2归并排序模块包括待排序队列A和待排序队列B,第1级的待排序队列A和待排序队列B设置为首数据预读模式,待排序队列A和待排序队列B中分别存储了已按一定规则排序的数据队列,待排序队列A与待排序队列B可分别输出待排序数据data_A、data_B以及本次排序数据是否最后一个的标志位last_A、last_B以及本次待排序数据是否为有效的标志位none_A、none_B以及本次待排序队列是否为空的标志位fifo_empty_A、fifo_empty_B。
第一级的所有M个2归并排序模块中的待排序队列A和待排序队列B都必须存储至少一个待归并排序数据;每一级进行2归并排序的待排序队列必须存储一个last或none标志为高电平的任意数据,当待排序队列数据皆为无效数据时,none标志为高电平,否则none标志为低电平,当待排序队列数据为最后一个数据时,last标志为高电平,否则last标志为低电平。
2归并排序模块中的待排序队列A包含待排序数据data_A,待排序数据标志位last_A和none_A;待排序队列B包含待排序数据data_B、待排序数据标志位last_B和none_B;排序结果队列包含已排序数据、已排序数据标志位last_flag和none_flag;当待排序队列数据皆为无效数据时,none标志为高电平,否则none标志为低电平;当待排序队列数据为最后一个数据时,last标志为高电平,否则last标志为低电平。
每个2归并排序模块的归并排序方法包括以下步骤:
步骤2-1),检测待排序数据data_A标志位none_A,待排序数据data_B标志位none_B电平,若none_A为低电平,none_B为低电平,则跳转到步骤2-2);若none_A为高电平,none_B为低电平,则跳转到步骤2-7);若none_A为低电平,none_B为高电平,则跳转到步骤2-8);若none_A为高电平,none_B为高电平,则跳转到步骤2-9);
步骤2-2),检测last_A,last_B,若last_A为高电平,last_B为低电平,跳转到步骤2-4);若last_A为低电平,last_B为高电平,跳转到步骤2-5);若last_A为高电平,last_B为高电平,跳转到步骤2-6);若last_A为低电平,last_B为低电平,跳转到步骤2-3);
步骤2-3),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_A排在前面将data_A写入排序结果队列,读出待排序队列A下一个数据data_A继续同data_B比较,跳转到步骤2-2);否则将data_B写入排序结果队列,读出待排序队列B下一个数据data_B继续同data_A比较,跳转到步骤2-2);
步骤2-4),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_A排在前面将data_A写入排序结果队列,然后将待排序队列B所有数据写入排序结果队列,当last_B为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步2-1);否则将data_B写入排序结果队列,读出待排序队列B下一数据data_B继续比较,跳转到步骤2-2);
步骤2-5),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_B排在前面将data_B写入排序结果队列,然后将待排序队列A所有数据写入排序结果队列,当last_A为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);否则将data_A写入排序结果队列,读出待排序队列A下一数据data_A继续比较,跳转到步骤2-2);
步骤2-6),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_A排在前面将data_A写入排序结果队列,然后将data_B写入排序结果队列并设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);否则,将data_B写入排序结果队列,然后将data_A写入排序结果队列并设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);
步骤2-7),读空待排序队列A,将待排序队列B所有数据写入排序结果队列,当last_B为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);
步骤2-8),读空待排序队列B,将待排序队列A所有数据写入排序结果队列,当last_A为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);
步骤2-9),将data_A写入排序结果队列并设置last_flag为高电平,none_flag为高电平,读空待排序队列A和待排序队列B,跳转到步骤2-1)。
none_A为高电平,none_B为低电平,则只将data_B写入排序结果队列;none_B为高电平,none_A为低电平,则只将data_A写入排序结果队列;none_A与none_B皆为高电平,则只将data_A写入排序结果队列。
2归并排序模块中的待排序队列A和待排序队列B的数据长度可以是任意的。
以下将以3个具体的实施例来解释本发明的实现过程,实施例一至三分别解释了不同数据长度的待排序队列A和待排序队列B的多级归并排序过程。
对数据库的数据进行2归并排序时,在典型的SQL查询语言中,可以存在几种语言元素,例如SELECT FROM,WHERE,GROUP BY和ORDER BY。SELECT语句从给定的表中获取所需的数据列。WHERE语句用于限制表中的数据,并包括诸如逻辑比较和算术运算之类的操作,这些操作过滤与用户相关的数据。GROUP BY语句基于给定字段将数据聚合为组,ORDER BY语句根据给定的键以升序或降序对数据进行排序。
实施例一
如图3所以,本实施例以数据库中的4组数据二级归并排序为例,待排序队列1_A、待排序队列1_B、待排序队列2_A、待排序队列2_B进行升序归并排序。
1、第一级归并时:待排序队列1_A包含待排序数据data_A{1,2,3},排序数据标志位last_A{1,0,0}和none_A{0,0,0};待排序队列1_B包含待排序数据data_B{4,5},排序数据标志位last_B{1,0}和none_B{0,0};
(1)检测到data_A:3与data_B:5对应的none_A和none_B皆为低电平,即待排序队列1_A与待排序队列1_B皆为有效数据;
(2)对待排序数据data_A与待排序队列B进行比较,data_A:3<data_B:5,data_B:5,写入排序结果中,然后读出data_B:4,data_B:4>data_A:3,则data_B:4写入排序结果中;
(3)检测到data_B:4对应的标志位last_B为高电平,即data_B:4为待排序队列1_B的最后一个数据且已经写入结果队列;data_A:3对应的标志位last_A为低电平即待排序队列1_A数据未读完;
(4)依此读出待排序队列1_A所有数据data_A{1,2,3}并写入排序结果队列中,当data_A:1读出时,检测到last_A为高电平则将data_A:1写入排序结果队列时将last_flag置为高电平,none_flag置为低电平;
(5)经过归并已排序数据为:{1,2,3,4,5},对应last_flag为:{1,0,0,0,0},对应none_flag为:{0,0,0,0,0}。
同理:对于第一级归并排序时:待排序队列2_A包含待排序数据data_A{8,9},排序数据标志位last_A{1,0}和none_A{0,0};待排序队列2_B包含待排序数据data_B{7},排序数据标志位last_B{1}和none_B{1};
(1)检测到data_A:9对应标志位none_A为低电平即待排序队列2_A为有效数据,data_B:7对应标志位none_B为高电平即待排序队列2_B为无效数据;
(2)读空待排序队列2_B,依此读出待排序队列2_A所有数据data_A{8,9}并写入排序结果队列中,当data_A:8读出时,检测到last_A为高电平则将data_A:8写入排序结果队列时将last_flag置为高电平,none_flag置为低电平;
(3)经过归并已排序数据为:{8,9},对应last_flag为:{1,0},对应none_flag为:{0,0}。
2、将待排序队列1_A和待排序队列1_B完成第一级归并排序产生的结果排序队列已排序数据为:{1,2,3,4,5},对应last_flag为:{1,0,0,0,0},对应none_flag为:{0,0,0,0,0}输入到第二级归并排序待排序队列1_A;将待排序队列2_A和待排序队列2_B完成第一级归并排序产生的结果排序队列已排序数据为:{8,9},对应last_flag为:{1,0},对应none_flag为:{0,0}输入到第二级归并排序待排序队列1_B;
对于第二级归并排序时:待排序队列1_A包含待排序数据data_A{1,2,3,4,5},排序数据标志位last_A{1,0,0,0,0}和none_A{0,0,0,0,0};待排序队列1_B包含待排序数据data_B{8,9},排序数据标志位last_B{1,0}和none_B{0,0};
(1)检测到data_A:5对应标志位none_A为低电平即待排序队列2_A为有效数据,data_B:9对应标志位none_B为低电平即待排序队列2_B为有效数据;
(2)对待排序数据data_A与待排序队列B进行比较,data_A:5<data_B:9,data_B:9写入排序结果中,然后读出data_B:8,data_B:8>data_A:5,则data_B:8写入排序结果中;
(3)检测到data_B:8对应的标志位last_B为高电平,即data_B:8为待排序队列1_B的最后一个数据且已经写入结果队列;data_A:5对应的标志位last_A为低电平即待排序队列1_A数据未读完;
(4)依此读出待排序队列1_A所有数据data_A{1,2,3,4,5}并写入排序结果队列中,当data_A:1读出时,检测到last_A为高电平则将data_A:1写入排序结果队列时将last_flag置为高电平,none_flag置为低电平;
(5)经过归并已排序数据为:{1,2,3,4,5,8,9},对应last_flag为:{1,0,0,0,0,0,0},对应none_flag为:{0,0,0,0,0,0,0}。
实施列二
如图4所示,本实施例以数据库中的4组数据二级归并排序为例,待排序队列1_A、待排序队列1_B、待排序队列2_A、待排序队列2_B进行升序归并排序。
第一级归并时:待排序队列1_A包含待排序数据data_A{1,2,3},排序数据标志位last_A{1,0,0}和none_A{0,0,0};待排序队列1_B包含待排序数据data_B{4,5},排序数据标志位last_B{1,0}和none_B{0,0};
(1)检测到data_A:3与data_B:5对应的none_A和none_B皆为低电平,即待排序队列1_A与待排序队列1_B皆为有效数据;
(2)对待排序数据data_A与待排序队列B进行比较,data_A:3<data_B:5,data_B:5,写入排序结果中,然后读出data_B:4,data_B:4>data_A:3,则data_B:4写入排序结果中;
(3)检测到data_B:4对应的标志位last_B为高电平,即data_B:4为待排序队列1_B的最后一个数据且已经写入结果队列;data_A:3对应的标志位last_A为低电平即待排序队列1_A数据未读完;
(4)依此读出待排序队列1_A所有数据data_A{1,2,3}并写入排序结果队列中,当data_A:1读出时,检测到last_A为高电平则将data_A:1写入排序结果队列时将last_flag置为高电平,none_flag置为低电平;
(5)经过归并已排序数据为:{1,2,3,4,5},对应last_flag为:{1,0,0,0,0},对应none_flag为:{0,0,0,0,0}。
同理:对于第一级归并排序时:待排序队列2_A包含待排序数据data_A{9},排序数据标志位last_A{1}和none_A{1};待排序队列2_B包含待排序数据data_B{7},排序数据标志位last_B{1}和none_B{1};
(1)检测到data_A:9对应标志位none_A为高电平即待排序队列2_A为有效数据,data_B:7对应标志位none_B为高电平即待排序队列2_B为无效数据;
(2)读空待排序队列2_B,待排序队列2_A;将data_A{9}并写入排序结果队列中,并将last_flag置为高电平,none_flag置为高电平;
(3)经过归并已排序数据为:{9},对应last_flag为:{1},对应none_flag为:{1}。
对于第二级归并排序时:待排序队列1_A包含待排序数据data_A{1,2,3,4,5},排序数据标志位last_A{1,0,0,0,0}和none_A{0,0,0,0,0};待排序队列1_B包含待排序数据data_B{9},排序数据标志位last_B{1}和none_B{1};
(1)检测到data_A:5对应标志位none_A为低电平即待排序队列2_A为有效数据,data_B:9对应标志位none_B为高电平即待排序队列2_B为无效数据;
(2)读空待排序队列1_B,依此读出待排序队列1_A所有数据data_A{1,2,3,4,5}并写入排序结果队列中,当data_A:1读出时,检测到last_A为高电平则将data_A:1写入排序结果队列时将last_flag置为高电平,none_flag置为低电平;
(3)经过归并已排序数据为:{1,2,3,4,5},对应last_flag为:{1,0,0,0,0},对应none_flag为:{0,0,0,0,0}。
实施列三
如图5所示,本实施例以数据库中的4组数据二级归并排序为例,待排序队列1_A、待排序队列1_B、待排序队列2_A、待排序队列2_B进行升序归并排序。
第一级归并时:待排序队列1_A包含待排序数据data_A{1,2,3},排序数据标志位last_A{1,0,0}和none_A{0,0,0};待排序队列1_B包含待排序数据data_B{5},排序数据标志位last_B{1}和none_B{1};
(1)检测到data_A:3对应的none_A为低电平,即待排序队列1_A为有效数据,
data_B:5对应的none_B皆为高电平,即待排序队列1_B为无效数据;
(2)读空待排序队列1_B,依此读出待排序队列1_A所有数据data_A{1,2,3}并写入排序结果队列中,当data_A:1读出时,检测到last_A为高电平则将data_A:1写入排序结果队列时将last_flag置为高电平,none_flag置为低电平;
(3)经过归并已排序数据为:{1,2,3},对应last_flag为:{1,0,0},对应none_flag为:{0,0,0}。
同理:对于第一级归并排序时:待排序队列2_A包含待排序数据data_A{9},排序数据标志位last_A{1}和none_A{1};待排序队列2_B包含待排序数据data_B{7},排序数据标志位last_B{1}和none_B{1};
(1)检测到data_A:9对应标志位none_A为高电平即待排序队列2_A为有效数据,data_B:7对应标志位none_B为高电平即待排序队列2_B为无效数据;
(2)读空待排序队列2_B,待排序队列2_A;将data_A{9}并写入排序结果队列中,并将last_flag置为高电平,none_flag置为高电平;
(3)经过归并已排序数据为:{9},对应last_flag为:{1},对应none_flag为:{1}。
对于第二级归并排序时:待排序队列1_A包含待排序数据data_A{1,2,3},排序数据标志位last_A{1,0,0}和none_A{0,0,0};待排序队列1_B包含待排序数据data_B{9},排序数据标志位last_B{1}和none_B{1};
(1)检测到data_A:3对应标志位none_A为低电平即待排序队列2_A为有效数据,data_B:9对应标志位none_B为高电平即待排序队列2_B为无效数据;
(2)读空待排序队列1_B,依此读出待排序队列1_A所有数据data_A{1,2,3}并写入排序结果队列中,当data_A:1读出时,检测到last_A为高电平则将data_A:1写入排序结果队列时将last_flag置为高电平,none_flag置为低电平;
(3)经过归并已排序数据为:{1,2,3},对应last_flag为:{1,0,0},对应none_flag为:{0,0,0}。
上述实施例描述2级不同长度的数据的归并排列,多级归并排列的方法流程与2级的类似,其各级2归并排序模块的实现方案和结构完全相同。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (5)
1.一种基于FPGA实现的多级归并排序方法,其特征在于,包括以下步骤:
步骤1,分别检测多个2归并排序模块,所述每个2归并排序模块包括待排序队列A和待排序队列B;
步骤2,分别对多个2归并排序模块进行归并排序,并分别输出排列结果;
步骤3,所述排列结果作为下一级的待排序队列,进入下一级的2归并排序模块,重复步骤1和步骤2,直到输出最终排列结果;
所述步骤1中,第一级包括M个2归并排序模块,所述2归并排序模块包括待排序队列A和待排序队列B,第1级的待排序队列A和待排序队列B设置为首数据预读模式,所述待排序队列A和所述待排序队列B中分别存储了已按一定规则排序的数据队列,所述待排序队列A与待排序队列B可分别输出待排序数据data_A、data_B以及本次排序数据是否最后一个的标志位last_A、last_B以及本次待排序数据是否为有效的标志位none_A、none_B以及本次待排序队列是否为空的标志位fifo_empty_A、fifo_empty_B;
所述2归并排序模块中的所述待排序队列A包含待排序数据data_A,待排序数据标志位last_A和none_A;所述待排序队列B包含待排序数据data_B、待排序数据标志位last_B和none_B;排序结果队列包含已排序数据、已排序数据标志位last_flag和none_flag;
每个2归并排序模块的归并排序方法包括以下步骤:
步骤2-1),检测待排序数据data_A标志位none_A,待排序数据data_B标志位none_B电平,若none_A为低电平,none_B为低电平,则跳转到步骤2-2);若none_A为高电平,none_B为低电平,则跳转到步骤2-7);若none_A为低电平,none_B为高电平,则跳转到步骤2-8);若none_A为高电平,none_B为高电平,则跳转到步骤2-9);
步骤2-2),检测last_A,last_B,若last_A为高电平,last_B为低电平,跳转到步骤2-4);若last_A为低电平,last_B为高电平,跳转到步骤2-5);若last_A为高电平,last_B为高电平,跳转到步骤2-6);若last_A为低电平,last_B为低电平,跳转到步骤2-3);
步骤2-3),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_A排在前面将data_A写入排序结果队列,读出待排序队列A下一个数据data_A继续同data_B比较,跳转到步骤2-2);否则将data_B写入排序结果队列,读出待排序队列B下一个数据data_B继续同data_A比较,跳转到步骤2-2);
步骤2-4),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_A排在前面将data_A写入排序结果队列,然后将待排序队列B所有数据写入排序结果队列,当last_B为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步2-1);否则将data_B写入排序结果队列,读出待排序队列B下一数据data_B继续比较,跳转到步骤2-2);
步骤2-5),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_B排在前面将data_B写入排序结果队列,然后将待排序队列A所有数据写入排序结果队列,当last_A为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);否则将data_A写入排序结果队列,读出待排序队列A下一数据data_A继续比较,跳转到步骤2-2);
步骤2-6),对待排序数据data_A与待排序数据data_B进行比较,按照设定的排序规则A,若data_A排在前面将data_A写入排序结果队列,然后将data_B写入排序结果队列并设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);否则,将data_B写入排序结果队列,然后将data_A写入排序结果队列并设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);
步骤2-7),读空待排序队列A,将待排序队列B所有数据写入排序结果队列,当last_B为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);
步骤2-8),读空待排序队列B,将待排序队列A所有数据写入排序结果队列,当last_A为高电平时,设置last_flag为高电平,none_flag为低电平,跳转到步骤2-1);
步骤2-9),将data_A写入排序结果队列并设置last_flag为高电平,none_flag为高电平,读空待排序队列A和待排序队列B,跳转到步骤2-1)。
2.如权利要求1所述的一种基于FPGA实现的多级归并排序方法,其特征在于,采用K级级联的方式实现2M个输入通道同时进行归并排序的操作,每一级包括一个或多个2归并排序模块,并且每一级的每一个2归并排序模块采用相同的结构和实现方法。
3.如权利要求2所述的一种基于FPGA实现的多级归并排序方法,其特征在于,第一级的所有M个2归并排序模块中的所述待排序队列A和所述待排序队列B都必须存储至少一个待归并排序数据;每一级进行2归并排序的待排序队列必须存储一个last或none标志为高电平的任意数据。
4.如权利要求3所述的一种基于FPGA实现的多级归并排序方法,其特征在于,none_A为高电平,none_B为低电平,则只将data_B写入排序结果队列;none_B为高电平,none_A为低电平,则只将data_A写入排序结果队列;none_A与none_B皆为高电平,则只将data_A写入排序结果队列。
5.如权利要求3所述的一种基于FPGA实现的多级归并排序方法,其特征在于,所述2归并排序模块中的待排序队列A和待排序队列B的数据长度是任意的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010391104.5A CN111562898B (zh) | 2020-05-11 | 2020-05-11 | 一种基于fpga实现的多级归并排序方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010391104.5A CN111562898B (zh) | 2020-05-11 | 2020-05-11 | 一种基于fpga实现的多级归并排序方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111562898A CN111562898A (zh) | 2020-08-21 |
CN111562898B true CN111562898B (zh) | 2023-06-09 |
Family
ID=72068010
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010391104.5A Active CN111562898B (zh) | 2020-05-11 | 2020-05-11 | 一种基于fpga实现的多级归并排序方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111562898B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112947889A (zh) * | 2021-03-09 | 2021-06-11 | 中科驭数(北京)科技有限公司 | 一种归并排序方法及装置 |
CN112947890B (zh) * | 2021-03-09 | 2021-11-02 | 中科驭数(北京)科技有限公司 | 一种归并排序方法及装置 |
CN113076312B (zh) * | 2021-03-11 | 2022-11-18 | 中科驭数(北京)科技有限公司 | 归并树形排序装置、排序***及排序方法 |
CN113177024B (zh) * | 2021-06-29 | 2021-09-14 | 南京烽火星空通信发展有限公司 | 一种海量数据场景下的数据全局合并方法 |
CN116342371B (zh) * | 2023-03-24 | 2024-05-24 | 摩尔线程智能科技(北京)有限责任公司 | 用于gpu、二级缓存的方法和gpu、二级缓存 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968496A (zh) * | 2012-12-04 | 2013-03-13 | 天津神舟通用数据技术有限公司 | 基于任务驱动和双缓冲机制的并行排序方法 |
CN103226464A (zh) * | 2013-03-29 | 2013-07-31 | 江苏复芯物联网科技有限公司 | 一种归并排序结构 |
CN104932864A (zh) * | 2015-06-25 | 2015-09-23 | 许继电气股份有限公司 | 基于流水线进程的归并排序方法及使用该方法的阀控装置 |
CN107402741A (zh) * | 2017-08-04 | 2017-11-28 | 电子科技大学 | 一种适宜于fpga实现的排序方法 |
CN107908714A (zh) * | 2017-11-10 | 2018-04-13 | 上海达梦数据库有限公司 | 一种数据归并排序方法及装置 |
-
2020
- 2020-05-11 CN CN202010391104.5A patent/CN111562898B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968496A (zh) * | 2012-12-04 | 2013-03-13 | 天津神舟通用数据技术有限公司 | 基于任务驱动和双缓冲机制的并行排序方法 |
CN103226464A (zh) * | 2013-03-29 | 2013-07-31 | 江苏复芯物联网科技有限公司 | 一种归并排序结构 |
CN104932864A (zh) * | 2015-06-25 | 2015-09-23 | 许继电气股份有限公司 | 基于流水线进程的归并排序方法及使用该方法的阀控装置 |
CN107402741A (zh) * | 2017-08-04 | 2017-11-28 | 电子科技大学 | 一种适宜于fpga实现的排序方法 |
CN107908714A (zh) * | 2017-11-10 | 2018-04-13 | 上海达梦数据库有限公司 | 一种数据归并排序方法及装置 |
Non-Patent Citations (7)
Title |
---|
Ajitesh Srivastava等.A Hybrid Design for High Performance Large-scale Sorting on FPGA.《IEEE》.2015,第1-6页. * |
Alexander Antonov等.Research of the Efficiency of High-level Synthesis Tool for FPGA Based Hardware Implementation of Some Basic Algorithms for the Big Data Analysis and Management Tasks.《PROCEEDING OF THE 26TH CONFERENCE OF FRUCT ASSOCIATION》.2020,第23-29页. * |
Dirk Koch等.FPGASort: A High Performance Sorting Architecture Exploiting Run-time Reconfiguration on FPGAs for Large Problem Sorting.《ACM》.2011,第1-10页. * |
Takuma Usui等.A Cost-Effective and Scalable Merge Sorter Tree on FPGAs.《2016 Fourth International Symposium on Computing and Networking》.2016,第47-56页. * |
宋宇飞等.基于IP协议的FPGA万兆可靠互联通信设计与实现.《上海大学学报(自然科学版)》.2015,第570-578页. * |
王莎等.基于FPGA的CAN总线通信*** .《工业控制计算机》.2018,第1-3页. * |
袁文燕等.FPGA片间万兆可靠通信的设计与实现.《电视技术》.2014,第43-46页. * |
Also Published As
Publication number | Publication date |
---|---|
CN111562898A (zh) | 2020-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111562898B (zh) | 一种基于fpga实现的多级归并排序方法 | |
US20180321912A1 (en) | Data accumulation apparatus and method, and digital signal processing device | |
Guo et al. | Fast binary counters and compressors generated by sorting network | |
US11977902B2 (en) | Methods and systems for event reporting | |
CN111813370A (zh) | 基于fpga的多路并行归并排序*** | |
US20170193351A1 (en) | Methods and systems for vector length management | |
Lipu et al. | Exploiting parallelism for faster implementation of Bubble sort algorithm using FPGA | |
US11580055B2 (en) | Devices for time division multiplexing of state machine engine signals | |
CN112015366B (zh) | 数据排序方法、数据排序装置及数据库*** | |
CA1286732C (en) | Rank-order filter | |
US7050647B2 (en) | Median filter | |
Halaas et al. | A recursive MISD architecture for pattern matching | |
EP1135735B1 (en) | A processing circuit and a search processor circuit | |
US10929764B2 (en) | Boolean satisfiability | |
US6199091B1 (en) | Carry skip adder | |
CN109684761B (zh) | 一种宽同或电路优化方法 | |
CN110909793B (zh) | 一种基于fpga实现的决策森林***及决策森林推理方法 | |
CN111897513B (zh) | 一种基于反向极性技术的乘法器及其代码生成方法 | |
Lin et al. | Two-dimensional rank-order filter by using max-min sorting network | |
Dimitrakopoulos et al. | Sorter based permutation units for media-enhanced microprocessors | |
Huang et al. | Accelerating binarized neural network inference by reusing operation results and elevating resource utilization on edge devices | |
JPS6116326A (ja) | ソ−ト処理装置 | |
Mumolo | VHDL design of a scalable VLSI sorting device based on pipelined computation | |
JP3525960B2 (ja) | 並列ソート方式 | |
JPH0317780A (ja) | 記号列検索方法および装置 |
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: 20231128 Address after: 200444 zone B, floor 5, building 1, No. 668, SHANGDA Road, Baoshan District, Shanghai Patentee after: Shanghai Tianyu Optical Communication Technology Co.,Ltd. Address before: 200444 No. 99, upper road, Shanghai, Baoshan District Patentee before: Shanghai University |
|
TR01 | Transfer of patent right |