一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于从原始数据中选择最值的装置和方法与流程

2023-07-13 15:10:24 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,更具体地,涉及一种用于从原始数据中选择多个最值的装置和方法。


背景技术:

2.在海量数据中寻找最值是计算机技术领域常见的问题。现有技术中通常会采用双调逻辑(bitonic logic)从一个大数据集合中选择多个最值(最大值或最小值),该双调逻辑的算法首先对包括原始数据的大数据集合进行双调排序(bitonic sequencing),并随后进行双调合并(bitonic merge)。经过多次循环后,整个大数据集合会被排序。为了对一个数据数量为k=2n的大数据集合进行双调逻辑排序,总共的比较运算次数是确定的,即共需要n(n 1)k/4次比较运算。
3.由于双调排序是一种基于比较运算且能够并行地执行运算的排序算法,因此其特别适合用硬件而非软件来实现。但是,基于硬件实现的排序处理的缺点在于需要大量的硬件逻辑开销。而且,一旦选定了最值的最大数量,硬件逻辑就要被设计为满足最高的要求来支持该最大数量的最值运算。但如果在实际排序过程中并不经常要求计算最大数量的最值,那么预先设计好的硬件逻辑中的很多资源就被浪费了。
4.因此,需要一种改进的选择最值的装置和方法。


技术实现要素:

5.本技术的一个目的在于提供一种用于从原始数据中选择k个最值的装置和方法。
6.在本技术的一个方面,提供了一种用于从原始数据中选择k个最值的装置,所述装置包括:输出队列,用于按批次地接收并存储经排序的输出序列,所述输出序列包括至多n个数据;循环队列,用于存储中间序列,所述中间序列包括至多n个数据;最值存储模块,用于存储k个最值;其中,所述最值存储模块包括多个存储区域,每个存储区域用于存储至多n个最值;控制模块,其耦接到所述输出队列、所述循环队列和所述最值存储模块,所述控制模块优先选择将所述循环队列中存储的中间序列与所述最值存储模块中的一个存储区域中存储的至多n个最值进行合并,并对合并后的数据进行排序处理以生成合并序列,直至所述最值存储模块中的预定数量个存储区域被遍历;所述控制模块在所述循环队列111中不存在所述中间序列时选择合并所述输出序列与所述最值存储模块中的一个存储区域中存储的至多n个最值,并对合并后的数据进行排序处理以生成合并序列;其中,所述控制模块还被用于将所述合并序列中相对靠近最值方向的第一子序列提供给所述最值存储模块以更新所述最值存储模块,以及将相对远离最值方向的第二子序列提供给所述循环队列以生成或更新所述中间序列。
7.在一些实施例中,所述装置还包括:输入队列,用于输入并存储输入序列,其中所述输入序列包括至多n个原始数据;以及排序模块,其耦接到所述输入队列,用于按批次地接收所述输入序列,并对所述输入序列进行排序以得到输出序列;所述排序模块还耦接到
所述输出队列以向所述输出队列提供所述输出序列。
8.在一些实施例中,所述装置还包括:读取模块,其用于按批次地将所述输入序列从所述输入队列读取到所述排序队列。
9.在一些实施例中,所述装置还包括:预过滤器,所述预过滤器位于所述输入队列的前级,用于接收预过滤阈值,并且基于所述预过滤阈值对输入的原始数据进行筛除。
10.在一些实施例中,所述预过滤器还耦接到所述最值存储模块,以从所述最值存储模块接收所述预过滤阈值。
11.在一些实施例中,所述预过滤阈值是所述最值存储模块中存储的k个最值中的最小值或最大值。
12.在一些实施例中,所述最值存储模块还包括多个最值使能寄存器,每个所述最值使能寄存器分别关联于一个存储区域,并用于存储使能标志位,其中所述使能标志位用于表示所述存储区域中存储的最值是否有效。
13.在一些实施例中,所述最值存储模块还包括阈值寄存器,所述阈值寄存器用于存储所述最值存储模块中存储的k个最值中的最大值或最小值。
14.在一些实施例中,所述最值存储模块还包括多个阈值寄存器,每个所述阈值寄存器分别关联于一个存储区域,用于存储所述存储区域中存储的最值中的最大值或最小值。
15.在一些实施例中,所述多个存储区域分别具有对应的区域存储地址,并且所述区域存储地址是依序排列的。
16.在一些实施例中,所述多个存储区域中分别存储的最值是依序排列的。
17.在一些实施例中,每个存储区域中存储的最值是依序排列的。
18.在一些实施例中,所述控制模块包括:流控制器,用于从输出队列选择输出序列或从循环队列中选择中间序列,并且所述流控制器在所述循环队列中存储有所述中间序列时优先选择所述中间序列。
19.在一些实施例中,所述流控制器还用于确定所述中间序列或所述输出序列的最大值或最小值,并且将所述最大值或最小值提供给所述最值存储模块以用于选择所述最值存储模块中的一个存储区域。
20.在一些实施例中,所述最值存储模块还包括多个阈值寄存器,每个所述阈值寄存器分别关联于一个存储区域,用于存储所述存储区域中存储的最值中的最大值或最小值;所述最值存储模块还用于将所述流控制器提供的所述最大值或最小值与所述多个阈值寄存器中分别存储的每个存储区域的最值中的最大值或最小值进行比较,以确定待处理的一个存储区域。
21.在一些实施例中,所述控制模块还包括:排序调度器,用于控制从所述最值存储模块中选择一个存储区域,在所述存储区域中存储的最值被选择来生成所述合并序列后,所述第一子序列随后被提供给所述存储区域以更新其中存储的最值。
22.在一些实施例中,所述控制模块还包括:合并模块,用于将所述输出序列或所述中间序列与最值存储模块中的一个存储区域中存储的最值进行合并及排序处理,以生成所述合并序列。
23.在一些实施例中,所述合并模块采用双调合并排序算法。
24.在一些实施例中,所述控制模块包括多对标志位寄存器和地址寄存器,每对标志
位寄存器和地址寄存器用于标记所述控制模块中的一个数据处理级正在处理的数据的信息。
25.在一些实施例中,所述控制模块还包括:冲突检查模块,用于比较不同数据处理级正在处理的数据的信息,并根据比较结果确定是否发生冲突。
26.在本技术的另一方面,还提供了一种用于从原始数据中选择k个最值的方法,所述方法包括:分批地接收并存储经排序的输出序列,所述输出序列包括至多n个输出,其中n是正整数;选择最值存储模块中的一个存储区域中存储的至多n个最值;将所述输出序列与所述存储区域中的至多n个最值合并,并对合并后的数据进行排序处理以生成合并序列;将所述合并序列中相对靠近最值方向的第一子序列提供给所述最值存储模块以更新所述最值存储模块,以及将相对远离最值方向的第二子序列提供给循环队列以生成中间序列;以及至少一次循环地执行下述操作以更新所述最值存储模块,直至所述最值存储模块中的预定数量个存储区域被遍历:读取所述循环队列中的所述中间序列;选择最值存储模块中的一个存储区域中存储的至多n个最值;将所述中间序列与所述存储区域中的至多n个最值合并,并对合并后的数据进行排序处理以生成合并序列;以及将所述合并序列中相对靠近最值方向的第一子序列提供给所述最值存储模块以更新所述最值存储模块,以及将相对远离最值方向的第二子序列提供给循环队列以更新所述中间序列。
27.以上为本技术的概述,可能有简化、概括和省略细节的情况,因此本领域的技术人员应该认识到,该部分仅是示例说明性的,而不旨在以任何方式限定本技术范围。本概述部分既非旨在确定所要求保护主题的关键特征或必要特征,也非旨在用作为确定所要求保护主题的范围的辅助手段。
附图说明
28.通过下面说明书和所附的权利要求书并与附图结合,将会更加充分地清楚理解本技术内容的上述和其他特征。可以理解,这些附图仅描绘了本技术内容的若干实施方式,因此不应认为是对本技术内容范围的限定。通过采用附图,本技术内容将会得到更加明确和详细地说明。
29.图1示出了根据本技术一个实施例的用于选择最值的装置;
30.图2示出了图1所示的最值存储模块的一个示例性实施方式;
31.图3示出了根据本技术一个实施例的控制模块所使用的控制逻辑;
32.图4示出了根据本技术一个实施例的用于选择最值的方法。
具体实施方式
33.在下面的详细描述中,参考了构成其一部分的附图。在附图中,类似的符号通常表示类似的组成部分,除非上下文另有说明。详细描述、附图和权利要求书中描述的说明性实施方式并非旨在限定。在不偏离本技术的主题的精神或范围的情况下,可以采用其他实施方式,并且可以做出其他变化。可以理解,可以对本技术中一般性描述的、在附图中图解说明的本技术内容的各个方面进行多种不同构成的配置、替换、组合,设计,而所有这些都明确地构成本技术内容的一部分。
34.图1示出了根据本技术一个实施例的用于选择最值的装置100。在一些实施例中,
该装置可以用于从包括多个原始数据的原始数据集中接收原始数据,并从所接收的原始数据中选择多个最值,例如选择k个最值。取决于排序和选择的最值方向,该k个最值可以是k个最小值或者k个最大值。在一些实施例中,原始数据集中包括的原始数据的数量可能相对较大,因此该装置100可以分批地接收原始数据,并且分批地对这些原始数据进行处理。在下文中,以处理一个批次的原始数据来说明装置100的运行过程,但是本领域技术人员可以理解多个批次处理原始数据可以以类似方式重复地进行。
35.如图1所示,该装置100包括输入队列101,其用于分批地接收原始数据,其中该原始数据可以是存储在装置100外部的数据库或其他存储器中。输入队列101可以具有预定大小的存储空间,例如可以存储n个原始数据,其中n是正整数。相应地,输入队列101每个批次可以接收的原始数据的数量可以不超过该预定大小,例如等于n。在一些实施例中,装置100还可以包括位于输入队列101前级的预过滤器103,其用于接收预过滤阈值,并且将从外部接收的原始数据与该预过滤阈值进行比较。取决于待选择的最值方向,预过滤器103可以用于筛除比预过滤阈值大的原始数据(例如,当装置100将要选择的最值是最小值时),也可以用于筛除比预过滤阈值小的原始数据(例如,当装置100将要选择的最值是最大值时)。可以理解,在采用预过滤器103的例子中,在一些情况下,装置100可以每批次接收例如n个原始数据,并且对这n个原始数据进行筛选,因而实际提供给输入队列101的原始数据的数量有可能少于n或者等于n。在提供给输入队列101的原始数据的数量少于n的情况下,装置100可以继续向输入队列101中存储输入数据(同样经预过滤器103筛除),直至输入队列101中存储的原始数据的数量达到预定数量n个。在下面的实施例中,均以输入队列101中存储了n个原始数据后再将其转送至后续处理模块并进行一个批次的处理为例进行说明;但是本领域技术人员可以理解,当输入队列101中存储的一批次的原始数据的数量少于n个时,根据本技术实施例的用于选择最值的装置可以类似地进行处理。例如,输入队列101中可以增加预设的数值来将每批次处理的数据(包括原始数据)保持为n个。
36.装置100还包括排序模块108,其耦接到输入队列101,用于按批次地从输入队列101接收n个数据。在一些实施例中,可以通过读取模块106来控制从输入队列101接收n个数据。例如,读取模块106可以定期地查询输入队列101中的数据存储情况,并且在输入队列101中存储了n个数据后,从输入队列101中读取这些数据,并且将其发送至排序模块108。这样,排序模块108可以进一步地对自输入队列101中读取的数据进行排序,例如进行单调排序,排序后的数据即构成输出序列。根据具体实施例的不同,输出序列可以是单调递增序列或单调递减序列。在一些实施例中,排序模块108可以采用双调排序(bitonic sort)算法实现,或者也可以采用其他适合的排序算法。在一些实施例中,当读取模块106读取的数据数量不足n个时,读取模块106可以补足n个数据,并将这n个数据作为输出序列。可以理解,被补入的数据可以例如等于预过滤器103接收的预过滤阈值。
37.排序模块108生成的输出序列可以被发送至输出队列109。输出队列109耦接在排序模块108的后级,用于存储输出序列以供后级电路处理时调用。在一些实施例中,装置100可以包括控制模块105,其用于控制从输出队列109调取输出序列。关于控制模块105的功能和组成,将在下文中进一步说明。
38.在按批次地接收原始数据的同时,为了对累计接收的数据进行排序,装置100还包括最值存储模块104。最值存储模块104可以耦接到控制模块105,以在其控制下对累计接收
的数据中的多个最值进行存储和更新。可以理解,当从多个原始数据中选择k个最值时(k是正整数),最值存储模块104可以存储k个最值,其中这k个最值可以是k个最大值或最小值(取决于最值方向)。如前所述,在本技术中,将以从原始数据中选择k个最小值为例进行说明。本领域技术人员可以理解,从多个原始数据中选择k个最大值的处理可以类似地进行,在此不再赘述。
39.正如之前提到的,在一些实施例中,预过滤器103可以接收用于预筛选原始数据的预过滤阈值。在一些实施例中,由于最值存储模块104存储有k个最值,因此预过滤器103可以耦接到该最值存储模块104,并且从其接收k个最小值中的最大值(或者k个最大值中的最小值,取决于最值方向),以将其作为预过滤阈值。这样,在排序处理过程中,比最值存储模块104中存储的k个最小值还大的原始数据就不会进入输出队列,也不会被进行后续处理,这可以提高排序处理的效率。
40.具体地,仍参考图1,最值存储模块104包括多个存储区域,其中每个存储区域用于存储一部分最值。例如,每个存储区域可以用行(row)来表示,分别是第一行,第二行,
……
,直至第m行(在本实施例中,第m行是最值存储模块104的最后一行)。每行存储区域可以用来存储k个最值中的至多n个最值,也即m x n=k。在实际操作过程中,每行存储区域可以存储n个最值,即每行的存储空间均被用于存储最值;在一些情况中,最值存储模块104在初始化阶段或当m x n《k时,每行也可以存储少于n个最值,即每行的存储空间并未全部用于存储最值。在一些实施例中,每行存储区域中存储的最值的数量可以是相等的,在另一些实施例中,每行存储区域中存储的最值的数量也可以是不相等的(可能在实际运行过程的某一些阶段中)。优选地,在一些情况下,最值存储模块104可以对未完全占用的存储区域设置默认值,以将每行存储区域中存储的最值数量调整为相等。在下面的示例中,以每行存储区域中存储n个最值为例进行说明,但本技术并非限制于此。
41.在一些实施例中,最值存储模块104中每一行存储区域中存储的n个最值可以按照数值从小到大依次递增排列,或者从大到小递减排列。通常而言,每一行存储区域中的存储单元以其地址进行索引,因此在依序排列的情况下,一行存储区域中n个最值的排序顺序与这行中存储单元的地址的变化顺序相同或相反。优选地,最值的排序顺序可以与存储单元的地址变化顺序相同,这有助于对最值进行寻址。
42.此外,由于最值存储模块104包括多个行,因此每一行可以具有其对应的行地址(row_addr),用于区分最值存储模块104的不同行。行地址例如是该行中第一个存储单元的存储地址,或者是第一个存储单元的存储地址的前几位(这些位是该行中所有存储单元的公共位)。在一些实施例中,每一行的行地址可以按照第一行到最后一行依次递增,即最后一行的行地址大于其他行的行地址。
43.由于最值存储模块104具有多行相同的存储区域,因此,在一些优选的实施例中,这些存储区域中的一部分或全部可以被进行配置为有效,而剩余的存储区域则被禁用。这样,最值存储模块104中存储的最值的数量可以调整,以符合最值选取的实际要求。例如,当最值存储模块104包括16行存储区域,而每行存储区域可以存储8个最值时,如果要在原始数据中选择32个最值,则仅需要使得最值存储模块104中的4行存储区域有效,其他12行存储区域可以被禁用;类似地,如果要在原始数据中选择64个最值,则仅需要使得最值存储模块104中的8行存储区域有效。可以看出,最值的数量可以被适应性地配置,这大大提高了最
值选择的灵活性。
44.在一些实施例中,为了逐行地使能或禁用存储区域,最值存储模块104还可以包括多个最值使能寄存器107,其中每个最值使能寄存器107对应于一行存储区域,其用于存储使能标志位(data_valid),而该使能标志位表示该行存储区域中存储的最值是否有效,也即该行存储区域是否可以用于存储最值。在一些例子中,data_valid=1表示该行最值有效;相反,data_valid=0表示该行最值无效。例如,最值存储模块104的第一行的最值使能寄存器107中存储的标志位data_valid=1,就表示第一行中存储的最值有效。在一些实施例中,最值使能寄存器107可以是单比特寄存器。再例如,在最值计算过程中,当每批次的输入原始数据被与最值存储模块104中的某行中存储的最值比较后,可以将该行的标志位暂时地设置为无效(说明该行已进行了比较),从而使得输入数据仅会继续与其他行中存储的最值进行比较。关于最值使能寄存器107的操作和控制逻辑,将在下文中进一步说明。
45.正如前述,最值存储模块104可以向预过滤器103提供其中存储的所有最值中的最大值或最小值(阈值)。相应地,最值存储模块104可以包括阈值寄存器,用以存储所有最值中的最大值或最小值。在一些实施例中,当最值存储模块104不可配置时,仅需要提供一个阈值寄存器来存储最大值或最小值就可以了。然而,当最值存储模块104可以被配置为使能一部分存储区域时,为了提高灵活性,最值存储模块104可以包括多个阈值寄存器,其中每个阈值寄存器对应于一行存储区域,以分别地存储每一行中存储的至多n个最值中的最大值(或者最小值,取决于k个最值的最值方向)。这样,无论有几行存储区域被使能,最值存储模块104均可以包括存储了这些存储区域中存储的最值中的最大值或最小值的阈值寄存器,这进一步提高了装置100的灵活性。
46.图2示出了图1所示的最值存储模块104的一个示例性实现方式。如图2所示,该最值存储模块104包括多行存储区域,其中每行存储区域中可以依序存储n个最值。优选地,沿列方向,这些存储区域中存储的最值也是依序存储的。图2中的方向箭头指示出了这些最值的排序方向。在一些实施例中,这些存储区域可以由随机存取存储器或类似的存储介质实现。此外,最值存储模块104还包括多个最值使能寄存器和阈值寄存器,其可以由不同于随机存取存储器的存储介质来实现。
47.仍参考图1,在一些实施例中,最值存储模块104可以是双端口存储器。双端口存储器可以包括两组相互独立的读/写控制线路,从而可以对最值存储模块104进行并行地读取和写入操作,这对于实现提高数据处理能力是有利的。
48.需要说明的是,在最值存储模块104重置后或者从原始数据中选择k个最值的任务开始前,最值存储模块104可以被初始化以在其中写入k个最值。优选地,最值存储模块104中初始化写入的k个最值可以是最值存储模块104每个存储单元支持的数据类型的最大值。
49.继续参考图1,除了控制对输出序列的读取之外,控制模块105还用于控制对最值存储模块104以及输出队列109输出的一批次原始数据进行排序,并更新最值存储模块104中存储的最值。
50.具体地,控制模块105可以耦接到输出队列109以接收输出序列。此外,控制模块105还可以耦接到循环队列111。其中,循环队列111用于存储中间序列,该中间序列可以是最值计算过程中的一个数据序列。取决于每批次原始数据输入后的最值计算的过程,该中间序列可以包括输出序列中的一部分数值,和/或最值存储模块104中存储的一部分最值。
在实际计算过程中,由于最值存储模块104中存储的是之前已排序并被选出的k个最值,而输出队列109所提供的是未与之前的k个最值一起排序的原始数据,因此,随着最值计算的进行,最值存储模块104中存储的一个或多个最值有可能被输出序列中的一个或多个原始数据所取代,直至最值存储模块104与输出队列109共同包括的所有数据中的k个最值被选取出来,并被存储在最值存储模块104中。因此,循环队列111中会存储未被替换地存储在最值存储模块104中的数据,其构成了中间序列。在一些实施例中,控制模块105可以以多次循环来对最值与原始数据进行排序,因此在实际操作过程中,可以多次地生成中间序列,这将在下文中详细说明。
51.正如前述,由于需要合并最值存储模块104与输出队列109共同包括的数据,并计算其中的k个最值,因此控制模块105中设置有合并模块110。合并模块110用于对控制模块105选择的输出序列或中间序列以及最值存储模块104中某一行存储区域中存储的n个数据进行合并运算。在一些实施例中,该合并运算可以是双调合并(bitonic merge)排序运算,或者任何其他适合的合并排序运算。双调合并排序运算的一个优点在于其是以流水线方式实现的。
52.在一些实施例中,控制模块105可以包括流控制(flow_ctrl)器112。具体地,流控制器112可用于从输出队列109选择输出序列或从循环队列111中选择中间序列。在一些例子中,循环队列111的中间序列的优先级高于输出队列109的输出序列,即如果循环队列111中存在可用的中间序列时,流控制器112就会优先选择循环队列111中存储的中间序列。可以理解,当循环队列111中不存在可用的中间序列时,例如输出队列109中的输出序列刚被创建好并等待读取时,流控制器112可以向输出队列109发出数据读取指令,以从中读取输出序列。
53.正如前述,在一些实施例中,最值存储模块104中存储的k个最值是依序排列的,依序排列的最值有利于检索。例如,流控制器112可以将读取出的输出序列或中间序列中的最小值发送给最值存储模块104,从而最值存储模块104可以将该最小值与其各行存储区域中存储的最值中的最大值进行比较。这样,如果该最小值大于一行存储区域中最值的最大值,这意味着中间序列或输出序列的所有数据均大于该行存储区域中的最值,在选取的最值方向是最小值的情况下,中间序列或输出序列与该行存储区域中的最值进行合并和排序是没有意义的;而如果该最小值小于一行存储区域中最值的最大值,这意味着中间序列或输出序列的至少一个数据小于该行存储区域中的至少一个最值,在选取的最值方向是最小值的情况下,中间序列或输出序列中的至少一个数据应当替换该行存储区域中的至少一个最值,因而中间序列或输出序列与该行存储区域中的最值进行合并和排序是必要的。可以看出,通过流控制器112向最值存储模块104发送输出序列或中间序列的最小值,最值存储模块104可以被快速地寻址,以确定哪一行存储区域应当被读取。
54.控制模块105还可以包括排序调度器113,其耦接到最值存储模块104,用于控制从最值存储模块104中选择某一行存储区域中的最值。换言之,在进行最值计算时,最值存储模块104中的一部分最值(例如一行最值)与中间序列或输出序列合并,而排序调度器113即用于选择哪一行数据被用于合并。正如前述,最值存储模块104确定哪一行存储区域应当被读取时,排序调度器113可以向该最值存储模块104发送读取指令,以将相应行存储区域中的最值读取出来。可以理解,在一些实施例中,排序调度器113也可以控制以依次读取最值
存储模块104中的每一行。排序调度器113的更多功能将在下文中详述。
55.在一些实施例中,控制模块优先选择循环队列111中存储的中间序列进行处理,在循环队列中不存在中间序列时选择输出队列109的输出序列进行处理。具体而言,流控制器112优先选择循环队列111中存储的中间序列,并由排序调度器113根据所确定的最值存储模块104中的某一行存储区域来读取该行存储区域中的最值。合并模块110可以将中间序列与最值存储模块104的第i行的n个最值进行双调合并排序,以生成包括2n个数据的合并序列,其中,2≤i≤m(最后一行),i是正整数。可以理解,由于最值存储模块104可以包括多行存储区域,因此控制模块105可以多次地执行数据和最值读取的操作。在不存在中间序列时,流控制器112可以选择读取输出队列109的输出序列,同时排序调度器113可以选择读取最值存储模块104中第一行的最值,或者读取其他行的最值(在通过输出序列的最小值进行寻址的情况下)。这样,合并模块110可以将流控制器112选择的输出序列的n个原始数据与最值存储模块104中某一行的n个最值进行双调合并排序运算,以生成包括2n个数据的合并序列。
56.双调合并排序运算后得到的合并序列是一组单调序列,例如单调递增序列或单调递减序列。控制模块105可以将合并序列分成两组子序列,其中,两组子序列包括的数据数量相等,其中相对靠近最小值方向的子序列定义为第一子序列(包括n个数据),相对远离最小值方向的子序列定义为第二子序列(包括n个数据)。可以理解,第二子序列的数值均大于第一子序列的数值。
57.在双调合并排序后,在当前读取的最值存储模块104中的一行存储区域不是最值存储模块104的最后一行时,控制模块105可以指示合并模块110将第二子序列发送给循环队列111并存储在其中作为中间序列,这样,该中间序列可以在等待下一次合并运算时调用。同时,控制模块105还可以指示合并模块110将第一子序列发送给最值存储模块104,并将其存储在当前读取的那一行存储区域中,也即该行存储区域中存储的最值被更新了。经过这样的处理后,输出序列或原中间序列中小于某一行存储区域中一部分最值的原始数据会被替换到该行存储区域中。类似地,经过多次处理后,输出序列中所有较小的原始数据均会替换最值存储模块104中相对较大的那些最值,从而实现“局部”最值选择。以此方式,当所有批次的原始数据都被读取并处理后,原始数据中k个最值就可以被确定并存储在最值存储模块104中。
58.在当前读取的最值存储模块104中的一行存储区域是最值存储模块104的最后一行时,控制模块105可以指示合并模块110将第一子序列发送给最值存储模块104,并将其存储在当前读取的那一行存储区域中,即该行存储区域中存储的最值被更新。但是,此时合并模块110中的第二子序列是遍历所有行存储区域最值后遗留的最大的一批数据,这些数据可以被丢弃。因此,在这种情况下,控制模块105不再需要将第二子序列发送给循环队列111,而是可以直接将其丢弃掉。在一些实施例中,控制模块105可以根据使能标志位来确定是否丢弃数据。例如,当使能标志位有效时,控制模块105可以指示将第二子序列写回到循环队列中;而当使能标志位无效时,控制模块105可以指示将第二子序列丢弃。
59.在一些实施例中,控制模块105会通过一些控制逻辑来避免数据冲突引起系统出错的风险,例如避免多行存储区域中存储的2组最值同时被合并的情况出现。图3示出了根据本技术一个实施例的控制模块所使用的控制逻辑。可以理解,图3所示的控制模块305可
以被应用于图1所示的装置100中。
60.如图3所示,控制模块305包括流控制器312和排序调度器313。其中,为了避免数据之间的冲突,流控制器312具有用于存储使能标志位的标志位寄存器321和用于存储最值地址的地址寄存器322,而排序调度器313也具有用于存储使能标志位的标志位寄存器331和用于存储最值地址的地址寄存器332。这样,在流控制器312或排序调度器313处理某行最值时,其各自的标志位寄存器和地址寄存器会存储该行最值对应的使能标志位和(在最值存储模块中的)行地址。
61.类似地,合并模块310也可以具有标志位寄存器341和地址寄存器342,用于存储该合并模块310中正在处理的数据的使能标志位和行地址。需要说明的是,在一些实施例中,合并模块310可以采用双调合并排序算法或类似的流水线方式排序的合并/排序算法,因此合并模块310内部可以具有多个处理级,而每个处理级可以具有分别的标志位寄存器和地址寄存器,以标记该处理级中数据的相关信息。例如,图3中示出了合并模块310具有6个处理级,因而标志位寄存器341和地址寄存器342分别具有6个子单元。
62.在操作中,当控制模块305准备从最值存储模块304读取最值时,其先经由多路复用器351从输出队列309或循环队列311读取输出序列或中间序列。在确定读取出序列中的最小值后,流控制器312将该最小值提供给最值存储模块304,进而由最值存储模块304基于该最小值查找匹配的一行存储区域,其中该行存储区域中存储的所有最值中的最大值应大于该最小值。之后,流控制器312将该行存储区域的使能标志位和行地址分别存储在标志位寄存器321和地址寄存器322中。随后,排序调度器313从流控制器312接收该行存储区域的使能标志位和行地址并将其分别存储在标志位寄存器331和地址寄存器332中。同时,排序调度器313还基于该行地址从最值存储模块304读取该行存储区域中的最值,以及中间序列或输出序列。随后,这些最值和序列将被提供给合并模块310,以由其进行合并和排序处理,与此同时,相应的使能标志位和行地址也被发送到标志位寄存器341和地址寄存器342并存储在其中。
63.在一些实施例中,在合并模块310完成合并与排序处理之后,其可以检查当前处理数据对应的使能标志位。在确定该使能标志位有效时,合并模块310可以将第二子序列发送回循环队列311;相反,在确定该使能标志位无效时,合并模块310可以将第二子序列丢弃。另一方面,根据地址寄存器342中存储的行地址,合并模块310可以将第一子序列发送回最值存储模块304对应的存储区域中,从而实现该行存储区域中最值的更新。可以理解,使能标志位是否有效不影响对存储区域中最值的更新。
64.基于标志位寄存器321和地址寄存器322、标志位寄存器331和地址寄存器332和标志位寄存器341和地址寄存器342中存储的使能标记位和行地址,控制模块305还提供了冲突检查模块361来进行冲突检查。具体地,冲突检查模块361可以将标志位寄存器321和地址寄存器322中存储的使能标记位及行地址分别与标志位寄存器331和地址寄存器332、标志位寄存器341和地址寄存器342中存储的使能标记位和行地址进行比较:如果这些行地址是相同的,则控制模块305不会将流控制器312中的数据写入到排序调度器313中,这是因为相同的数据已经被发送给排序调度器313。以这样的方式,最值存储模块304中不同行存储区域中存储的最值并不会发生写入或处理冲突。而如果这些行地址是不同的,这说明流控制器312已经读取新的数据,那么控制模块305可以将流控制器312中的数据写入到排序调度
器313中,以进一步地通过合并模块310进行合并和排序处理。可以理解,由于流控制器312中行地址的更新是响应于循环队列311中数据的更新而更新的,因此流控制器312并不会频繁地更新其中的行地址,而仅仅会按照流水线处理的方式一级一级地更新。
65.图4示出了根据本技术一个实施例的用于选择最值的方法400。为了方便描述,下文将结合图1所示的装置100描述方法400,但本领域技术人员可以理解,方法400也可以由其他装置执行。另外,为了方便描述的目的,在下文中,将某一批次的输入序列中的n个数值描述为a1,a2,a3……an
,而最值存储模块104用于存储k个最小值,并且最值存储模块104包括m行(第m行为最后一行)存储区域,每行存储n个数值,其中,k=m*n,m、n均是正整数。基于上述说明,第一行的数据被描述为b
11
,b
12
,b
13
……b1n
,第二行的数据被描述为包括b
21
,b
22
,b
23
……b2n
,直至第m行的数据被描述为包括b
m1
,b
m2
,b
m3
……bmn
,并且,由于最值存储模块104中的k个最小值是依序排列的,因此b
mn
是最值存储模块104中的最大值,其可以作为预过滤阈值。
66.如图4所示,方法400起始于步骤402,装置100从存储在数据库或其他存储器中的原始数据集接收一批次的n个原始数据。
67.在步骤404,采用预过滤器103对从原始数据集接收的n个原始数据进行筛选。具体地,可以将这一批次的n个原始数据中的每一个数据都与最值存储模块104提供的预过滤阈值进行比较。在步骤406中,如果n个原始数据中的每个数据均大于预过滤阈值,则该n个数据将会被丢弃。如果n个原始数据中存在数据小于或等于预过滤阈值,则输入队列101可以接收这n个原始数据以进行后续处理。在一些情况中,如果接收的原始数据不足n个,则装置100自动填充最值存储模块104的最大值(例如,浮点数的0xfffffff),直至输入队列101中接收了n个原始数据。这样,输入队列101接收并存储了经过预过滤的n个原始数据,形成了输入序列(a1,a2,a3……an
)。
68.在步骤408中,排序模块108读取输入队列101的输入序列(a1,a2,a3……an
),并对输入序列(a1,a2,a3……an
)进行排序。在一些实施例中,可以使用双调排序算法对输入序列(a1,a2,a3……an
)进行排序。其中,双调排序算法是使用双调序列生成排序的数组的并行排序算法,本领域技术人员可以理解,排序模块108也可以采用其他算法来对输入序列进行排序。经过并行排序算法得到序列(a1’
,a2’
,a3’……an’),该序列是单调递增序列或单调递减序列。在步骤410中,输出队列109接收并存储此序列,形成输出序列(a1’
,a2’
,a3’……an’)。
69.之后,方法400继续步骤412,控制模块105开始对最值存储模块104中存储的最值进行更新。在步骤414中,由于循环队列111具有较高的优先级,因此控制模块105可以检测循环队列111中是否具有数据。如果循环队列111中没有数据,那么控制模块105处理输出队列中的输出序列:在步骤416中,控制模块105指示读取输出队列109中存储的输出序列。相反,如果循环队列111中有数据,那么控制模块105优先处理循环队列111中的中间序列:在步骤418中,控制模块105指示读取循环队列111中存储的数据,即中间序列。
70.在步骤420中,控制模块105还读取最值存储模块104中存储的最值。关于最值存储模块104中最值的读取步骤,可以参见本技术中关于图1的实施例的相关描述。
71.在步骤422中,合并模块110可以将输出序列或中间序列和n个最值进行合并和排序。以输出序列为例,合并模块110对输出序列(a1’
,a2’
,a3’……an’)和存储在最值存储模块104第一行的n个数据(b
11
,b
12
,b
13
……b1n
)进行合并排序。可以使用双调排序算法
(bitonic sort)对两个单调序列进行排序,经过双调合并排序运算得到合并序列(c1,c2,c3……cn
,c
n 1
……c2n
),合并序列是单调递增序列或单调递减序列,并将生成的合并序列分为两组子序列,其中,两组子序列包括的数据数量相等,将相对靠近最小值方向子序列定义为第一子序列(c1,c2,c3……cn
),将相对远离最小值方向的子序列定义为第二子序列(c
n 1
,c
n 2
,c
n 3
……c2n
)。
72.接着,在步骤424中,控制模块105可以判断是否遍历完最值存储模块104中所有有效的最值存储区域。如果未遍历完,在步骤426中,控制模块105可以用第一子序列和第二子序列来分别更新最值存储模块104和循环队列111,并且随后回到步骤412。相反,如果在步骤424中确定已经遍历完所有有效的最值存储区域,那么方法400继续步骤430,控制模块105用第一子序列更新最值存储模块104,并且丢弃第二子序列。随后,在步骤432,控制模块105判断是否处理完所有原始数据。如果没有,则回到步骤402,开始接收新一批次的原始数据;如果已经处理完,则方法400结束。
73.应当注意,尽管在上文详细描述中提及了用于从原始数据中选择k个最值的装置或方法的若干模块或子模块、步骤或子步骤,但是这种划分仅仅是示例性的而非强制性的。实际上,根据本技术的实施例,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
74.本技术领域的一般技术人员可以通过研究说明书、公开的内容及附图和所附的权利要求书,理解和实施对披露的实施方式的其他改变。在权利要求中,措词“包括”不排除其他的元素和步骤,并且措辞“一”、“一个”不排除复数。在本技术的实际应用中,一个零件可能执行权利要求中所引用的多个技术特征的功能。权利要求中的任何附图标记不应理解为对范围的限制。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表