CN111124356A - 从n个m位数的集合中选择第i大或第p小的数 - Google Patents
从n个m位数的集合中选择第i大或第p小的数 Download PDFInfo
- Publication number
- CN111124356A CN111124356A CN201911038456.6A CN201911038456A CN111124356A CN 111124356 A CN111124356 A CN 111124356A CN 201911038456 A CN201911038456 A CN 201911038456A CN 111124356 A CN111124356 A CN 111124356A
- Authority
- CN
- China
- Prior art keywords
- bit
- determining
- bits
- numbers
- value
- 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.)
- Pending
Links
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/02—Comparing digital values
- G06F7/026—Magnitude comparison, i.e. determining the relative order of operands based on their numerical value, e.g. window comparator
-
- 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/02—Comparing digital values
-
- 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/06—Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
-
- 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
-
- 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/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
-
- 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/76—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
- G06F7/78—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/22—Indexing scheme relating to groups G06F7/22 - G06F7/36
- G06F2207/222—Binary data tree
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/22—Indexing scheme relating to groups G06F7/22 - G06F7/36
- G06F2207/226—Priority queue, i.e. 1 word in, 1 word out sorter; Output word, i.e. min or max of words in memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Complex Calculations (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Logic Circuits (AREA)
- Executing Machine-Instructions (AREA)
Abstract
描述了一种在硬件逻辑中从n个m位数的集合中选择第i大或第p小的数的方法。所述方法迭代地执行,并且在第r次迭代中,所述方法包括:对来自所述m位数中的每一个的第(m‑r)个位求和以生成求和结果;以及将所述求和结果与阈值进行比较。依据所述比较的结果,确定和输出选定数的所述第(m‑r)个位,并且另外,基于所述比较的所述结果和所述m位数中的所述第(m‑r)个位的值选择性地更新所述m位数中的每一个的第(m‑r‑1)个位。在第一次迭代中,对来自所述m位数中的每一个的最高有效位求和,并且每次后续迭代对在自己的相应数中占据连续位位置的位求和。
Description
技术领域
背景技术
有许多情形要求硬件对两个或更多个输入二进制数排序,即,按大小顺序对它们排列。此类排序器通常由如图1所示的多个相同逻辑块构成。图1示出实例硬件布置100的示意图,实例硬件布置100用于按大小顺序对4个输入x1,x2,x3,x4排序,即,使得output1≥output2≥output3≥output4。可以看出,这个排序器100包括5个相同逻辑块102,每个逻辑块102输出两个输入(其可以被表示为a和b)的最大(largest)和最小(smallest)(即,最大(max)和最小(min))值。
每个逻辑块102接收两个n位整数输入(a,b),并包括返回指示是否a>b的布尔的比较器。接着,使用可以被称作‘选择’信号的比较器输出来控制多个n位宽复用器,每个复用器在来自a的n位或来自b的n位之间进行选择。如果逻辑块102输出最大和最小值(来自a和b,如图1中的实例中所示),那么使用选择信号来控制2n位(例如呈2n个1位宽复用器或两个n位宽复用器的形式)的复用。替代地,如果逻辑块仅具有一个输出(其是a和b的最大值或最小值),那么使用选择信号来控制n位(例如呈n个1位宽复用器或一个n位宽复用器的形式)的复用。
在上文所描述的布置中,选择信号用于为逻辑块102内的多个逻辑元件(例如逻辑门)供电,这导致了较大传播延迟。此延迟效应是由必须在大量门中为晶体管充电(在这些后面的门可以传播它们的输出之前)的单个门输出电线造成,并可以被称作‘扇出(fanout)’。尽管在仅对两个输入数排序时此延迟可以是可接受的,其中这些逻辑块102级联(例如,如在图1所示的排序器100或用于超过4个输入的较大排序器中),但排序电路的所得延迟会增加,这可能会严重地影响性能(例如,它可能会导致排序过程耗费超过一个时钟周期)。
对此延迟的解决方案是包含大量缓冲器(例如可以被布置成树状结构的至少n个缓冲器),其中每个缓冲器由选择信号驱动;然而,这会产生显著较大(例如在逻辑面积方面)的硬件布置。
下文所描述的实施例是仅作为实例被提供,并且不限制实施方案,所述实施方案解决了用于对数排序和/或基于数在数集合中的有序位置而从这个集合中选择这个数的已知硬件和方法的任一个或全部缺点。
发明内容
提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不希望指明所要求保护的主题的关键特征或必要特征,也不希望用于限制所要求保护的主题的范围。
描述了一种在硬件逻辑中从n个m位数的集合中选择第i大或第p小的数的方法。所述方法迭代地执行,并且在第r次迭代中,其中r介于1和m之间,所述方法包括:对来自m位数中的每一个的第(m-r)个位求和以生成求和结果,其中第(m-1)个位是最高有效位;以及将求和结果与阈值进行比较。依据比较的结果,确定和输出选定数的第(m-r)个位,并且另外,基于比较的结果和m位数中的第(m-r)个位的值选择性地更新m位数中的每一个的第(m-r-1)个位。在第一次迭代中,r=1,并且对来自m位数中的每一个的最高有效位求和并输出选定数的最高有效位。每次后续迭代对还要求和的数的最高有效位求和并输出选定数的下一个位,这些最高有效位是在它们的相应数中占据连续位位置的位(在位置m-2中r=2个位,在位置m-3中r=3个位等等)。此方法的实例还输出第i大或第p小的数的索引。
第一方面提供一种在硬件逻辑中从n个m位数的集合中选择数的方法,其中选定数是来自n个m位数的集合的第i大或第p小的数,其中i、p、m和n是整数,所述方法包括多次迭代,并且迭代中的每一次包括:对来自m位数中的每一个的位求和以生成求和结果,其中被求和的所有位在它们的相应数内占据相同位位置;将求和结果与阈值进行比较,其中阈值是基于i或p计算的;基于比较的结果设置选定数的位;以及针对m位数中的每一个,基于比较的结果和来自m位数的位的值选择性地更新m位数中占据下一个位位置的位,其中在第一次迭代中,对来自m位数中的每一个的最高有效位求和并设置选定数的最高有效位,并且每次后续迭代对在自己的相应数中占据连续位位置的位求和并设置选定数的下一个位,并且其中所述方法包括输出指示选定数的数据。
输出指示选定数的数据可以包括:输出选定数;或输出选定数在n个m位数内的位置的指示。
基于比较的结果设置选定数的位可以包括:响应于确定求和结果超过阈值,将选定数的位设置为一;以及响应于确定求和结果小于阈值,将选定数的位设置为零。
在第r次迭代中,对来自m位数中的每一个的位求和以生成求和结果可以包括对来自m位数中的每一个的具有位索引m-r的位求和以生成求和结果,其中每个位是来自m位数中的一个的原始位或来自前一次迭代的更新位。
选定数可以是来自n个m位数的集合的第i大的数,并且阈值可以等于i。在其它实例中,选定数可以是来自n个m位数的集合的第p小的数,并且阈值等于(n-p)或(n-p+1)。
基于比较的结果和来自m位数的位的值选择性地更新m位数中占据下一个位位置的位可以包括:基于比较的结果和来自m位数的位的值选择性地设置与m位数相关联的标志;以及基于与m位数相关联的一个或多个标志的值选择性地更新m位数中占据下一个位位置的位。
基于比较的结果和来自m位数的位的值选择性地设置与m位数相关联的标志可以包括:响应于确定求和结果超过阈值并确定位的值为零,设置与m位数相关联的最小标志;以及响应于确定求和结果小于阈值并确定位的值为一,设置与m位数相关联的最大标志,并且其中基于与m位数相关联的一个或多个标志的值选择性地更新m位数中占据下一个位位置的位包括:响应于确定与m位数相关联的最大标志被设置,将m位数中占据下一个位位置的位设置为一;响应于确定与m位数相关联的最小标志被设置,将m位数中占据下一个位位置的位设置为零;以及响应于确定与m位数相关联的最大标志和最小标志均未被设置,使m位数中占据下一个位位置的位保持不变。
基于比较的结果和来自m位数的位的值选择性地设置与m位数相关联的标志可以包括:响应于确定求和结果超过阈值并确定位的值为零,设置与m位数相关联的特定标志;以及响应于确定求和结果小于阈值并确定位的值为一,设置与m位数相关联的特定标志并将阈值更新等于求和结果的量,并且其中基于与m位数相关联的一个或多个标志的值选择性地更新m位数中占据下一个位位置的位包括:响应于确定特定标志被设置,将m位数中占据下一个位位置的位设置为预定义值;以及响应于确定与m位数相关联的特定标志未被设置,使m位数中占据下一个位位置的位保持不变。预定义值可以为零。
基于比较的结果和来自m位数的位的值选择性地设置与m位数相关联的标志可以包括:响应于确定求和结果超过阈值并确定位的值为零,设置与m位数相关联的特定标志并将阈值更新等于n减求和结果的量;以及响应于确定求和结果小于阈值并确定位的值为一,设置与m位数相关联的特定标志,并且其中基于与m位数相关联的一个或多个标志的值选择性地更新m位数中占据下一个位位置的位包括:响应于确定特定标志被设置,将m位数中占据下一个位位置的位设置为预定义值;以及响应于确定与m位数相关联的特定标志未被设置,使m位数中占据下一个位位置的位保持不变。预定义值可以为一。
所述方法可以进一步包括:确定相关联标志被设置的m位数的数目;以及响应于确定m位数中的n-1个的相关联标志被设置,输出指示相关联标志未被设置的m位数的数据。
基于比较的结果和来自m位数的位的值选择性地更新m位数中占据下一个位位置的位可以包括:响应于确定求和结果超过阈值并确定位的值为零,将m位数中的所有位更新为零;以及响应于确定求和结果不超过阈值并确定位的值为一,将m位数中的所有位更新为一。
基于比较的结果和来自m位数的位的值选择性地更新m位数中占据下一个位位置的位可以包括:响应于确定求和结果超过阈值并确定位的值为零,将m位数中的所有位更新为零;以及响应于确定求和结果不超过阈值并确定位的值为一,将m位数中的所有位更新为零并将阈值减小等于求和结果的量。
所述方法可以包括m次迭代,并且在第m次迭代中,对来自m位数中的每一个的最低有效位求和并设置选定数的最低有效位。
第二方面提供一种硬件逻辑单元,硬件逻辑单元被布置成从n个m位数的集合中选择第i大或第p小的数,其中i、p、m和n是整数,硬件逻辑单元被布置成迭代地操作并包括:求和逻辑,求和逻辑被布置成在每次迭代中对来自m位数中的每一个的位求和以生成求和结果,其中被求和的所有位在它们的相应数内占据相同位位置,使得在第一次迭代中,对来自m位数中的每一个的最高有效位求和,并且每次后续迭代对在自己的相应数中占据连续位位置的位求和;比较逻辑,比较逻辑被布置成在每次迭代中将由求和逻辑在所述迭代中生成的求和结果与阈值进行比较并基于比较的结果设置选定数的位,其中阈值是基于i或p计算的;更新逻辑,更新逻辑被布置成在每次迭代中并针对m位数中的每一个,基于在所述迭代中的比较的结果和来自m位数的位的值选择性地更新m位数中占据下一个位位置的位;以及输出,输出被布置成输出指示选定数的数据。
硬件逻辑单元可以进一步包括:标志控制逻辑,标志控制逻辑被布置成基于比较的结果和来自m位数的位的值选择性地设置与m位数相关联的标志;并且其中更新逻辑被布置成基于与m位数相关联的一个或多个标志的值选择性地更新m位数中占据下一个位位置的位。
标志控制逻辑可以包括:最小标志逻辑块,最小标志逻辑块被布置成响应于确定求和结果超过阈值并确定位的值为零,设置与m位数相关联的最小标志;以及最大标志逻辑块,最大标志逻辑块被布置成响应于确定求和结果小于阈值并确定位的值为一,设置与m位数相关联的最大标志,并且其中更新逻辑被布置成:响应于确定与m位数相关联的最大标志被设置,将m位数中占据下一个位位置的位设置为一;响应于确定与m位数相关联的最小标志被设置,将m位数中占据下一个位位置的位设置为零;以及响应于确定与m位数相关联的最大标志和最小标志均未被设置,使m位数中占据下一个位位置的位保持不变。
标志控制逻辑可以被布置成:响应于确定求和结果超过阈值并确定位的值为零,设置与m位数相关联的特定标志;以及响应于确定求和结果小于阈值并确定位的值为一,设置与m位数相关联的特定标志并将阈值更新等于求和结果的量,并且其中更新逻辑被布置成:响应于确定特定标志被设置,将m位数中占据下一个位位置的位设置为预定义值;以及响应于确定特定标志未被设置,使m位数中占据下一个位位置的位保持不变。预定义值可以为零。
标志控制逻辑可以被布置成:响应于确定求和结果超过阈值并确定位的值为零,设置与m位数相关联的特定标志并将阈值更新等于n减求和结果的量;以及响应于确定求和结果小于阈值并确定位的值为一,设置与m位数相关联的特定标志,并且其中更新逻辑被布置成:响应于确定特定标志被设置,将m位数中占据下一个位位置的位设置为预定义值;以及响应于确定特定标志未被设置,使m位数中占据下一个位位置的位保持不变。预定义值可以为一。
硬件逻辑单元可以进一步包括:提前退出硬件逻辑块,提前退出硬件逻辑块被布置成确定相关联标志被设置的m位数的数目;以及响应于确定m位数中的n-1个的相关联标志被设置,输出相关联标志未被设置的m位数作为选定数。
更新逻辑可以被布置成:响应于确定求和结果超过阈值并确定位的值为零,将m位数中的所有位更新为零;以及响应于确定求和结果不超过阈值并确定位的值为一,将m位数中的所有位更新为一。
更新逻辑可以被布置成:响应于确定求和结果超过阈值并确定位的值为零,将m位数中的所有位更新为零;以及响应于确定求和结果不超过阈值并确定位的值为一,将m位数中的所有位更新为零并将阈值减小等于求和结果的量。
第三方面提供一种硬件逻辑单元,硬件逻辑单元被配置成执行上文所描述的方法。
第四方面提供一种使用集成电路制造系统制造上文所详述的硬件逻辑单元的方法。
第五方面提供一种集成电路定义数据集,集成电路定义数据集在集成电路制造系统中被处理时将集成电路制造系统配置成制造上文所详述的硬件逻辑单元。
第六方面提供一种计算机可读存储介质,计算机可读存储介质上存储有集成电路的计算机可读描述,计算机可读描述在集成电路制造系统中被处理时使集成电路制造系统制造上文所详述的硬件逻辑单元。
第七方面提供一种集成电路制造系统,集成电路制造系统包括:计算机可读存储介质,计算机可读存储介质上存储有集成电路的计算机可读描述,计算机可读描述描述上文所详述的硬件逻辑单元;布局处理系统,布局处理系统被配置成处理集成电路描述以便生成体现硬件逻辑单元的集成电路的电路布局描述;以及集成电路生成系统,集成电路生成系统被配置成根据电路布局描述制造硬件逻辑单元。
第八方面提供一种用于生成和选择数的在硬件逻辑中实施的方法,所述方法包括:执行用于生成n个数的集合的最高有效位优先(MSB优先)迭代生成过程;在执行用于生成n个数的集合的MSB优先迭代生成过程的同时,执行用于从n个数的集合中选择第i大或第p小的数的MSB优先迭代选择过程,其中i、p和n是整数;以及响应于MSB优先迭代选择过程确定n个数的所述集合中的数中的特定数将不是选定数,在已生成所述特定数的位中的至少一个之后并在已生成所述特定数的所有位之前暂停由所述MSB优先迭代生成过程生成所述特定数,其中所述方法包括输出指示选定数的数据。
MSB优先迭代生成过程可以是坐标旋转数字计算机(CORDIC)过程或在线算术过程。
执行MSB优先迭代选择过程可以包括执行多次迭代,其中迭代中的每一次可以包括:对来自集合中的数中的每一个的位求和以生成求和结果,其中被求和的所有位在它们的相应数内占据相同位位置;将求和结果与阈值进行比较,其中阈值是基于i或p计算的;基于比较的结果设置选定数的位;以及针对集合中的数中的每一个,基于比较的结果和来自数的位的值选择性地更新数中占据下一个位位置的位。在第一次迭代中,可以对来自集合中的数中的每一个的最高有效位求和并可以设置选定数的最高有效位,并且每次后续迭代对在自己的相应数中占据连续位位置的位求和并设置选定数的下一个位。
选定数可以是来自n个数的集合的第i大的数,并且阈值等于i。在其它实例中,选定数可以是来自n个数的集合的第p小的数,并且阈值等于(n-p)或(n-p+1)。
集合中的n个数中的每一个在完全生成的情况下可以是m位数。
输出指示选定数的数据可以包括:输出选定数;或输出选定数在n个数的集合内的位置的指示。
第九方面提供一种处理单元,处理单元被配置成生成和选择数,处理单元包括:生成逻辑单元,生成逻辑单元在硬件中实施,被配置成执行用于生成n个数的集合的MSB优先迭代生成过程;选择逻辑单元,选择逻辑单元在硬件中实施,被配置成与生成逻辑单元同时操作,并被配置成执行用于从n个数的集合中选择第i大或第p小的数的MSB优先迭代选择过程,其中i、p和n是整数;以及输出,输出被布置成输出指示选定数的数据,其中处理单元被配置成响应于选择逻辑单元确定n个数的所述集合中的数中的特定数将不是选定数,在已生成所述特定数的位中的至少一个之后并在已生成所述特定数的所有位之前使生成逻辑单元暂停由所述MSB优先迭代生成过程生成所述特定数。
选择逻辑可以包括:求和逻辑,求和逻辑被布置成在每次迭代中对来自数中的每一个的位求和以生成求和结果,其中被求和的所有位在它们的相应数内占据相同位位置;比较逻辑,比较逻辑被布置成在每次迭代中将由求和逻辑在所述迭代中生成的求和结果与阈值进行比较并基于比较的结果设置选定数的位,其中阈值是基于i或p计算的;以及更新逻辑,更新逻辑被布置成在每次迭代中并针对数中的每一个,基于在所述迭代中的比较的结果和来自数的位的值选择性地更新数中占据下一个位位置的位。求和逻辑可以被布置成使得在第一次迭代中对来自数中的每一个的最高有效位求和,并且每次后续迭代对在自己的相应数中占据连续位位置的位求和。
第十方面提供一种处理单元,处理单元被配置成执行上文所详述的用于生成和选择数的方法。
第十一方面提供一种使用集成电路制造系统制造上文所详述的处理单元的方法。
第十二方面提供一种集成电路定义数据集,集成电路定义数据集在集成电路制造系统中被处理时将集成电路制造系统配置成制造上文所详述的处理单元。
第十三方面提供一种计算机可读存储介质,计算机可读存储介质上存储有集成电路的计算机可读描述,计算机可读描述在集成电路制造系统中被处理时使集成电路制造系统制造上文所详述的处理单元。
第十四方面提供一种集成电路制造系统,集成电路制造系统包括:计算机可读存储介质,计算机可读存储介质上存储有集成电路的计算机可读描述,计算机可读描述描述上文所详述的处理单元;布局处理系统,布局处理系统被配置成处理集成电路描述以便生成体现处理单元的集成电路的电路布局描述;以及集成电路生成系统,集成电路生成系统被配置成根据电路布局描述制造处理单元。
可以在集成电路上的硬件中体现数排序硬件逻辑单元和/或处理器,处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑。可以提供一种在集成电路制造系统处制造数排序硬件逻辑单元和/或处理器的方法,处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑。可以提供一种集成电路定义数据集,集成电路定义数据集在集成电路制造系统中被处理时将系统配置成制造数排序硬件逻辑单元和/或处理器,处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑。可以提供一种非暂时性计算机可读存储介质,非暂时性计算机可读存储介质上存储有集成电路的计算机可读描述,计算机可读描述在被处理时使布局处理系统生成电路布局描述,电路布局描述在集成电路制造系统中用于制造数排序硬件逻辑单元和/或处理器,处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑。
可以提供一种集成电路制造系统,集成电路制造系统包括:非暂时性计算机可读存储介质,非暂时性计算机可读存储介质上存储有描述数排序硬件逻辑单元和/或处理器的计算机可读集成电路描述,处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑;布局处理系统,布局处理系统被配置成处理集成电路描述以便生成体现数排序硬件逻辑单元和/或处理器的集成电路的电路布局描述,处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑;以及集成电路生成系统,集成电路生成系统被配置成根据电路布局描述制造数排序硬件逻辑单元和/或处理器,处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑。
可以提供一种用于执行本文中所描述的任一种方法的计算机程序代码。可以提供一种非暂时性计算机可读存储介质,非暂时性计算机可读存储介质上存储有计算机可读指令,计算机可读指令在计算机系统处执行时使计算机系统执行本文中所描述的方法中的任一种。
本领域的技术人员将清楚,上述特征可以根据需要组合,并可以与本文中所描述的实例的任何方面组合。
附图说明
现在将参考附图详细地描述实例,在附图中:
图1是用于对4个输入排序的实例硬件布置的示意图;
图2示出输入到本文中所描述的方法和硬件的n个m位数的集合的图形表示;
图3A是示出从n个m位数的输入集合中计算第i大的数的第一实例方法的流程图;
图3B是示出从n个m位数的输入集合中计算第p小的数的第一实例方法的流程图;
图3C是更详细地示出来自图3A和3B的方法的操作的流程图;
图3D是图3C所示的操作的实例硬件实施方案的电路图;
图3E示出图3D所示的硬件布置的真值表;
图3F示出实施图3A的方法中的操作的实例硬件布置的示意图;
图3G和3H示出实施图3A和3B的方法中的操作的两个不同实例硬件布置的示意图;
图3I示出实施图9的方法中的操作的实例硬件布置的示意图;
图4示出图3A的方法的操作的实例;
图5是示出从n个m位数的输入集合中计算第i大的数的第二实例方法的流程图;
图6示出图5的方法的操作的实例;
图7A是示出从n个m位数的输入集合中计算第i大的数的第三实例方法的流程图;
图7B是示出从n个m位数的输入集合中计算第p小的数的另一实例方法的流程图;
图8示出图7A的方法的操作的实例;
图9是示出从n个m位数的输入集合中计算第i大的数的第四实例方法的流程图;
图10是示出使用图3A的方法来执行排序的示意图;
图11A、11B和11C是示出本文中所描述的方法的合成结果的图形;
图12A是被布置成从n个m位数的输入集合中选择第i大的数或第p小的数的硬件逻辑单元的示意图;
图12B是被布置成生成和选择数的处理单元的示意图;
图12C示出计算机系统,图形处理系统在所述计算机系统中实施;
图13示出用于生成体现图形处理系统的集成电路的集成电路制造系统;以及
图14是从n个数的集合中生成和选择数的实例方法的流程图,n个数是从MSB开始被迭代地生成。
附图示出各种实例。本领域的技术人员将了解,附图中示出的元件边界(例如方框、方框的群组或其它形状)表示边界的一个实例。在一些实例中,可以将一个元件设计为多个元件,或者可以将多个元件设计为一个元件。在适当时,贯穿各图使用共同附图标记来指示相似特征。
具体实施方式
借助于实例呈现以下描述,使本领域的技术人员能够制造和使用本发明。本发明不限于本文中所描述的实施方案,并且对所公开的实施例的各种修改对于本领域的技术人员而言将是显而易见的。
现在将仅借助于实例描述实施例。
有许多应用需要从整数集合中选择第i大或第p小的整数。通常,这是使用排序算法或排序网络(例如,如上文参考图1所描述)将整数排序成有序列表实施的,并且接着可以输出来自列表的相关整数。然而,所得硬件的大小可能较大,即使作为硬件的合成的一部分,将冗余逻辑(其不影响所需输出)移除也是如此。
本文中描述一种用于从n个m位数的集合中选择第i大或第p小的数而不首先对数集合排序的方法和硬件。使用本文中所描述的方法,硬件小于排序网络,例如,它的面积调整为O(n*m),而不是O(m*n*(ln(n)2))。此外,因为所述方法是迭代的,所以可以通过权衡性能/处理量(例如通过合成仅一次迭代或小于m次迭代,并接着在多个循环内重复使用硬件逻辑)而使用于实施所述方法的硬件面积更小。另外,所述方法使性能/处理量能够以额外面积为代价而提高(例如通过将在每次迭代中评估的位的数目增加到高于1)。
本文中所描述的方法可以适用于以有正负号或无正负号的定点格式、浮点格式和有正负号或无正负号的归一化格式表示的数。例如,对于有正负号的数和浮点数,在输入到方法和从方法输出时都对每个数的顶位求反。对于无正负号的定点数,不需要对方法做出任何改变。对于归一化格式,将位串视为正规无正负号的(或有正负号的)数。在各种实例中,数可以是整数。在各种实例中,数可以是不具有呈标准定点格式的有限二进制表示的值的二进制近似值(例如1/3,或2的平方根),其中二进制近似值是以一次一个位的方式生成的。
所述方法涉及检验来自集合中的每个数的最高有效位(MSB),并基于分析的结果设置一个或多个标志或掩码位。然后重复所述方法,从集合中的每个数中选择下一个位,依据标志或掩码位调整位值,并接着执行与对MSB执行的分析相同的分析(或极其相似的分析)。如同第一次迭代(其涉及MSB),基于分析的结果,可以设置一个或多个标志或掩码位。所述方法可以遍及数中的m个位中的每一个而迭代,以便确定数中的哪一个是第i大或第p小的数。在每次迭代中,设置来自输出数(即,第i大或第p小的数)的位,并且来自所述方法的输出可以是输出数本身或从n个m位数的集合内识别(或指示)输出数的其它数据(例如呈n个数的集合内的输出数的索引的形式)。
在下文描述各种实施例和实例时,使用以下标记,所述标记可以参考图2加以描述:
·n是集合200中的数的数目,
·k是数索引并且其范围介于0和(n-1)之间,
·Nk是集合200中的数,使得集合200中的第一个数202是N0,并且集合200中的最后一个数204是Nn-1,
·m是集合中的每个数中的位的数目,并且集合中的每个数包括相同数目个位,
·j是位索引并且其范围介于针对每个数中的MSB 206的(m-1)和针对每个数中的最低有效位(LSB)208的0之间,并且在所述方法在每次迭代中分析来自集合中的每个数的单个位(从MSB到LSB)的实例中,j也可以被称作迭代索引,
·r是范围介于一(针对第一次迭代,其中j=m-1)和m(针对最后一次迭代,其中j=0)之间的迭代次数,因此在每次迭代考虑一个位位置的实例中,j=m-r。
·xk[j]是指数Nk的位j,其中对于MSB,j=m-1,并且对于LSB,j=0,
·zk[j]是指数Nk的修改位j,
·i和p是在1到n的范围内的整数,并且本文中所描述的方法从数集合中识别第i大或第p小的数,并且所需数,即,第i大或第p小的数,在本文中被称作输出数,
·mink[j]是在分析数Nk的第j个位之后的数Nk的最小标志(或min_flag),
·mink[m]是数Nk的最小标志的初始(即,开始)值,
·maxk[j]是在分析数Nk的第j个位之后设置的数Nk的最大标志(或max_flag),
·maxk[m]是数Nk的最大标志的初始(即,开始)值,
·flagk[j]是在使用单个标志的实例中在分析数Nk的第j个位之后设置的数Nk的标志,并且
·flagk[m]是数Nk的单个标志的初始(即,开始)值。
图2示出输入到本文中所描述的方法和硬件的n个m位数的集合200的图形表示。集合内的数不按任何特定顺序,并且因此k的值仅识别数在集合中的位置(并因此用于是指特定数Nk),且不提供关于数Nk相比于集合200中的其它数的相对大小的任何信息。
本文中所描述的方法和硬件可以用于从n个m位数的集合200中寻找第i大或第p小的数而不首先对数集合排序。
图3A是从n个m位数的输入集合中计算(或识别)第i大的数的第一实例方法的流程图。在各种实例中,i的值是固定的,并且在其它实例中,i的值是输入变量。如图3A所示,所述方法是迭代的,并针对每个数使用两个标志:min_flag和max_flag(即,总共2n个标志位)。最小标志min_flag或mink[]在被设置时指示特定数小于输出数(第i大的数),并且最大标志max_flag或maxk[]在被设置时指示特定数大于输出数。最初(当j=m时),标志可以全部未设置(例如被设置为零),除非已执行某种预掩蔽(如下文所描述)。如下文所描述,所述方法以每次迭代一个位的方式建立输出数。
在第一次迭代(r=1,j=m-1)中,对每个数的MSB 206求和,并且如果MSB的总和大于或等于i(在框302中为‘是’),那么这意味着来自输入集合的第i大的数的MSB(即,输出数的MSB)为一,并可以将输出数的MSB设置为一(框305)。然而,如果MSB的总和小于i(在框302中为‘否’),那么这意味着来自输入集合的第i大的数的MSB(即,输出数的MSB)为零,并可以将输出数的MSB设置为零(框307)。另外,响应于确定MSB的总和大于或等于i(在框302中为‘是’),针对MSB=0的所有那些数设置min_flag(框304),并且响应于确定MSB的总和不大于或等于i(在框302中为‘否’),针对MSB=1的所有那些数设置max_flag(框306)。
通过从每个数获取下一个位并使用标志值修改位(框308)来开始第二次迭代(r=2,j=m-2)。具体地说,在针对数设置min_flag或max_flag的情况下,可以更改位的值(即,基于标志和位的值选择性地更新位的值)),如图3C所示。如果数的max_flag被设置(在框310中为‘是’),那么不管位值实际上为一还是为零,都将来自所述数的位(即,来自用于第二次迭代的数的第二最高有效位)设置为一(框312)。相似地,如果数的min_flag被设置(在框314中为‘是’),那么不管位值实际上为一还是为零,都将位设置为零(框316)。根据本文中所描述的方法,数不能既被设置max_flag又被设置min_flag。如果没有任何一个标志被设置(在框310和314中为‘否’),那么使位的值保持不变(框318)。
位的更改(在框308中,如图3C详细地所示)还可以由以下逻辑方程描述:
其中·表示逻辑AND运算,并且+表示逻辑OR运算。可以被复制n次(针对集合200中的每个数复制一次)的对应硬件布置320在图3D中被示出,并包括NOT门322、AND门324和OR门326。如图3D所示,将当前位与当前最小标志(在前一次迭代中设置)的反转型式在AND门324中组合,并且接着将AND门324的输出与当前最大标志(在前一次迭代中设置)在OR门326中组合。图3E中示出了硬件布置320的可达状态的真值表。
接着对更改位(在框308中生成)求和,并且如果总和大于或等于i(在框302中为‘是’),那么这意味着来自输入集合的第i大的数的下一个位(即,输出数的下一个位)为一,并可以将输出位的下一个位设置为一(框305);然而,如果总和小于i(在框302中为‘否’),那么这意味着来自输入集合的第i大的数的下一个位(即,输出数的下一个位)为零,并可以将输出数的下一个位设置为零(框307)。以此方式,所述方法以一次一个位的方式并以每次迭代一个位的方式建立输出数(在框305和307中)。响应于确定总和大于或等于i(在框302中为‘是’),针对更改位等于零的所有那些数设置min_flag(框304),并且响应于确定总和不大于或等于i(在框302中为‘否’),针对更改位等于一的所有那些数设置max_flag(框306)。
位的求和(在框302中)还可以由以下逻辑方程描述:
对应硬件布置328包括多个加法器(例如,各自将三个位——即,针对k的三个不同值——相加的多个全加器330,后跟着一个或多个脉动进位加法器332)。图3F中示出了实例硬件布置;然而,可以以其它方式在硬件中实施求和。
最小标志的更新(在框304中)和最大标志的更新(在框306中)还可以由以下逻辑方程描述:
y[j]=(sumj≥i)?1:0
在这最后两个方程中,第一项是指来自前一次迭代的标志值,并用于确保标志在已经由数内的早期位设置的情况下不改变。当参考更改位(zk[j])时,还可以通过简单地用zk[j]替换xk[j]来使用同样的最后两个方程,因为当标志均为0时xk[j]=zk[j],并且如果任一个标志为1,那么xk[j]的值在以上方程中是无关的,然而,使用更改位的硬件实施方案相比于使用原始位可能较大(在硬件逻辑面积方面)。对应硬件布置336、338在图3G和3H中被示出,并包括NOT、AND和OR门(或实施与NOT、AND和OR门相同的功能性并可以被称作NOT、AND和OR逻辑块的其它逻辑块)的组合。
接着,可以针对输入数中的所有m个位重复图3A的方法以建立输出数,或在各种实例中,可以存在识别在所有m次迭代完成之前已获得结果的时间(即,max_flag和min_flag均未被设置的数集合200中仅存在一个不同值的时间)并在那个阶段输出结果的额外逻辑。在各种实例中,另外或代替地,额外逻辑可以用于限制所执行的迭代的次数(即,提供r、rmax的最大值),并接着在那个阶段输出结果。在此类实例中,仅建立了输出数的一部分,并且因此,可以通过基于标志值从输入数集合中选择一个数来获得剩余位或整个输出数,或替代地,可以输出识别输出数的其它数据(例如数索引k)。但是,如果输入数集合可以包含复制值(即,如果并不保证输入集合中的所有n个数是唯一的),使得在n个m位数的输入集合中可以存在超过一个输入数是第i大的数,那么这会向额外逻辑增添复杂性,并因此可能会降低或丧失具有额外逻辑的益处。此额外逻辑可以被称作提前退出逻辑单元。
对mink[j]和maxk[j]信号执行按位OR(bitwise OR)并接着对结果求反会得到一种信号,当且仅当输出数的位m-1到j与数Nk中的位m-1到j匹配时,这种信号才在第k个位中具有1。
图3A的方法可以参考图4所示的实例加以描述,其中n=5且i=3。在第一次迭代402中,对每个数的MSB求和,并且结果为3。当总和等于i(在框302中为‘是’)时,将输出数403的MSB设置为一(框305),并针对MSB为零的那些数设置min_flag(框304)。在所示的实例中,针对数N1和N4设置min_flag。
在第二次迭代中,首先基于标志值修改5个数中的每一个中的下一个位(框308)以取得zk[m-2]值,并且在此实例中,因为仅设置了数N1和N4的标志,所以仅将这些位从一修改为零。接着对修改位404求和,并且结果为1。当总和小于i(在框302中为‘否’)时,将输出数的下一个位设置为零(框307),并针对修改位为一的那些数设置max_flag(框306)。在所示的实例中,针对数N2设置max_flag。
再次通过基于标志值修改5个数中的每一个中的下一个位(框308)以取得zk[m-3]值来开始第三次迭代,并且在此实例中,因为数N1、N2和N4的标志被设置,所以只有这些位受到影响,但是如图4所示,尽管数N2和N4的第3个位的值翻转(对于数N2,由于max_flag而从0翻转到1,并且对于数N4,由于min_flag而从1翻转到0),但数N1的第3个位未被修改,因为它已经为零,并且它是被设置的min_flag。如前所述,对修改位406求和,并且在此情况下,结果为2。当总和小于i(在框302中为‘否’)时,将输出数的下一个位设置为零(框307),并针对修改位为一的那些数设置max_flag(框306)。在所示的实例中,针对数N0设置max_flag。此时,只有一个数未被设置标志,即,数N3,并且因此它是输出数,即,来自输入集合中的第i大的数。此时,所述方法可以停止(例如,如果提供逻辑来评估标志并确定何时只有一个数未被设置标志),或者所述方法可以一直继续到所有位都已被评估为止。
可以了解,如果在图4的实例中m=8,并且五个输入值(N0-N4)为101xxxxx、010xxxxx、110xxxxx、100xxxxx和011xxxxx(其中每个x可以表示0或1),那么如图4所示,第三大的数被确定为100xxxxx,并且在此实例中,这可以只通过分析输入值的前三个位被确定。如上文所描述,在第三次迭代之后,仅已建立了输出数403的三个最高有效位(位100),并且可以通过继续进行所述方法的其余五次迭代或通过基于标志值选择N3并将5个LSB与已经生成的输出数403相加或输出N3并舍弃已经建立的三个位来确定其余五个位。替代地,可以输出识别输出数的数据(例如索引k=3),而不是输出所述输出数本身。
尽管图3A示出了从n个m位数的输入集合中计算(或识别)第i大的数的第一实例方法,但可以使用极其相似的方法来从n个m位数的输入集合中计算(或识别)第p小的数,并且图3B中示出了一个实例。在图3B的方法中,相比于图3A的方法的唯一差异是,将总和与(n-p)的值进行比较,并且比较从‘大于或等于’(在图3A的框302中)切换到‘严格大于'(在图3B的框303中)。替代地,在图3B的框303中执行的比较可以是总和是否大于或等于(n+1-p)。如果MSB(或针对后续迭代的更改位)的总和大于(n-p)(在框303中为‘是’),那么将输出数的MSB设置为一(框305),并针对MSB或更改位等于零的所有那些数设置min_flag(框304)。然而,如果总和不大于(n-p)(在框303中为‘否’),那么将输出数的MSB设置为零(框307),并针对MSB或更改位等于一的所有那些数设置max_flag(框306)。如前所述,接着针对输入集合中的每个数中的后续位重复所述方法,以便建立输出数。所述方法可以在m次迭代之后终止,或者在提供额外硬件的情况下,所述方法可以响应于确定在输入集合中仅存在一个数未被设置任何标志而终止。
图5是从n个m位数的输入集合中计算(或识别)第i大的数的第二实例方法的流程图。与第一方法类似,如上文所描述和图3A所示,第二方法也是迭代的;然而,它不使用标志。代替地,基于求和结果(在框302中)更新数本身的值(框504和506)。响应于确定MSB的总和大于或等于i(在框302中为‘是’),将输出数的MSB设置为一(框305)并将MSB=0的那些数中的所有位设置为零(框504),并且响应于确定MSB的总和不大于或等于i(在框302中为‘否’),将输出数的MSB设置为零(框307)并将MSB=1的那些数中的所有位设置为一(框506)。
通过从每个数获取下一个位(框508)来开始第二次迭代(j=m-2),其中这些数中的一些数可以是原始数,而其它数是在第一次迭代中修改(例如在框504或506中)的数。对位求和,并且依据总和是否大于或等于i(在框302中),可以将其余原始数中的一个或多个设置为全零(在框504中)或全一(在框506中),并将另一个位添加到输出数(在框305或307中)。
数的更新(在框504和506中)还可以由以下逻辑方程描述:
其中h=0、1、……、m-1。
接着,可以针对输入数中的所有m个位重复图5的方法,或者在各种实例中,可以存在识别早期已获得结果的时间(即,并非全一或全零的更新数Nk当中只有一个不同值的时间)并在那个阶段输出结果的额外逻辑(如上文所描述)。如上文所提到,如果存在超过一个第i大的数,那么这会变得更复杂。
图5的方法可以参考图6所示的实例加以描述,其中n=5且i=3。在第一次迭代602中,对每个数的MSB求和,并且结果为3。当总和等于i(在框302中为‘是’)时,将输出数603的MSB设置为一(框305),并修改MSB为零的那些数,使得它们的所有位都等于零(框504),并且在所示的实例中,以此方式修改数N1和N4。
在第二次迭代604中,对5个数(原始数N0、N2、N3以及修改数N1和N4)中的每一个中的下一个位求和,并且结果为1。当总和小于i(在框302中为‘否’)时,将输出数603的下一个最高有效位设置为零(框307),并修改位为一的那些数,使得它们的所有位都等于一(框506),并且在所示的实例中,以此方式修改数N2。
在第三次迭代606中,对5个数(原始数N0和N3以及修改数N1、N2和N4)中的每一个中的下一个位求和,并且在此情况下,结果为2。当总和小于i(在框302中为‘否’)时,将输出数603的下一个位设置为一(框307),并将位为一的那些数的所有位设置为等于一(框506),并且在所示的实例中,以此方式修改数N0。此时,集合中只有一个原始数(即,并非全一或全零的一个数),即,数N3,并且因此它是输出数,即,来自输入集合的第i大的数。此时,所述方法可以停止(例如,如果提供逻辑来评估标志并确定何时在集合中只剩余一个原始未修改数),或者所述方法可以一直继续到所有位都已被评估并且输出数的所有位都被生成(每次迭代一个位)为止。
尽管图5示出了从n个m位数的输入集合中计算(或识别)第i大的数的第一实例方法,但可以使用极其相似的方法来从n个m位数的输入集合中计算(或识别)第p小的数。与图3B的方法类似,这涉及改变图5的方法,仅使得将总和与(n-p)或(n+1-p)的值进行比较,而不是与i进行比较(在框302中)。在使用(n-p)时,如果位的总和严格大于(n-p),那么将输出数中的下一个位设置为一,并修改位等于零的那些数,使得所有位都等于零(框504),并且响应于确定总和不大于(n-p),将输出数中的下一个位设置为零,并修改位等于一的那些数,使得所有位都等于一(框506)。替代地,在使用(n+1-p)时,如果位的总和大于或等于(n+1-p),那么将输出数中的下一个位设置为一(框305),并修改位等于零的那些数,使得所有位都等于零(框504),并且响应于确定总和小于(n+1-p),将输出数中的下一个位设置为零(框307),并修改位等于一的那些数,使得所有位都等于一(框506)。
图7A是从n个m位数的输入集合中计算(或识别)第i大的数的第三实例方法的流程图。与第一和第二方法类似,如上文所描述和图3A和5所示,第三方法也是迭代的。与第二方法(图5所示)类似,第三方法修改数,而不是使用标志;然而,将所有数修改为相同值(例如全零或全一),而不是将一些数修改为全零并将其它数修改为全一,并且在所示的实例中,将所有数修改为全零。响应于确定MSB的总和大于或等于i(在框302中为‘是’),将输出数中的下一个位设置为一(框305),并将MSB=0的那些数中的所有位设置为零(框504)。响应于确定MSB的总和不大于或等于i(在框302中为‘否’),将输出数中的下一个位设置为零(框307),并将MSB=1的那些数中的所有位设置为零(框706),并且接着,为了使下一次迭代执行正确的比较(在框302中),接着将i的值递减在所述迭代中的求和的总计(框707)。
通过从每个数获取下一个位(框508)来开始第二次迭代(j=m-2),其中这些数中的一些数可以是原始数,而其它数是在第一次迭代中修改(例如修改为全零)的数。对位求和,并且依据总和是否大于或等于i(在框302中),设置输出整数中的下一个位(在框305或307中),并可以将来自其余原始数的不同数设置为全零(在框504或706中)。仅在总和小于i(在框302中为‘否’)时,才将i的值进一步递减在所述迭代中的求和的总计(框707)。接着,可以针对输入数中的所有m个位重复图7A的方法,或者如上文所描述,可以在除了输入集合中的一个数之外的所有数都已被修改(例如修改为全零)时终止所述方法,然后这个剩余数是输出数。
数的更新(在框504和706中)还可以由以下逻辑方程描述:
其中h=0、1、……、m-1。
图7A的方法可以参考图8所示的实例加以描述,其中n=5且i=3。在第一次迭代802中,对每个数的MSB求和,并且结果为3。当总和等于i(在框302中为‘是’)时,将输出数803的MSB设置为一(框305),并修改MSB为零的那些数,使得它们的所有位都等于零(框504),并且在所示的实例中,以此方式修改数N1和N4。
在第二次迭代804中,对5个数(原始数N0、N2、N3以及修改数N1和N4)中的每一个中的下一个位求和,并且结果为1。当总和小于i(在框302中为‘否’)时,将输出数中的下一个位设置为零(框307),并修改位为一的那些数,使得它们的所有位都等于零(框706),并且在所示的实例中,以此方式修改数N2。接着,将i的值递减求和结果(即,递减一),使得对于下一次迭代,i=2。
在第三次迭代806中,对5个数(原始数N0和N3以及修改数N1、N2和N4)中的每一个中的下一个位求和,并且在此情况下,结果为1。当总和小于i(在框302中为‘否’)时,将输出数中的下一个位设置为零(框307),并修改位为一的那些数,使得它们的所有位都等于零(框706),并且在所示的实例中,以此方式修改数N0。再次可以将i的值递减求和结果(即,递减一),使得i=1。此时,在集合中仅有一个原始数,即,数N3,并且因此它是输出数,即,来自输入集合的第i大的数。此时,所述方法可以停止(例如,如果提供逻辑来评估标志并确定何时在集合中只剩余一个原始未修改数),或者所述方法可以一直继续到所有位都已被评估为止。
尽管图7A示出了从n个m位数的输入集合中计算(或识别)第i大的数的第一实例方法,但可以使用极其相似的方法来从n个m位数的输入集合中计算(或识别)第p小的数,如图7B所示。如同图3B,尽管图7B在框303中示出了总和是否严格大于(n-p)的比较,但在其它实例中,比较可以是总和是否大于或等于(n+1-p)。在从n个m位数的输入集合中计算第p小的数的另一实例方法中,可以使所有输入数Nk按位反转然后可以在i=p的情况下使用图7A的方法,只要最终输出在被输出之前反转回到它的原始形式即可。
图9是从n个m位数的输入集合中计算(或识别)第i大的数的第四实例方法的流程图。与第一、第二和第三方法类似,如上文所描述和图3A、5和7A所示,第四方法也是迭代的。与第一方法(图3A所示)类似,第四方法使用标志;然而,仅使用单个标志。响应于确定MSB的总和大于或等于i(在框302中为‘是’),将输出数的MSB设置为一(框305),并针对MSB=0的那些数设置标志(框904)。响应于确定MSB的总和不大于或等于i(在框302中为‘否’),将输出数的MSB设置为零(框307),并针对MSB=1的那些数设置标志(框906),并且接着,为了使下一次迭代执行正确的比较(在框302中),接着将i的值递减在所述迭代中的求和的总计(框707)。
通过从每个数获取下一个位并使用标志值修改位(框908)来开始第二次迭代(j=m-2)。如果针对数设置了标志,那么不管位值实际上为一还是为零,都将位设置为预定义值,例如零。如果未设置标志,那么使位的值保持不变。
位的更改(在框908中)还可以由以下逻辑方程描述:
可以被复制n次(针对集合200中的每个数复制一次)的对应硬件布置340在图3I中被示出,并包括NOT门342和AND门344,即,将当前位与当前标志(在前一次迭代中设置)的反转型式在AND门中组合。
接着,对更改位(在框908中生成)求和,并且依据总和是否大于或等于i(在框302中),可以设置一个或多个其它标志(在框904或906中)。如果预定义值为零并且总和小于i(在框302中为‘否’),那么通过将阈值递减在所述迭代中的求和的总计来更新i的值(框707)。使ij表示用于第j位的比较的阈值i,此更新可以由下式描述:
在图9所示的方法的变化形式中,如果预定义值为一(而不是零)并且总和大于或等于i(在框302中为‘是’),那么通过将阈值递增在这次迭代改变的行的数目来更新i的值,这个数目将是输入的总数减在所述迭代中的求和的总计(框707),此更新可以由下式描述:
接着,可以针对输入数中的所有m个位重复图9的方法(或所述方法的变化形式)。
尽管图9示出了从n个m位数的输入集合中计算(或识别)第i大的数的第一实例方法,但可以使用极其相似的方法来通过改变所执行的比较(例如从框302改变为框303,或改变为上文所描述的框303的修改型式,其中将总和与(n+1-p)进行比较)和阈值被更新的方式(例如从框707改变为框717)而从n个m位数的输入集合中计算(或识别)第p小的数。在从n个m位数的输入集合中计算第p小的数的另一实例方法中,可以使所有输入数Nk反转然后可以在i=p的情况下使用图9的方法,只要最终输出反转回到它的原始形式即可。
在其它变化形式中,可以响应于比较(例如在框302中)而设置掩码中的位,而不是使用标志或更新数内的位,并且接着,针对后续迭代,可以将数中的位与掩码值组合(例如使用AND门)。这具有与数的更新(在上文所描述的实例中)相同的效果。
合成实验表明,在一些情况下,使用两个标志(如在图3A和3B的方法中)比本文中所描述的其它方法更高效,因为实施硬件逻辑所需的面积更小。在其它情况下,本文中所描述的其它方法可以更高效(例如,如果用于存储标志的寄存器的成本大于用于更新输入数中的位的额外逻辑,那么图5的方法可以更高效,和/或在可以使执行i或p的更新的逻辑较小的情况下,图7A、7B和9的方法可以更高效)。
此外,不同于本文中所描述的其它方法,使用两个标志(如在图3A和3B的方法中)使能够识别数集合200的两个子集。在从n个m位数的输入集合中确定第i大的数或第p小的数的情况下,可以使用最大标志来识别集合内大于输出数的所有数,并可以使用最小标志来识别集合内小于输出数的所有数。接着,这可以迭代地用于实施排序操作,并且图10中示出了在Nk中的每一个为唯一时工作的4T排序器的实例,其中T为整数。如图10所示,输入集合包括4T个输入数(n=4T),接着使用图3A的方法(在框1002中)来寻找输入集合中的最大四个数(例如通过设置i=4)。接着,将来自输入集合的最大四个数输入到4排序器(框1004)。还使用例如min_flag的标志将这些最大四个数掩蔽于输入集合之中(框1006),并接着将掩蔽的输入集合输入到图3A的方法的第二次迭代(框1002)。替代地,掩蔽可以使用max_flag,并且在此类实施方案中,用于框1002的后续迭代的i的值针对每次迭代增加四。在此情况下,每个数将需要额外标志来跟踪哪些数先前已被传递到4排序器。此类排序布置可以在硬件逻辑的小面积中实施,原因在于它具有迭代性质并且4排序器可以在硬件逻辑的极小面积中实施。在其它实例中,排序操作可以仅使用图3A和/或3B的方法来实施。
如果尚未知晓图10的方法的输入Nk是唯一的,那么存在额外复杂化。例如,如果五个输入是相同值,那么将没有可能将这五个值传递到4排序器。在min_flag被设置的情况下,解决方案是对发送的输出的数目计数,并且如果这个值大于4,那么忽略输出并针对下一次迭代将i的值设置为1。这样,来自此下一次迭代的所有输出都将具有相同值,并且这些值可以绕过4排序器。将设置这些输入上的min_flag,并且再次针对下一次迭代将i的值设置为4。此额外逻辑将占用一定面积在硬件中实施并降低系统的处理量。
图12A是被布置成实施上文所描述的方法(即,从n个m位数的集合中选择第i大或第p小的数)的硬件逻辑单元1230的示意图。如图12A所示,硬件逻辑单元1230包括求和逻辑单元1232、比较逻辑单元1234和更新逻辑单元1236。硬件逻辑单元1230还包括输出1238,并可以包括用于接收n个m位数的集合的输入(图12A中未示出)。如上文所描述,求和逻辑单元1232被布置成对来自每个m位数的位求和以生成求和结果,其中被求和的所有位在它们的相应数内占据相同位位置,并且实例实施方案在图3F中被示出并在上文加以描述。比较逻辑单元1234被布置成将由求和逻辑在所述迭代中生成的求和结果与阈值进行比较并基于比较的结果设置选定数的位。更新逻辑单元1236被布置成针对每个m位数,基于在所述迭代中的比较的结果和来自m位数的位的值选择性地更新m位数中占据下一个位位置的位,并且实例实施方案在图3D和3I中被示出并在上文加以描述。术语‘选择性地更新’是指在执行更新时更新逻辑可能不一定改变任何位的值的事实。
如图12A所示和上文所描述,硬件逻辑单元1230可以另外包括标志控制逻辑单元1235和/或提前退出逻辑单元1237。标志控制逻辑单元1235被布置成基于比较的结果和来自m位数的位的值选择性地设置与m位数相关联的标志(其中术语‘选择性地’是如上文所描述而用于指示标志值可以在任何迭代中改变或保持不变),并且标志控制逻辑单元1235的两个实例实施方案在图3G和3H中被示出并在上文加以描述。提前退出逻辑单元1237被布置成确定在所有m次迭代完成之前已获得结果的时间,并接着在那个阶段输出结果(或识别结果的数据)。由提前退出逻辑单元1237进行的此确定可以基于标志值和/或来自更新逻辑单元1236的输出的分析(即,通过确定除了m位数中的一个之外的所有m位数的所有位值都已被更新到预定义值)而进行。
图11A-11C示出实施本文中所描述的方法以寻找输入数集合的中值的硬件的三个实例面积-延迟图形(所述中值是图形中被标记为‘radix_median’的曲线)。在此类实例中,
并且,硬件被布置成在大小为n的具有Um个值(即,无正负号的m位数)的列表中寻找第i大的项。在图11A所示的图形中,n=7且m=16,在图11B所示的图形中,n=7且m=11,并且在图11C所示的图形中,n=32且m=5。如图形所示,可以使硬件小于替代硬件(例如使用仅中值输出被连接的冒泡排序(bubble sort)网络的‘transposition_median’硬件和包括巴切奇偶归并排序(batcher odd-even merge sort)网络的‘batcher_median’硬件),但此较小硬件通常较慢(即,它涉及较大延迟)。
尽管所述方法在本文中被描述为在每次迭代中评估单个位,但在其它实例中,可以在每次迭代中评估超过一个位(例如位对)。这增加了实施所述方法的硬件的大小,但也增加了硬件的处理量。
在上文所描述的实例中,输入集合中存在n个数,并且数排序硬件逻辑单元被布置成从所述输入集合中识别第i大或第p小的数。然而,在一些实例中,输入集合中可以存在少于n个数,例如在输入集合中存在n’个数。在此类实例中,当使用标志(例如在图3A和3B的方法中)时,可以使用预掩蔽,使得可以设置一些标志的初始值(例如设置为一,而不是零)。在将要使用图3A的方法识别第i大的数的情况下,n’个数定位在集合的开头(如数N0到Nn’-1),并且它是被设置的最后(n-n’)个标志,即,数Nn’到Nn-1的标志。相比之下,如果将要使用图3B的方法识别第p小的数,那么n’个数定位在集合的末尾(如数Nn-n’到Nn-1),并且它是被设置的前(n-n’)个标志,即,数N0到Nn’-n-1的标志。可以在图9的方法中相似地将预掩蔽应用于标志。另外,当使用并不使用标志的其它方法(例如,如图5、7A和7B所示)而不是使用预掩蔽时,可以通过添加n-n'个虚拟输入数来填补n'个数的输入集合,这些虚拟输入数的位在硬件被配置成识别第i大的数时为全0,或在硬件被配置成识别第p小的数时为全1。
在上文所描述的实例中,每个输入数Nk都是m位数,其中m是固定的,并对于集合中的所有输入数来说都是相同的。在其它实例中,尽管输入数在完全生成的情况下可以各自包括m个位,但并非(一些或全部输入数的)所有m个位在特定迭代中都是可以获得的(即,被生成)。上文所描述的方法中的任一种可以被修改为对可以由任何MSB优先迭代过程(例如CORDIC或在线算术)生成的此类输入数操作,并且在此类实例中,假设已生成所有m个位,索引j表示位索引。如上文所提到,在每次迭代考虑一个位位置的实例中,j=m-r。
在此类实例中,一旦用于生成特定输入数的MSB优先迭代过程生成的数显然将不是第i大(或第p小,这依据实施方案)的数,额外逻辑(如上文所描述)就可以例如用于暂停所述过程。因此,有用的是在任何早先阶段确定这一点,并且避免不必要的计算并因此节省电力。
在各种实例中,数Nk可以是以一次1个位的方式生成的不具有呈标准定点格式的有限二进制表示的值(例如1/3,或2的平方根)(并且因此,尽管m是整数,但m的值不是固定的,而是它的值随着更多个位被生成而增加)。使用额外逻辑,可能能够通过查看顶部rmax位找到这些数中的第i大的数(或第p小的数,这依据实施方案),然后本文中所描述的方法将能够指示哪个输入是第i大的输入(或第p小的输入,这依据实施方案),并在rmax次迭代之后停止计算(例如其中rmax=100)。替代地,尽管输出值可能并不明确地是第i大的输出值(或第p小的输出值,这依据实施方案),但rmax的值可以被设置为输出数很可能是第i大的输出数(或第p小的输出数,这依据实施方案)。在这一点的变化形式中,可以实施各种检查点(例如rmax的各个值),并且可以依次在每个检查点处做出决定,直到可以识别出输出数为止,而不在每次迭代时执行此决定。
图14是从n个数的集合中生成和选择数的实例方法的流程图,n个数是从MSB开始被迭代地生成。此类过程被称作MSB优先迭代生成过程。如图14所示,在选择过程(框1404)的同时,使用MSB优先迭代生成过程生成n个数的集合(框1402)。选择过程(在框1404中)使用上文所描述的方法从n个数的集合中选择第i大或第p小的数,并且此类方法可以被描述为MSB优先迭代选择过程。所述方法进一步包括响应于MSB优先迭代选择过程确定n个数的所述集合中的特定数将不是选定数(在框1406中为‘是’),在已生成所述特定数的至少一个位之后并在已生成所述特定数的所有位之前暂停由所述MSB优先迭代生成过程生成所述特定数(框1408)。所述方法一直继续到选择过程(在框1404中)从n个数的集合中选择第i大或第p小的数为止,并且接着,如上文所描述,输出指示选定数的数据。
图12B是被布置成生成和选择数的处理单元1240的示意图。处理单元1240包括生成逻辑单元1242、选择逻辑单元1244和输出1246。生成逻辑单元1242被布置成执行用于生成n个数的集合的MSB优先迭代生成过程。选择逻辑单元1244被布置成与生成逻辑单元1242同时操作。选择逻辑单元1244被布置成执行用于从n个数的集合中选择第i大或第p小的数的MSB优先迭代选择过程,并且因此,选择逻辑单元1244可以包括图12A所示和上文所描述的硬件逻辑单元1230的一些或全部元件。输出1246被布置成输出指示选定数的数据。处理单元1240被进一步布置成响应于选择逻辑单元1244确定n个数的所述集合中的特定数将不是选定数,触发(或以其它方式使)生成逻辑单元1242暂停生成所述特定数。以此方式,在已生成每个数的至少一个位之后并在已生成一个或多个数的所有位之前停止一个或多个数的生成(由MSB优先迭代生成过程进行)。
在上文所描述和附图所示的一些实例中,描述了特定逻辑门(例如NOT、AND、OR门)的使用。应了解,在其它实例中,可以使用实施相同功能性(例如与NOT、AND或OR门相同的功能性)的硬件逻辑的任何布置,而不是单个逻辑门,并且这些可以被称作逻辑块(例如NOT、AND和OR逻辑块)。
上文所描述的方法可以在硬件(例如在数排序硬件逻辑单元数内)或软件中实施。图12C示出计算机系统,本文中所描述的方法可以在所述计算机系统中实施,例如在中央处理单元(CPU)1202或图形处理单元(GPU)1204内实施。如图12C所示,计算机系统进一步包括存储器1206和其它装置1214,例如显示器1216、扬声器1218和相机1220。计算机系统的组件可以通过通信总线1222彼此通信。
本文中所描述的方法可以体现在集成电路上的硬件中,例如在数排序硬件逻辑单元内。通常,上文所描述的功能、方法、技术或组件中的任一个可以实施于软件、固件、硬件(例如固定逻辑电路系统)或其任何组合中。本文中可以使用术语“模块”、“功能性”、“组件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方案的情况下,模块、功能性、组件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行所述算法/方法。计算机可读存储介质的实例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并可以由机器存取的其它存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如,通用GPU)、微处理器、任何被设计成加速CPU外部的任务的处理单元等。计算机或计算机系统可以包括一个或多个处理器。本领域的技术人员将认识到,此类处理能力被并入到许多不同的装置中,因此术语‘计算机’包含机顶盒、媒体播放器、数字无线电、PC、服务器、移动电话、个人数字助理和许多其它装置。
本发明还意图涵盖限定如本文中所描述的硬件配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有呈集成电路定义数据集的形式的计算机可读程序代码,当在集成电路制造系统中处理(即,运行)时,所述集成电路定义数据集将系统配置为制造配置成执行本文中所描述的任何方法的硬件逻辑,或者制造包括本文中所描述的任何设备的处理器。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造处理器的方法,所述处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑。此外,可以提供一种集成电路定义数据集,所述集成电路定义数据集在集成电路制造系统中被处理时使制造包括硬件逻辑的处理器的方法得以执行。
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包含作为寄存器传送级(RTL)代码、作为例如Verilog或VHDL等高级电路表示,和作为例如OASIS(RTM)和GDSII等低级电路表示。在逻辑上定义集成电路的更高级表示(例如RTL)可以在配置为在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合那些元件以便生成由所述表示如此定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将关于图13描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置成制造处理器的实例,所述处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑。
图13示出被配置成制造数排序硬件逻辑单元和/或处理器的集成电路(IC)制造系统1302的实例,所述处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑。具体地说,IC制造系统1302包括布局处理系统1304和集成电路生成系统1306。IC制造系统1302被配置成接收IC定义数据集(例如定义处理器,所述处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑),处理IC定义数据集,并根据IC定义数据集生成IC(例如其体现数排序硬件逻辑单元和/或处理器,所述处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑)。IC定义数据集的处理将IC制造系统1302配置成制造体现处理器的集成电路,所述处理器包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑。
布局处理系统1304被配置成接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑组件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP组件)而言。通过确定逻辑组件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1304已确定电路布局时,它可以将电路布局定义输出到IC生成系统1306。电路布局定义可以是例如电路布局描述。
如本领域已知的,IC生成系统1306根据电路布局定义来生成IC。例如,IC生成系统1306可以实施生成IC的半导体装置制造工艺,其可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩码的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统1306的电路布局定义可以呈计算机可读代码的形式,IC生成系统1306可以使用所述计算机可读代码来形成用于生成IC的合适掩码。
由IC制造系统1302执行的不同过程可以全部在一个位置处实施,例如由一方实施。替代地,IC制造系统1302可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同的方来执行。例如,以下阶段中的一些可以在不同位置中和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩码来制造集成电路。
在其它实例中,集成电路定义数据集在集成电路制造系统处的处理可将系统配置成制造包括被配置成执行如本文中所描述的方法中的一种的硬件逻辑的处理器,而不需要处理IC定义数据集来确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器(例如FPGA)的配置,并且对所述数据集进行的处理可以将IC制造系统配置成生成具有所述所定义配置的可重新配置的处理器(例如通过将配置数据加载到FPGA)。
在一些实施例中,当在集成电路制造系统中被处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中所描述的装置。例如,通过集成电路制造定义数据集,以上文关于图13所描述的方式对集成电路制造系统进行配置,可以制造出如本文中所描述的装置。
在一些实例中,集成电路定义数据集可以包含在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图13所示的实例中,IC生成系统还可以由集成电路定义数据集另外配置,以在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
本领域的技术人员将认识到,用来存储程序指令的存储装置可分布在整个网络上。例如,远程计算机可以将所描述的过程的实例存储为软件。本地或终端计算机可以访问远程计算机,并下载软件的一部分或全部以运行程序。替代地,本地计算机可以根据需要下载软件的片断或者在本地终端执行一些软件指令并在远程计算机(或计算机网络)执行一些软件指令。本领域的技术人员还将认识到,通过利用本领域的技术人员已知的常规技术,软件指令的全部或一部分可以由例如DSP、可编程逻辑阵列等专用电路执行。
本文中所描述的方法可以由计算机执行,所述计算机配置有存储在有形存储介质上的呈机器可读形式的软件,例如呈包括用于将计算机配置成执行所描述的方法的组成部分的计算机可读程序代码的形式,或者呈计算机程序的形式,所述计算机程序包括当程序在计算机上运行时适于执行本文中所描述的任何方法的所有步骤的计算机程序代码方式,其中所述计算机程序可以在计算机可读存储介质上实施。有形(或非暂时性)存储介质的实例包括硬盘、闪盘(thumb drive)、存储卡等,且不包含被传播的信号。软件可适于在并行处理器或串行处理器上执行,使得方法步骤可以任何适当次序执行或同时执行。
本文中所描述的硬件组件可以由非暂时性计算机可读存储介质生成,非暂时性计算机可读存储介质上编码了计算机可读程序代码。
存储机器可执行数据以用于实施所公开的方面的存储器可以是非暂时性介质。非暂时性介质可以是易失性或非易失性的。易失性非暂时性介质的实例包含基于半导体的存储器,例如SRAM或DRAM。可以用来实施非易失性存储器的技术的实例包含光学和磁存储器技术、闪存、相变存储器、电阻性RAM。
特别提到的“逻辑”是指执行一种或多种功能的结构。逻辑的实例包含布置成执行这些功能的电路系统。例如,此类电路系统可以包含晶体管和/或可用在制造过程中的任何硬件元件。作为实例,这类晶体管和/或其它元件可以用来形成电路系统或结构,所述电路系统或结构实施和/或包含存储器(例如寄存器、触发器或锁存器)、逻辑运算符(例如,布尔运算)、数学运算符(例如,加法器、乘法器或移位器)和互连。此类元件可作为定制电路或标准单元库、宏指令或以其它抽象级提供。此类元件可以特定布置互连。逻辑可以包含为固定功能的电路系统,且电路系统可以编程成执行一种或多种功能;这种编程可以从固件或软件更新或控制机制提供。被识别的执行一种功能的逻辑还可以包含实施组成功能或子过程的逻辑。在实例中,硬件逻辑具有实施一种或多种固定功能操作的电路系统、状态机或过程。
与已知的实施方案相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实施的方法中)的实施可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方案的性能,但使用更少的硅。例如,这可以通过以串行方式再使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实施方案的改进(例如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
本领域的技术人员将清楚,本文中给出的任何范围或装置值可以扩展或更改,而不失去所追求的效果。
应理解,上述益处和优点可以涉及一个实施例或者可以涉及几个实施例。实施例不限于解决任何一个或全部所陈述问题中的那些实施例,也不限于具有任何一个或全部所陈述益处和优点的实施例。
对‘一个(an)’物品的任何提及是指一个或多个那些物品。术语‘包括’在本文中用于意指包含所标识的方法块或元件,但此类块或元件并不包括排他性列表,设备可以包含额外块或元件,方法可以包含额外操作或元件。此外,块、元件和操作本身并不暗指是闭合式的。
本文中所描述的方法的步骤可以任何适当次序或在适当时同时执行。图中方框之间的箭头示出了方法步骤的一种示例性顺序,但并不旨在排除其它顺序或多个步骤的并行执行。另外,在不偏离本文中所描述的主题的精神和范围下,个别块可以从任一种方法中删除。在不失去所追求的效果的情况下,上述的任何实例的各方面可以与所描述的任何其它实例的各方面组合以形成另外的实例。在图示的元件示出为由箭头连接时,应了解,这些箭头只示出元件之间的通信(包含数据和控制消息)的一种示例流。元件之间的流可以在任一方向上或在两个方向上。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (22)
1.一种在硬件逻辑中从n个m位数的集合中选择数的方法,其中选定数是来自n个m位数的所述集合的第i大或第p小的数,其中i、p、m和n是整数,所述方法包括多次迭代,并且所述迭代中的每一次包括:
对来自所述m位数中的每一个的位求和以生成求和结果,其中被求和的所有所述位在它们的相应数内占据相同位位置;
将所述求和结果与阈值进行比较,其中所述阈值是基于i或p计算的;
基于所述比较的结果设置所述选定数的位;以及
针对所述m位数中的每一个,基于所述比较的所述结果和来自所述m位数的所述位的值选择性地更新所述m位数中占据下一个位位置的位,
其中在第一次迭代中,对来自所述m位数中的每一个的最高有效位求和并设置所述选定数的最高有效位,并且每次后续迭代对在自己的相应数中占据连续位位置的位求和并设置所述选定数的下一个位,并且
其中所述方法包括输出指示所述选定数的数据。
2.根据权利要求1所述的方法,其中输出指示所述选定数的数据包括:
输出所述选定数;或
输出所述选定数在所述n个m位数内的位置的指示。
3.根据权利要求1所述的方法,其中基于所述比较的结果设置所述选定数的位包括:
响应于确定所述求和结果超过所述阈值,将所述选定数的所述位设置为一;以及
响应于确定所述求和结果小于所述阈值,将所述选定数的所述位设置为零。
4.根据权利要求1所述的方法,其中,在第r次迭代中,对来自所述m位数中的每一个的位求和以生成求和结果包括对来自所述m位数中的每一个的具有位索引m-r的位求和以生成求和结果,其中每个位是来自所述m位数中的一个的原始位或来自前一次迭代的更新位。
5.根据权利要求1所述的方法,其中所述选定数是来自n个m位数的所述集合的所述第i大的数,并且所述阈值等于i。
6.根据权利要求1所述的方法,其中所述选定数是来自n个m位数的所述集合的所述第p小的数,并且所述阈值等于(n-p)或(n-p+1)。
7.根据权利要求1所述的方法,其中基于所述比较的所述结果和来自所述m位数的所述位的值选择性地更新所述m位数中占据下一个位位置的位包括:
基于所述比较的所述结果和来自所述m位数的所述位的值选择性地设置与所述m位数相关联的标志;以及
基于与所述m位数相关联的一个或多个标志的值选择性地更新所述m位数中占据下一个位位置的位。
8.根据权利要求7所述的方法,其中基于所述比较的所述结果和来自所述m位数的所述位的值选择性地设置与所述m位数相关联的标志包括:
响应于确定所述求和结果超过所述阈值并确定所述位的所述值为零,设置与所述m位数相关联的最小标志;以及
响应于确定所述求和结果小于所述阈值并确定所述位的所述值为一,设置与所述m位数相关联的最大标志,并且其中基于与所述m位数相关联的一个或多个标志的值选择性地更新所述m位数中占据下一个位位置的位包括:
响应于确定与所述m位数相关联的所述最大标志被设置,将所述m位数中占据所述下一个位位置的所述位设置为一;
响应于确定与所述m位数相关联的所述最小标志被设置,将所述m位数中占据所述下一个位位置的所述位设置为零;以及
响应于确定与所述m位数相关联的所述最大标志和所述最小标志均未被设置,使所述m位数中占据所述下一个位位置的所述位保持不变。
9.根据权利要求7所述的方法,其中基于所述比较的所述结果和来自所述m位数的所述位的值选择性地设置与所述m位数相关联的标志包括:
响应于确定所述求和结果超过所述阈值并确定所述位的所述值为零,设置与所述m位数相关联的特定标志;以及
响应于确定所述求和结果小于所述阈值并确定所述位的所述值为一,设置与所述m位数相关联的所述特定标志并将所述阈值更新等于所述求和结果的量,并且其中基于与所述m位数相关联的一个或多个标志的值选择性地更新所述m位数中占据下一个位位置的位包括:
响应于确定所述特定标志被设置,将所述m位数中占据所述下一个位位置的所述位设置为预定义值;以及
响应于确定与所述m位数相关联的所述特定标志未被设置,使所述m位数中占据所述下一个位位置的所述位保持不变。
10.根据权利要求7所述的方法,其中所述方法进一步包括:
确定相关联标志被设置的所述m位数的数目;以及
响应于确定所述m位数中的n-1个的相关联标志被设置,输出指示相关联标志未被设置的所述m位数的数据。
11.根据权利要求1所述的方法,其中基于所述比较的所述结果和来自所述m位数的所述位的值选择性地更新所述m位数中占据下一个位位置的位包括:
响应于确定所述求和结果超过所述阈值并确定所述位的所述值为零,将所述m位数中的所有位更新为零;以及
响应于确定所述求和结果不超过所述阈值并确定所述位的所述值为一,将所述m位数中的所有位更新为一。
12.根据权利要求1所述的方法,其中基于所述比较的所述结果和来自所述m位数的所述位的值选择性地更新所述m位数中占据下一个位位置的位包括:
响应于确定所述求和结果超过所述阈值并确定所述位的所述值为零,将所述m位数中的所有位更新为零;以及
响应于确定所述求和结果不超过所述阈值并确定所述位的所述值为一,将所述m位数中的所有位更新为零并将所述阈值减小等于所述求和结果的量。
13.根据权利要求1所述的方法,其中所述方法包括m次迭代,并且在第m次迭代中,对来自所述m位数中的每一个的最低有效位求和并设置所述选定数的最低有效位。
14.一种硬件逻辑单元,所述硬件逻辑单元被布置成从n个m位数的集合中选择第i大或第p小的数,其中i、p、m和n是整数,所述硬件逻辑单元被布置成迭代地操作并包括:
求和逻辑,所述求和逻辑被布置成在每次迭代中对来自所述m位数中的每一个的位求和以生成求和结果,其中被求和的所有所述位在它们的相应数内占据相同位位置,使得在第一次迭代中,对来自所述m位数中的每一个的最高有效位求和,并且每次后续迭代对在自己的相应数中占据连续位位置的位求和;
比较逻辑,所述比较逻辑被布置成在每次迭代中将由所述求和逻辑在所述迭代中生成的所述求和结果与阈值进行比较并基于所述比较的结果设置选定数的位,其中所述阈值是基于i或p计算的;
更新逻辑,所述更新逻辑被布置成在每次迭代中并针对所述m位数中的每一个,基于在所述迭代中的所述比较的所述结果和来自所述m位数的所述位的值选择性地更新所述m位数中占据下一个位位置的位;以及
输出,所述输出被布置成输出指示所述选定数的数据。
15.根据权利要求14所述的硬件逻辑单元,进一步包括:
标志控制逻辑,所述标志控制逻辑被布置成基于所述比较的所述结果和来自所述m位数的所述位的值选择性地设置与所述m位数相关联的标志;
并且其中所述更新逻辑被布置成基于与所述m位数相关联的一个或多个标志的值选择性地更新所述m位数中占据下一个位位置的位。
16.根据权利要求15所述的硬件逻辑单元,其中所述标志控制逻辑包括:
最小标志逻辑块,所述最小标志逻辑块被布置成响应于确定所述求和结果超过所述阈值并确定所述位的所述值为零,设置与所述m位数相关联的最小标志;以及
最大标志逻辑块,所述最大标志逻辑块被布置成响应于确定所述求和结果小于所述阈值并确定所述位的所述值为一,设置与所述m位数相关联的最大标志,并且其中所述更新逻辑被布置成:响应于确定与所述m位数相关联的所述最大标志被设置,将所述m位数中占据所述下一个位位置的所述位设置为一;响应于确定与所述m位数相关联的所述最小标志被设置,将所述m位数中占据所述下一个位位置的所述位设置为零;以及响应于确定与所述m位数相关联的所述最大标志和所述最小标志均未被设置,使所述m位数中占据所述下一个位位置的所述位保持不变。
17.根据权利要求15所述的硬件逻辑单元,其中所述标志控制逻辑被布置成:响应于确定所述求和结果超过所述阈值并确定所述位的所述值为零,设置与所述m位数相关联的特定标志;以及响应于确定所述求和结果小于所述阈值并确定所述位的所述值为一,设置与所述m位数相关联的所述特定标志并将所述阈值更新等于所述求和结果的量,
并且其中所述更新逻辑被布置成:响应于确定所述特定标志被设置,将所述m位数中占据所述下一个位位置的所述位设置为预定义值;以及响应于确定所述特定标志未被设置,使所述m位数中占据所述下一个位位置的所述位保持不变。
18.根据权利要求15所述的硬件逻辑单元,进一步包括:
提前退出硬件逻辑块,所述提前退出硬件逻辑块被布置成确定相关联标志被设置的所述m位数的数目;以及响应于确定所述m位数中的n-1个的相关联标志被设置,输出相关联标志未被设置的所述m位数作为所述选定数。
19.根据权利要求14所述的硬件逻辑单元,其中所述更新逻辑被布置成:响应于确定所述求和结果超过所述阈值并确定所述位的所述值为零,将所述m位数中的所有位更新为零;以及响应于确定所述求和结果不超过所述阈值并确定所述位的所述值为一,将所述m位数中的所有位更新为一。
20.根据权利要求14所述的硬件逻辑单元,其中所述更新逻辑被布置成:响应于确定所述求和结果超过所述阈值并确定所述位的所述值为零,将所述m位数中的所有位更新为零;以及响应于确定所述求和结果不超过所述阈值并确定所述位的所述值为一,将所述m位数中的所有位更新为零并将所述阈值减小等于所述求和结果的量。
21.一种计算机可读存储介质,所述计算机可读存储介质上存储有集成电路的计算机可读描述,所述计算机可读描述在集成电路制造系统中被处理时使所述集成电路制造系统制造根据权利要求14至20中任一项所述的硬件逻辑单元。
22.一种集成电路制造系统,包括:
计算机可读存储介质,所述计算机可读存储介质上存储有集成电路的计算机可读描述,所述计算机可读描述描述根据权利要求14至20中任一项所述的硬件逻辑单元;
布局处理系统,所述布局处理系统被配置成处理所述集成电路描述以便生成体现所述硬件逻辑单元的集成电路的电路布局描述;以及
集成电路生成系统,所述集成电路生成系统被配置成根据所述电路布局描述制造所述硬件逻辑单元。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1817759.2A GB2576793B (en) | 2018-10-31 | 2018-10-31 | Selecting an ith largest or a pth smallest number from a set of n m-bit numbers |
GB1817759.2 | 2018-10-31 | ||
GB1909370.7A GB2578663B (en) | 2018-10-31 | 2019-06-28 | Selecting an ith largest or pth smallest number from a set of n m-bit numbers |
GB1909370.7 | 2019-06-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111124356A true CN111124356A (zh) | 2020-05-08 |
Family
ID=64655480
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911039015.8A Pending CN111124357A (zh) | 2018-10-31 | 2019-10-29 | 从n个m位数的集合中选择第i大或第p小的数 |
CN201911038456.6A Pending CN111124356A (zh) | 2018-10-31 | 2019-10-29 | 从n个m位数的集合中选择第i大或第p小的数 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911039015.8A Pending CN111124357A (zh) | 2018-10-31 | 2019-10-29 | 从n个m位数的集合中选择第i大或第p小的数 |
Country Status (4)
Country | Link |
---|---|
US (2) | US12086566B2 (zh) |
EP (2) | EP3647937B1 (zh) |
CN (2) | CN111124357A (zh) |
GB (2) | GB2576793B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813370B (zh) * | 2020-07-08 | 2023-10-31 | 上海雪湖科技有限公司 | 基于fpga的多路并行归并排序系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4404677A (en) * | 1981-04-08 | 1983-09-13 | Rockwell International Corporation | Detecting redundant digital codewords using a variable criterion |
US4802108A (en) * | 1987-06-15 | 1989-01-31 | Polaroid Corporation | Circuit for providing a select rank-order number from a plurality of numbers |
JP3152466B2 (ja) * | 1991-04-04 | 2001-04-03 | 三菱電機株式会社 | ソーティング装置およびソーティング方法 |
JP2000287078A (ja) * | 1999-03-30 | 2000-10-13 | Matsushita Electric Ind Co Ltd | M位抽出方法 |
US20080288565A1 (en) * | 2007-05-15 | 2008-11-20 | Himax Technologies Limited | Method to compare and sort binary data |
US8416986B2 (en) * | 2009-10-29 | 2013-04-09 | Raytheon Company | Methods and systems for processing data using non-linear slope compensation |
US8738678B2 (en) * | 2009-10-29 | 2014-05-27 | Raytheon Company | Methods and systems for determining an enhanced rank order value of a data set |
US9047069B2 (en) * | 2011-04-12 | 2015-06-02 | Texas Instruments Incorporated | Computer implemented method of electing K extreme entries from a list using separate section comparisons |
-
2018
- 2018-10-31 GB GB1817759.2A patent/GB2576793B/en active Active
-
2019
- 2019-06-28 GB GB1909370.7A patent/GB2578663B/en active Active
- 2019-10-29 CN CN201911039015.8A patent/CN111124357A/zh active Pending
- 2019-10-29 EP EP19206051.5A patent/EP3647937B1/en active Active
- 2019-10-29 CN CN201911038456.6A patent/CN111124356A/zh active Pending
- 2019-10-29 EP EP19206060.6A patent/EP3647938B1/en active Active
- 2019-10-31 US US16/670,482 patent/US12086566B2/en active Active
- 2019-10-31 US US16/670,604 patent/US11531522B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
GB2576793A (en) | 2020-03-04 |
US11531522B2 (en) | 2022-12-20 |
GB2576793B (en) | 2021-06-30 |
EP3647937B1 (en) | 2023-04-05 |
GB2578663A (en) | 2020-05-20 |
US20200133637A1 (en) | 2020-04-30 |
CN111124357A (zh) | 2020-05-08 |
GB201909370D0 (en) | 2019-08-14 |
US12086566B2 (en) | 2024-09-10 |
EP3647938A1 (en) | 2020-05-06 |
EP3647937A1 (en) | 2020-05-06 |
GB201817759D0 (en) | 2018-12-19 |
GB2578663B (en) | 2022-03-02 |
US20200133632A1 (en) | 2020-04-30 |
EP3647938B1 (en) | 2024-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7348971B2 (ja) | 畳み込みニューラルネットワークハードウエア構成 | |
US20220253319A1 (en) | Hardware Unit for Performing Matrix Multiplication with Clock Gating | |
US20220391172A1 (en) | Implementation of Softmax and Exponential in Hardware | |
US20240012613A1 (en) | Look Ahead Normaliser | |
US11531522B2 (en) | Selecting an ith largest or a pth smallest number from a set of n m-bit numbers | |
US10175943B2 (en) | Sorting numbers in hardware | |
GB2592318A (en) | Selecting an ith largest or a pth smallest number from a set of n m-bit numbers | |
GB2592319A (en) | Selecting an ith largest or a pth smallest number from a set of n m-bit numbers | |
US20240134602A1 (en) | Efficient floating point squarer | |
CN111352607B (zh) | 迭代估计硬件 | |
US20230409287A1 (en) | Accumulator hardware | |
GB2584228A (en) | Hardware unit for performing matrix multiplication with clock gating | |
GB2591713A (en) | Hardware unit for performing matrix multiplication with clock gating | |
GB2576282A (en) | Hardware unit for performing matrix multiplication with clock gating |
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 |