CN107430506B - 发现向量内的重复值的多个实例的方法和装置及到排序的应用 - Google Patents

发现向量内的重复值的多个实例的方法和装置及到排序的应用 Download PDF

Info

Publication number
CN107430506B
CN107430506B CN201580074330.8A CN201580074330A CN107430506B CN 107430506 B CN107430506 B CN 107430506B CN 201580074330 A CN201580074330 A CN 201580074330A CN 107430506 B CN107430506 B CN 107430506B
Authority
CN
China
Prior art keywords
vector
output vector
value
elements
values
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
Application number
CN201580074330.8A
Other languages
English (en)
Other versions
CN107430506A (zh
Inventor
T·海耶斯
O·帕罗马尔·佩雷斯
O·恩绍尔
A·克里斯特尔·科斯特尔曼
M·巴莱罗·科尔特斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Barcelona Supercomputing Center
Original Assignee
Barcelona Supercomputing Center
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Barcelona Supercomputing Center filed Critical Barcelona Supercomputing Center
Publication of CN107430506A publication Critical patent/CN107430506A/zh
Application granted granted Critical
Publication of CN107430506B publication Critical patent/CN107430506B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Abstract

公开了用于发现向量内的重复值的多个实例的方法和装置。第一方法计算向量的先前实例。第二方法计算向量的最后唯一实例。提出将这些方法实现为SIMD指令。还公开了顺序和并行CAM实现方案。所提出的方法可以用于修正向量存储器索引操作中的冲突索引。此外,提出了对向量化排序算法的应用。

Description

发现向量内的重复值的多个实例的方法和装置及到排序的 应用
技术领域
本公开涉及计算机科学,并且更具体地涉及用于发现向量内的重复值的多个实例的方法和装置及其在排序算法中的应用。
背景技术
单指令多数据(SIMD)是一类并行计算机。SIMD描述了具有同时对多个数据点执行相同操作的多个处理元件的计算机。因此,这种机器利用数据级并行(DLP)。即,存在同时(并行)计算,但在给定时刻仅存在单个控制进程(指令)。SIMD指令用于SIMD和向量架构中(参见Flynn,“Some Computer Organizations and Their Effectiveness,IEEETransactions On Computers,Vol.c-21,No.9,1972年9月)。SIMD指令集提供加速DLP的高效方式。为SIMD指令提供支持的具体方式是借助向量处理系统(即,使用向量架构的计算机系统)。该专利可交换地使用术语“向量”和“SIMD”。
向量处理系统是被配置为利用单个指令处理多个值的系统。向量处理系统可以包括多个向量或向量寄存器,每个向量或向量寄存器具有多个元素,元素具有被分配给每个元素的唯一索引。索引可以按升序来分配,升序对应于元素在向量中的位置。使用SIMD指令实现算法可以被认为是算法向量化。
排序是计算机科学中广泛研究的问题,并且其许多子领域中的基本构建块包括科学计算和数据库管理系统。
基数排序是非比较数字排序算法。Zagha等人(参见M.Zagha和G.E.Blelloch,“Radix Sort for Vector Multiprocessors,”Proceedings of the 1991ACM/IEEEConference on Supercomputing,ser.Supercomputing’91,1991,pp.712-721)提出了一种向量化基数排序的方式。向量化基数排序算法要求使用索引存取将数据存储到阵列。在索引存取中,元素可以位于存储器中的任意位置处,并且元素的地址由第二向量的内容来指示。这在其加载形式方面被称为聚集(gather)。因此,术语分散(scatter)分别以其存储形式使用。在分散操作期间,同一向量内的多个元素可能编索引到同一存储位置,由此引起冲突。为了防止该冲突,向量化基数排序复制所涉及的阵列,这就其本身而言是缺点。该技术中的另一个主要缺点是被排序的阵列需要以非连续(跨步)模式来存取。
由微处理器架构(诸如克雷(Cray)X1TM系统)使用的现有SIMD指令集(参见例如Cray Assembly Language(CAL)for Cray X1TMSystems Reference Manual,S-2314-51,2003年10月,7.7.Vector Register Instructions)不提供用于处理这种冲突的直接解决方案。本领域技术人员可以想到,向量化基数排序仅是需要在分散到阵列时避免冲突的算法的一个示例。为了向量化其它算法,还可能需要在分散到阵列时避免冲突。
期望提供将通过使用新SIMD指令来避免冲突的新SIMD指令和向量化排序算法。
发明内容
提出了要包括在SIMD指令集架构(ISA)中的两种新指令,并且还提出了在硬件中实现这些指令的两种不同方式。随后,提出了利用新指令的排序算法。
根据第一方面,在被配置为处理属于数据集的多个值的向量处理系统中,公开了一种用于发现在输入向量内的重复值的多个实例的方法。该方法包括以下步骤:将值加载到向量(下文中称为输入向量)。选择输入向量的每个元素,然后将每个元素与输入向量的具有低于所选元素的索引的索引的所有元素进行比较,以计算针对所选元素的匹配的数量。匹配的数量是具有与所选元素相同值的元素的数量。然后,生成具有与输入向量相同数量的元素和相同索引的第一输出向量。输入向量的每个元素对应于第一输出向量的具有相同索引的元素。第一输出向量的每个元素具有等于针对输入向量的对应元素计算的匹配的数量的值。
使用前面提及的方法,可以确切地断言输入向量的对应元素中的值的多少个实例存在于输入向量的具有更低索引的元素处。该方法可以被实现为新SIMD指令。如这里所公开的新SIMD指令在下文中应被称为向量先前实例(VPI)。
在一些实施方案中,该方法还可以包括以下步骤:首先将第一输出向量的元素的值设置为等于零。然后,对于输入向量的每个所选元素且对于输入向量中的具有比所选元素的索引更低的索引的每个元素,可以将所选元素的值与输入向量中的具有比所选元素的索引更低的索引的元素的值进行比较,以识别匹配。生成第一输出向量可以包括:当所述比较识别匹配时,将第一输出向量的对应于所选元素的元素的值增加一。VPI的这些实现可以适于具有有限数量的元素的输入向量,这是因为它们不随输入向量的元素的数量线性缩放。
在一些示例中,该方法还可以包括以下步骤:将输入向量的元素的值相互比较,以识别相等值;以及响应于所述比较,生成具有与输入向量相同数量的元素和相同索引的第二输出向量。输入向量的每个元素然后可以对应于第二输出向量的具有相同索引的元素。第二输出向量的每个元素的值可以被设置为等于第一值,除非输入向量的对应元素的值等于输入向量的具有比对应元素的索引更高的索引的元素的值。然后,第二输出向量的所述元素的值可以被设置为等于第二值。
由此,可以在第二输出向量中标记存在于输入向量的元素处的所有值的最后实例。第二输出向量可以被认为是向量掩码(vector mask)。该方法也可以被实现为新SIMD指令。如这里所公开的该新指令下文中应被称为向量最后唯一(Vector Last Unique,VLU)。注意,如这里所公开的两个指令(VPI和VLU)可以独立或一起用于向量化各种算法。
在一些实现中,该方法还可以包括以下步骤:提供具有等于输入向量的元素的数量的多个条目的内容可寻址存储器(CAM)。CAM的每个条目至少可以包括key字段、count字段以及valid字段。条目在其valid字段被设置为等于第三值时被认为是有效的,并且在其valid字段被设置为等于第四值时被认为是无效的。该方法还可以包括以下步骤:首先将所有条目的valid字段设置为等于第四值。然后可以按索引升序选择输入向量的每个元素。然后可以将每个所选元素与所有有效条目的key字段同时进行比较,以识别具有等于所选元素的值的key字段的匹配条目或以其它方式生成新有效条目。当识别出匹配条目时,可以将第一输出向量的对应于所选元素的元素的值设置为等于匹配条目的count字段。然后,可以将匹配条目的count字段增加一。当生成新有效条目时,可以首先选择无效条目。然后,可以将所选条目的valid字段设置为第三值。随后,可以将所选条目的key字段设置为等于所选元素的值。在下一个步骤中,可以将输出向量的对应于所选元素的元素的值设置为等于零。最后,可以将所选条目的count字段设置为一。
使用CAM的VPI指令的这些实现随输入向量的元素的数量线性缩放。
在一些示例中,CAM的每个条目还可以包括最后索引字段。最后索引字段可以在每次识别出匹配条目且每次生成新有效条目时被更新。已更新的最后索引字段可以被设置为等于所选元素的索引。在针对所有元素更新最后索引字段之后,可以通过以下方式生成第二输出向量:将第二输出向量的具有与有效条目的最后索引字段相等的索引的每个元素的值设置为等于第一值,并且将剩余元素设置为等于第二值。
因此,最后索引字段的更新可以在生成第一输出向量的同时被执行。随后,第二输出向量的生成要求单个步骤。
在一些示例中,可以并行选择并处理输入向量的多个元素。这可以通过增加CAM结构的端口数量来进行。由此,可以进一步加速处理。这种并行处理可以包括:同时选择输入向量的多个相邻元素;将同时选择的值相互比较;并且如果所述比较未识别出任何匹配,则并行处理多个值。否则,对于所选多个值,处理无法并行进行,而是顺序地进行。通过仅在所述比较未识别出匹配时并行处理,保证在并行处理期间没有引入误差(即,不提供不可预测的输出),因此输出是正确的。
在一些示例中,可以将第二输出向量用作对第一输出向量的掩码,以选择第一输出向量的元素并生成第三输出向量。生成第三输出向量可以包括:识别第二输出向量的具有第一值的元素;并且通过将第二输出向量的具有第一值的元素用作掩码来将第一输出向量压缩(compress)成第三输出向量。如这里所用的术语“压缩”是指如在Krste Asanovic,″Vector Microprocessors″,PhD thesis,1998年,加利福尼亚大学,伯克利,章节2.2.2(Asanovic,1998年)中限定的向量压缩指令。即,压缩指令使处于由来自输入向量的掩码寄存器(源向量寄存器)指示的位置处的元素压紧到在输出向量的起始(目的地向量寄存器)处的连续元素。然后可以用随后的向量指令比在自始至终使用被掩码指令时更高效地处理元素。
在一些示例中,第三输出向量可以用于使直方图阵列(histogram array)增加(increment)。直方图阵列是元素的阵列。这些元素中的每一个被称为区块(bin)。每个区块具有被称为区块id的唯一标识符。当用给定阵列更新直方图阵列时,直方图阵列的区块的内容增加给定阵列的具有等于所述区块的区块id的值的元素的数量。
为了使作为给定阵列的具有输入向量的直方图阵列增加,可以将第三输出向量的元素的值加一,以生成第四输出向量。然后,可以通过将第二输出向量用作掩码来将输入向量压缩成第五输出向量。然后可以将第五输出向量的元素的值用作从直方图阵列聚集到第六输出向量的索引。随后,可以通过将第六输出向量的元素的值相加到第四输出向量的值生成第七输出向量。最后,可以将第五输出向量的元素的值用作将第七输出向量的元素的值分散到直方图阵列的索引。
在另一个方面中,公开了一种排序方法。可以提供具有以至多m个连续值的至少n个连续块组织的至多n×m个值的初始输入阵列。每个值可以具有z数量的位。可以限定值的位的j个子集。使zk是子集k(k=1至j)的位数,其中,z1+z2+...+zj=z,并且其中,子集k-1(k=2至j)的所有位是比子集k的所有位低的有效位。然后,可以从k=1开始且按连续顺序针对位的子集k(k=1至j)重复以下步骤:首先,可以通过将直方图阵列的所有值设置为零,重新设置直方图阵列。然后,可以从i=1开始且按连续顺序针对每个块i(i=1至n)重复以下步骤:首先,当在第八输出向量中维持所述值在输入阵列中具有的连续顺序的同时,将至少m数量的元素的第八输出向量的值设置为等于块i的值;然后可以将输入向量的每个元素的值设置为等于第八输出向量中的具有相同索引的元素的值的位的子集k;然后可以根据这里公开的示例方法并使用指令VPI和VLU更新直方图阵列。然后,在已经处理所有块之后,可以生成直方图阵列的前缀和。前缀和的第一元素的值可以被设置为等于零,并且前缀和的每个剩余元素的值可以被设置为等于在前缀和中具有先前索引的元素的值加上直方图阵列的具有相同先前索引的元素的值的和。然后,从i=1开始且按连续顺序针对每个块i(i=1至n)重复以下步骤:可以在第八输出向量中维持所述值在输入阵列中具有的连续顺序的同时,将第八输出向量的值设置为等于块的值;可以将输入向量的每个元素的值设置为等于第八输出向量中的具有相同索引的元素的值的位的子集k;可以根据这里公开的示例方法并使用指令VPI和VLU生成第一和第二输出向量;可以通过将输入向量的元素的值用作从前缀和聚集的索引来生成第九输出向量;可以通过将第一输出向量和第九输出向量的元素的值相加生成第十输出向量;可以通过将第二输出向量用作掩码来将第十输出向量压缩成第十一输出向量;可以向第十一输出向量的元素的值加一,以生成第十二输出向量;可以通过将第二输出向量用作掩码来将输入向量压缩成第十三向量;可以将第十三向量的元素的值用作将第十二输出向量的元素的值分散到前缀和的索引;可以将第十输出向量的元素的值用作将第八输出向量的元素的值分散到输出阵列的索引。然后,在已经处理所有块之后,可以将输入阵列设置为输出阵列。最后,在已经处理位的所有子集之后,可以将输出阵列提供作为已排序的初始输入阵列。
使用VPI、VLU指令,所提出的排序算法可高效地向量化。在没有VPI和VLU的情况下,向量化基数排序算法的唯一已知方法要求复制直方图阵列。这具有导致实质更差性能的多个后果,它们中的一个是大跨步存取模式的使用。相反,凭借VPI、VLU指令,使用更高效的单位跨步存取。
在一些示例中,当zk=b时,直方图阵列可以包括2b个区块。例如,当zk=2时,直方图阵列可以包括22个区块。
在另一个方面中,公开了一种计算装置。计算装置可以包括存储器和处理器。存储器存储可由处理器执行的计算机程序指令。所述指令可以包括执行根据这里所公开的实施方式的方法的功能。
在又一个方面中,公开了一种计算机程序产品。该计算机程序产品包括使得计算装置实现根据这里所公开实施方式的方法的指令。
计算机程序产品可以具体实现在存储介质(例如,CD-ROM、DVD、USB驱动器、计算机存储器或只读存储器)上,或者可以被承载在载波信号(例如,电或光载波信号)上。
计算机程序可以为源代码、目标代码、代码中间源以及诸如部分编译形式的目标代码的形式,或者为适用于实现处理的任意其它形式。载体可以为能够承载计算机程序的任意实体或装置。
例如,载体可以包括存储介质(诸如ROM(例如,CD ROM或半导体ROM))或磁记录介质(例如硬盘)。进一步地,载体可以为可以经由电缆或光缆或者通过无线电或其它装置传送的可传输载体(诸如电或光信号)。
当计算机程序被具体实现在可以由电缆或其它装置或设备直接传送的信号中时,载体可以由这种电缆或其它装置或设备构成。
另选地,载体可以为计算机程序嵌入的集成电路,该集成电路适于执行或适于用于执行相关方法。
本发明的实施方式的另外目的、优点以及特征将在检查说明书时对本领域技术人员变得清晰,或者可以通过实践本发明来了解。
附图说明
图1示出了计算向量的先前实例的方法的示例流程图。
图1a示出了VPI指令语义的例示性示例。
图2示出了计算向量的最后唯一实例的方法的示例流程图。
图2a示出了VLU指令语义的例示性示例。
图3示出了使用内容可寻址存储器(CAM)计算向量的先前实例的方法的示例流程图。
图3a示出了在已经计算出VPI之后使用内容可寻址存储器(CAM)计算向量的最后唯一实例的方法的示例流程图。
图4示出了使用CAM存储器来计算VPI的示例实现。
图5例示了使用两个并行路径(或通道)进行的并行优化。
图6示出了用输入向量的值更新直方图阵列的方法的示例流程图。
图7示出了对输入阵列进行排序的方法的示例流程图。
图8示出了在i=1和k=1时所提出的排序算法的示例的高级概述。
具体实施方式
图1示出了计算向量的先前实例的方法的示例流程图。在第一步骤110中,可以将值加载到向量处理系统的向量(下文中称为输入向量)。然后,在步骤115中,选择输入向量的每个元素,并且将每个元素与输入向量的具有低于所选元素的索引的索引的所有元素进行比较。在步骤120中,计算针对每个所选元素的匹配的数量。匹配的数量是具有比所选元素的索引更低的索引且具有与所选元素相同值的元素的数量。在步骤125中,生成第一输出向量。第一输出向量具有与输入向量相同数量的元素和相同索引。此外,输入向量的每个元素对应于第一输出向量的具有相同索引的元素。第一输出向量的每个元素具有等于针对输入向量的对应元素计算的匹配的数量的值。在一个实现中,这可以通过以下方式来进行:当比较识别出匹配时,将第一输出向量的对应于所选元素的元素的值增加一。在该实现中,第一输出向量的元素的值在它们被处理之前必须等于零或被设置为零。
图1a示出了VPI指令语义的例示性示例。从左到右处理元素。在图1a的示例中,在具有输入向量(in)的索引1的位置中第一次遇到值5。直到该点,输出向量(out)的所有元素等于0。然后,在具有索引2的位置中第二次遇到值5。因此,输出向量(out)的具有索引2的位置被设置为1,1对应于具有索引2的位置中的元素的值的先前实例的数量。然后,在具有索引3的位置中,第三次遇到值5。因此,输出向量(out)的具有索引3的位置被设置为2,2对应于具有索引3的位置中的元素的值的先前实例的数量。
图2示出了计算向量的最后唯一实例的方法的示例流程图。在第一步骤210中,将m个值加载到向量(下文中称为输入向量)。生成具有相同索引的与输入向量具有相同数量的元素的向量(下文中被称为第二输出向量)。输入向量的每个元素对应于第二输出向量的具有相同索引的元素。然后,在步骤210中,将e设置为等于0。在步骤225中,检查输入向量的对应元素(第e个)是否具有与输入向量的具有比对应元素的索引更高的索引的任意元素的值相等的值。如果没有,那么在步骤235中,将第二输出向量的第e个元素的值设置为等于第一值。如果有,那么在步骤230中,将第二输出向量的第e个元素的值设置为等于第二值。在步骤240中,检查是否已经处理所有元素(即,是否e=m-1)。如果是这样,那么处理在245中结束,其中,认为完成VLU。否则,在250中使e增加,并且处理继续。
图2a示出了VLU指令语义的例示性示例。输出向量(out)可以被认为是每个元素为位的向量掩码。第一值可以为1,并且第二值可以为0。仅在后来看不到输入向量中的对应值时设置输出向量中的位。这些情况在输入向量中被遮蔽。在图2a的示例中,输出向量的具有索引0、3、6以及7的元素被设置为1,这是因为它们对应于输入向量的元素的值的最后唯一实例。
图3示出了使用内容可寻址存储器(CAM)计算向量的先前实例的方法的示例流程图。CAM可以具有等于输入向量的元素数量(m)的条目数量。每个条目至少可以包括key字段、count字段以及valid字段。条目在其valid字段被设置为等于第三值(例如,等于Y)时被认为是有效的,并且在其valid字段被设置为等于第四值(例如,等于N时)时是无效的。在第一步骤305中,将所有条目的valid字段设置为N。同样,将e设置为等于0。然后,选择输入向量的第e个元素。在步骤310中,将所选元素的值与所有有效条目的key字段进行比较。在步骤315中,检查是否识别出匹配条目(即,具有等于所选(第e个)元素的值的key字段的条目)。如果答案是是,那么在步骤325中,将第一输出向量的对应于所选(第e个)元素的元素的值设置为等于匹配条目的count字段。如果否,则在步骤320中,生成新有效条目。在步骤325之后,在步骤335中,将匹配条目的count字段增加一。然后,处理在步骤355中继续。现在,在步骤320中,为了生成新有效条目,将无效条目的valid字段设置为等于第三值(例如,Y)。然后,在步骤330中,将所选条目的key字段设置为等于所选第e个元素的值。在步骤340中,将输出向量的对应于所选(第e个)元素的元素的值设置为等于零。在步骤350中,将所选条目的count字段设置为一。最后,在步骤355中,检查是否e=m-1,即,是否已经处理所有元素。如果答案是是,则处理在步骤365中结束,并且认为完成VPI。否则,在步骤360中,将e设置为等于e+1,并且处理从步骤310开始针对下一个元素继续。
每个条目还可以包括最后索引字段。最后索引字段可以在步骤370中被更新,当识别出匹配条目时,该步骤370在步骤335之后或当生成新有效条目时,在步骤320之后。然后,将已更新的最后索引字段设置为等于所选元素的索引。
图3a示出了在已经计算VPI之后使用内容可寻址存储器(CAM)计算输入向量的最后唯一实例的方法的示例流程图。在步骤375中,检查是否已经更新所有元素的最后索引字段,即,是否已经完成VPI。如果否,那么处理等待,直到满足该条件为止。在针对所有元素更新最后索引字段之后,然后处理在步骤380中继续。在步骤380中,将第二输出向量的元素设置为等于第二值。在步骤385中,将第二输出向量的具有与有效条目的最后索引字段的值相等的索引的每个元素设置为等于第一值。在步骤390中,认为完成VLU。
图4示出了使用CAM存储器来计算VPI的示例实现。图示出了在完成指令之前在中间步骤处的处理的状态。已经处理输入向量的八个元素中的六个,并且已经计算输出向量的八个元素中的六个(以点图案示出)。输入向量的第七元素正在被处理,并且输出向量的对应元素刚要被计算。图4所示的CAM存储器包括八个条目。每个条目包括valid字段、key字段、最后索引字段(图中的最后idx)以及count字段。在所例示的步骤期间,四个valid字段被设置为Y,并且剩余字段被设置为N。输入的具有索引6的元素的值9现在被用于存取CAM。因为在先前处理的元素(具有索引5的元素)中已经遇到值9,所以已经存在key字段等于输入向量的具有索引6的元素的值的有效条目。
因此,位于有效条目的count字段中的值被复制到第一输出向量的第七元素中。因为直到具有值9的该点为止,已经确切存在遇到的输入的一个元素,所以该值等于1。然后,count字段增加1,并且对应的最后idx字段的值被更新到6,因为这是指输入向量的已经观察到值9的最新近索引。
最后idx字段不用于计算VPI,然而,它在更新count时更新该字段相对简单,以此方式,如果VLU在使用相同输入的VPI之后被执行,则剩下要做的所有事情是将最后idx值的阵列转换成位掩码(bitmask)。这可以在较少的循环中进行。
优化上述处理的一种方式是使用多个通道并行选择并处理输入向量的多个元素,如在Asanovic,1998年,32页,章节3.3中限定的。将该实现扩展到多个通道的一个明显障碍是串行地限定用于计算先前实例和最后唯一元素的方法。输入向量的相邻元素可以被布置到组中。假使组内的元素不彼此冲突,可以并行处理,否则被串行处理。检测冲突要求l!/(2·(l-2)!)比较器,其中,l是作为目标的并行通道的数量(即,组尺寸)。
图5例示了使用两个并行路径(或通道)进行的并行优化。存在从左到右处理的输入向量,在该输入向量下方,存在表示并行和串行实现这两者的相对执行时间的两个时间线。时间线的每个块表示处理一个元素所要求的时间,然而,并行时间线示出了意指串联处理该组的元素的堆叠块。第一、第三以及第四组元素可以被并行处理,这是因为它们没有冲突。第二组元素具有冲突且需要被串行化。阴影线框表示比串行实现节省的相对时间。
图6示出了用输入向量的值更新直方图的方法的示例流程图。在步骤605中,可以使用VPI指令从输入向量生成第一输出向量,如参照图1或图3描述的。在步骤610中,可以使用VLU指令从输入向量生成第二输出向量,如参照图2或图3a描述的。在步骤615中,通过将第二输出向量用作掩码来将第一输出向量压缩成第三输出向量。与第二输出向量的具有第一值的元素对应的第一输出向量的元素由压缩指令来选择。在步骤620中,通过将第三输出向量的元素的值加一来生成第四输出向量。在步骤625中,通过将第二输出向量用作掩码来将输入向量压缩成第五输出向量。在步骤630中,将第五输出向量的元素的值用作从直方图阵列聚集到第六输出向量的索引。在步骤635中,通过将第六输出向量和第四输出向量的元素的值相加生成第七输出向量。在步骤640中,将第五输出向量的元素的值用作将第七输出向量的元素的值分散到直方图阵列的索引。
上述指令和实现可以用于处理向量化排序算法(诸如基数排序)中的冲突。图7示出了对输入阵列排序的方法的示例流程图。在第一步骤705中,提供具有以至多m个连续值的至少n个连续块组织的至多n×m个值的初始输入阵列,每个值具有z数量的位。然后,在步骤710中,限定值的位的j个子集。使zk是子集k(k=1至j)的位数,其中,z1+z2+...+zj=z,并且其中,子集k-1(k=2至j)的所有位是比子集k的所有位低的有效位。此外,将k设置为0。然后,在步骤715中,将k设置为k+1。然后,在步骤720中,通过将直方图阵列的所有值设置为零,重新设置直方图阵列。在步骤727中,将i设置为1。然后,在步骤730中,在第八输出向量中维持所述值在输入阵列中具有的连续顺序的同时,将第八输出向量的值设置为等于第i个块的值。在步骤735中,将输入向量的每个元素的值设置为等于第八输出向量中的具有相同索引的元素的值的位的第k个子集。在步骤740中,可以根据参照图6描述的方法用输入向量来更新直方图阵列。现在,在步骤745中,处理检查是否已经处理所有n个块(即,是否i=n)。如果否,那么在步骤725中将i设置为等于i+1,并且处理从步骤730重复,直到i=n为止。然后,在步骤750中,生成直方图阵列的前缀和,并且将i设置为1。前缀和的第一元素的值被设置为等于零,并且前缀和的剩余元素中的每一个的值被设置为等于在前缀和中具有先前索引的元素的值加上直方图阵列的具有相同先前索引的元素的值的和。然后,重复以下处理,直到i=n为止;在步骤760中,在第八输出向量中维持所述值在输入阵列中具有的连续顺序的同时,将第八输出向量的值设置为等于第i个块的值。在步骤762中,将输入向量的每个元素的值设置为等于第八输出向量中的具有相同索引的元素的值的位的第k个子集。在步骤764、765中,使用VPI和VLU指令来生成第一和第二输出向量。VPI、VLU指令可以根据这里参照图1、图2、图3以及图3a公开的示例来实现。在步骤766中,通过将输入向量的元素的值用作从前缀和聚集的索引来生成第九输出向量。在步骤768中,通过将第一输出向量的元素的值加到第九输出向量的元素的那些值生成第十输出向量。在步骤770中,通过将第二输出向量用作掩码来将第十输出向量压缩成第十一输出向量。在步骤772中,向第十一输出向量的元素的值加一,以生成第十二输出向量。在步骤774中,通过将第二输出向量用作掩码来将输入向量压缩成第十三输出向量。在步骤776中,将第十三输出向量的元素的值用作将第十二输出向量的元素的值分散到前缀和的索引。在步骤778中,将第十输出向量的元素的值用作将第八输出向量的元素的值分散到输出阵列的索引。在步骤780中,检查是否i=n。如果i=n,那么在步骤782中将输入阵列设置为等于输出阵列。否则,处理从步骤755重复,其中,i增加1,直到i=n为止。最后,在步骤784中,检查是否k=j。如果是,则在步骤786中将输出阵列提供为已排序的初始输入阵列。否则,处理从步骤715重复,直到k=j为止。
图8示出了在i=1和k=1时所提出的排序算法的示例的高级概述。在步骤805和810中,迭代地加载输入,并且针对输入的位的第一子集产生直方图阵列。在步骤805中,将输入加载到向量(v),并且选择这些值的位的第一子集。步骤805对应于图7的步骤730和735。在步骤810中,将所选位的向量用于更新直方图阵列。步骤810对应于图7的步骤740。针对输入阵列的剩余块重复步骤805和810(未示出)。在下一个步骤(步骤815)中,在直方图阵列上执行前缀和。步骤815对应于图7的步骤750。在步骤820、825以及830中,再次加载整个输入阵列,并且将输入阵列分散到具有由前缀和确定的索引的输出阵列。在步骤820中,以与步骤805相同的方式将输入重新加载到向量中,并且选择位的相同子集。步骤820对应于图7的步骤760和762。然后,在步骤825中,将所选位编索引到已经被读取且增加的前缀和。更新前缀和。根据所计算的先前实例修改从前缀和加载的值,并且将这些值存储在用于下一个步骤830中的向量(偏移)中。步骤825对应于步骤764至776。最后,在步骤830中,将偏移的元素的值用作将向量v的元素的值分散到输出阵列的索引。步骤830对应于图7的步骤778。针对输入阵列的剩余块重复步骤820、825以及830(未示出)。
虽然这里仅公开了多个特定实施方式和示例,但本领域技术人员将理解,其它另选实施方式和/或用途及其明显的修改和等同物是可以的。此外,本公开覆盖所述特定实施方式的所有可能组合。由此,本公开的范围不应受特定实施方式限制。
进一步地,虽然参照附图描述的示例包括计算设备/系统和在计算设备/系统中执行的处理,但本公开还扩展到适于将系统付诸实践的计算机程序(特别是载体上或中的计算机程序)。

Claims (17)

1.一种用于在处理属于数据集的多个值的向量处理系统中发现输入向量内的重复值的多个实例的方法,所述向量处理系统至少包括具有多个元素的所述输入向量,所述元素具有被分配给每个元素的唯一索引,所述索引按升序来分配,所述升序对应于所述元素在所述输入向量中的位置,所述方法被实现为单指令多数据SIMD指令,所述方法包括以下步骤:
将值加载到所述输入向量;
选择所述输入向量的每个元素;
将每个所选元素与所述输入向量的具有比所选元素的索引低的索引的所有元素进行比较,以计算针对所选元素的匹配的数量,其中,所述匹配的数量是具有与所选元素相同值的元素的数量;
生成具有与所述输入向量相同数量的元素和相同索引的第一输出向量,其中,所述输入向量的每个元素对应于所述第一输出向量的具有相同索引的元素,
其中,所述第一输出向量的每个元素具有等于针对所述输入向量的对应元素计算的所述匹配的数量的值。
2.根据权利要求1所述的方法,所述方法还包括以下步骤:
将所述第一输出向量的所述元素的所述值设置为等于零;
针对所述输入向量的每个所选元素:
针对所述输入向量中的具有比所选元素的索引低的索引的每个元素:
将所选元素的所述值与所述输入向量中的具有比所选元素的索引低的索引的所述元素的所述值进行比较,以识别匹配,以及
其中,生成第一输出向量包括:
当所述比较识别出匹配时,将所述第一输出向量的对应于所选元素的元素的值增加一。
3.根据权利要求1或2所述的方法,所述方法还包括以下步骤:
生成具有与所述输入向量相同数量的元素和相同索引的第二输出向量,其中,所述输入向量的每个元素对应于所述第二输出向量的具有相同索引的元素;以及
其中,所述第二输出向量的每个元素的值被设置为等于第一值,除非所述输入向量的对应元素的值等于所述输入向量的具有比所述对应元素的索引高的索引的元素的值,由此所述第二输出向量的所述元素的所述值被设置为等于第二值。
4.根据权利要求3所述的方法,其中,所述第二输出向量是向量掩码。
5.根据权利要求1所述的方法,所述方法还包括以下步骤:
使用具有等于所述输入向量的所述元素的数量的多个条目的内容可寻址存储器CAM,每个条目至少包括key字段、count字段以及valid字段,其中,条目在其valid字段被设置为等于第三值时是有效的,并且在其有valid段被设置为等于第四值时是无效的;
将所有条目的所述valid字段设置为等于所述第四值;
按索引升序选择所述输入向量的每个元素,
其中,将每个所选元素与所述输入向量中的具有比所选元素的所述索引低的索引的所有元素进行比较包括:
将所选元素的所述值与所有有效条目的所述key字段进行比较,以识别具有等于所选元素的所述值的key字段的匹配条目或另外生成新有效条目,
其中,
当识别出匹配条目时,则:
将所述第一输出向量的对应于所选元素的元素的值设置为等于所述匹配条目的所述count字段,并且然后
将所述匹配条目的所述count字段增加一;
当发现没有匹配时,生成新有效条目,并且然后:
选择无效条目;
将所选条目的所述valid字段设置为所述第三值;
将所选条目的所述key字段设置为等于所选元素的所述值;
将所述第一输出向量的对应于所选元素的元素的值设置为等于零;并且然后
将所选条目的所述count字段设置为一。
6.根据权利要求5所述的方法,其中,每个条目还包括last index字段,其中,匹配条目的所述last index字段在识别出匹配条目时被更新,或者新有效条目的所述last index字段在生成所述新有效条目时被更新,以及
其中,已更新的最后索引字段被设置为等于所选元素的所述索引。
7.根据权利要求6所述的方法,其中,在针对所有元素更新所述last index字段之后,所述方法还包括以下步骤:生成第二输出向量,以及
其中,所述第二输出向量的具有与有效条目的所述last index字段相等的索引的每个元素的所述值被设置为等于第一值,否则所述值被设置为等于第二值。
8.根据权利要求5所述的方法,其中,并行选择并处理所述输入向量的多个元素。
9.根据权利要求8所述的方法,所述方法还包括以下步骤:
同时选择所述输入向量的多个元素;
将同时选择的值相互比较;以及
如果所述比较未识别出任何匹配,则并行处理所述多个值。
10.根据权利要求7所述的方法,所述方法还包括以下步骤:
将所述第二输出向量用作所述第一输出向量上的掩码,以选择所述第一输出向量的元素并生成第三输出向量。
11.根据权利要求10所述的方法,
其中,生成所述第三输出向量包括:
识别所述第二输出向量的具有所述第一值的元素;以及
通过将所述第二输出向量的具有所述第一值的所述元素用作掩码来将所述第一输出向量压缩成所述第三输出向量。
12.根据权利要求11所述的方法,所述方法还包括以下步骤:通过以下处理使用所述第三输出向量来增加直方图阵列:
初始化所述直方图阵列;
向所述第三输出向量的所述元素的所述值加一,以生成第四输出向量;
通过将所述第二输出向量用作掩码来将所述输入向量压缩成第五输出向量;
将所述第五输出向量的元素的值用作从所述直方图阵列聚集到第六输出向量的索引;
通过将所述第六输出向量和所述第四输出向量的元素的值相加生成第七输出向量;以及
将所述第五输出向量的元素的值用作将所述第七输出向量的元素的值分散到所述直方图阵列的索引。
13.根据权利要求12所述的方法,所述方法还包括以下步骤:
提供具有以至多m个连续值的至少n个连续块组织的至多n×m个值的初始输入阵列,每个值具有z数量的位,
限定所述值的位的j个子集,其中,zk是子集k的位数,k=1至j,其中,z1+z2+...+zj=z,并且其中,子集k-1的所有位是比子集k的所有位低的有效位,k=2至j;
从k=1开始且按连续顺序针对位的每个子集k重复以下处理,k=1至j:
○通过将所述直方图阵列的所有值设置为零,重新设置所述直方图阵列;
○从i=1开始且按连续顺序针对每个块i重复以下处理,i=1至n:
■将第八输出向量的值设置为等于所述块的值,同时在所述第八输出向量中维持所述值在所述输入阵列中具有的连续顺序;
■将所述输入向量的每个元素的所述值设置为等于所述第八输出向量中的具有相同索引的元素的值的位的子集k;
■更新根据权利要求12的所述直方图阵列;
○生成所述直方图阵列的前缀和,其中,所述前缀和的第一元素的值被设置为等于零,并且所述前缀和的剩余元素中的每一个的值等于在所述前缀和中的具有先前索引的元素的值加上所述直方图阵列的具有相同先前索引的元素的值的和;
○从i=1开始且按连续顺序针对每个块i重复以下处理,i=1至n:
■将第八输出向量的值设置为等于所述块的值,同时在所述第八输出向量中维持所述值在所述输入阵列中具有的连续顺序,
■将所述输入向量的每个元素的所述值设置为等于所述第八输出向量中的具有相同索引的元素的值的位的子集k;
■生成所述第一输出向量和所述第二输出向量;
■通过将所述输入向量的所述元素的所述值用作从所述前缀和聚集的索引来生成第九输出向量;
■通过将所述第一输出向量和所述第九输出向量的元素的值相加生成第十输出向量;
■通过将所述第二输出向量用作掩码来将所述第十输出向量压缩成第十一输出向量;
■向所述第十一输出向量的元素的值加一,以生成第十二输出向量;
■通过将所述第二输出向量用作掩码来将所述输入向量压缩成第十三向量;
■将所述第十三向量的元素的值用作将所述第十二输出向量的元素的值分散到所述前缀和的索引;
■将所述第十输出向量的元素的值用作将所述第八输出向量的元素的值分散到所述输出阵列的索引;
○将所述输入阵列设置为等于所述输出阵列;以及
○提供所述输出阵列作为已排序的初始输入阵列。
14.根据权利要求13所述的方法,其中,zk=b,并且所述直方图阵列包括2b个区块。
15.根据权利要求14所述的方法,其中,zk=2,并且所述直方图阵列包括22个区块。
16.一种计算装置,所述计算装置包括存储器和处理器,其中,所述存储器存储可由所述处理器执行的计算机程序指令,所述指令包括执行根据权利要求1所述的方法的功能。
17.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括使得计算装置实现根据权利要求1所述的方法的指令。
CN201580074330.8A 2015-02-05 2015-02-05 发现向量内的重复值的多个实例的方法和装置及到排序的应用 Active CN107430506B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/EP2015/052394 WO2016124242A1 (en) 2015-02-05 2015-02-05 Methods and devices for discovering multiple instances of recurring values within a vector with an application to sorting

Publications (2)

Publication Number Publication Date
CN107430506A CN107430506A (zh) 2017-12-01
CN107430506B true CN107430506B (zh) 2020-11-06

Family

ID=52462922

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580074330.8A Active CN107430506B (zh) 2015-02-05 2015-02-05 发现向量内的重复值的多个实例的方法和装置及到排序的应用

Country Status (6)

Country Link
US (1) US10282203B2 (zh)
EP (1) EP3254184B1 (zh)
JP (1) JP6615209B2 (zh)
CN (1) CN107430506B (zh)
ES (1) ES2950383T3 (zh)
WO (1) WO2016124242A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108140232B (zh) 2015-06-10 2022-05-24 无比视视觉技术有限公司 用于处理图像的图像处理器和方法
US10592466B2 (en) * 2016-05-12 2020-03-17 Wisconsin Alumni Research Foundation Graphic processor unit providing reduced storage costs for similar operands
WO2019005165A1 (en) * 2017-06-30 2019-01-03 Intel Corporation METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104160396A (zh) * 2012-03-01 2014-11-19 国际商业机器公司 在字符串集之中查找最佳匹配字符串
CN104169907A (zh) * 2012-03-15 2014-11-26 国际商业机器公司 向量寻找元素相等指令

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03154920A (ja) * 1989-11-13 1991-07-02 Hitachi Ltd 高速ソート処理方式
US20110010509A1 (en) * 2009-07-07 2011-01-13 L3 Communications Integrated Systems,L.P. System and method of sorting and calculating statistics on large data sets with a known value range
CN106063274B (zh) * 2014-04-01 2020-02-14 华为技术有限公司 多层结构化编码单元中数据隐藏的方法和装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104160396A (zh) * 2012-03-01 2014-11-19 国际商业机器公司 在字符串集之中查找最佳匹配字符串
CN104169907A (zh) * 2012-03-15 2014-11-26 国际商业机器公司 向量寻找元素相等指令

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Radix Sort For Vector Multiprocessors;Marco Zagha等;《Supercomputing ‘91:Proceeding of the 1991ACM/IEEE Comferrence Supercomputing》;19911123;第712-722页 *

Also Published As

Publication number Publication date
JP2018510401A (ja) 2018-04-12
US10282203B2 (en) 2019-05-07
ES2950383T3 (es) 2023-10-09
WO2016124242A1 (en) 2016-08-11
JP6615209B2 (ja) 2019-12-04
US20180018173A1 (en) 2018-01-18
CN107430506A (zh) 2017-12-01
EP3254184C0 (en) 2023-06-07
WO2016124242A8 (en) 2017-02-23
EP3254184A1 (en) 2017-12-13
EP3254184B1 (en) 2023-06-07

Similar Documents

Publication Publication Date Title
Zachariadis et al. Accelerating sparse matrix–matrix multiplication with GPU Tensor Cores
JP6605573B2 (ja) 並列ディシジョン・ツリー・プロセッサー・アーキテクチャ
US9557995B2 (en) Data processing apparatus and method for performing segmented operations
US8433883B2 (en) Inclusive “OR” bit matrix compare resolution of vector update conflict masks
US20150088926A1 (en) Methods and systems for fast set-membership tests using one or more processors that support single instruction multiple data instructions
KR102594768B1 (ko) 데이터 처리장치의 데이터 항목들 내의 성분들의 계수
CN110235099B (zh) 用于处理输入操作数值的装置和方法
CN107885503B (zh) 一种基于程序特征分析的迭代编译优化方法
CN111292805B (zh) 一种三代测序数据重叠检测方法及系统
US11573793B2 (en) Lazy push strategies for vectorized D-Heaps
US20150220315A1 (en) Method and apparatus for compiling
Phillips et al. A CUDA implementation of the High Performance Conjugate Gradient benchmark
Aji et al. GPU-RMAP: accelerating short-read mapping on graphics processors
JP2019517060A (ja) ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法
CN107430506B (zh) 发现向量内的重复值的多个实例的方法和装置及到排序的应用
Joubert et al. Parallel accelerated vector similarity calculations for genomics applications
Goswami et al. Gpu-accelerated large-scale genome assembly
Cracco et al. Extremely fast construction and querying of compacted and colored de Bruijn graphs with GGCAT
Saavedra et al. Mining discriminative k-mers in DNA sequences using sketches and hardware acceleration
CN111459548B (zh) 双加载指令
US9158511B2 (en) Scalable partial vectorization
US20220050664A1 (en) Systems, methods, and devices for the sorting of digital lists
Rengasamy et al. Engineering a high-performance SNP detection pipeline
Klarqvist et al. Efficient computation of positional population counts using SIMD instructions
Ishikawa et al. PZLAST: an ultra-fast sequence similarity search tool implemented on a MIMD processor

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