CN112464157B - 向量排序方法与排序*** - Google Patents
向量排序方法与排序*** Download PDFInfo
- Publication number
- CN112464157B CN112464157B CN202110134236.4A CN202110134236A CN112464157B CN 112464157 B CN112464157 B CN 112464157B CN 202110134236 A CN202110134236 A CN 202110134236A CN 112464157 B CN112464157 B CN 112464157B
- Authority
- CN
- China
- Prior art keywords
- vector
- target
- sub
- sorting
- vectors
- 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.)
- Active
Links
- 239000013598 vector Substances 0.000 title claims abstract description 791
- 238000000034 method Methods 0.000 title claims abstract description 65
- 239000011159 matrix material Substances 0.000 claims abstract description 154
- 230000009466 transformation Effects 0.000 claims abstract description 100
- 238000012163 sequencing technique Methods 0.000 claims abstract description 72
- 230000008569 process Effects 0.000 abstract description 8
- 238000005192 partition Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 7
- 238000009825 accumulation Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 6
- 230000011218 segmentation Effects 0.000 description 4
- 238000013528 artificial neural network Methods 0.000 description 3
- 230000002349 favourable effect Effects 0.000 description 3
- 238000010606 normalization Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000002844 continuous effect Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明实施例提供向量排序方法与排序***。上述方法用于对目标向量进行排序,具体包括:通过目标向量生成排序位置向量;其中,排序位置向量包括N个元素;将排序位置向量扩展成为N*N的变换矩阵;其中,在变换矩阵的第i行向量中,第s个位置的元素等于1;s等于排序位置向量中第i个元素的取值;使用变换矩阵进行排序操作。可见,在本发明实施例中,读取目标向量后,通过目标向量生成排序位置向量,将其扩展为变换矩阵,再使用变换矩阵对目标向量或其属性向量进行排序。在此过程中,读取的是目标向量,而目标向量包含的一个或多个子向量存储于连续的存储空间中,因此,对存储的访问上是规整的,适合于实现到硬件上。
Description
技术领域
本发明涉及计算机技术领域,特别涉及向量排序方法与排序***。
背景技术
排序在大数据、人工智能、电商等业务领域应用非常多。现有的排序方法包括冒泡排序、选择排序方式等。
冒泡排序是一种简单的排序算法。其工作原理是:比较相邻的元素,如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数。
选择排序的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
现有的排序方式存在一个问题:数据访存随机化,读写存储的地址依赖于数据数值本身,例如,其可能需要先访问序列中的第0位,接着访问第61位,再接着访问第31位。而传统软件方法只关注了排序里的计算复杂度,没有关心排序方法里因数据访存随机化等带来的访存复杂度。在大规模并行排序时,会需要很多并行的随机访问,而且访问之间还有访存冲突,访存复杂度大大上升,随着并行数量的增加,访存复杂度是平方关系上升,成为并行排序的瓶颈,硬件设计复杂、成本高昂。
因此,现有的排序方式不利于硬件规整化,若实现到硬件上会在存储访问上遇到困难。
发明内容
有鉴于此,本发明实施例提供向量排序方法与排序***,通过向量化的排序方式,以解决现有的排序方式不利于硬件规整化的问题。
为实现上述目的,本发明实施例提供如下技术方案:
一种向量排序方法,用于对目标向量进行排序,并适用于硬件上的数据访存;
所述对目标向量进行排序包括:
通过所述目标向量生成排序位置向量;其中,所述排序位置向量包括N个元素;所述排序位置向量第i个元素的取值代表所述目标向量中第i个元素在所述N个元素中的排序;所述通过所述目标向量生成排序位置向量至少包括:读取目标向量,所述目标向量包括一个或多个子向量,所述子向量存储于连续的存储空间中;
将所述排序位置向量扩展成为N*N的变换矩阵;其中,在所述变换矩阵的第i行向量中,第s个位置的元素等于1;所述s等于所述排序位置向量中第i个元素的取值;
使用所述变换矩阵,进行排序操作;所述排序操作包括:对所述目标向量进行排序以及对所述目标向量所对应的属性向量进行排序中的至少一种。
一种排序***,所述排序***包括多个排序子***,所述排序子***用于对目标向量进行排序,并适用于硬件上的数据访存;所述目标向量包括N个元素;N为正整数;
所述排序子***包括:
排序位置向量生成单元,用于:
通过所述目标向量生成排序位置向量;其中,所述排序位置向量包括N个元素,所述排序位置向量第i个元素的取值代表所述目标向量中第i个元素在所述N个元素中的排序;所述通过所述目标向量生成排序位置向量至少包括:读取目标向量,所述目标向量包括一个或多个子向量,所述子向量存储于连续的存储空间中;
扩展单元,用于将所述排序位置向量扩展成为N*N的变换矩阵;其中,在所述变换矩阵的第i行向量中,第s个位置的元素等于1;所述s等于所述排序位置向量中第i个元素的取值;
排序单元,用于使用所述变换矩阵,进行排序操作;所述排序操作包括:对所述目标向量进行排序以及对所述目标向量所对应的属性向量进行排序中的至少一种。
一种支持向量排序方法的比较累加操作VCMPAC指令,用于在对目标向量进行排序的过程中比较大小,该指令所涉及的向量包括:第一操作向量,第二操作向量和第三操作向量,所涉及的标量至少包括第一操作标量;
所述VCMPAC指令用于执行如下操作:使用所述第一操作标量作为排序索引,从所述第一操作向量里取出相应的1个元素,将取出的元素和所述第二操作向量中的每个元素按照前述向量排序方法做大小比较,得到比较结果并累加到所述第三操作向量中;所述比较结果包括第一取值或者第二取值;所述第一操作向量和第二操作向量是完整的目标向量,或者是所述目标向量的子向量。
可选的,所述VCMPAC指令还涉及第二操作标量和第三操作标量;
当所述目标向量的长度大于向量寄存器的宽度时,所述第二操作标量用于表征所述第一操作向量在所述目标向量中的分段序号,所述第三操作标量用于表征所述第二操作向量在所述目标向量中的分段序号;
当所述目标向量的长度大于向量寄存器的宽度时,所述VCMPAC指令还用于根据所述第一操作标量和第一操作标量的分段序号,读取所述目标向量中的部分数据,以对所述目标向量进行分段比较运算。
一种支持向量排序方法的O2M指令,用于在对目标向量进行排序的过程中生成变换矩阵的分块;
该指令所涉及的向量包括:第四操作向量,所涉及的标量至少包括第四操作标量;所涉及的矩阵包括操作矩阵;其中,所述第四操作向量是所述目标向量中的一个子向量,长度等于向量寄存器宽度;所述操作矩阵为前述向量排序方法中变换矩阵的一个分块;所述第一操作标量用于表征所述操作矩阵在所述变换矩阵中的分块索引值;所述分块索引值用于计算所述操作矩阵中每一列在所述变换矩阵中对应的真实列号;所述第四操作向量里的第a个元素的取值为A;
所述O2M指令用于执行如下:在所述操作矩阵中的第a行里,将真实列号等于A的列元素设置为第三取值,将所述操作矩阵中第a行的其他元素设置为第四取值。
一种向量排序方法,用于对目标向量进行排序,并适用于硬件上的数据访存,所述方法包括:
读取目标向量,所述目标向量包括一个或多个子向量,所述子向量存储于连续的存储空间中;
接收上述比较累加操作VCMPAC指令,所述VCMPAC指令用于执行:将所述目标向量中的每一元素,与所述目标向量中的N个元素比较大小,得到所述每一元素对应的关系向量;所述目标向量中各元素对应的关系向量的累加结果为所述排序位置向量;其中,所述关系向量包括N个元素,任一元素的取值为第一取值或第二取值;
将所述排序位置向量扩展成为N*N的变换矩阵;其中,在所述变换矩阵的第i行向量中,第s个位置的元素等于1;所述s等于所述排序位置向量中第i个元素的取值;
使用所述变换矩阵,进行排序操作;所述排序操作包括:对所述目标向量进行排序以及对所述目标向量所对应的属性向量进行排序中的至少一种。
一种向量排序方法,用于对目标向量进行排序,并适用于硬件上的数据访存,所述方法包括:
通过所述目标向量生成排序位置向量;其中,所述排序位置向量包括N个元素;所述排序位置向量第i个元素的取值代表所述目标向量中第i个元素在所述N个元素中的排序;所述通过所述目标向量生成排序位置向量至少包括:读取目标向量,所述目标向量包括一个或多个子向量,所述子向量存储于连续的存储空间中;
将所述排序位置向量扩展成为N*N的变换矩阵;其中,在所述变换矩阵的第i行向量中,第s个位置的元素等于1;所述s等于所述排序位置向量中第i个元素的取值;
使用所述变换矩阵,进行排序操作;所述排序操作包括:对所述目标向量进行排序以及对所述目标向量所对应的属性向量进行排序中的至少一种;
所述将所述排序位置向量扩展成为N*N的变换矩阵包括:
将排序位置子向量扩展成为变换子矩阵;其中,在所述变换子矩阵的第r行向量中,第s个位置的元素等于第三取值;所述排序位置子向量为所述排序位置向量的子向量;所述s等于所述排序位置子向量中第r个元素的取值;所述变换矩阵包括各线程得到的变换子矩阵;
所述将排序位置子向量扩展成为变换子矩阵包括:
进行T次按列扩展;其中,每一次按列扩展得到一个分块;所述变换子矩阵包括T次按列扩展得到的T个分块;
所述排序位置子向量中任一元素的索引值为a,取值为A;
所述进行T次按列扩展,每次按列扩展得到一个分块包括:
接收上述向量转矩阵O2M指令;所述O2M指令用于在对目标向量进行排序的过程中生成所述分块。
可见,在本发明实施例中,读取目标向量后,通过目标向量生成排序位置向量,将其扩展为变换矩阵,再使用变换矩阵对目标向量或其属性向量进行排序。在此过程中,读取的是目标向量,而目标向量包含的一个或多个子向量存储于连续的存储空间中,因此,无论是一次读取,还是多次读取,都是连续性读取,对存储的访问上是规整的,并不依赖于数据数值本身,也不是随机访问数据,进而能够获得更佳的数据访存的连续性效果,也更适用于硬件上的数据访存。
附图说明
图1为本发明实施例提供的排序***的示例性结构;
图2为本发明实施例提供的神经网络处理器的示例性结构;
图3为本发明实施例提供的向量排序方法的示例性流程;
图4为本发明实施例提供的向量排序方法的另一示例性流程;
图5为本发明实施例提供的比较累加操作示意图;
图6为本发明实施例提供的将排序位置向量扩展为变换矩阵的示意图;
图7为本发明实施例提供的向量排序方法的又一示例性流程;
图8a为本发明实施例提供的关系子向量、关系子向量矩阵、关系向量矩阵示意图;
图8b为本发明实施例提供的关系子向量矩阵、排序位置子向量的示意图;
图9为本发明实施例提供的变换子矩阵的示意图;
图10为本发明实施例提供的按列扩展得到分块的示意图;
图11为本发明实施例提供的子排序向量分割示意图;
图12为本发明实施例提供的向量排序方法的又一示例性流程。
具体实施方式
本发明实施例提供了向量排序方法与排序***,以解决现有的排序方式不利于硬件规整化的问题。
从功能上,请参见图1,上述排序***示例性地包括:排序位置向量生成单元1、扩展单元2和排序单元3。本文后续将结合方法实施例介绍上述各单元的功能。
排序***可进一步包括多个排序子***。假定排序***包括x个排序子***,x个排序子***可用于对同一目标向量进行排序。当然,也可分别对不同的目标向量进行排序。
对于存在多个排序子***的情况,排序位置向量生成单元1可进一步包括多个排序位置向量生成子单元,扩展单元2可进一步包括多个扩展子单元,排序单元3可进一步包括多个排序子单元。
一个排序子***可包括一个或多个排序位置向量生成子单元、扩展子单元和排序子单元。排序位置向量生成子单元、扩展子单元和排序子单元可部署于同一设备中,也可独立部署于不同的设备中。
上述排序***可应用于多个技术领域,具体可为AI芯片,AI芯片在硬件上可包括一个或多个chip/SIP(神经网络处理器),请参见图2,每一chip
/SIP可包括:
向量寄存器;
扩展器或填充器;
矩阵寄存器;
向量乘矩阵计算器(VMM);
累加器;
标量向量比较计算器(VCMP);
寄存器(VA)。
VMM、累加器和VA可构成运算器(MAC)。
特殊矩阵寄存器的宽度与VMM、VCMP的宽度是对齐的。例如,特殊矩阵寄存器宽度为512比特(可存储16个数据),则VMM和VCMP的宽度也是16个数据。
chip/SIP内部器件可通过指令(instruction)进行相应操作。
此外,chip/SIP也可包括内存。
在人工智能和科学计算领域,VMM、累加器是常见架构能力或者硬件操作资源。在本发明中,可复用已有的硬件操作资源实现排序。
每一chip/SIP可运行一个或多个线程。可将运行一个线程的chip/SIP视为一个排序子***(如果一个chip/SIP运行两个线程,可视为两个排序子***)。
若一个chip/SIP运行多个线程,所运行的多个线程在硬件上共用前述的向量寄存器、扩展器、特殊矩阵寄存器、VMM运算器、累加器、VCMP运算器和VA寄存器。
前述的排序位置向量生成子单元、扩展子单元、排序子单元的功能,可由前述的向量寄存器、扩展器、特殊矩阵寄存器、VMM运算器、累加器、VCMP运算器和VA寄存器通过执行指令协调工作完成。
在应用层面上,是有排序软件(以下简称软件)对chip/SIP进行调用,来执行本发明所提供的排序方法。
在对一个目标向量进行排序方面,无论是使用多个排序子***还是使用一个排序***完成,其排序方法均可采用本发明实施例所提供的排序方法。
可以理解的是,当一个排序子***用于完成一个目标向量排序时,其所执行的步骤与排序***所执行的步骤相同。
图3示出了由排序***或排序子***对一目标向量进行排序的示例性步骤,包括:
S1:通过目标向量生成排序位置向量。
其中,目标向量包括N个元素,N为正整数。
具体到chip/SIP,可读取目标向量,将读取的目标向量存储于图2所示的向量寄存器中作为左操作数,并将目标向量存储于图2所示的特殊矩阵寄存器中,作为右操作数。
可由前述的排序位置向量生成单元1或排序子***的排序位置向量生成子单元执行步骤S1。
其中,排序位置向量包括N个元素,排序位置向量第i个元素的取值代表目标向量中第i个元素在N个元素中的排序。
在一个示例中,i为不小于N的正整数,或者,i大于等于0,小于等于N-1。
当然,i也可从0、1之外的数值开始取值,譬如N=100,i可从1000开始取值,其最大为1099。
在一个示例中,请参见图4,进一步的,可通过下述方式生成排序位置向量:
S10:读取目标向量;
其中,目标向量包括一个或多个子向量,其中任意一个子向量都是存储于连续的存储空间中的。
在一个示例中,在读取目标向量时,对目标向量的任意一个子向量,都是连续读取的,而不是随机访问数据元素,从而能够获得更佳的数据访存的连续性效果。
S11:将目标向量中的每一元素,与目标向量中的N个元素比较大小,得到与每一元素对应的关系向量。
其中,关系向量包括N个元素,任一元素的取值为第一取值或第二取值。
可将上述每一元素使用第i个元素表示,将目标向量中的N个元素的任一元素使用第j个元素表示。
具体的,假定是将第i个元素与目标向量中的第j个元素相比较,那么,在比较时,若第j个元素小于第i个元素,或者,第j个元素等于第i个元素同时第j个元素在目标向量中的排序索引小于等于第i个元素在目标向量中的排序索引(index),将关系向量中的第j个元素设置为第一取值;
反之,若第j个元素大于第i个元素,或者,第j个元素等于第i个元素同时第j个元素在目标向量中的排序索引大于第i个元素在目标向量中的排序索引,将关系向量中的第j个元素设置为第二取值。
第一取值可为0,第二取值可为1,或者相反,取决于是降序排列还是升序排列。
目标向量中的元素可能是特殊浮点数。例如:
INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。例如,当用 0 除一个整数时便会得到+INF;相应的,如果用 0 除一个负整数也会得到-INF。其中,+INF表示正无穷大,-INF表示负无穷大。
NAN:NAN来自于任何未定义结果(非法)的浮点数运算。"nan"是 not a number 的缩写。产生这个值的常见例子有:对负数开平方,对负数取对数,0.0/0.0,0.0*∞, ∞/∞等。
NAN又分成两类:QNAN(Quiet NAN)和SNAN(Singaling NAN)。QNAN与SNAN的不同之处在于,QNAN的尾数部分最高位定义为1,SNAN最高位定义为0;QNAN一般表示未定义的算术运算结果,最常见的莫过于除0运算;SNAN一般被用于标记未初始化的值,以此来捕获异常。
若第i个元素和第j个元素中的至少一个为特殊浮点数,则在一个示例中,在进行比较时可采取如下的比较规则:
1),若参与比较的元素为特殊浮点数NAN(SNAN或QNAN均可),将NAN作为最大数或最小数进行比较;其中,最大数大于正无穷大;最小数小于负无穷大;
举例来讲,假定第i个元素为正无穷大,第j个元素为NAN作为最大数,则第i个元素小于第j个元素。
2),若第i个元素与第j个元素均为NAN,第i个元素与第j个元素相等;
3),若第i个元素与第j个元素均为特殊浮点数+INF,第i个元素与第j个元素相等;
4),若第i个元素与第j个元素均为特殊浮点数-INF,第i个元素与第j个元素相等。
在另一个示例中,可也采取如下规则比较大小:
若第i个元素和第j个元素中的至少一个为特殊浮点数,将特殊浮点数按照其编码格式解析为整数类型的数值来进行比较;
特殊浮点数包括:NAN, +INF, -INF或数字;数字包含规格数或非规格数;NAN包含SNAN和QNAN。
或者,在另一个示例中,可也采取如下规则比较大小:
若第i个元素和第j个元素中的至少一个为浮点数,将浮点数作为整数类型的数值来进行比较。
S12:将目标向量中各元素对应的关系向量累加,得到排序位置向量。
也即,目标向量中各元素对应的关系向量的累加结果为排序位置向量;
在一个示例中,可顺序将目标向量中的每一元素,分别与目标向量中的所有元素比较大小,得到关系向量,然后将该关系向量与上一次的累加结果进行累加。因此,若目标向量有N个元素,则可视为进行了N次比较累加操作(指令为VCMPAC)。
举例来讲,给定一个向量{E3,E2,E1,E0},其取值为{4,5,3,5},则进行4次比较累加操作。
排序位置向量初始为0000。
请参见图5,第0次VCMPAC(cycle0),是使用E0分别与E0-E3比较,得到一个关系向量,再累加到排序位置向量。
具体到chip/SIP,是在VCMPAC指令下,通过VCMP运算器使用E0(左操作数)分别与特殊矩阵寄存器中的右操作数E0-E3比较,得到一个关系向量,再通过累加器将它累加到VA中。
第1次VCMPAC(cycle1),是使用E1分别与E0-E3比较,得到一个关系向量,然后累加到当前的排序位置向量(观察图5可知,是将关系矩阵按列做实时累加);
以此类推。第3次VCMPAC后,得到的就是最终的排序位置向量(Order Vector)。具体到chip/SIP,第3次VCMPAC后VA中存储的是最终的排序位置向量。此时在VA中存储的数据(VA result)就是最终的排序位置向量。
需要说明的是,VCMPAC的输入数据可为浮点型,累加到VA的是整形数字UINT32(排序向量)。VA输出数据时,上层应用软件选择是否转换成UINT16/UINT8。
S2:将排序位置向量扩展成为N*N的变换矩阵(Transformation Matrix)。
其中,在变换矩阵的第i行向量中,第s个位置的元素等于1;s等于排序位置向量中第i个元素的取值。
也即,扩展方式是:令变换矩阵的第i行第s个位置的元素等于1,其他为0。
举例来讲,请参见图6,假定排序位置向量为{2,1,3,0},可将其扩展为4*4的变换矩阵,具体的:
对于变换矩阵的第0行,沿用前例,排序位置向量中的第0个元素取值为2,则令变换矩阵的第0行第2个元素等于1,其他为0。
对于变换矩阵的第1行,沿用前例,排序位置向量中的第1个元素取值为1,则令变换矩阵的第1行第1个元素等于1,其他为0。
对于变换矩阵的第2行,沿用前例,排序位置向量中的第2个元素取值为3,则令变换矩阵的第2行第3个元素等于1,其他为0。
对于变换矩阵的第3行,沿用前例,排序位置向量中的第3个元素取值为0,则令变换矩阵的第3行第0个元素等于1,其他为0。
步骤S2可由前述的扩展单元2或扩展子单元执行。
具体到chip/SIP,可将VA中的排序位置向量传输到向量寄存器,经扩展器通过上述介绍的扩展方式得到变换矩阵,将变换矩阵存至特殊矩阵寄存器中。
在进行变换矩阵扩展时,如果是为了计算对目标向量进行排序,输入扩展器的是UINT8/UINT16/UINT32的向量,扩展到特殊矩阵寄存器里面是整数0或者1的数据,供后续排序计算。
而如果是为了计算对目标向量的属性向量进行排序,输入扩展器的可是UINT8/UINT16/UINT32的向量,扩展到特殊矩阵寄存器里面是UINT8的0或者1(特殊矩阵寄存器看到的只是UINT8)。
S3:使用变换矩阵,进行排序操作。
步骤S3可由排序单元3或排序子单元执行。
请参见图4,排序操作可包括:对目标向量进行排序(S31)以及对目标向量所对应的属性向量进行排序(S32)中的至少一种。
进一步的,可将目标向量乘以变换矩阵,得到排序向量;
将目标向量所对应的属性向量乘以变换矩阵,得到排序属性向量。
属性向量中的元素是目标向量中元素的属性。举例来讲,目标向量的排序索引向量,即是目标向量的一种属性向量。例如,目标向量{E3,E2,E1,E0},其取值为{4,5,3,5},其排序索引向量是{3,2,1,0}。
排序索引向量对应的排序属性向量可称为指针向量,用于表征:排序后目标向量中各元素所在的位置。
沿用前例,给定的目标向量{E3,E2,E1,E0},其取值为{4,5,3,5},则得到的排序向量为{E1,E3,E2,E0},其指针向量是{1,3,2, 0}。
在另一个示例中,假定有如下应用场景,对N个队列进行排序,其排序的方式是,对这N个队列的第1个元素(N个队列的第1个元素构成目标向量)进行排序,队列也依据第1个元素的排序顺序进行排序(例如,队列中第一个元素是门牌号,队列中的其他元素包括地址、电话等,可根据门牌号对N个队列进行排序)。假定某一队列中有n个元素,那么除第1个元素之外的n-1个元素,可视为第1个元素的属性向量。
具体到chip/SIP,可将目标向量或属性向量读取到向量寄存器中作为左操作数,将特殊矩阵寄存器中的变换矩阵作为右操作数。
通过VMM将目标向量(左操作数)乘以变换矩阵(右操作数),即得到一个排序向量(sorted vector),而将属性向量乘以变换矩阵,即得到一个按数值排序的排序属性向量(Pointer vector)。
需要说明的是,输入数据为目标向量时,VMM将输入数据当作无符号整数,和变换矩阵的0/1数字相乘。
输入数据为属性向量时,输入是UINT8/UINT16/UINT32类型的数据,输出到VA是和输入同式,最后从VA传输到向量寄存器,或者从VA传输到L1(内存)时,再选择性将数据转换成UINT8/UINT16类型。
可见,在本发明实施例中,读取目标向量后,通过目标向量生成排序位置向量,将其扩展为变换矩阵,再使用变换矩阵对目标向量或其属性向量进行排序。在此过程中,读取的是目标向量,而目标向量包含的一个或多个子向量存储于连续的存储空间中,因此,无论是一次读取,还是多次读取,都是连续性读取,对存储的访问上是规整的,并不依赖于数据数值本身,也不是随机访问数据,进而能够获得更佳的数据访存的连续性效果,也更适用于硬件上的数据访存。
尤其是在大规模并行排序时,采用向量化的排序方式,能够提高数据访存的连续性,避免数据访存的随机性,进而能够有效解决访存冲突,降低访存复杂度,降低硬件设计复杂度与成本。
前已述及,现有依靠软件实现的排序方式,其数据访存随机化,读写存储的地址依赖于数据数值本身。
以冒泡排序为例,比较相邻的元素,如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作。每次读取一个数,本次所读取的数是依赖数的取值而定,因此有很多随机访问。
另外,常见的加速做法是若处理器可支持多个线程,例如16个线程,一般会令16个线程去对16个独立的向量进行排序。
而存储数据的内存一般不支持16套独立的访存资源,或者支持16路随机访存后性能会因为动态访存冲突而下降。
在现有的排序方式中,线程每次(一个时钟周期)只处理32bit(一个数据),16个线程16*32=512bit,则内存支持一次访问连续的512bit性能比较好。
但是,16个线程所处理的16个向量是独立的,16个线程所需访问的数据一般并不能保证恰好在连续的512bit中,因此,在实际中,经常存在访问冲突的现象,存在瓶颈。
此外,即便16个线程访问的数据在同一连续的512bit中,由于其读取一次数据,只使用512bit中的32bit(即一个数据),因此,就一个线程而言,其对所读取数据的利用率是比较低的。
另一方面,当排序向量的元素数目上升时,算法需要分到多个排序子***进行协同排序,多个排序子***需要继续保持良好的访存特点。
本实施例可以使用x个线程对同一目标向量进行排序。这x个线程,可由硬件上的x个排序子***(简称硬件排序子***)各执行一个线程,也可以是软件的x个线程顺序分时复用小于x个硬件排序子***。
请参见图7,使用x个线程对同一目标向量进行排序的排序方法示例性包括如下步骤:
S71:各线程读取第一目标子向量和第二目标子向量。
具体到chip/SIP,可将读取的第一目标子向量存储于图1所示的特殊矩阵寄存器中作为右操作数,并将第二目标子向量(完整或部分的目标向量)一次性或分批读入存储于图1所示的向量寄存器中,作为左操作数,将左操作数的每个元素和右操作数的第一目标子向量的每个元素做比较。
也即,第一目标子向量和第二目标子向量可分别作为右操作数和左操作数。
第一目标子向量和第二目标子向量均属于目标向量;任一线程与其他线程所读取的第一目标子向量的宽度可相同或不同(第二目标子向量亦同理)。
在一个示例中,每一线程所读取的第一目标子向量的宽度可由其寄存器宽度决定。
例如来讲,假定某一线程所对应的排序子***的寄存器(特殊矩阵寄存器)的存储宽度为X,X对应y个元素,则该线程一次读取的第一目标子向量宽度可为y个元素,可令线程尽可能一次性读取的第一目标子向量与寄存器宽度相一致。
在读取之前,可由软件将目标向量分割为多个第一目标子向量,再分别由线程读取。需要说明的是,在将目标向量分割为第一目标子向量时,不需要是均匀分割。
举例来讲,假定目标向量包括E0-E7,取值为{1,2,4,3,5,8,7,6},假定d=4,则可将目标向量分成4个第一目标子向量:{1,2},{4,3},{5,8},{7,6}。当然,也可分为{1},{2,4,3},{5,8,7},{6}。
此外,假定某一线程一次最多可读取y个元素,但其所读取的第一目标子向量(尤其是最后一个第一目标子向量)所包含的元素可小于y,然后填充到y个元素,填充的数值为排序意义上的最大值或者最小值,使得填充的数值被排序在排序结果的最末尾的位置。
在另一个示例中,每一线程所读取的第一目标子向量的宽度也可由线程所读取数据的最大宽度所决定。
S72:任一线程将读取的第二目标子向量中的每一元素,分别与所读取的第一目标子向量中的各个元素比较大小,得到与第二目标子向量中的每一对应的关系子向量。
S71和S72是前述S11的具体实现步骤。
第二目标子向量可为完整的目标向量,也可包含目标向量中的部分元素。
关系子向量中的任一元素亦为第一取值或第二取值。
沿用前例,假定第一目标子向量为{E7、E6},第二目标子向量为{E0、E1}。请参见图8a,第二目标子向量中的元素E1其对应的关系子向量为(1,1)。
第二目标子向量中各元素所对应的关系子向量所构成的矩阵(关系子向量矩阵),是目标向量各元素对应的关系向量所构成的矩阵(简称为关系向量矩阵)的子矩阵。
例如,请参见图8a,第二目标子向量{E4、E5、E6}与第一目标子向量{E3、E4、E5}相比较得到的关系子向量矩阵,是整个关系向量矩阵的子矩阵。
具体的,在比较时,可将第二目标子向量中的每一元素表示为第i个元素,将第一目标子向量中的任一元素表示为第j个元素,对两元素进行比较。
若第j个元素小于第i个元素,或者,第j个元素等于第i个元素同时第j个元素在目标向量中的排序索引小于等于第i个元素在目标向量中的排序索引,将关系子向量中的第j个元素设置为第一取值;
若目标向量中的第j个元素大于第i个元素,或者,第j个元素等于第i个元素同时第j个元素在目标向量中的排序索引大于第i个元素在目标向量中的排序索引,将关系子向量中的第j个元素设置为第二取值。
涉及浮点数的比较规则请参见前述的介绍,在此不作赘述。
S73:任一线程将得到的关系子向量进行累加处理,得到排序位置子向量。
在一个示例中,可设计不同的线程读取不同的第一目标子向量,但均将目标向量作为第二目标子向量。在此种情况下,将线程得到的关系子向量进行累加,就可得到排序位置向量的一个子向量(排序位置子向量)。
以目标向量为E0-E7为例,若将目标向量分成4个第一目标子向量:{E0,E1},{E2,E3},{E4,E5},{E6,E7}。请参见图8b,可设计线程1读取第一目标子向量{E6,E7},该线程将目标向量作为第二目标子向量,通过比较,可得到8个关系子向量,将这8个关系子向量累加,得到的是与第一目标子向量对应的排序位置子向量,也即图8b最后一行中的{7,6}。
具体到chip/SIP,是通过VCMP运算器使用向量寄存器中的左操作数(目标向量)分别与特殊矩阵寄存器中的右操作数(第一目标子向量)相比较,得到一个关系子向量,再通过累加器将它累加到VA中。
同理,设计线程2读取第一目标子向量{E5,E4},该线程将目标向量作为第二目标子向量,通过比较,可得到8个关系子向量,将这8个关系子向量累加,得到的是与第一目标子向量{E5,E4}对应的排序位置子向量,也即图8b最后一行中的{4,5}。以此类推,不再赘述。
S73是前述S12的具体实现步骤。
此外,单个线程所执行的比较累加操作,也可分块完成。例如,可进一步将第一目标子向量分为e个子块,将第二目标子向量的各个元素,分别与各子块中的元素比较大小,得到对应的关系向量子块。
将得到的各关系向量子块相累加,得到排序位置子块。e个排序位置子块拼接起来,则构成前述的排序位置子向量。
或者,可进一步的将第二目标子向量分为多个子块,将各子块中的元素,分别与第一目标子向量中的元素比较大小,得到对应的关系向量子块,此时,将各子块累加即可得到排序位置子向量。
在另一个示例中,也可设计不同的线程读取同一第一目标子向量(例如{E0、E1}),将目标向量分为多个第二目标子向量,由不同的线程读取不同的第二目标子向量,再进行比较。在此种情况下,可将各线程得到的关系子向量进行累加,也可得到与第一目标子向量{E0、E1}对应的排序位置子向量,例如图8b最后一行中的{7,6}。
之后,不同的线程再读取另一第一目标子向量(例如{E2、E3}),将目标向量分为多个第二目标子向量,由不同的线程读取不同的第二目标子向量。再进行比较。在此种情况下,可将各线程得到的关系子向量进行累加,也可得到与第一目标子向量{E2、E3}对应的排序位置子向量,例如图8b最后一行中的{4,5},以此类推,不作赘述。
在这种分配下,单一线程内也可将第一目标子向量、第二目标子向量中的至少一个进一步的分块,再进行比较,在此不作赘述。
前述提及,排序子***可进一步包括至少一个排序位置向量生成子单元。可由一个排序位置向量生成子单元完成步骤S73中所涉及的某个线程的比较累加操作,也可由多个排序位置向量生成子单元共同参与完成某一线程的比较累加操作。
S74:将排序位置子向量扩展成为变换子矩阵。
可由一个线程,也可由多个线程进行扩展。
在一个示例中,变换子矩阵为N列,其行数与排序位置子向量所包含的元素个数相同。
其中,在变换子矩阵的第r行向量中,第s个位置的元素等于第三取值;s等于排序位置子向量中第r个元素的取值;变换矩阵包括各线程得到的变换子矩阵;
举例来讲,以图9中排序位置子向量{7,6}为例,其所对应的变换子矩阵是两行、N列。
在排序位置子向量{7,6}中,第0个元素为7,则在变换子矩阵中,第0行向量中的第7个元素等于第三取值(例如1);第1个元素为6,则在变换子矩阵中,第1行向量中的第6个元素等于第三取值(例如1)。
具体到chip/SIP,可将VA中的排序位置子向量传输到向量寄存器,经扩展器通过上述介绍的扩展方式得到变换子矩阵,将变换子矩阵存至特殊矩阵寄存器中。
前述提及,排序子***可进一步包括至少一个扩展子单元。可由一个扩展子单元完成某一线程所涉及的矩阵变换,也可多个扩展子单元共同参与完成某一线程所涉及的矩阵变换变换。
在一个示例中,上述将相应的排序位置子向量扩展成为变换子矩阵,可进一步包括T次按列扩展,这T次按列扩展由一个扩展子单元完成,或由多个扩展子单元共同完成。
每一次按列扩展会得到一个分块,则变换子矩阵可包括T个分块。
具体的,假设排序位置子向量中任一元素的索引值为a,取值为A;
则每次按列扩展得到一个分块可具体包括:
对于排序位置子向量中任一元素,若第t个分块中存在目标列,将第t个分块中第a行目标列所对应的元素设置为第三取值,将第t个分块中第a行的其他元素设置为第四取值;目标列在变换子矩阵中的列索引值等于A。
沿用前例,以图9中排序位置子向量{7,6}为例,其按列扩展得到的分块如图10所示:排序位置子向量{7,6}的第0个元素取值为7,第1个元素取值为6,因此,其对应的目标列分别为第6列第7列。
在第3分块包括第6列和第7列(这里的列索引指在变换矩阵中的列索引),将第3分块中第0行的第6列所对应的元素设置为第三取值(例如1),第0行其他元素设置为第四取值(例如0),同理,将第3分块中第0行的第7列所对应的元素设置为第三取值(例如1),第0行其他元素设置为第四取值(例如0)。
S75:将目标向量中的子向量乘以相应的变换子矩阵,得到子排序向量。
可由一个或多个线程执行完成步骤S75。
具体的,可将目标向量分为多个子向量,每一线程读取分配给自己的子向量,将各子向量作为整数,乘以相应的变换子矩阵,得到子排序向量,将各子排序向量相累加,即可得到排序向量。
在一个示例中,子排序向量所包含的元素的个数为N。
具体到chip/SIP,可将子向量读取到向量寄存器中作为左操作数,将特殊矩阵寄存器中的变换子矩阵作为右操作数,通过VMM将左操作数乘以右操作数,即得到一个子排序向量。
前述提及,变换子矩阵可进一步包括按列扩展得到的分块。在另一个示例中,可进一步的将子向量乘以按列扩展得到的T个分块,得到子排序向量的T个分向量。
以图10为例,假定令子向量{7,6}乘以图10中标出来的分块,得到的分向量是(7,6),而乘以其他分块,得到的分向量都是(0,0)。这T个分向量拼接起来对应的子排序位置向量是(7,6,0,0,0,0,0,0)。当然,在实际运算时,可不进行拼接。
S76:将各子排序向量相累加,得到排序向量。
此步骤可由其中一线程执行,也可由x个线程之外的线程,或者其他设备完成。
沿用前例,子向量{7,6}最后对应的子排序位置向量是(7,6,0,0,0,0,0,0)。
同理,子向量{4,5}最后对应的子排序位置向量是(0,0,5,4,0,0,0,0);
子向量{3,0}最后对应的子排序位置向量是(0,0,0,0,3,0,0,0);
子向量:{1,2}最后对应的子排序位置向量是(0,0,0,0,0,2,1,0)。
将上述子排序位置向量相加,得到的排序向量是(7,6,5,4,3,2,1,0)。
前述介绍了子向量乘以分块得到分向量的操作,此种情况下,可将各分向量中同列的元素相累加。
将读取到的子向量乘以按列扩展得到的分块的操作,可由一个排序子单元完成,或由属于同一排序子***的多个排序子单元共同完成。
请参见图11,在累加时,也可对子排序向量进行分割,分别进行部分的累加操作。
S77:将子向量所对应的子属性向量,乘以相应的变换子矩阵,得到子排序属性向量;
可由一个或多个线程执行完成步骤S76。
可将属性向量分为多个子属性向量,每一线程将分配给自己的子属性向量,乘以相应的变换子矩阵,得到子排序属性向量。
在一个示例中,子排序属性向量所包含的元素的个数为N。
具体的,线程可将任一子属性向量分别乘以按列扩展得到的T个分块,得到子排序属性向量的T个子排序属性分向量。
具体到chip/SIP,可将子属性向量读取到向量寄存器中作为左操作数,将特殊矩阵寄存器中的变换子矩阵的分块作为右操作数,将子属性向量乘以变换子矩阵,即得到一个按数值排序的子排序属性分向量。
S78:将各子排序属性向量相累加,得到排序属性向量。
此部分与S76相类似,只是将子属性向量替换了子向量,在此不作赘述。
根据需求,在仅需要排序向量时,可不执行S77-S78,同时,在仅需求排序属性向量时,可不执行S75-S76。当然,若两种向量都需要,则全部执行。
各步骤中所涉及的数据类型可参考前述实施例,在此不作赘述。
需要说明的是,除了用多个线程实现分批处理,也可用一线程多批次进行排序操作,得到排序子向量/子排序属性向量再予以累加。
上述排序方法主要介绍的是全排序。除全排序外,还有Top K排序,K大于等于1,小于等于待排序向量的元素总个数。
下面介绍,如何通过x个排序子***执行x个线程对待排序向量进行Top K排序。
请参见图12,其示例地包括如下步骤:
S121:将待排序向量分割为多个目标向量。
其中,每一线程对应至少一个目标向量。
此步骤可由软件执行。
S122:由各线程分别对相应的目标向量进行排序,得到排序向量。
每一线程所执行的排序方式可参见前述的记载,在此不作赘述。
S123:从每一排序向量中选择K个极值,得到目标待排序向量;
这里的极值可包括最大值或者最小值。
此步骤可由软件执行。
之后,循环执行分组排序操作,直至满足预设条件。
分组排序操作包括:
S124:将目标待排序向量分割为m个目标向量。
此步骤可由软件执行。
S125:由n个线程分别对m个目标向量中的其中一个目标向量进行排序,得到全排序向量。
n不大于m。
每一线程所执行的排序方式可参见前述的记载,在此不作赘述。
S126:从每一全排序向量中选择K个极值,得到mK个极值;
此步骤可由排序软件执行。
S127:判断是否满足预设条件;若是,进入S129,若否,进入S128;
预设条件为软件预置的条件,本领域技术人员可根据需要灵活设计。
例如,示例性的可设计预设条件:mK个极值小于等于某一阈值。
S128:将mK个极值重新作为目标待排序向量,返回S124;
S129:使用一个线程对mK个极值进行排序,得到排序向量以及排序属性向量中的至少一种。
S1210:确定最终Top K排序结果。
其中,最终Top K排序结果包括:目标排序向量中的K个极值,以及,目标排序向量中的K个极值在排序属性向量中对应的K个元素中的至少一种;目标排序向量包括:满足预设条件后使用一个线程进行排序得到的排序向量;
综上,本发明技术方案具有如下优点:
一,完全没有随机访存,向量访存非常规整,访存复杂度非常低。
二,排序可以均匀分到各个chip/SIP上独立计算,最后做一次小计算量的reduce(累加)即可。数据访问方式简单、带宽小:因为多个chip、SIP间可完全复用向量,数据带宽非常小。
三,算法通用。
本发明实施例还要求保护一种存储介质,该存储介质中存储有计算机可执行指令,计算机可执行指令被处理器加载并执行时,实现如上任一项所述向量排序方法步骤。
本发明实施例还要求保护可被计算机执行的指令。例如,比较累加操作(VCMPAC)指令、O2M(排序位置向量扩展为变换矩阵)指令。
现分别进行介绍。
VCMPAC指令,用于在对目标向量进行排序的过程中比较大小。
该指令所涉及的向量包括:第一操作向量,第二操作向量和第三操作向量,所涉及的标量至少包括第一操作标量。
上述VCMPAC指令用于执行如下操作:
使用第一操作标量作为排序索引,从第一操作向量里取出相应的1个元素,将取出的元素和第二操作向量中的每个元素按照前述向量排序方法做大小比较,得到比较结果并累加到第三操作向量中。
其中,比较结果包括第一取值或者第二取值;第一操作向量和第二操作向量是完整的目标向量,或者是目标向量的子向量。
第一取值和第二取值,以及比较的具体方式请参见前述记载,在此不作赘述。
在不同的应用情况下,第一操作向量可为前述的目标向量或第二目标子向量或第二目标子向量的一个分块,第二操作向量可为前述完整的目标向量或第一目标子向量或第一目标子向量的一个分块。
可选的,VCMPAC指令还可涉及第二操作标量和第三操作标量。
当目标向量的长度大于向量寄存器的宽度时,第二操作标量用于表征第一操作向量在目标向量(原始向量)中的分段序号,第三操作标量用于表征第二操作向量在目标向量中的分段序号;
当目标向量的长度大于向量寄存器的宽度时,VCMPAC指令还用于根据第一操作标量和第一操作标量的分段序号,读取目标向量中的部分数据,以对目标向量进行分段比较运算。
以第一操作向量为例,假定向量寄存器宽度为512比特,当前第一操作标量中的分段序号为2,则VCMPAC指令将从索引512*(2-1)开始读取512比较的数据。
第二操作向量与之同理,在此不作赘述。
O2M指令,用于在对目标向量进行排序的过程中生成变换矩阵的分块。
该指令所涉及的向量包括:第四操作向量,所涉及的标量包括第四操作标量;所涉及的矩阵包括操作矩阵;其中:
第四操作向量是目标向量中的一个子向量,长度等于向量寄存器宽度;
操作矩阵为前述向量排序方法中变换矩阵的一个分块;
第一操作标量用于表征操作矩阵在变换矩阵中的分块索引值;
分块索引值用于计算该操作矩阵中每一列在变换矩阵中对应的真实列号;
以操作矩阵的第p列为例,假定分块索引值为P,每一分块包括16列,则分块索引值为P的操作矩阵的第p列,其真实列号为:P*16+p-1,或者P*16+p。
假定第四操作向量里的第a个元素的取值为A;
O2M指令用于执行如下操作:在操作矩阵中的第a行里,将真实列号(或称为列索引值)等于A(也即前述的目标列)的列元素设置为第三取值,将操作矩阵中第a行的其他元素设置为第四取值。
上述本实施例中的指令可用于进行全排序操作,假定线程所对应的寄存器宽度为512bit(16个元素),在一次性读取512bit的数据后,会进行比较累加、矩阵变换,矩阵乘再累加等操作。
每一时钟周期可比较一个元素,由于一次性读取了16个元素,因此,至少需要16个时钟周期,才会再次需要读取数据,并且,所读取的数据全部都可进行使用,使所读取的数据利用率大大提高。
同时,由于至少每需要16个时钟周期才再次读取数据,而不是每个时钟周期都需要读取数据,因此,其数据访问冲突也大大降低。各线程可按索引顺序读取子向量,例如,假定共16个线程,将目标向量划分为16个子向量(子向量0-15),第0个时钟周期,第0个线程读取子向量0,第1个时钟周期读取子向量1,以此类推,第15个时钟周期读取子向量15,相互之间没有访问冲突。
在本发明其他实施例中,还要求保护一种向量排序方法,用于对目标向量进行排序,该方法包括:
步骤a:读取目标向量;
具体细节请参见本文前述记载,在此不作赘述。
步骤b:接收上述VCMPAC指令;
其中,VCMPAC指令用于执行:
将目标向量中的每一元素,与目标向量中的N个元素比较大小,得到每一元素对应的关系向量;其中,关系向量包括N个元素,任一元素的取值为第一取值或第二取值;
而目标向量中各元素对应的关系向量的累加结果为上述排序位置向量。
步骤c:将排序位置向量扩展成为N*N的变换矩阵;其中,在所述变换矩阵的第i行向量中,第s个位置的元素等于1;所述s等于所述排序位置向量中第i个元素的取值;
具体细节请参见本文前述记载,在此不作赘述。
步骤d:使用变换矩阵,进行排序操作。
其中,排序操作包括:对目标向量进行排序以及对目标向量所对应的属性向量进行排序中的至少一种。
具体细节请参见本文前述记载,在此不作赘述。
在本发明其他实施例中,还要求保护一种向量排序方法,用于对目标向量进行排序,该方法包括:
步骤A:读取目标向量;
具体细节请参见本文前述记载,在此不作赘述。
步骤B:通过目标向量生成排序位置向量。
具体细节请参见本文前述记载,在此不作赘述。
步骤C:将排序位置向量扩展成为N*N的变换矩阵。
在变换矩阵的第i行向量中,第s个位置的元素等于1;s等于所述排序位置向量中第i个元素的取值。
具体的,可将排序位置子向量扩展成为变换子矩阵。变换子矩阵具体细节请参见本文前述记载,在此不作赘述。
在一个示例中,可进行T次按列扩展,每一次按列扩展得到一个分块,变换子矩阵则包括T次按列扩展得到的T个分块。
令排序位置子向量中任一元素的索引值为a,取值为A;则进行T次按列扩展,每次按列扩展得到一个分块可具体包括:
接收上述向量转矩阵(O2M)指令;
由O2M指令在对目标向量进行排序的过程中生成上述分块。
具体细节请参见本文前述记载,在此不作赘述。
步骤D:使用变换矩阵,进行排序操作。
其中,排序操作包括:对目标向量进行排序以及对目标向量所对应的属性向量进行排序中的至少一种。
具体细节请参见本文前述记载,在此不作赘述。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及模型步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或模型的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、WD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种向量排序方法,其特征在于,用于对目标向量进行排序,并适用于硬件上的数据访存;
所述对目标向量进行排序包括:
通过所述目标向量生成排序位置向量;其中,所述排序位置向量包括N个元素;所述排序位置向量第i个元素的取值代表所述目标向量中第i个元素在所述N个元素中的排序;所述通过所述目标向量生成排序位置向量至少包括:读取目标向量,所述目标向量包括一个或多个子向量,所述子向量存储于连续的存储空间中;
将所述排序位置向量扩展成为N*N的变换矩阵;其中,在所述变换矩阵的第i行向量中,第s个位置的元素等于1,且其他位置的元素等于0;所述s等于所述排序位置向量中第i个元素的取值;
使用所述变换矩阵,进行排序操作;所述排序操作包括:对所述目标向量进行排序以及对所述目标向量所对应的属性向量进行排序中的至少一种;所述对所述目标向量进行排序包括:将所述目标向量乘以所述变换矩阵,得到排序向量;所述对所述目标向量所对应的属性向量进行排序包括:将所述目标向量所对应的属性向量乘以所述变换矩阵,得到排序属性向量;
其中,所述通过所述目标向量生成排序位置向量包括:
读取目标向量;
将所述目标向量中的每一元素,与所述目标向量中的N个元素比较大小,得到所述每一元素对应的关系向量;所述目标向量中各元素对应的关系向量的累加结果为所述排序位置向量;所述关系向量包括N个元素,任一元素的取值为第一取值或第二取值;
若将所述目标向量中的每一元素使用第i个元素表示,将所述目标向量中的N个元素使用第j个元素表示,则所述比较大小包括:
若所述第j个元素小于所述第i个元素,或者,所述第j个元素等于所述第i个元素同时所述第j个元素在所述目标向量中的排序索引小于等于所述第i个元素在所述目标向量中的排序索引,将所述关系向量中的第j个元素设置为第一取值;
若所述目标向量中的第j个元素大于所述第i个元素,或者,所述第j个元素等于所述第i个元素同时所述第j个元素在所述目标向量中的排序索引大于所述第i个元素在所述目标向量中的排序索引,将所述关系向量中的第j个元素设置为第二取值;
其中,所述第一取值为0,且所述第二取值为1;或者,所述第一取值为1,且所述第二取值为0。
2.如权利要求1所述的方法,其特征在于,所述向量排序方法由排序***执行;所述排序***包括x个排序子***;每一排序子***运行一个线程;所述x个排序子***所执行的x个线程用于对同一目标向量进行排序,或者,分别对不同的目标向量进行排序。
3.如权利要求2所述的方法,其特征在于,
当所述x个线程用于对同一目标向量进行排序时,所述读取目标向量包括:
各线程读取第一目标子向量和第二目标子向量;所述第一目标子向量和第二目标子向量均属于所述目标向量;所述第一目标子向量包括至少一个元素,所述第二目标子向量包括至少一个元素。
4.如权利要求3所述的方法,其特征在于,所述将所述目标向量中的每一元素与目标向量中的N个元素比较大小,得到与所述每一元素对应的关系向量包括:
任一线程将读取的第二目标子向量中的每一元素,分别与读取的第一目标子向量中的各元素比较大小,得到与所述第二目标子向量中每一元素对应的关系子向量;所述关系子向量中的任一元素为第一取值或第二取值;
其中,所述第二目标子向量中每一元素对应的关系子向量所构成的矩阵,是关系向量矩阵的子矩阵;所述关系向量矩阵包括所述目标向量各元素对应的关系向量;
若将所述第二目标子向量中的每一元素使用第i个元素表示,将所述第一目标子向量中的任一元素使用第j个元素表示,则所述比较大小包括:
若所述第j个元素小于所述第i个元素,或者,所述第j个元素等于所述第i个元素同时所述第j个元素在所述目标向量中的排序索引小于等于所述第i个元素在所述目标向量中的排序索引,将关系子向量中的第j个元素设置为第一取值;
若所述目标向量中的第j个元素大于所述第i个元素,或者,所述第j个元素等于所述第i个元素同时所述第j个元素在所述目标向量中的排序索引大于所述第i个元素在所述目标向量中的排序索引,将关系子向量中的第j个元素设置为第二取值。
5.如权利要求4所述的方法,其特征在于,
若所述第i个元素和所述第j个元素中的至少一个为特殊浮点数,在比较大小时所涉及的比较规则包括:
若参与比较的元素为特殊浮点数NAN,将NAN作为最大数或最小数进行比较;其中,最大数大于正无穷大;最小数小于负无穷大;所述NAN包含SNAN或QNAN;
若所述第i个元素与所述第j个元素均为NAN,所述第i个元素与所述第j个元素相等;
若所述第i个元素与所述第j个元素均为特殊浮点数+INF,所述第i个元素与所述第j个元素相等;
若所述第i个元素与所述第j个元素均为特殊浮点数-INF,所述第i个元素与所述第j个元素相等;
其中,+INF表示正无穷大,-INF表示负无穷大。
6.如权利要求4所述的方法,其特征在于,
若所述第i个元素和所述第j个元素中的至少一个为特殊浮点数,在比较大小时所涉及的比较规则包括:
将所述特殊浮点数按照其编码格式解析为整数类型的数值来进行比较;
所述特殊浮点数包括:NAN, +INF, -INF或数字;所述数字包含规格数或非规格数;所述NAN包含SNAN或QNAN;
或者,
若所述第i个元素和所述第j个元素中的至少一个为浮点数,所述将所述目标向量中的每一元素与目标向量中的N个元素比较大小所涉及的比较规则包括:
将所述浮点数作为整数类型的数值来进行比较。
7.如权利要求1-6任一项所述的方法,其特征在于,
所述将所述排序位置向量扩展成为N*N的变换矩阵包括:
将排序位置子向量扩展成为变换子矩阵;其中,在所述变换子矩阵的第r行向量中,第s个位置的元素等于第三取值,其他位置的元素等于0;所述排序位置子向量为所述排序位置向量的子向量;所述s等于所述排序位置子向量中第r个元素的取值;所述变换矩阵包括各线程得到的变换子矩阵;
所述将排序位置子向量扩展成为变换子矩阵包括:
进行T次按列扩展;其中,每一次按列扩展得到一个分块;所述变换子矩阵包括T次按列扩展得到的T个分块;
将任一子向量乘以相应的变换子矩阵,得到子排序向量包括:
将所述任一子向量分别乘以按列扩展得到的T个分块,得到T个分向量;所述子排序向量包括所述T个分向量;
任一子属性向量乘以相应的变换子矩阵,得到子排序属性向量包括:
将所述任一子属性向量分别乘以按列扩展得到的T个分块,得到T个子排序属性分向量;所述子排序属性向量包括所述T个子排序属性分向量;
所述排序位置子向量中任一元素的索引值为a,取值为A;
所述进行T次按列扩展,每次按列扩展得到一个分块包括:
对于所述排序位置子向量中任一元素,若第t个分块中存在目标列,将所述第t个分块中第a行目标列所对应的元素设置为第三取值,将所述第t个分块中第a行的其他元素设置为第四取值;所述目标列在所述变换子矩阵中的列索引值等于A。
8.如权利要求7所述的方法,其特征在于,所述对所述目标向量进行排序包括:
将所述目标向量分为多个子向量;
将任一子向量作为整数,乘以相应的变换子矩阵,得到子排序向量;所述子排序向量所包含的元素的个数为N;
将各子排序向量相累加,得到所述排序向量;
所述对所述目标向量所对应的属性向量进行排序包括:
将所述目标向量对应的属性向量分为多个子属性向量;
将任一子属性向量乘以相应的变换子矩阵,得到子排序属性向量;所述子排序属性向量所包含的元素的个数为N;
将各子排序属性向量相累加,得到所述排序属性向量。
9.如权利要求2所述的方法,其特征在于,
所述x个线程用于对待排序向量进行Top K排序;其中,K大于等于1,小于等于所述待排序向量的元素总个数;
在对目标向量进行排序之前,所述方法还包括:
将所述待排序向量分割为多个目标向量;每一线程对应至少一个目标向量;由各线程分别对相应的目标向量进行排序,得到排序向量;
在得到排序向量后,所述方法还包括:
从每一排序向量中选择K个极值,得到目标待排序向量;所述极值包括最大值或者最小值;
循环执行分组排序操作,直至满足预设条件;
所述分组排序操作包括:
将目标待排序向量分割为m个目标向量;
由n个线程分别对所述m个目标向量中的其中一个目标向量进行排序,得到全排序向量;n不大于m;
从每一全排序向量中选择K个极值,得到mK个极值;
判断是否满足预设条件;
若不满足所述预设条件,将所述mK个极值重新作为目标待排序向量,返回执行下一分组排序操作;
若满足所述预设条件,使用一个线程对所述mK个极值进行排序,得到排序向量以及排序属性向量中的至少一种;
确定最终Top K排序结果;其中,所述最终Top K排序结果包括:目标排序向量中的K个极值,以及,所述目标排序向量中的K个极值在排序属性向量中对应的K个元素中的至少一种;所述目标排序向量包括:满足预设条件后使用一个线程进行排序得到的排序向量。
10.一种排序***,所述排序***包括多个排序子***,其特征在于,所述排序子***用于对目标向量进行排序,并适用于硬件上的数据访存;所述目标向量包括N个元素;N为正整数;
所述排序子***包括:
排序位置向量生成单元,用于:
通过所述目标向量生成排序位置向量;其中,所述排序位置向量包括N个元素,所述排序位置向量第i个元素的取值代表所述目标向量中第i个元素在所述N个元素中的排序;所述通过所述目标向量生成排序位置向量至少包括:读取目标向量,所述目标向量包括一个或多个子向量,所述子向量存储于连续的存储空间中;
扩展单元,用于将所述排序位置向量扩展成为N*N的变换矩阵;其中,在所述变换矩阵的第i行向量中,第s个位置的元素等于1,且其他位置的元素等于0;所述s等于所述排序位置向量中第i个元素的取值;
排序单元,用于使用所述变换矩阵,进行排序操作;所述排序操作包括:对所述目标向量进行排序以及对所述目标向量所对应的属性向量进行排序中的至少一种;所述对所述目标向量进行排序包括:将所述目标向量乘以所述变换矩阵,得到排序向量;所述对所述目标向量所对应的属性向量进行排序包括:将所述目标向量所对应的属性向量乘以所述变换矩阵,得到排序属性向量;
其中,所述通过所述目标向量生成排序位置向量包括:
读取目标向量;
将所述目标向量中的每一元素,与所述目标向量中的N个元素比较大小,得到所述每一元素对应的关系向量;所述目标向量中各元素对应的关系向量的累加结果为所述排序位置向量;所述关系向量包括N个元素,任一元素的取值为第一取值或第二取值;
若将所述目标向量中的每一元素使用第i个元素表示,将所述目标向量中的N个元素使用第j个元素表示,则所述比较大小包括:
若所述第j个元素小于所述第i个元素,或者,所述第j个元素等于所述第i个元素同时所述第j个元素在所述目标向量中的排序索引小于等于所述第i个元素在所述目标向量中的排序索引,将所述关系向量中的第j个元素设置为第一取值;
若所述目标向量中的第j个元素大于所述第i个元素,或者,所述第j个元素等于所述第i个元素同时所述第j个元素在所述目标向量中的排序索引大于所述第i个元素在所述目标向量中的排序索引,将所述关系向量中的第j个元素设置为第二取值;
其中,所述第一取值为0,且所述第二取值为1;或者,所述第一取值为1,且所述第二取值为0。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110134236.4A CN112464157B (zh) | 2021-02-01 | 2021-02-01 | 向量排序方法与排序*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110134236.4A CN112464157B (zh) | 2021-02-01 | 2021-02-01 | 向量排序方法与排序*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112464157A CN112464157A (zh) | 2021-03-09 |
CN112464157B true CN112464157B (zh) | 2021-04-27 |
Family
ID=74802448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110134236.4A Active CN112464157B (zh) | 2021-02-01 | 2021-02-01 | 向量排序方法与排序*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112464157B (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102681973A (zh) * | 2011-03-17 | 2012-09-19 | 张严 | 交易***中买卖双方信用的等级排序方法 |
CN102542066B (zh) * | 2011-11-11 | 2014-04-09 | 冉阳 | 视频聚类方法、排序方法和视频搜索方法以及相应装置 |
CN109271134B (zh) * | 2018-12-13 | 2020-08-25 | 上海燧原科技有限公司 | 超越函数运算方法及装置、存储介质及电子设备 |
CN112200295B (zh) * | 2020-07-31 | 2023-07-18 | 星宸科技股份有限公司 | 稀疏化卷积神经网络的排序方法、运算方法、装置及设备 |
-
2021
- 2021-02-01 CN CN202110134236.4A patent/CN112464157B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112464157A (zh) | 2021-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Lu et al. | SpWA: An efficient sparse winograd convolutional neural networks accelerator on FPGAs | |
CN109426484B (zh) | 一种数据排序装置、方法及芯片 | |
US9529590B2 (en) | Processor for large graph algorithm computations and matrix operations | |
CN109324827B (zh) | 用于处理用于访问数据的指令的装置、方法和*** | |
CN110163355B (zh) | 一种计算装置及方法 | |
US11262982B2 (en) | Computation circuit including a plurality of processing elements coupled to a common accumulator, a computation device and a system including the same | |
CN112200300B (zh) | 卷积神经网络运算方法及装置 | |
CN112668708B (zh) | 一种提高数据利用率的卷积运算装置 | |
TW202123093A (zh) | 實行卷積運算的系統及方法 | |
CN111079917A (zh) | 张量数据分块存取的方法及装置 | |
CN110362293B (zh) | 乘法器、数据处理方法、芯片及电子设备 | |
CN113313247B (zh) | 基于数据流架构的稀疏神经网络的运算方法 | |
CN114138231B (zh) | 执行矩阵乘法运算的方法、电路及soc | |
WO2023065983A1 (zh) | 计算装置、神经网络处理设备、芯片及处理数据的方法 | |
CN110531954B (zh) | 乘法器、数据处理方法、芯片及电子设备 | |
CN112464157B (zh) | 向量排序方法与排序*** | |
CN110555522B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN104572588A (zh) | 矩阵求逆处理方法和装置 | |
CN111258541B (zh) | 乘法器、数据处理方法、芯片及电子设备 | |
CN111258544B (zh) | 乘法器、数据处理方法、芯片及电子设备 | |
CN109582277A (zh) | 数据处理方法、装置及相关产品 | |
CN110688087B (zh) | 数据处理器、方法、芯片及电子设备 | |
CN113890508A (zh) | 一种批处理fir算法的硬件实现方法和硬件*** | |
JP2022074442A (ja) | 演算装置および演算方法 | |
TWI798591B (zh) | 卷積神經網路運算方法及裝置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 200120 room a-522, 188 Yesheng Road, Lingang xinpian District, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai Patentee after: Shanghai Suiyuan Technology Co.,Ltd. Country or region after: China Address before: Room 906, no.800, Huanhu West 2nd Road, Nanhui new town, Pudong New Area, Shanghai, 201306 Patentee before: SHANGHAI ENFLAME TECHNOLOGY Co.,Ltd. Country or region before: China |