CN106326421A - 基于索引树和数据链表的fpga并行排序方法及系统 - Google Patents
基于索引树和数据链表的fpga并行排序方法及系统 Download PDFInfo
- Publication number
- CN106326421A CN106326421A CN201610719554.6A CN201610719554A CN106326421A CN 106326421 A CN106326421 A CN 106326421A CN 201610719554 A CN201610719554 A CN 201610719554A CN 106326421 A CN106326421 A CN 106326421A
- Authority
- CN
- China
- Prior art keywords
- data
- eigenvalue
- address
- node
- record
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于索引树和数据链表的FPGA并行排序方法及系统,包括将待排序记录的特征值和标识值从存储器内依次读出;在数据链表存储区创建标识值节点,并将记录的标识值存储在标识值节点;根据记录的特征值在索引树存储区的索引树上建立特征值节点;全部记录读出并处理完毕后,依次遍历索引树上各层的特征值节点,并根据特征值节点的路径恢复特征值;再根据获取的特征值节点中记录的标识值节点地址,在数据链表存储区中找到对应的标识值;最后按照遍历顺序输出所有记录的特征值和标识值。本发明的基于索引树和数据链表的FPGA并行排序方法及系统通过FPGA对数据进行编/解码来实现对数据的排序,从而一边读取数据一边进行数据排序。
Description
技术领域
本发明涉及一种数据排序方法,特别是涉及一种基于索引树和数据链表的FPGA并行排序方法及系统。
背景技术
排序是一种重要的数据运算,是计算机技术和信息系统的一个重要操作。传统的排序算法包括冒泡法、选择法、计数法、地址排序法等。这些算法大多采用循环比较,有运算费时、实时性差以及处理空间资源占用率等缺点,即是“空间换时间”的排序算法。
在大数据时代,动辄达到数百TB甚至数十至数百PB规模的行业/企业大数据已远远超出了现有传统的计算技术和信息系统的处理能力。因此,寻求有效的数据排序方法已经成为工程计算的迫切需求。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于索引树和数据链表的FPGA并行排序方法及系统,根据现有的数据存储形式和FPGA的硬件特点,通过FPGA对数据进行编/解码来实现对数据的排序,达到一边读取数据一边进行数据排序的目的,尤其适用于数据位数较多,排序数据量较大,有大量重复数据及要返回排序数据地址等的排序应用场景。
为实现上述目的及其他相关目的,本发明提供一种基于索引树和数据链表的FPGA并行排序方法,包括以下步骤:步骤S1、根据接收到的排序指令,FPGA将待排序记录的特征值和标识值从存储器内依次读出;所述记录的特征值为该记录中参与排序比对的数值;所述记录的标识值为所述记录的唯一标识;步骤S2、FPGA在数据链表存储区创建标识值节点,并将记录的标识值存储在标识值节点;步骤S3、FPGA根据记录的特征值在索引树存储区的索引树上建立特征值节点;将记录的特征值以二进制位的方式分为若干组,按照从高位到低位的顺序将每一组二进制数据对应索引树的一层特征值节点,每个特征值节点的子节点序号对应于当前分组的一种取值,根节点到达最底层的特征值节点所经过的路径代表特征值每个分组的取值;其中,除了最底层的特征值节点外,索引树的特征值节点信息包括所述特征值节点的每个子节点在索引树存储区中的首地址;最底层的特征值节点信息包含当前特征值对应的记录标识值节点在数据链表区存储的首地址;步骤S4、全部记录读出并处理完毕后,FPGA依次遍历索引树上各层的特征值节点,并根据特征值节点的路径恢复特征值;再根据获取的特征值节点中记录的标识值节点地址,在数据链表存储区中找到对应的标识值;步骤S5、待索引树全部遍历完毕后,FPGA按照遍历顺序输出所有记录的特征值和标识值,即得到排序后的记录。
根据上述的基于索引树和数据链表的FPGA并行排序方法,其中:所述特征值采用确定位宽的二进制数表示。
根据上述的基于索引树和数据链表的FPGA并行排序方法,其中:所述标识值为记录首地址、记录编号或记录ID。
根据上述的基于索引树和数据链表的FPGA并行排序方法,其中:所述索引树采用固定层数结构。
根据上述的基于索引树和数据链表的FPGA并行排序方法,其中:若存在多个索引树存储区和数据链表存储区,则索引树存储区与数据链表存储区一一对应,并与相应的数据处理逻辑形成一个独立的排序算法引擎,读入的数据则轮流分发至各排序算法引擎进行排序,输出时通过比较实现多引擎输出数据的选择。
根据上述的基于索引树和数据链表的FPGA并行排序方法,其中:排序后的特征值节点信息记录在FPGA内的RAM1和RAM2中,所述步骤S3包括以下步骤:
1)设定特征值为M位的二进制数值,待排序数据为A[M-1:0],则将包括K位数据的A[K-1:0]为一组,将剩余(M-K)位数据分为L组,L=(M-K)/S,其中,S=2,3…N,S代表每组数据的位数;L=2,3…N,L代表(M-K)位数据所分的组数;
2)RAM1中保留前2S*g[p-1:0]大小的地址空间,address1[j-1:0]表示RAM1的地址,且从(2S-1)开始计数;
3)找到与待排序数据A[M-1:M-S]相等的RAM1的地址,即A[M-1:M-S]=address1[S-1:0],然后读出RAM1中地址address1[S-1:0]中的数据,判断读出的数据是否为0;如为0,则将address1增加2S大小,即address1[j-1:0]=2S-1+2S,并将address1[j-1:S]的值写入address1[S-1:0]中;读出RAM1地址为address1[j-1:0]={address1[j-1:S],A[M-1-S:M-2S]}的数据,并根据上述方法表示待排序数据A的[M-1-S:M-2S]位数据,直至将L组数据处理完毕;
4)将待排序数据A[K-1:0]存储在RAM2内,并将RAM2的地址存储于RAM1的地址address1[j-1:0]={address1[j-1:S],A[M-1-S:M-L*S]}中;RAM2的一个地址段包括待排序数据的A[K-1:0]、与待排序数据A[M-1:0]有相同的高(M-K)位数据的下一个数据地址、待排序数据的地址或是其记录的地址。
进一步地,根据上述的基于索引树和数据链表的FPGA并行排序方法,其中:所述步骤4)中,如果是升序排序,则下一个数据地址跳转之后读出的数据大于A[K-1:0];如果是降序排序,则下一个数据地址跳转之后读出的数据小于A[K-1:0]。
进一步地,根据上述的基于索引树和数据链表的FPGA并行排序方法,其中:所述步骤S4中,通过以下步骤恢复特征值:
从RAM1中保留前2S*g[p-1:0]大小的地址段的第一个地址开始跳转,对于L组数据中的每一组,从该组地址的第一个地址开始,读出内部存储数据并判断是否为0;若为0,则读取第二个地址内数据直至内部数据不为0或2S地址内数据全部读取完毕;若不为0,则跳转至RAM2中地址,将具有链表结构的待排序数据全部解析出来。
根据上述的基于索引树和数据链表的FPGA并行排序方法,其中:从第一个记录的数据读出时,即开始工作排序,无需等待所有的记录的数据全部读出。
同时,本发明还提供一种基于索引树和数据链表的FPGA并行排序系统,应用于FPGA上,包括读出模块、标识值节点创建模块、特征值节点创建模块、遍历模块和输出模块;
所述读出模块用于根据接收到的排序指令,将待排序记录的特征值和标识值从存储器内依次读出;所述记录的特征值为该记录中参与排序比对的数值;所述记录的标识值为所述记录的唯一标识;
所述标识值节点创建模块用于在数据链表存储区创建标识值节点,并将记录的标识值存储在标识值节点;
所述特征值节点创建模块用于根据记录的特征值在索引树存储区的索引树上建立特征值节点;将记录的特征值以二进制位的方式分为若干组,按照从高位到低位的顺序将每一组二进制数据对应索引树的一层特征值节点,每个特征值节点的子节点序号对应于当前分组的一种取值,根节点到达最底层的特征值节点所经过的路径代表特征值每个分组的取值;其中,除了最底层的特征值节点外,索引树的特征值节点信息包括所述特征值节点的每个子节点在索引树存储区中的首地址;最底层的特征值节点信息包含当前特征值对应的记录标识值节点在数据链表区存储的首地址;
所述遍历模块用于全部记录读出并处理完毕后,依次遍历索引树上各层的特征值节点,并根据特征值节点的路径恢复特征值;再根据获取的特征值节点中记录的标识值节点地址,在数据链表存储区中找到对应的标识值;
所述输出模块用于待索引树全部遍历完毕后,按照遍历顺序输出所有记录的特征值和标识值,即得到排序后的记录。
如上所述,本发明的基于索引树和数据链表的FPGA并行排序方法及系统,具有以下有益效果:
(1)相对于通过数据进行两两比较的排序算法,大大减少了硬件电路实现的难度,节约了排序的时间;
(2)相对于地址排序等算法,将待排序的数据进行编码压缩能够大大节约地址空间,大大减少了对内存等资源的占用率,尤其是在排序数据中包含其所在地址或其记录所在地址的情况下。
附图说明
图1显示为本发明的基于索引树和数据链表的FPGA并行排序方法的基本原理示意图;
图2显示为本发明的基于索引树和数据链表的FPGA并行排序方法的流程图;
图3显示为本发明的实施例中RAM1中数据编码的N-tree表示形式;
图4显示为本发明的实施例中RAM1中数据20910的表示形式;
图5显示为本发明的实施例中RAM2中数据20910的表示形式;
图6显示为本发明的实施例中11910、11710、11610、11810在RAM1中数据的表示形式;
图7显示为本发明的实施例中11910、11710、11610、11810在RAM2中数据的表示形式;
图8显示为本发明的实施例中RAM1解码过程的示意图;
图9显示为本发明的实施例中RAM2解码过程的示意图;
图10显示为本发明的实施例中RAM1中数据的表示形式;
图11显示为本发明的实施例中RAM2中数据的表示形式;
图12显示为本发明的基于索引树和数据链表的FPGA并行排序系统的结构示意图。
元件标号说明
1 读出模块
2 标识值节点创建模块
3 特征值节点创建模块
4 遍历模块
5 输出模块
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
本发明的基于索引树和数据链表的FPGA并行排序方法及系统根据现有的数据存储形式和FPGA的硬件特点,通过FPGA对数据进行编/解码来实现对数据的排序,从而能够一边读取数据一边进行数据排序。如图1所示,FPGA从存储器中读取原始数据,通过一定的排序算法对原始数据进行编码,并将编码后的数据分别存储在两个内部存储器中,然后通过一定的解码算法对编码后的数据进行解码,从而得到排序后的数据,并输出至系统终端。
参照图2,本发明的基于索引树和数据链表的FPGA并行排序方法,包括如下步骤:
步骤S1、根据接收到的排序指令,FPGA将待排序记录的特征值和标识值从存储器内依次读出,其中,记录的特征值为该记录中参与排序比对的数值;记录的标识值为该记录的唯一标识。
优选地,记录的特征值采用确定位宽的二进制数表示,可以包括一个或多个。不同记录的特征值可以重复。记录的标识值可以为记录首地址、记录编号或记录ID等信息。
优选地,存储记录的存储器采用大容量存储器。该大容量存储器可以采用DRAM、PCRAM、NAND FLASH和Hard Disk中的一种或几种的组合。
当FPGA将待排序记录的特征值和标识值从存储器内依次读出时,从第一个数据读出时本发明的FPGA并行排序方法即开始工作排序,无需等待所有的数据全部读出,即能够一边读取数据一边进行数据排序。
步骤S2、FPGA在数据链表存储区创建标识值节点,并将记录的标识值存储在标识值节点。
步骤S3、FPGA根据记录的特征值在索引树存储区的索引树上建立特征值节点;将记录的特征值以二进制位的方式分为若干组,按照从高位到低位的顺序将每一组二进制数据对应索引树的一层特征值节点,每个特征值节点的子节点序号对应于当前分组的一种取值,根节点到达最底层的特征值节点所经过的路径代表特征值每个分组的取值;其中,除了最底层的特征值节点外,索引树的特征值节点信息包括该特征值节点的每个子节点在索引树存储区中的首地址;最底层的特征值节点信息包含该特征值对应的记录标识值节点在数据链表区存储的首地址。
具体地,对于索引树,每个特征值节点在索引区存储时占用n个地址,每个地址中保存的是该特征值节点的n个子节点在索引区的首地址。对于最底层的特征值节点仍然占用n个地址,但由于在索引区没有子节点了,因此n个地址上保存的就是标识值节点在数据链表区存储的地址。也就是说,每个最底层的特征值节点都挂有n个标识值链表,而每个标识值链表中的所有节点对应的记录都具有相同的特征值。所以,最底层特征值节点上本应存储子节点地址的地方存储着数据链表区标识值节点的首地址,其可看作是最底层特征值节点的子节点。
优选地,索引树采用固定层数结构。
每个特征值节点根据已读取的特征值动态创建,不在任何已出现的特征值路径上的节点不必创建。
若存在多个索引树存储区和数据链表存储区,则索引树存储区必须与数据链表存储区一一对应,并与相应的数据处理逻辑形成一个独立的排序算法引擎,读入的数据则轮流分发至各排序算法引擎进行排序,输出时则通过追加一级比较逻辑实现多引擎输出数据的选择,从而实现全体记录的排序。
需要说明的是,上述建立索引树的过程就是编码的过程。索引树的建立通常遵循有序树的建立规则,故编码其实就是对记录的排序过程。
步骤S4、全部记录读出并处理完毕后,FPGA依次遍历索引树上各层的特征值节点,并根据特征值节点的路径恢复特征值;再根据获取的特征值节点中记录的标识值节点地址,在数据链表存储区中找到对应的标识值。
具体地,遍历树通常是从根节点开始,按照子节点序号顺序遍历其所有子节点,这是个嵌套的过程。在本发明中,由于建立索引树时,子节点序号代表特征值的大小关系。因此,按照排序要求,若要求从小到大输出,则遍历树先遍历序号大的节点,再遍历序号小的节点;若要求从大到小输出,则遍历顺序相反即可。
步骤S5、待索引树全部遍历完毕后,FPGA按照遍历顺序输出所有记录的特征值和标识值,即得到排序后的记录。
下面通过实例来阐述一下本发明的基于索引树和数据链表的FPGA并行排序方法。
接收到排序指令后,FPGA将待排序的记录的特征值和标识值依次从大容量存储器内读出至FPGA的RAM内,其中特征值为待排序数据,标识值为待排序数据所在地址。
FPGA将待排序记录的特征值和标识值按照下述算法编码并将编码后的数据存入FPGA内部两块RAM内,即RAM1和RAM2内。其中RAM1的容量大小为G*g[p-1:0],其中g[p-1:0]表示一个地址段中有p位数据,共G个地址段;RAM2的容量大小为H*h[q-1:0],其中h[q-1:0]表示一个地址段中有q位数据,共H个地址段。
具体地,编码算法如下:
1)设定特征值为M位的二进制数值。将M位的待排序记录的特征值进行分组。如,待排序数据为A[M-1:0],将待排序数据的K位作为一组数据,即A[K-1:0]为一组。将剩余(M-K)位数据分为L组,L=(M-K)/S,其中,S=2,3…N,代表每组数据的位数;L=2,3…N,代表(M-K)位数据所分的组数。其中从数据高位起,第一组数据即“L=1”组数据为A[M-1:M-S],第二组数据即“L=2”组数据为A[M-S-1:M-2S],以此类推。
2)RAM1中保留前2S*g[p-1:0]大小的地址空间,其中,S=2,3…N,其表示(M-K)位数据分为L组中每组数据的位数。RAM1的地址用address1[j-1:0]来表示,其中2j-1>G,其从(2S-1)开始计数。其中,G的取值则与待排序的记录数、特征值分组方式以及特征值的位数有关。记录的特征值分布越分散,RAM1越需要存储更多的节点,j值就需要取值越大,最大一般不超过记录中独立特征值个数的1.5倍,但实际应用中可根据实际情况权衡取舍。
3)首先找到与待排序数据“L=1”组数据A[M-1:M-S]相等的RAM1的地址,即A[M-1:M-S]=address1[S-1:0],然后读出RAM1中地址address1[S-1:0]中的数据,判断读出的数据是否为0;如为0,则将address1增加2S大小,即address1[j-1:0]=2S-1+2S,并将address1[j-1:S]的值写入address1[S-1:0]中。即用RAM1的地址address1[S-1:0]表示待排序数据A的[M-1:M-S]位数据,地址address1[S-1:0]内存储的是下一步需跳转的地址。即FPGA在数据链表存储区创建记录的标识值节点并根据记录的特征值建立特征值节点,再将记录的标识值节点地址保存在特征值节点中。读出RAM1地址为address1[j-1:0]={address1[j-1:S],A[M-1-S:M-2S]}的数据,根据上述方法表示待排序数据A的[M-1-S:M-2S]位数据,直至将L组数据处理完毕。
4)将待排序数据K位数据即A[K-1:0]存储在RAM2内,并将RAM2的地址存储于RAM1的地址address1[j-1:0]={address1[j-1:S],A[M-1-(L-1)*S:M-L*S]}中,即RAM1的address1表示的第L组数据A[M-1-(L-1)*S:M-L*S]这个地址内。RAM2的一个地址段包括待排序数据的A[K-1:0]、与待排序数据A[M-1:0]有相同的高(M-K)位数据的下一个数据地址、待排序数据的地址或是其记录的地址。如果是升序排序,则下一个数据地址跳转之后读出的数据大于A[K-1:0];如果是降序排序,则下一个数据地址跳转之后读出的数据小于A[K-1:0],此结构为链表结构。如果记录包括有多个特征值,则在链表中按照特征值的大小顺序进行排列。
5)待排序数据编码完毕后,FPGA按照对应的解码算法规则将RAM1及RAM2内的编码数据解码输出至系统终端显示。
其中,解码的过程如下:
I:从RAM1中保留前2S*g[p-1:0]大小的地址段的第一个地址开始跳转,即从数据高位L=1层开始跳转到数据低位第L层,每层数据有2S个地址,从L层地址的第一个地址开始,读出内部存储数据并判断是否为0;若为0,则读取第二个地址内数据直至内部数据不为0或2S地址内数据全部读取完毕;若不为0,则跳转至RAM2中地址,将具有链表结构的待排序数据全部解析出来。
II:待L层的数据解析完毕,即开始解析RAM1中L-1层地址的2S个地址,方法同上。
III:同理,依次将L-2至1层的数据解析出来。
IV:解析出来的数据即为排序完毕的数据序列。
下面通过具体实施例来说明本发明的基于索引树和数据链表的FPGA并行排序算法的编/解码过程。
设定待排序数据序列为:{209,89,119,240,209,223,82,117,254,215,219,80,92,95,253,217,116,118,209,209}。需要将20个待排序数据按照从小到大的顺序依次输出。
这些待排序数据存储于大容量存储器内,所在记录首地址为:{000000,000010,000020,000030,000040,000050,000060,000070,000080,000090,0000a0,0000b0,0000c0,0000d0,0000e0,0000f0,000100,0000110,000120,000130}。
具体地排序步骤如下:
接收到排序指令后,FPGA将待排序数据从大容量存储器内依次读出。
FPGA依次将8位待排序数据分组(M=8,即数据为A[M-1:0]=A[7:0]),我们选取最低2位为一组(K=2),剩下6位数据分为3组即:2=(8-2)/3(L=(M-K)/S,即L=3,S=2)。例如:第一个待排序数据209的二进制编码为110100012(20910),即高6位分为3组即11,01,00.低两位数据01为一组。待排序数据在RAM1中的存储形式如图3所示。其中,X10代表的是十进制数,X是正整数,代表的是其在RAM2的地址编号。其余数据均为二进制数,线条数据表示RAM1地址低两位编号,圆圈数据表示RAM1地址的高四位。
下面以第一个数据20910来说明数据的编码过程。如图3所示,虚线带箭头线段表示RAM1地址的后两位数据,即分别代表了20910二进制编码110100012的高6位,即高6位分为3组的11,01,00.。实线带箭头线段表示11610、11710、11810、11910的高6位数据,分别为:01,11,10。
检测RAM1的地址寄存器address1[5:0],起始四个地址段作为保留即为0000002(address0),0000012(address1),0000102(address2),0000112(address3),如图4虚线方框所示。
以数据20910为例,检测上述四个地址中的低两位与数据20910的高两位[7:6]相同值的地址内数据是否为0,即检测address3(0000112)内数据是否为0。如果为0,则将address[5:0]地址加4(2S,其中S=2),将address[5:2]的值写入address3中,即“00012”,如图4的编号①所示。如果不为0,则将内部数据读出如B[3:0],然后拼接待排序数据的后两位A[1:0]组成数据C[5:0]={B[3:0],A[1:0]}。类似的,然后检测与数据20910的数据位[5:4]相等地址段内数据是否为0。以此类推至L组数据检测完毕(L=(M-K)/S)。
将address[5:2]与待排序数据20910的[5:4]组成新的地址为“0001012”,读出此地址内数据,检测读出数据为“0”,则将address[5:0]的值加4,然后将address[5:2]的值写入“0001012”中即“0010”,如图4的编号②所示。
将address[5:2]与待排序数据20910的[5:4]组成新的地址为“0010002”,如图4的编号③所示。读出此地址内数据,以此地址为RAM2的address2[5:0],并读出此地址内存于RAM2的数据。
至此,待排序数据20910的L=3组数据的编码过程如图4中箭头和编号(①②③)所示。
判断从RAM2中读出的数据是否为“0”。若为0,则将“地址计数器”的值写入RAM1“001000”地址段内,并将D[13:0]={stored data[1:0],next addr[5:0],stored dataaddr[5:0]}写入以“地址计数器”为地址的RAM2中,其中next addr是下一个地址,不为0时跳转;地址计数器初始值为1,每写一次RAM2,地址计数器加1。如图5中编号④所示。
当下一个待排序20910(110100012)数据出现,按照所述算法的步骤对L=3组数据“11”,“01”,“00”编码,如图5中编号④所示,RAM2地址为110内数据不为0,检测下一位地址next addr[5:0]为0,则将此时地址计数器的数值写入RAM2地址为110的地址段next addr[5:0]内,第二个20910(110100012)是第五次出现,即此时地址计数器的值为510,并将待排序数据20910(110100012)的后两位作为存储数据stored data[1:0]与存储数据地址storeddata addr[5:0]写入RAM2地址为510的地址段如图4所示的相应位置内。相似的,第19,20次出现的待排序数据20910(110100012)以相同的方法写入。本发明中处理相同数据的方法是“先到的数据为大”,其编码后的链表形式如图5虚线椭圆框和虚线箭头线段所示。
再如待排序数据“11910(011101112)”“11710(011101012)”“11610(011101002)”和“11810(011101102)”有相同的高6位值,则按照与上述四个20910(110100012)相同的方法进行排序。如图6中编号⑤⑥⑦和带箭头线段所示。
下面重点解释一下上述四个待排序数据在RAM2中的排序过程。待排序数据到达的顺序是11910、11710、11610、11810,如图6所示,序号⑶所示的地址“0101012”一开始存储的为11910在RAM2的地址为“310”。
待排序数据11710到达后,由于是升序排序,故序号⑶所示的地址“0101012”存储的值变为数据11710在RAM2的地址为“810”,即将待排序11910在RAM2的地址“310”写入数据11710在RAM2地址“810”内next addr[5:0]位置。
待排序数据11610到达后,由于是升序排序,故序号⑶所示的地址“0101012”存储的值变为数据11610在RAM2的地址为“1710”,即将待排序11710在RAM2的地址“810”写入数据11610在RAM2地址“1710”内next addr[5:0]位置。
待排序数据11810到达后,由于是升序排序,故序号⑶所示的“0101012”存储的还是数据11610在RAM2的地址为“1710”,不用变化。由于11810小于11910大于11710,故将待排序11810在RAM2的地址“1810”写入数据11710在RAM2地址“810”内next addr[5:0]位置。将待排序11910在RAM2的地址“310”写入数据11810在RAM2地址“1810”内next addr[5:0]位置。
排序完毕后,四个数据在RAM2中的数据表示形式如图7虚线线框和虚线箭头所示。
解码过程如图7所示,本实例中包括L=3组数据,每组数据S=2位数。从保留的四段地址开始检测,检测到address0(0000002)内数据为0,则跳转到address1(0000012)内检测,数据不为0,则按照地址跳转,若为0,则在本层数内地址加1,继续检测,如图8椭圆框所示,直至跳转到RAM2地址,即跳转至RAM2的1210地址。记录地址依次为“01”,“01”,“00”,如图8编号及带箭头的线段所示。
如图9所示,读出RAM2地址1210内数据,将依次解析出的数据组合“01”,“01”,“00”,“00”即为8010“010100002”并输出地址0000b0。
检测到下一个数据地址(next data addr)不为0,则跳转至下一个数据地址710,读出RAM2地址710内数据与之前解析数据“01”,“01”,“00”组合即为数据8210“010100102”并输出其地址000060。检测到next data addr为0,则跳转至RAM1第L=3层下一个地址“010010 2”,检测到地址为210,即跳转至RAM2地址210并读出内数据与之前读出数据组合“01”,“01”,“10”,“01”即为数据“8910”,检测到next data addr为0,则跳转至RAM1第L=3层下一个地址“010011 2”。按照相同的方法读出数据9210,9510。跳转至RAM1第L=3层检测到2S=4(S=2)已经检测完毕,则跳转至L=2层检测。按照上述方法直至解码完毕。
由上面的实例可以看出,本发明的基于索引树和数据链表的FPGA并行排序方法在编码解码的过程可以达到排序的效果,而无需对待排序数据进行大小的比较,大大节约了排序时间,降低了电路的复杂性;且仅对排序数据新建地址空间,大大节约了地址空间,如图10、11所示即为上述20组数据排序后的编码结果图。
需要说明的是,本发明的基于索引树和数据链表的FPGA并行排序方法既可针对带排序数据地址的排序应用,也可针对不带排序地址的排序应用,故应用范围较广。该排序算法针对的是待排序数据序列是以数据流的形式出现,采用将待排序数据分解编码用两块地址空间分开存储数据,并且采用链表存储数据的方法,从而很好的解决了待排序数据有大量重复数据出现的情况。
如图12所示,本发明还提供一种基于索引树和数据链表的FPGA并行排序系统,应用于FPGA上,包括读出模块1、标识值节点创建模块2、特征值节点创建模块3、遍历模块4和输出模块5。
读出模块1用于根据接收到的排序指令,将待排序记录的特征值和标识值从存储器内依次读出;所述记录的特征值为该记录中参与排序比对的数值;所述记录的标识值为所述记录的唯一标识;
标识值节点创建模块2与读出模块1相连,用于在数据链表存储区创建标识值节点,并将记录的标识值存储在标识值节点;
特征值节点创建模块3与读出模块1和标识值节点创建模块2相连,用于根据记录的特征值在索引树存储区的索引树上建立特征值节点;将记录的特征值以二进制位的方式分为若干组,按照从高位到低位的顺序将每一组二进制数据对应索引树的一层特征值节点,每个特征值节点的子节点序号对应于当前分组的一种取值,根节点到达最底层的特征值节点所经过的路径代表特征值每个分组的取值;其中,除了最底层的特征值节点外,索引树的特征值节点信息包括所述特征值节点的每个子节点在索引树存储区中的首地址;最底层的特征值节点信息包含当前特征值对应的记录标识值节点在数据链表区存储的首地址;
遍历模块4与读出模块1、标识值节点创建模块2和特征值节点创建模块3相连,用于全部记录读出并处理完毕后,依次遍历索引树上各层的特征值节点,并根据特征值节点的路径恢复特征值;再根据获取的特征值节点中记录的标识值节点地址,在数据链表存储区中找到对应的标识值;
输出模块5与遍历模块4相连,用于待索引树全部遍历完毕后,按照遍历顺序输出所有记录的特征值和标识值,即得到排序后的记录。
综上所述,本发明的基于索引树和数据链表的FPGA并行排序方法及系统相对于通过数据进行两两比较的排序算法,大大减少了硬件电路实现的难度,节约了排序的时间;相对于地址排序等算法,将待排序的数据进行编码压缩能够大大节约地址空间,大大减少了对内存等资源的占用率,尤其是在排序数据中包含其所在地址或其记录所在地址的情况下。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
Claims (10)
1.一种基于索引树和数据链表的FPGA并行排序方法,其特征在于:包括以下步骤:
步骤S1、根据接收到的排序指令,FPGA将待排序记录的特征值和标识值从存储器内依次读出;所述记录的特征值为该记录中参与排序比对的数值;所述记录的标识值为所述记录的唯一标识;
步骤S2、FPGA在数据链表存储区创建标识值节点,并将记录的标识值存储在标识值节点;
步骤S3、FPGA根据记录的特征值在索引树存储区的索引树上建立特征值节点;将记录的特征值以二进制位的方式分为若干组,按照从高位到低位的顺序将每一组二进制数据对应索引树的一层特征值节点,每个特征值节点的子节点序号对应于当前分组的一种取值,根节点到达最底层的特征值节点所经过的路径代表特征值每个分组的取值;其中,除了最底层的特征值节点外,索引树的特征值节点信息包括所述特征值节点的每个子节点在索引树存储区中的首地址;最底层的特征值节点信息包含当前特征值对应的记录标识值节点在数据链表区存储的首地址;
步骤S4、全部记录读出并处理完毕后,FPGA依次遍历索引树上各层的特征值节点,并根据特征值节点的路径恢复特征值;再根据获取的特征值节点中记录的标识值节点地址,在数据链表存储区中找到对应的标识值;
步骤S5、待索引树全部遍历完毕后,FPGA按照遍历顺序输出所有记录的特征值和标识值,即得到排序后的记录。
2.根据权利要求1所述的基于索引树和数据链表的FPGA并行排序方法,其特征在于:所述特征值采用确定位宽的二进制数表示。
3.根据权利要求1所述的基于索引树和数据链表的FPGA并行排序方法,其特征在于:所述标识值为记录首地址、记录编号或记录ID。
4.根据权利要求1所述的基于索引树和数据链表的FPGA并行排序方法,其特征在于:所述索引树采用固定层数结构。
5.根据权利要求1所述的基于索引树和数据链表的FPGA并行排序方法,其特征在于:若存在多个索引树存储区和数据链表存储区,则索引树存储区与数据链表存储区一一对应,并与相应的数据处理逻辑形成一个独立的排序算法引擎,读入的数据则轮流分发至各排序算法引擎进行排序,输出时通过比较实现多引擎输出数据的选择。
6.根据权利要求1所述的基于索引树和数据链表的FPGA并行排序方法,其特征在于:排序后的特征值节点信息记录在FPGA内的RAM1和RAM2中,所述步骤S3包括以下步骤:
1)设定特征值为M位的二进制数值,待排序数据为A[M-1:0],则将包括K位数据的A[K-1:0]为一组,将剩余(M-K)位数据分为L组,L=(M-K)/S,其中,S=2,3…N,S代表每组数据的位数;L=2,3…N,L代表(M-K)位数据所分的组数;
2)RAM1中保留前2S*g[p-1:0]大小的地址空间,address1[j-1:0]表示RAM1的地址,且从(2S-1)开始计数;
3)找到与待排序数据A[M-1:M-S]相等的RAM1的地址,即A[M-1:M-S]=address1[S-1:0],然后读出RAM1中地址address1[S-1:0]中的数据,判断读出的数据是否为0;如为0,则将address1增加2S大小,即address1[j-1:0]=2S-1+2S,并将address1[j-1:S]的值写入address1[S-1:0]中;读出RAM1地址为address1[j-1:0]={address1[j-1:S],A[M-1-S:M-2S]}的数据,并根据上述方法表示待排序数据A的[M-1-S:M-2S]位数据,直至将L组数据处理完毕;
4)将待排序数据A[K-1:0]存储在RAM2内,并将RAM2的地址存储于RAM1的地址address1[j-1:0]={address1[j-1:S],A[M-1-(L-1)*S:M-L*S]}中;RAM2的一个地址段包括待排序数据的A[K-1:0]、与待排序数据A[M-1:0]有相同的高(M-K)位数据的下一个数据地址、待排序数据的地址或是其记录的地址。
7.根据权利要求6所述的基于索引树和数据链表的FPGA并行排序方法,其特征在于:所述步骤4)中,如果是升序排序,则下一个数据地址跳转之后读出的数据大于A[K-1:0];如果是降序排序,则下一个数据地址跳转之后读出的数据小于A[K-1:0]。
8.根据权利要求6所述的基于索引树和数据链表的FPGA并行排序方法,其特征在于:所述步骤S4中,通过以下步骤恢复特征值:
从RAM1中保留前2S*g[p-1:0]大小的地址段的第一个地址开始跳转,对于L组数据中的每一组,从该组地址的第一个地址开始,读出内部存储数据并判断是否为0;若为0,则读取第二个地址内数据直至内部数据不为0或2S地址内数据全部读取完毕;若不为0,则跳转至RAM2中地址,将具有链表结构的待排序数据全部解析出来。
9.根据权利要求1所述的基于索引树和数据链表的FPGA并行排序方法,其特征在于:从第一个记录的数据读出时,即开始工作排序,无需等待所有的记录的数据全部读出。
10.一种基于索引树和数据链表的FPGA并行排序系统,应用于FPGA上,其特征在于:包括读出模块、标识值节点创建模块、特征值节点创建模块、遍历模块和输出模块;
所述读出模块用于根据接收到的排序指令,将待排序记录的特征值和标识值从存储器内依次读出;所述记录的特征值为该记录中参与排序比对的数值;所述记录的标识值为所述记录的唯一标识;
所述标识值节点创建模块用于在数据链表存储区创建标识值节点,并将记录的标识值存储在标识值节点;
所述特征值节点创建模块用于根据记录的特征值在索引树存储区的索引树上建立特征值节点;将记录的特征值以二进制位的方式分为若干组,按照从高位到低位的顺序将每一组二进制数据对应索引树的一层特征值节点,每个特征值节点的子节点序号对应于当前分组的一种取值,根节点到达最底层的特征值节点所经过的路径代表特征值每个分组的取值;其中,除了最底层的特征值节点外,索引树的特征值节点信息包括所述特征值节点的每个子节点在索引树存储区中的首地址;最底层的特征值节点信息包含当前特征值对应的记录标识值节点在数据链表区存储的首地址;
所述遍历模块用于全部记录读出并处理完毕后,依次遍历索引树上各层的特征值节点,并根据特征值节点的路径恢复特征值;再根据获取的特征值节点中记录的标识值节点地址,在数据链表存储区中找到对应的标识值;
所述输出模块用于待索引树全部遍历完毕后,按照遍历顺序输出所有记录的特征值和标识值,即得到排序后的记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610719554.6A CN106326421B (zh) | 2016-08-24 | 2016-08-24 | 基于索引树和数据链表的fpga并行排序方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610719554.6A CN106326421B (zh) | 2016-08-24 | 2016-08-24 | 基于索引树和数据链表的fpga并行排序方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106326421A true CN106326421A (zh) | 2017-01-11 |
CN106326421B CN106326421B (zh) | 2019-03-22 |
Family
ID=57790767
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610719554.6A Active CN106326421B (zh) | 2016-08-24 | 2016-08-24 | 基于索引树和数据链表的fpga并行排序方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106326421B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062358A (zh) * | 2017-11-28 | 2018-05-22 | 厦门市美亚柏科信息股份有限公司 | innodb引擎删除记录的离线恢复方法、存储介质 |
CN110109926A (zh) * | 2019-04-25 | 2019-08-09 | 杭州德旺信息技术有限公司 | 一种Equihash算法数据的排序装置和排序方法 |
CN111090784A (zh) * | 2019-12-30 | 2020-05-01 | 武汉轻工大学 | 基于双链表的数据排序方法、装置、设备及存储介质 |
CN111861361A (zh) * | 2020-04-09 | 2020-10-30 | 河北利至人力资源服务有限公司 | 一种智能简历推送系统及方法 |
US10896022B2 (en) | 2017-11-30 | 2021-01-19 | International Business Machines Corporation | Sorting using pipelined compare units |
US10936283B2 (en) | 2017-11-30 | 2021-03-02 | International Business Machines Corporation | Buffer size optimization in a hierarchical structure |
US11048475B2 (en) | 2017-11-30 | 2021-06-29 | International Business Machines Corporation | Multi-cycle key compares for keys and records of variable length |
CN114090592A (zh) * | 2022-01-24 | 2022-02-25 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及可读存储介质 |
US11354094B2 (en) | 2017-11-30 | 2022-06-07 | International Business Machines Corporation | Hierarchical sort/merge structure using a request pipe |
CN118567577A (zh) * | 2024-07-30 | 2024-08-30 | 杭州优云科技股份有限公司 | 基于分布式块存储的数据访问方法、装置、电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120109849A1 (en) * | 2003-05-23 | 2012-05-03 | Washington University | Intelligent Data Storage and Processing Using FPGA Devices |
CN102981933A (zh) * | 2012-12-18 | 2013-03-20 | 武汉邮电科学研究院 | 物联网感知层的数据增量备份方法及系统 |
CN105468628A (zh) * | 2014-09-04 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 一种排序方法及装置 |
CN105608057A (zh) * | 2015-12-09 | 2016-05-25 | 合肥工业大学 | 一种分时复用硬件资源的信号子空间分解的fpga实现模块及其fpga实现方法 |
US20160188643A1 (en) * | 2014-12-31 | 2016-06-30 | Futurewei Technologies, Inc. | Method and apparatus for scalable sorting of a data set |
-
2016
- 2016-08-24 CN CN201610719554.6A patent/CN106326421B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120109849A1 (en) * | 2003-05-23 | 2012-05-03 | Washington University | Intelligent Data Storage and Processing Using FPGA Devices |
CN102981933A (zh) * | 2012-12-18 | 2013-03-20 | 武汉邮电科学研究院 | 物联网感知层的数据增量备份方法及系统 |
CN105468628A (zh) * | 2014-09-04 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 一种排序方法及装置 |
US20160188643A1 (en) * | 2014-12-31 | 2016-06-30 | Futurewei Technologies, Inc. | Method and apparatus for scalable sorting of a data set |
CN105608057A (zh) * | 2015-12-09 | 2016-05-25 | 合肥工业大学 | 一种分时复用硬件资源的信号子空间分解的fpga实现模块及其fpga实现方法 |
Non-Patent Citations (2)
Title |
---|
GEZI LI,XIAOGANG CHEN: "An FPGA enhanced extensible and parallel query storage system for emerging NVRAM", 《IEICE ELECTRONICS EXPRESS》 * |
师廷伟: "基于FPGA 的并行全比较排序算法", 《数字技术与应用》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062358A (zh) * | 2017-11-28 | 2018-05-22 | 厦门市美亚柏科信息股份有限公司 | innodb引擎删除记录的离线恢复方法、存储介质 |
CN108062358B (zh) * | 2017-11-28 | 2020-12-29 | 厦门市美亚柏科信息股份有限公司 | innodb引擎删除记录的离线恢复方法、存储介质 |
US11354094B2 (en) | 2017-11-30 | 2022-06-07 | International Business Machines Corporation | Hierarchical sort/merge structure using a request pipe |
US10896022B2 (en) | 2017-11-30 | 2021-01-19 | International Business Machines Corporation | Sorting using pipelined compare units |
US10936283B2 (en) | 2017-11-30 | 2021-03-02 | International Business Machines Corporation | Buffer size optimization in a hierarchical structure |
US11048475B2 (en) | 2017-11-30 | 2021-06-29 | International Business Machines Corporation | Multi-cycle key compares for keys and records of variable length |
CN110109926A (zh) * | 2019-04-25 | 2019-08-09 | 杭州德旺信息技术有限公司 | 一种Equihash算法数据的排序装置和排序方法 |
CN110109926B (zh) * | 2019-04-25 | 2021-03-16 | 杭州德旺信息技术有限公司 | 一种Equihash算法数据的排序装置和排序方法 |
CN111090784A (zh) * | 2019-12-30 | 2020-05-01 | 武汉轻工大学 | 基于双链表的数据排序方法、装置、设备及存储介质 |
CN111861361A (zh) * | 2020-04-09 | 2020-10-30 | 河北利至人力资源服务有限公司 | 一种智能简历推送系统及方法 |
CN111861361B (zh) * | 2020-04-09 | 2021-07-27 | 河北利至人力资源服务有限公司 | 一种智能简历推送系统及方法 |
CN114090592A (zh) * | 2022-01-24 | 2022-02-25 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及可读存储介质 |
CN118567577A (zh) * | 2024-07-30 | 2024-08-30 | 杭州优云科技股份有限公司 | 基于分布式块存储的数据访问方法、装置、电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106326421B (zh) | 2019-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106326421A (zh) | 基于索引树和数据链表的fpga并行排序方法及系统 | |
US10896223B2 (en) | Efficient method for subgraph pattern matching | |
Nishizeki et al. | Planar graphs: Theory and algorithms | |
US9721320B2 (en) | Fully parallel in-place construction of 3D acceleration structures and bounding volume hierarchies in a graphics processing unit | |
US8332410B2 (en) | Bit string merge sort device, method, and program | |
CN107688999A (zh) | 一种基于区块链的并行交易执行方法 | |
CN111027702A (zh) | 一种实现量子线路替换的方法、装置、存储介质和电子装置 | |
CN113139100B (zh) | 一种网络流量实时索引方法及系统 | |
CN106708956B (zh) | 一种基于多url规则集的http数据匹配方法 | |
CN105204920B (zh) | 一种基于映射聚合的分布式计算作业的实现方法及装置 | |
CN103440246A (zh) | 用于MapReduce的中间结果数据排序方法及系统 | |
CN106780579A (zh) | 一种超大规模图像特征点匹配方法及系统 | |
CN113076312B (zh) | 归并树形排序装置、排序系统及排序方法 | |
CN103995827B (zh) | MapReduce计算框架中的高性能排序方法 | |
CN105264488A (zh) | 使用数组对来合并有序列表 | |
TW201636877A (zh) | 對資料物件篩選分類的方法、裝置以及電子設備 | |
CN103927325B (zh) | 一种对url进行分类的方法及装置 | |
CN106802787A (zh) | 基于GPU排序的MapReduce优化方法 | |
CN103761298B (zh) | 一种基于分布式架构的实体匹配方法 | |
Censor-Hillel et al. | Deterministic near-optimal distributed listing of cliques | |
Han et al. | Parallel integer sorting is more efficient than parallel comparison sorting on exclusive write PRAMs | |
CN103294735A (zh) | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 | |
CN112465514A (zh) | 一种基于区块链的分层式交易并行执行方法及系统 | |
US11169964B2 (en) | Hash suppression | |
CN106599002A (zh) | 话题演化分析的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |