本发明涉及处理器设计领域,特别涉及一种面向大数据的加速排序装置、方法、芯片、处理器。
背景技术:
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列,有序序列为记录的查找、插入和删除等提供了便利性,大大提高了搜索等问题的效率,因此,研究各类排序算法是计算机研究中的重要课题之一,通用的排序方法基本上都是基于关键字的比较和交换两种操作,比如,两个位置的数进行比较,前者大于后者或后者大于前者,会对应着两种不同的下一步调整位置处理方式,直到整个序列中所有元素排在前面的都大于或小于排在后面的。
随着互联网技术的蓬勃发展,数据规模已超过10PB量级,面对如此庞大的数据规模,如何快速有效的完成排序变得尤其重要,针对大规模数据的排序,有很多种加快解决问题的方式,比如基于分布式的思想,通过一个大规模系统集群来进行排序,这样,每个计算机节点只负责一小部分的数据排序,在一台计算机内部,也可以用同样的思想使用多个线程,来并行的进行排序操作,以上都是在现有计算机结构的基础之上所做的软件上的优化,计算机的处理能力是有限的,排序问题的基本操作仍然是两个数的比较和交换,为使排序问题能够更加快速的进行,需要改善处理器结构,提高处理器排序能力。
技术实现要素:
针对现有技术的不足,本发明提出一种面向大数据的加速排序装置及方法。
本发明提出一种面向大数据的加速排序方法,包括:
步骤1,对待排序列数据,每次取连续n位数据,取m组,并存放在所述寄存器组中;
步骤2,分别对m组所述待排序列数据进行排序,生成m组有序序列数据,通过排序算法将所述有序序列数据进行排序。
所述步骤2中通用的排序算法包括冒泡排序、快速排序。
还包括对所述待排序列数据进行标识。
本发明还提出一种面向大数据的加速排序装置,包括
寄存器组,用于对待排序列数据,每次取连续n位数据,取m组,并存放在所述寄存器组中;
映射比较部件,用于分别对m组所述待排序列数据进行排序,生成m组有序序列数据,通过排序算法将所述有序序列数据进行排序。
所述寄存器组的宽度为n位,行数为m,其中所述寄存器组的每一行存储一组所述待排序列数据。
所述通用的排序算法包括冒泡排序、快速排序。
所述映射比较部件包括比较交换部件与映射逻辑部件。
还包括中间标识寄存器,用于对所述待排序列数据进行标识。
本发明还提出一种包括所述面向大数据的加速排序装置的芯片。
本发明还提出一种包括所述芯片的处理器。
由以上方案可知,本发明的优点在于:
本发明从而降低排序算法的复杂度,进而加快排序问题的解决速度,通过将传统排序操作中的1个单位数据扩大到n个单位数据,在无需改变任何算法思路的前提下,将所有与比较相关的排序算法复杂度降为原来的1/n;同时,这种n单元数据的连续访存,一定程度降低了访存开销,从而大大的提高了排序算法的执行速度,通过本发明,提高了单个节点处理器上针对排序应用的处理效率。
附图说明
图1为排序装置的组成结构图;
图2为基本比较交换部件的结构图;
图3为基本映射选通逻辑图;
图4为通常的CPSR寄存器各位的含义图;
图5为本发明装置CPSR寄存器各位的设置图;
图6为n=4的预备模式下本发明装置执行步骤图;
图7为n=4的普通模式下本发明装置执行步骤图。
具体实施方式
为了达到上述目的,本发明提出一种面向大数据的加速排序方法,包括:
步骤1,对待排序列数据,每次取连续n位数据,取m组,并存放在所述寄存器组中;
步骤2,分别对m组所述待排序列数据进行排序,生成m组有序序列数据,通过排序算法将所述有序序列数据进行排序。
所述步骤2中通用的排序算法包括冒泡排序、快速排序。
还包括对所述待排序列数据进行标识。
本发明还提出一种面向大数据的加速排序装置,包括
寄存器组,用于对待排序列数据,每次取连续n位数据,取m组,并存放在所述寄存器组中;
映射比较部件,用于分别对m组所述待排序列数据进行排序,生成m组有序序列数据,通过排序算法将所述有序序列数据进行排序。
所述寄存器组的宽度为n位,行数为m,其中所述寄存器组的每一行存储一组所述待排序列数据。
所述通用的排序算法包括冒泡排序、快速排序。
所述映射比较部件包括比较交换部件与映射逻辑部件。
还包括中间标识寄存器,用于对所述待排序列数据进行标识。
本发明还提出一种包括所述面向大数据的加速排序装置的芯片。
本发明还提出一种包括所述芯片的处理器。
以下为本发明一实施例,如图1所示,该装置包括:
100,长度为2n的寄存器行,用来存放宽度为n的两组基本元数据。寄存器的行数可根据实际需要进行设定。
101,长度为n的映射比较部件,用来分别对宽度为n的两个基本元数据进行比较操作。映射比较部件的行数根据实际需要进行设定。映射比较部件由比较交换部件和映射逻辑部件构成,详细结构见图2和图3。
102,中间标识寄存器。详细组成见图4。
另一方面,本发明的方法包括:
步骤1,对待排序列数据,每次取连续n位或2n位数据于该装置,使用预备模式,得到以每n个数为一组的局部升序序列;
步骤2,以n个数为一个操作元,在普通模式下,使用通用的排序算法(冒泡、快排等),对整个序列进行排序,直至整个序列有序。
上述方法中,首先使用预备模式将序列分成了一组组长度为n的局部有序序列,以此简化了后续两个操作元的比较和交换操作,同时也能够减少比较器的数量。
在具体操作过程中,对两个基本操作元做比较操作之后,结果为一个有序的2n序列,且标识寄存器返回了比较的结果,返回的信息包括原始是否有序,原始是大于还是小于,如果原始无序,最大值和最小值分别存在于哪个操作元中。这些结果信息主要是为了配合不同排序算法所需要的比较结果的不同形式。
下面结合附图,以n=4为例,对本发明做进一步的详细描述。
所述基本比较交换的结构部件的详细示意图见图2。200比较交换部件主要有2001所示多路选择器和2002比较器组成。对于每一个比较交换部件,有4路输入,2路输出。其中mode控制信号0表示4单位数乱序排序操作,1表示8单位数顺序操作,因此mode控制了输入和输出寄存器的位置。ALU对两个数值进行比较之后的结果,0表示data1<data2,无需交换两输入位置,1表示data1>data2,交换数位置。
所述映射比较部件结构如图3所示。由于每一步操作整理来看都涉及到8输入4个比较交换部件和8输出,将每一步的操作逻辑封装。300所示i0~i7为8个输入,Mode为输入的控制位,根据Mode值的不同,由303所示多选逻辑确定302所示4个比较交换部件的输入数据,302产生比较结果,决定了最终301所示y0~y7的值。
如303所示的多选逻辑1和2分别确定了输入数据与ALU部件之间的映射关系以及输入数据与输出数据间的映射关系。对于4单位数乱序排序操作映射如图6,8单位数顺序操作映射如图7。
由此可见,针对n=4的设计需要对图3所示的部件进行3种设计,分别对应于从d0到d1的选择映射,d1到d2的选择映射和d2到d3的选择映射逻辑。参照图4,以d0到d1的映射逻辑为例:
对于比较器ALU0所对应的x0和x1,在Mode=0时,x0=i0,x1=i1;Mode=1时,x0=i0,x1=i7,因此,x0=i0,x1=Mode*i7+-Mode*i0。而对应于输出值y0,只有可能是i0,i1和i7三种可能,当M0=0时,y0=i0;当Mode=0且M0=1时,y0=i1;当Mode=1且M0=1时,y0=i7,因此,y0=-M0*i0+M0(Mode*i7+-Mode*i1)。同理,最终可以得到三组的选择逻辑。
本发明装置在对n宽度数据进行排序的同时,能够提供两个升序序列的比较结果,以供各种排序算法使用。比较结果与普通的比较操作一样,存放于CPSR中,CPSR寄存器每一位的安排如图4。本发明装置的结果类型比普通比较多,因此将CPSR做修改如图5。
其中,各个新添标识位含义如下:
Inorder:1:待比较排序的2个升序列原本有序,即输入列d0<d1<d2<d3<d4<d5<d6<d7或d4<d5<d6<d7<d0<d1<d2<d3;0:待比较序的两个升序序列无序。
Greater:1:d0~d3序列大于d4~d7序列;0:不大于。
Littler:1:d0~d3序列小于d4~d7序列;0:不小于。
Minmin:0:排序后最小值属于d0~d3;1:排序后最小值属于d4~d7。
Maxmax:0:排序后最大值属于d0~d3;1:排序后最大值属于d4~d7。
help0~help5:6位协助计算Minmin和Maxmax的标记为,在比较过程中随着结果的变化而改变。
各标识位的具体修改见本发明专利的两个详细操作过程。
本发明装置提供两种基本操作,包括预备模式下n单位数乱序排序和普通模式下2n单位数顺序排序。两种基本操作使得本装置能够高效便捷的支持插入排序、选择排序、交换排序、归并排序等各种内存排序算法以及外部排序算法。n单位数乱序排序是指对输入的n个完全无序的数进行排序。2n单位数顺序排序是指输入的2n个数中,前n个和后n个都是局部有序的(均为升序或降序),对这种局部有序的两个操作元进行排序并得到比较结果。
下面将以n=4为例,依次介绍所述2种基本操作方法。
4单位数乱序排序过程如图6所示:
步骤601,读取4个需要排序的单位数据。此基本操作数据个数为4,因此该装置可以同时支持2个4单位乱序排序操作;
步骤602,将数据d00与d01比较交换,结果存于d10和d11,d02与d03比较交换,结果存于d12和d13。
步骤603,将数据d10与d13比较交换,结果存于d20和d23,d11与d12比较交换,结果存于d21和d22。
步骤604,将数据d20与d21比较交换,结果存于d30和d31,d22与d23比较交换,结果存于d32和d33。装置操作结束。
其中d00、d01、d02、d03为输入数据,排序后结果顺序排放在d30、d31、d32、d33中。同时可以将数据输入放于d04~d07,原理等同。
每一步数据映射方式如图中箭头指示。
该操作适应于所有排序算法执行的第一步,将一个完全乱序的待排数列进行一次4单位乱序排序后,形成了一个每4个数局部有序数列,为此后做8单位数顺序排序打基础。
8单位数顺序排序过程如图7所示:
步骤701,读取8个输入数据,数据分布在d00~d07中,其中d00~d03为升序序列,d04~d07为升序序列,图5中所示的17~27位的标志位初始值为11’0;
步骤702,f00部件对d00和d07进行比较交换,如果d00>d07,tag0与tag7交换,Inorder=1,Greater=1;f01部件对d01和d06进行操作,如果d01>d06,tag1与tag7交换;f02部件对d02和d05进行操作,如果d02>d05,tag2月tag5交换;f03部件对d04和d05进行操作,如果d04>d05,tag4与tag5交换,Inorder=1,Little=1;
步骤703,f10部件对d10,d12进行操作,如果d10>d12,tag0与tag2交换;f11对d11和d13、f12对d14和d16,f13对d15和d17,操作完全相同;
步骤704,f20对d20和d21,f21对d22和d23,f22对d24和d25,f23对d26和d27,操作同步骤3。
每一步数据映射方式如图中箭头指示。
该操作是排序算法的核心操作,功能等同于简单的比较、交换,但是操作宽度由简单的2数比较交换,变成了8数的并行比较交换,性能提升至少4倍。