一种结构体排序方法、排序装置及排序器

文档序号:1543602 发布日期:2020-01-17 浏览:3次 >En<

阅读说明:本技术 一种结构体排序方法、排序装置及排序器 (Structure body sorting method, sorting device and sorter ) 是由 苗准 王旭 杨桦 董咏梅 于 2018-07-10 设计创作,主要内容包括:本发明实施例公开了一种结构体排序方法、排序装置及排序器,该方法包括:从M个结构体的目标定点数中确定最大的N个不重复的目标定点数作为排序参考数;按照从大到小的顺序依次将每个排序参考数与每个结构体的目标定点数比较;若比较的结果为相等,则记录相等的目标定点数所属结构体的序号;根据序号的记录顺序,将对应的结构体依次写入存储器的指定位置。在排序时仅读出结构体的目标定点数,且在排序后按照序号记录的顺序将对应的结构体写入指定位置,既减少了数据读出和写入以及数据比较所消耗的动态功耗,又避免了对数据的频繁读出和写入,显著降低了排序的动态功耗。(The embodiment of the invention discloses a structural body sorting method, a sorting device and a sorter, wherein the method comprises the following steps: determining the largest N nonrepeating target fixed point numbers as sequencing reference numbers from the target fixed point numbers of the M structural bodies; sequentially comparing each sequencing reference number with the target fixed point number of each structural body according to the sequence from big to small; if the comparison result is equal, recording the serial numbers of the structures to which the equal target fixed point numbers belong; and sequentially writing the corresponding structural bodies into the designated positions of the memory according to the recording sequence of the serial numbers. And only reading the target fixed point number of the structural body during sorting, and writing the corresponding structural body into the designated position according to the sequence of the serial number record after sorting, thereby not only reducing the dynamic power consumption consumed by data reading and writing and data comparison, but also avoiding frequent reading and writing of the data, and remarkably reducing the dynamic power consumption of sorting.)

一种结构体排序方法、排序装置及排序器

技术领域

本申请涉及数据处理技术领域,尤其涉及一种结构体排序方法、排序装置及排序器。

背景技术

结构体是一种包括多类数据的数据集合。一般,结构体内的每类数据均可视为一个定点数,每个定点数的位宽均不相同。

目前,在以结构体中某一类数据的大小为依据对多个结构体进行排序时,每轮次排序均会对存储结构体的本地存储器进行读出和写入操作,排序过程频繁的访问本地存储器,导致了较大的动态功耗。

发明内容

有鉴于此,本申请实施例提供了一种结构体排序方法、排序装置及排序器,能够解决现有技术中排序过程对本地存储器的频繁访问所导致的动态功耗大的问题。

本申请实施例提供的一种结构体排序方法,所述方法,包括:

从M个结构体的目标定点数中确定最大或最小的N个不重复的目标定点数作为排序参考数;M为大于1的正整数,N为小于M的正整数;

按照预设顺序依次将每个排序参考数与每个所述结构体的目标定点数比较;若比较的结果为相等,则记录相等的目标定点数所属结构体的序号;当所述排序参考数为最大的N个不重复的目标定点数时,所述预设顺序为从大到小;当所述排序参考数为最小的N个不重复的目标定点数时,所述预设顺序为从小到大;

根据序号的记录顺序,将对应的结构体依次写入存储器的指定位置。

可选的,所述记录相等的目标定点数所属结构体的序号,之后还包括:

判断记录的序号数量是否小于预设排序数量;

若否,则执行所述根据序号的记录顺序,将对应的结构体依次写入存储器的指定位置。

可选的,当比较完每个排序参考数后,记录的序号数量仍小于所述预设排序数量时,所述根据序号的记录顺序,将对应的结构体依次写入存储器的指定位置,之前还包括:

将最后一个比较的排序参考数减小预设差值,更新所述最后一个比较的排序参考数;当所述排序参考数为最大的N个不重复的目标定点数时,所述预设差值为一;当所述排序参考数为最小的N个不重复的目标定点数时,所述预设差值为负一;

再次比较所述最后一个比较的排序参考数和第p个结构体的目标定点数;p∈[1,M];

当比较的结果为相等时,记录相等的目标定点数所属结构体的序号并判断记录的序号数量是否小于预设排序数量;

若否,则执行所述根据序号的记录顺序,将对应的结构体依次写入存储器的指定位置;

若是,则更新p后返回执行所述再次比较所述最后一个比较的排序参考数和第p个结构体的目标定点数;

当所述最后一个比较的排序参考数与所述M个结构体的目标定点数均比较过后记录的序号数量仍小于预设排序数量时,返回执行所述将最后一个比较的排序参考数减一更新所述最后一个比较的排序参考数。

可选的,所述从M个结构体的目标定点数中确定最大或最小的N个不重复的目标定点数作为排序参考数,具体包括:

初始设置第一个-第N个存储区域,并将每个存储区域中存储的数置零;

将第i个所述结构体的目标定点数与每个所述存储区域中存储的数进行比较,i∈[1,M];

当所述排序参考数为最大的N个不重复的目标定点数时,若所述第i个结构体的目标定点数大于或等于K个存储区域中存储的数且所述第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为所述第i个结构体的目标定点数,并将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数;K∈[1,N],j∈[N-K+1,N-1];

当所述排序参考数为最小的N个不重复的目标定点数时,若所述第i个结构体的目标定点数小于或等于K个存储区域中存储的数且所述第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为所述第i个结构体的目标定点数,并将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数;K∈[1,N],j∈[N-K+1,N-1];

更新i后,返回所述将第i个所述结构体的目标定点数与每个所述存储区域中存储的数进行比较;

当所述M个结构体的目标定点数与每个所述存储区域中存储的数均比较过后,按顺序将所述第一个-第N个存储区域中存储的数确定为所述排序参考数。

本申请实施例提供的一种结构体排序装置,所述装置,包括:参考确定单元、数据处理单元和顺序写入单元;

所述参考确定单元,用于从M个结构体的目标定点数中确定最大或最小的N个不重复的目标定点数作为排序参考数;M为大于1的正整数,N为小于M的正整数;

所述数据处理单元,用于按照预设顺序依次将每个排序参考数与每个所述结构体的目标定点数比较;还用于在比较的结果为相等时,记录相等的目标定点数所属结构体的序号;

其中,当所述排序参考数为最大的N个不重复的目标定点数时,所述预设顺序为从大到小;当所述排序参考数为最小的N个不重复的目标定点数时,所述预设顺序为从小到大;

所述顺序写入单元,用于根据序号的记录顺序,将对应的结构体依次写入存储器的指定位置。

可选的,所述装置还包括:数量判断单元;

所述数量判断单元,用于在所述数据处理单元记录相等的目标定点数所属结构体的序号之后,判断记录的序号数量是否小于预设排序数量;还用于当判断结果为否时,触发所述顺序写入单元。

可选的,所述装置还包括:数据更新单元和触发单元;

所述数据更新单元,用于当所述数据处理单元比较完每个排序参考数后,所述数量判断单元的判断结果仍为是时,将最后一个比较的排序参考数减小预设差值,更新所述最后一个比较的排序参考数后触发所述数据处理单元;

其中,当所述排序参考数为最大的N个不重复的目标定点数时,所述预设差值为一;当所述排序参考数为最小的N个不重复的目标定点数时,所述预设差值为负一;

所述数据处理单元,还用于再次比较所述最后一个比较的排序参考数和每个结构体的目标定点数;还用于当比较完所述最后一个比较的排序参考数和每个结构体的目标定点数时所述数量判断单元的判断结果仍为是时,则再次触发所述数据更新单元。

可选的,所述参考确定单元,具体包括:初始化子单元、比较子单元、设置子单元、更新子单元和获取子单元;

所述初始化子单元,用于初始设置第一个-第N个存储区域,并将每个存储区域中存储的数置零;

所述比较子单元,用于将第i个所述结构体的目标定点数与每个所述存储区域中存储的数进行比较,i∈[1,M];

所述设置子单元,用于当所述排序参考数为最大的N个不重复的目标定点数时,若所述比较子单元的比较结果为所述第i个结构体的目标定点数大于或等于K个存储区域中存储的数且所述第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为所述第i个结构体的目标定点数,并将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数后,触发所述更新子单元;还用于当所述排序参考数为最小的N个不重复的目标定点数时,若所述比较子单元的比较结果为所述第i个结构体的目标定点数小于或等于K个存储区域中存储的数且所述第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为所述第i个结构体的目标定点数,并将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数后,触发所述更新子单元;

其中,K∈[1,N],j∈[N-K+1,N-1];

所述更新子单元,用于更新i后,触发所述比较子单元;

所述获取子单元,用于当所述M个结构体的目标定点数与每个所述存储区域中存储的数均比较过后,按顺序将所述第一个-第N个存储区域中存储的数确定为所述排序参考数。

本申请实施例提供的一种结构体排序器,包括:读写模块、比较模块和写入模块;

所述读写模块,用于将本地存储器中待排序的M个结构体的目标定点数转存在本地缓存;还用于从所述M个结构体的目标定点数中确定最大或最小的N个不重复的目标定点数作为排序参考数后通知所述比较模块;M为大于1的正整数,N为小于M的正整数;

所述比较模块,用于在接收到所述读写模块的通知后,从所述读写模块中获取每个排序参考数,从所述本地缓存中获取所述M个结构体的目标定点数;还用于按照预设顺序依次将每个排序参考数与每个所述结构体的目标定点数比较,当比较的结果为相等时,将相等的目标定点数所属结构体的序号写入所述本地缓存后通知所述写入模块;

其中,当所述排序参考数为最大的N个不重复的目标定点数时,所述预设顺序为从大到小;当所述排序参考数为最小的N个不重复的目标定点数时,所述预设顺序为从小到大;

所述写入模块,用于在接收到所述比较模块的通知后,从所述本地缓存中获取记录的序号,并根据序号的记录顺序,从所述本地存储器中获取序号对应的结构体后依次写入所述本地存储器的指定位置。

可选的,所述比较模块,具体包括:第一读取子模块和比较子模块;

所述第一读取子模块,用于所述在接收到所述读写模块的通知后,从所述本地缓存中获取所述M个结构体的目标定点数后,逐一发送至所述比较子模块;

所述比较子模块,用于在接收到所述读写模块的通知后,从所述读写模块中获取每个排序参考数,按照所述预设顺序依次将每个排序参考数与每个所述结构体的目标定点数比较;还用于当比较的结果为相等时,判断记录的序号数量是否小于预设排序数量,若是则将相等的目标定点数所属结构体的序号写入所述本地缓存,并通知所述写入模块。

可选的,

所述比较子模块,还用于当比较完每个的排序参考数后,记录的序号数量仍小于所述预设排序数量时,将所述最后一个比较的排序参考数减小预设差值更新所述最后一个比较的排序参考数后,再次比较所述最后一个比较的排序参考数与每个所述结构体的目标定点数;

其中,当所述排序参考数为最大的N个不重复的目标定点数时,所述预设差值为一;当所述排序参考数为最小的N个不重复的目标定点数时,所述预设差值为负一。

可选的,所述读写模块,具体包括:第二读取子模块和写入子模块;

所述第二读取子模块,用于发送读指令至所述本地存储器,以使所述本地存储器根据所述读指令将所述M个结构体的目标定点数发送至所述写入子模块;

所述写入子模块,用于将获取到的目标定点数写入所述本地缓存;还用于在写入的过程中执行如下步骤:

初始设置第一个-第N个存储区域,并将每个存储区域中存储的数置零;

将第i个所述结构体的目标定点数与每个所述存储区域中存储的数进行比较,i∈[1,M];

当所述排序参考数为最大的N个不重复的目标定点数时,若所述第i个结构体的目标定点数大于或等于K个存储区域中存储的数且所述第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为所述第i个结构体的目标定点数,并将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数;K∈[1,N],j∈[N-K+1,N-1];

当所述排序参考数为最小的N个不重复的目标定点数时,若所述第i个结构体的目标定点数小于或等于K个存储区域中存储的数且所述第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为所述第i个结构体的目标定点数,并将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数;K∈[1,N],j∈[N-K+1,N-1];

更新i后,返回所述将第i个所述结构体的目标定点数与每个所述存储区域中存储的数进行比较;

当所述M个结构体的目标定点数与每个所述存储区域中存储的数均比较过后,按顺序将所述第一个-第N个存储区域中存储的数确定为所述排序参考数。

与现有技术相比,本申请至少具有以下优点:

本申请实施例提供了一种结构体排序方法、排序装置及排序器,在为多个结构体排序时,先读取每个结构体的目标定点数作为排序的依据,并确定其中最大或最小的N个不重复的目标定点数作为排序参考数,而后在排序过程中,按照从大到小或从小到大的顺序依次将每个排序参考数与每个结构体的目标定点数比较,当比较结果为相等时,记录相等的目标定点数所属结构体的序号,再按照序号记录的顺序,将与序号对应的结构体依次写入存储器的指定位置,即实现了按照结构体内目标定点数的大小为结构体进行排序。在上述排序过程中,一方面由于是根据目标定点数的大小按顺序记录对应结构体的序号作为顺序写入的依据,仅在排序后按照序号记录的顺序将对应的结构体写入指定位置,避免了对结构体的频繁读出和写入,减少了结构体读出和写入的动态功耗;另一方面,在排序时又仅读出结构体的目标定点数,也仅有目标定点数参与排序的比较,又减少了数据读出和写入以及数据比较所消耗的动态功耗。

附图说明

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

图1为本申请实施例提供的一种结构体排序方法的流程示意图;

图2为本申请具体实施例提供的一种排序参考数确定方法的流程示意图;

图3为本申请具体实施例提供的一种排序参考数和目标定点数比较方法的流程示意图;

图4为本申请实施例提供的另一种结构体排序方法的流程示意图;

图5为本申请实施例提供的一种结构体排序装置的结构示意图;

图6为本申请实施例提供的另一种结构体排序装置的结构示意图;

图7为本申请实施例提供的一种结构体排序器的结构示意图;

图8为本申请实施例提供的另一种结构体排序器的结构示意图。

具体实施方式

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

为了便于理解,下面首先介绍本申请实施例的具体场景。本申请实施例所提供的结构体排序方法、排序装置及排序器,用于根据结构体中特定类型的数据(即目标定点数)的大小对多个结构体进行排序。排序的结果即将多个结构体按照其中目标定点数的大小顺序写入存储器的指定位置。本申请实施例对待排序的结构体的初始存储位置和最终排序所写入的位置不作限定,可以是同一个存储介质中的地址,也可以是不同存储器中的地址。下面以结构体的初始存储位置和排序后的写入位置均在本地存储器中为例进行详细说明,其他情况的实现方式与此类似,具体不再一一赘述。

目前常用的排序方法在排序的过程中,均需要对本地存储器进行频繁的读出和写入操作。例如,在进行冒泡排序时,假设待排序的结构体为[A(1),A(2),A(3),…,A(i-1),A(i)],排序、排序结果为从左至右逐渐减小时,需要先从本地存储器中读出两个相邻的待排序的结构体,如A(1)和A(2),对A(1)和A(2)中的目标定点数进行比较,当A(1)中的目标定点数小于A(2)中的目标定点数时,需要进行存储位置的交换,将结构体A(1)写入A(2)的存储位置,将结构体A(2)写入A(1)的存储位置。然后,再对A(1)和A(3)中的目标定点数进行比较,重复上述过程直到最后一组,如A(i-1)和A(i)比较完毕。在冒泡排序的过程中,比较后存储位置的交换需要对本地存储进行读出和写入操作,频繁的交换会导致大的动态功耗问题。

为此,本申请实施例提供了一种结构体排序方法、排序装置和排序器,首先仅从本地存储器中读出结构体中排序用的目标定点数,节约读出的功耗;其次,在排序时,摒弃了数据交换的操作,先确定出多个结构体中目标定位数最大的N个不重复的目标定点数作为比较参考室,然后按照预设的顺序将每个比较参考数与各个结构体的目标定点数比较,当比较结果为相等时,则记录相等的目标定点数所属结构体的序号,最后按照序号的记录顺序,将对应的结构体依次写入指定位置,完成排序,无需频繁的读写操作,减少了对本地存储器的访问次数,减少了动态功耗。

基于上述思想,为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请的具体实施方式做详细的说明。

参见图1,该图为本申请实施例提供的一种结构体排序方法的流程示意图。

本申请实施例提供的结构体排序方法,包括如下步骤S101-S103:

S101:从M个结构体的目标定点数中确定最大或最小的N个不重复的目标定点数作为排序参考数。

在本申请实施例中,本地存储器中存储的待排序的结构体数量M为大于1的正整数,N为小于M的正整数。目标定点数即结构体中的一类数据,为结构体排序的依据。例如,目标定点数可以是结构体中的第二类数据,排序时,依据结构体中第二类数据的大小对多个结构体进行排序。当对M个结构体的目标定点数进行从大到小的排序时,排序参考数为最大的N个不重复的目标定点数;当对M个结构体的目标定点数进行从小到大的排序时,排序参考数为最小的N个不重复的目标定点数。

在实际应用中,可以采用任意一种比较排序的方法确定M个结构体的目标定点数中最大或最小的N个不重复的目标定点数作为排序参考数,下面具体举例说明。

在本申请实施例一些可能的实现方式中,如图2所示,步骤S101可以包括如下步骤S1011-S1014。

S1011:初始设置第一个-第N个存储区域,并将每个存储区域中存储的数置零。

在本申请实施例中,初始设置的第一个-第N个共N个存储区域可以是本地存储器中连续的N个地址所对应的存储区域,也可以是不连续的N个地址所对应的存储区域,这里不做具体限定。需要注意的是,初始设置的N个存储区域是具有一定顺序的,设置时若N个存储区域的地址不连续则需要顺序记录这N个存储区域的地址以确定存储区域的顺序。作为一个示例,第一个-第N个共N个存储区域可以是本地存储器中一组连续的寄存器。

作为一个示例,假设N=5,第一个-第N个存储区域可以是如下所示的按照从左至右排列的N个存储区域:

本申请实施例对存储区域的排列顺序不进行具体限定,初始设置的第一个-第N个存储区域及其中存储的数如下:

0 0 0 0 0

这里需要说明的是,N的取值具体可以根据实际的排序情况进行设定,本申请实施例对此不进行限定。例如,目标定点数为8位宽,则N可以为16。

S1012:将第i个结构体的目标定点数与每个存储区域中存储的数进行比较;当排序参考数为最大的N个不重复的目标定点数时,若第i个结构体的目标定点数大于或等于K个存储区域中存储的数且第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则执行步骤S1013;当排序参考数为最小的N个不重复的目标定点数时,若第i个结构体的目标定点数小于或等于K个存储区域中存储的数且第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则执行步骤S1013;其中,i∈[1,M],K∈[1,N]。

可以理解的是,第i个结构体可以是本地存储器中待排序的M个结构体中的任意一个,并不代表本地存储器中待排序的M个结构体一定具有顺序,也不代表比较时一定按照顺序从本地存储器中读出结构体的目标定点数,实际应用中结构体的存储顺序和读出顺序均可以是随机的。

S1013:将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为第i个结构体的目标定点数;更新i后,返回步骤S1012。其中,j∈[N-K+1,N-1]。

举例而言,若第一个结构体的目标定点数为10,将10与每个存储区域中存储的数进行比较,10大于或等于5个(K=5)存储区域中存储的数,N-K+1=1,但10不等于第1个存储区域中存储的0,则先将第2个存储区域中存储的数替换为第一个存储区域中存储的数,将第3个存储区域中存储的数替换为第2个存储区域中存储的数,以此类推;再将第一个存储区域中存储的数替换为10,得到的第一个-第N个存储区域及其中存储的数如下:

10 0 0 0 0

若第2个结构体的目标定点数为6,将6与每个存储区域中存储的数进行比较,6大于或等于4(K=4)个存储区域中存储的数,N-K+1=2,但6不等于第2个存储区域存储的0,则先将第3个存储区域中存储的数替换为第2个存储区域中存储的数,将第4个存储区域中存储的数替换为第3个存储区域中存储的数,以此类推;再将第2个存储区域中存储的数替换为6,得到的第一个-第N个存储区域及其中存储的数如下:

10 6 0 0 0

若第3个结构体的目标定点数为8,将8与每个存储区域中存储的数进行比较,8大于或等于4(K=4)个存储区域中存储的数,N-K+1=2,但8不等于第2个存储区域中存储的6,则先将第3个存储区域中存储的数替换为第2个存储区域中存储的数,将第4个存储区域中存储的数替换为第3个存储区域中存储的数,以此类推;再将第2个存储区域中存储的数替换为8,得到的第一个-第N个存储区域及其中存储的数如下:

10 8 6 0 0

若第4个结构体的目标定点数仍为6,将6与每个存储区域中存储的数进行比较,6大于或等于3(K=3)个存储区域中存储的数,N-K+1=3,但6等于第3个存储区域中存储的6,则结束本轮处理,继续将第5个结构体的目标定点数与每个存储区域中存储的数进行比较,以此类推直到M个结构体的目标定点数均与存储区域中存储的数进行比较为止,执行步骤S1014。

S1014:当M个结构体的目标定点数均与存储区域中存储的数进行比较后,按顺序将第一个-第N个存储区域中存储的数确定为排序参考数。

可以理解的是,在对M个结构体的目标定点数均执行了上述步骤S1012-S1013后,第一个-第N个存储区域中存储的数也就是按照从大到小或从小到大的顺序排列的最大的N个不重复的目标定点数,这样不仅找出了最大或最小的N个不重复的目标定点数还确定了这N个目标定点数之间的大小顺序,为后续比较提供了支持。

在本申请实施例中,在确定最大或最小的N个不重复的目标定点数作为排序参考数时,将每一个目标定点数同时与多个存储区域中存储的数进行并行的比较,提高了处理的效率。

S102:按照预设顺序依次将每个排序参考数与每个结构体的目标定点数比较;若比较的结果为相等,则记录相等的目标定点数所属结构体的序号。

在本申请实施例中,当排序参考数为最大的N个不重复的目标定点数时,预设顺序为从大到小;当排序参考数为最小的N个不重复的目标定点数时,预设顺序为从小到大。

以从大到小为例,先将第一个存储区域中存储的数与每个结构体的目标定点数比较,当二者相等时,则说明相等的目标定点数为这M个结构体的目标定点数中的最大值,记录相等的目标定点数所属结构体的序号即找出了M个结构体中目标定点数最大的结构体。而后,将第二个存储区域中存储的数与每个结构体的目标定点数比较,当二者相等时,则说明相等的目标定点数为这M个结构体的目标定点数中的第二大值,记录相等的目标定点数所属结构体的序号即找出了M个结构体中目标定点数第二大的结构体,以此类推,即实现了M个结构体按照其中目标定点数从大到小的顺序排序。从小到大的排序与此类似,这里不再赘述。

这里需要说明的是,由于在本申请实施例中,根据目标定点数的大小按顺序记录对应结构体的序号作为顺序写入的依据,避免了对结构体的频繁读出和写入,减少了结构体读出和写入的动态功耗。

S103:根据序号的记录顺序,将序号对应的结构体依次写入存储器的指定位置。

由于在步骤S102中记录的序号时,已经是按照排序后的结构体进行的顺序记录,序号的记录顺序即结构体的排序顺序,因此,在根据序号的记录顺序,将对应的结构体依次写入存储器的指定位置后,即完成了对M个结构体按照其中目标定点数大小的排序。实际应用中,结构体排序后的写入位置(即存储器的指定位置)可以根据实际需要具体设定,这里不再一一列举。

在本申请实施例中,先读取每个待排序的结构体的目标定点数作为排序的依据,并确定其中最大或最小的N个不重复的目标定点数作为排序参考数,而后在排序过程中,按照从大到小或从小到大的顺序依次将每个排序参考数与每个结构体的目标定点数比较,当比较结果为相等时,记录相等的目标定点数所属结构体的序号,再按照序号记录的顺序,将与序号对应的结构体依次写入存储器的指定位置,即实现了按照结构体内目标定点数的大小为结构体进行排序。在上述排序过程中,一方面由于是根据目标定点数的大小按顺序记录对应结构体的序号作为顺序写入的依据,仅在排序后按照序号记录的顺序将对应的结构体写入指定位置,避免了对结构体的频繁读出和写入,减少了结构体读出和写入的动态功耗;另一方面,在排序时又仅读出结构体的目标定点数,也仅有目标定点数参与排序的比较,又减少了数据读出和写入以及数据比较所消耗的动态功耗。

在实际应用中,虽然参与排序的结构体的数量为M但实际可能仅需要输出最大或最小的L个结构体,L<M。例如M=256时,仅需输出最大的10(L=10)个结构体。此时,若将全部256个结构体进行排序后再输出前10个结构体则存在不必要的比较过程,流程耗时长、消耗大。

为此,在本申请实施例一些可能的实现方式中,初始设置x=1、y=1,步骤S102具体可以包括如下步骤S1021-S1025,如图3所示。

S1021:将最大或最小的第x个排序参考数与第y个结构体的目标定点数比较;当比较结果为相等时,执行步骤S1022。

在本申请实施例中,最大的第x个排序参考数即将N个排序参考数按照从大到小的顺序排序后的第x个排序参考数;同理,最小的第x个排序参考数即将N个排序参考数按照从小到大的顺序排序后的第x个排序参考数。

S1022:记录相等的目标定点数所属结构体的序号。

S1023:判断记录的序号数量是否小于预设排序数量;若是,则执行步骤S1024;若否,则执行步骤S103。

S1024:判断y是否小于M;若是,则将y=y+1后,返回执行步骤S1021;若否,则执行步骤S1025。

S1025:判断x是否小于N;若是,将x=x+1、y=1后,返回执行步骤S1021。

在本申请实施例中,预设排序数量即上文所述的L,是预先设定的期望得到的排序好的结构体的数量,可以根据实际需要具体设定。通过在每次记录序号后对记录的序号的数量进行判断,确定是否已经记录了预设排序数量个序号,一旦记录的序号数量与预设排序数量相等,则结束排序流程执行步骤S103完成对预设排序数量个结构体的排序,节约了排序的流程。

上述内容介绍了本申请实施例提供的结构体排序方法如何确定输出多个结构体中目标定点数最大或最小的L个结构体,但在一些可能的情况下,在完成每个排序参考数和每个结构体的比较之后,记录的序号数量仍小于预设排序数量。为了满足预先设定的结构体排序数量需求,本申请实施例提供了一种更加具体的结构体排序方法。

参见图4,该图为本申请实施例提供的另一种结构体排序方法的流程示意图。

在本申请实施例一些可能的实现方式中,当每个排序参考数均和每个结构体的目标定点数比较过后,记录的序号数量仍小于预设排序数量时,步骤S103之前还包括如下步骤S401-S405。

S401:将最后一个比较的排序参考数减小预设差值,更新最后一个比较的排序参考数。

在本申请实施例中,当排序参考数为最大的N个不重复的目标定点数,即按照目标定点数从大到小的顺序为结构体排序时,预设差值1,将最小的排序参考数减1后重复排序过程(即步骤S402-405),以满足结构体排序数量需求。类似的,当排序参考数为最小的N个不重复的目标定点数,即按照目标定点数从小到大的顺序为结构体排序时,预设差值为-1,将最大的排序参考数加1后重复排序过程。

S402:再次比较最后一个比较的排序参考数和第p个结构体的目标定点数;当比较的结果为相等时,执行步骤S403。其中,p∈[1,M]。

S403:记录相等的目标定点数所属结构体的序号。

S404:判断记录的序号数量是否小于预设排序数量;若否,则执行步骤S103;若是,则执行步骤S405;

S405:判断最后一个比较的排序参考数是否与每个结构体的目标定点数比较过;若否,则更新p后返回执行步骤S402;若是,返回执行步骤S401。

可以理解的是,步骤S402-S405与S1021-S1025类似,具体参见上面的相关说明即可,这里不再赘述。当更新后的最后一个比较的排序参考数与每个结构体的目标定点数均比较过后,记录的序号数量仍小于预设排序参考数,则再次更新最后一个比较的排序参考数,重复上述排序过程直到记录的序号数量等于预设排序参考数为止,执行步骤S103完成对结构体的排序。

基于上述实施例提供的结构体排序方法,本申请实施例还提供了一种结构体排序装置。

参见图5,该图为本申请实施例提供的一种结构体排序装置的结构示意图。

本申请实施例提供的结构体排序装置,可以配置于任意处理器中,具体包括:参考确定单元100、数据处理单元200和顺序写入单元300;

参考确定单元100,用于从M个结构体的目标定点数中确定最大或最小的N个不重复的目标定点数作为排序参考数;M为大于1的正整数,N为小于M的正整数;

数据处理单元200,用于按照预设顺序依次将每个排序参考数与每个结构体的目标定点数比较;还用于在比较的结果为相等时,记录相等的目标定点数所属结构体的序号;

其中,当排序参考数为最大的N个不重复的目标定点数时,预设顺序为从大到小;当排序参考数为最小的N个不重复的目标定点数时,预设顺序为从小到大;

顺序写入单元300,用于根据序号的记录顺序,将对应的结构体依次写入存储器的指定位置。

在一些可能的实现方式中,本申请实施例所提供的结构体排序装置还可以包括:数量判断单元;

数量判断单元,用于在数据处理单元200记录相等的目标定点数所属结构体的序号之后,判断记录的序号数量是否小于预设排序数量;还用于当判断结果为否时,触发顺序写入单元300。

在一些可能的实现方式中,本申请实施例所提供的结构体排序装置可以还包括:数据更新单元;

数据更新单元,用于当数据处理单元200比较完每个排序参考数后,数量判断单元的判断结果仍为是时,将最后一个比较的排序参考数减小预设差值,更新最后一个比较的排序参考数后触发数据处理单元200;

其中,当排序参考数为最大的N个不重复的目标定点数时,预设差值为一;当排序参考数为最小的N个不重复的目标定点数时,预设差值为负一;

数据处理单元200,还用于再次比较最后一个比较的排序参考数和每个结构体的目标定点数;还用于当比较完最后一个比较的排序参考数和每个结构体的目标定点数时数量判断单元的判断结果仍为是时,则再次触发数据更新单元。

可选的,如图6所示,参考确定单元具体可以包括:初始化子单元101、比较子单元102、设置子单元103、更新子单元104和获取子单元105;

初始化子单元101,用于初始设置第一个-第N个存储区域,并将每个存储区域中存储的数置零;

比较子单元102,用于将第i个结构体的目标定点数与每个存储区域中存储的数进行比较,i∈[1,M];

设置子单元103,用于当排序参考数为最大的N个不重复的目标定点数时,若比较子单元102的比较结果为第i个结构体的目标定点数大于或等于K个存储区域中存储的数且第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为第i个结构体的目标定点数后,触发更新子单元104;还用于当排序参考数为最小的N个不重复的目标定点数时,若比较子单元102的比较结果为第i个结构体的目标定点数小于或等于K个存储区域中存储的数且第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为第i个结构体的目标定点数后,触发更新子单元104;

其中,K∈[1,N],j∈[N-K+1,N-1];

更新子单元104,用于更新i后,触发比较子单元102;

获取子单元105,用于当M个结构体的目标定点数与每个存储区域中存储的数均比较过后,按顺序将第一个-第N个存储区域中存储的数确定为排序参考数。

在本申请实施例中,先读取每个待排序的结构体的目标定点数作为排序的依据,并确定其中最大或最小的N个不重复的目标定点数作为排序参考数,而后在排序过程中,按照从大到小或从小到大的顺序依次将每个排序参考数与每个结构体的目标定点数比较,当比较结果为相等时,记录相等的目标定点数所属结构体的序号,再按照序号记录的顺序,将与序号对应的结构体依次写入存储器的指定位置,即实现了按照结构体内目标定点数的大小为结构体进行排序。在上述排序过程中,一方面由于是根据目标定点数的大小按顺序记录对应结构体的序号作为顺序写入的依据,仅在排序后按照序号记录的顺序将对应的结构体写入指定位置,避免了对结构体的频繁读出和写入,减少了结构体读出和写入的动态功耗;另一方面,在排序时又仅读出结构体的目标定点数,也仅有目标定点数参与排序的比较,又减少了数据读出和写入以及数据比较所消耗的动态功耗。

基于上述实施例提供的结构体排序方法和装置,本申请实施例还提供了一种结构体排序器。

参见图7,该图为本申请实施例提供的一种结构体排序器的结构示意图。

本申请实施例提供的结构体排序器,可以利用硬件结构实现,具体包括:读写模块10、比较模块20和写入模块wr_stru;

读写模块10,用于将本地存储器DDR中待排序的M个结构体的目标定点数转存在本地缓存lbuf;还用于从M个结构体的目标定点数中确定最大或最小的N个不重复的目标定点数作为排序参考数后通知比较模块20;M为大于1的正整数,N为小于M的正整数;

比较模块20,用于在接收到读写模块10的通知后,从读写模块10中获取每个排序参考数,从本地缓存lbuf中获取M个结构体的目标定点数;还用于按照预设顺序依次将每个排序参考数与每个结构体的目标定点数比较,当比较的结果为相等时,将相等的目标定点数所属结构体的序号写入本地缓存lbuf后通知写入模块wr_stru;

其中,当排序参考数为最大的N个不重复的目标定点数时,预设顺序为从大到小;当排序参考数为最小的N个不重复的目标定点数时,预设顺序为从小到大;

写入模块wr_stru,用于在接收到比较模块20的通知后,从本地缓存lbuf中获取记录的序号,并根据序号的记录顺序,从本地存储器DDR中获取序号对应的结构体后依次写入本地存储器DDR的指定位置。

可以理解的是,本申请实施例提供的结构体排序器所采用的排序方法与上述实施例所介绍的结构体排序方法类似,具体参见方法实施例部分的相关说明即可,这里不再赘述。

在本申请实施例中,先读取每个待排序的结构体的目标定点数作为排序的依据,并确定其中最大或最小的N个不重复的目标定点数作为排序参考数,而后在排序过程中,按照从大到小或从小到大的顺序依次将每个排序参考数与每个结构体的目标定点数比较,当比较结果为相等时,记录相等的目标定点数所属结构体的序号,再按照序号记录的顺序,将与序号对应的结构体依次写入存储器的指定位置,即实现了按照结构体内目标定点数的大小为结构体进行排序。在上述排序过程中,一方面由于是根据目标定点数的大小按顺序记录对应结构体的序号作为顺序写入的依据,仅在排序后按照序号记录的顺序将对应的结构体写入指定位置,避免了对结构体的频繁读出和写入,减少了结构体读出和写入的动态功耗;另一方面,在排序时又是仅读出结构体的目标定点数,也仅有目标定点数参与排序的比较,又减少了数据读出和写入以及数据比较所消耗的动态功耗。

参见图8,该图为本申请实施例提供的另一种结构体排序器的结构示意图。相较于图7,该图提供了一种更加具体的结构体排序器。

在本实施例中,比较模块20,具体可以包括:第一读取子模块fet_dat和比较子模块cmp;

第一读取子模块fet_dat,用于在接收到读写模块10的通知后,从本地缓存lbuf中获取M个结构体的目标定点数后,逐一发送至比较子模块cmp;

比较子模块cmp,用于在接收到读写模块10的通知后,从读写模块10中获取每个排序参考数,并按照预设顺序依次将每个排序参考数与每个结构体的目标定点数比较;还用于当比较的结果为相等时,判断记录的序号数量是否小于预设排序数量,若是则将相等的目标定点数所属结构体的序号写入本地缓存lbuf,并通知写入模块wr_stru。

在一些可能的实现方式中,比较子模块cmp,还用于当比较完每个的排序参考数后,记录的序号数量仍小于预设排序数量时,将最后一个比较的排序参考数减小预设差值更新最后一个比较的排序参考数后,再次比较最后一个比较的排序参考数与每个结构体的目标定点数;

其中,当排序参考数为最大的N个不重复的目标定点数时,预设差值为一;当排序参考数为最小的N个不重复的目标定点数时,预设差值为负一。

继续参见图8,在本申请实施例一些可能的实现方式中,读写模块10,具体可以包括:第二读取子模块rd_ddr和写入子模块wr_lbuf;

第二读取子模块rd_ddr,用于发送读指令至本地存储器DDR,以使本地存储器DDR根据读指令将M个结构体的目标定点数发送至写入子模块wr_lbuf;

写入子模块wr_lbuf,用于将获取到的目标定点数写入本地缓存lbuf;还用于在写入的过程中执行如下步骤:

初始设置第一个-第N个存储区域,并将每个存储区域中存储的数置零;

将第i个结构体的目标定点数与每个存储区域中存储的数进行比较,i∈[1,M];

当排序参考数为最大的N个不重复的目标定点数时,若第i个结构体的目标定点数大于或等于K个存储区域中存储的数且第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为第i个结构体的目标定点数;K∈[1,N],j∈[N-K+1,N-1];

当排序参考数为最小的N个不重复的目标定点数时,若第i个结构体的目标定点数小于或等于K个存储区域中存储的数且第i个结构体的目标定点数不等于第N-K+1个存储区域中存储的数,则将第j+1个存储区域中存储的数替换为第j个存储区域中存储的数,并将第N-K+1个存储区域中存储的数替换为第i个结构体的目标定点数;K∈[1,N],j∈[N-K+1,N-1];

更新i后,返回将第i个结构体的目标定点数与每个存储区域中存储的数进行比较;

当M个结构体的目标定点数与每个存储区域中存储的数均比较过后,按顺序将第一个-第N个存储区域中存储的数确定为排序参考数。

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

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

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

以上所述,仅是本申请的较佳实施例而已,并非对本申请作任何形式上的限制。虽然本申请已以较佳实施例揭露如上,然而并非用以限定本申请。任何熟悉本领域的技术人员,在不脱离本申请技术方案范围情况下,都可利用上述揭示的方法和技术内容对本申请技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本申请技术方案的内容,依据本申请的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本申请技术方案保护的范围内。

24页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:控制器及其操作方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类