CN111985636A - 适用于人工神经网络的数据结构压缩技术 - Google Patents
适用于人工神经网络的数据结构压缩技术 Download PDFInfo
- Publication number
- CN111985636A CN111985636A CN201910823453.7A CN201910823453A CN111985636A CN 111985636 A CN111985636 A CN 111985636A CN 201910823453 A CN201910823453 A CN 201910823453A CN 111985636 A CN111985636 A CN 111985636A
- Authority
- CN
- China
- Prior art keywords
- data structure
- element data
- instruction
- metadata
- elements
- 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
- 238000007906 compression Methods 0.000 title abstract description 29
- 230000006835 compression Effects 0.000 title abstract description 29
- 238000013528 artificial neural network Methods 0.000 title abstract description 12
- 238000005516 engineering process Methods 0.000 title abstract description 5
- 238000000034 method Methods 0.000 claims abstract description 54
- 230000015654 memory Effects 0.000 claims abstract description 42
- 230000006870 function Effects 0.000 claims description 16
- 239000013598 vector Substances 0.000 claims description 7
- 238000013144 data compression Methods 0.000 description 8
- 101100317378 Mus musculus Wnt3 gene Proteins 0.000 description 6
- 238000001914 filtration Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000007667 floating Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 239000000463 material Substances 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 108090000765 processed proteins & peptides Proteins 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000013529 biological neural network Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000013136 deep learning model Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000017105 transposition Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3068—Precoding preceding compression, e.g. Burrows-Wheeler transformation
- H03M7/3077—Sorting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3059—Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种适用于人工神经网络的数据结构压缩技术。在人工神经网络和其他类似应用中,通常涉及大量被认为是稀疏数据的数据。由于这些应用程序中涉及的数据大小很大,因此在发送数据时压缩数据有助于节省带宽资源,并在存储数据时节省存储器资源。这里介绍了一种压缩技术,它从数据中选择具有重要值的元素,并将它们重构为结构化的稀疏格式。通过生成强制执行结构化稀疏格式的元数据并根据元数据组织数据,所介绍的技术不仅减小了数据的大小,而且还将数据始终置于特定格式中。因此,可以简化和优化硬件,以比依赖于非结构化稀疏格式的常规压缩技术更快且更高效地处理数据。
Description
相关申请的交叉引用
本申请要求于2019年5月21日提交的、名称为“适用于人工神经网络的数据结构压缩技术(COMPRESSION TECHNIQUES FOR DATASTRUCTURES SUITABLE FOR ARTIFICIALNEURAL NETWORKS)”的美国临时申请序列号62/850,727的权益,该临时申请与本申请共同转让,并且其全部内容通过引用并入本文中。
技术领域
本发明涉及数据压缩,更具体地,涉及稀疏数据结构的压缩。
背景技术
人工神经网络(ANN)是受生物神经网络启发的计算系统。人工神经网络为许多不同的机器学习算法提供了一个框架,以协同工作并处理复杂的数据输入。人工神经网络已被用于各种任务,包括计算机视觉、语音和图像识别、机器翻译、社交网络过滤、玩视频游戏和医学诊断。
发明内容
第一个方面提供一种用于压缩数据的方法,包括:从N元素数据结构生成元数据,所述生成包括:从N元素数据结构中选择M个元素,其中N大于M;确定该M个元素在该N元素数据结构中的位置;以及将M个元素的位置存储为元数据;根据元数据将N元素数据结构压缩为M元素数据结构,所述压缩包括:根据所述位置从N元素数据结构中收集M个元素的值;将M个元素的值存储在M元素数据结构中。
第二个方面提供一种用于压缩数据的系统,包括:存储器和通信地耦合到该存储器的至少一个处理器。至少一个处理器被配置为:通过以下步骤从N元素数据结构生成元数据:从N元素数据结构中选择M个元素,其中N大于M;确定M个元素在N元素数据结构中的位置;将M个元素的位置存储为元数据;以及根据元数据,通过以下步骤将N元素数据结构压缩为M元素数据结构:根据所述位置从N元素数据结构中收集M个元素的值;将M个元素的值存储在M元素数据结构中。
附图说明
现在结合附图参考以下描述,其中:
图1是根据本公开的一个或更多个方面的示例性M:N压缩格式的图示;
图2是根据本公开的一个或更多个方面的示例性2:4压缩格式的图示;
图3是根据本公开的一个或更多个方面的执行数据压缩的计算系统的实施例的框图;
图4是根据本公开的一个或更多个方面的压缩数据的方法的实施例的流程图;
图5-图9是根据本公开的一个或更多个方面的生成元数据的GENMETADATA指令的示例;
图10-图14是根据本公开的一个或更多个方面的将N元素数据结构压缩为M元素数据结构的GATHER指令的示例;
图15是根据本公开的一个或更多个方面的生成元数据并将N元素数据结构压缩为M元素数据结构的GATHERPLUS指令的示例;
图16-图21是根据本公开的一个或更多个方面的GENMETADATA指令和GATHER指令的示例,所述指令级联以实现2:8压缩比。
具体实施方式
在人工神经网络(ANN)和其他类似的应用程序中,通常涉及大量被视为稀疏数据的数据,或者换句话说,包括大量零值或接近零值的数据。由于这些应用程序中涉及的数据大小很大,因此压缩数据(例如,减小数据大小)有助于在发送数据时节省带宽资源,以及在存储数据时节省存储器资源。
这里介绍的是一种压缩技术,它通过重构数据以遵循结构化稀疏性来压缩数据。所介绍的技术生成元数据,其识别包含数据的有效值且符合结构化稀疏性的数据元素,并根据元数据对数据进行重构。因此,所介绍的技术不仅减小了数据的大小,而且将数据一致地置于特定的稀疏格式中。因此,硬件可以被简化和优化以比依赖于非结构化稀疏格式(如CSR(压缩稀疏行)或COO(坐标列表))的常规压缩技术更快、更高效地处理数据,例如计算、传输和存储。例如,使用从公开的技术压缩的数据允许采用更大量的数据对深度学习模型进行训练,从而在与使用不同压缩技术相同的计算成本下获得更好的准确性。
图1示出了示例性M:N压缩格式。未压缩数据格式100中的输入数据(要压缩的数据)包括N元素数据结构102中的N个元素,压缩数据格式110中的输出数据(压缩的数据)包括M元素数据结构112中的M个元素和元数据114,其中M<N。N元素数据结构102中的N个元素被压缩为M元素数据结构112中的M个元素。元数据114指示M元素数据结构112中的每个元素DN-1,...,D1,D0在N元素数据结构102中相应元素将从该处被复制的位置(例如,N-1,N-2,3,1)。图1所示的压缩格式是指具有M到N的压缩比(“M:N”)。M元素数据结构112和N元素数据结构102中的每个元素,例如DN-1,...,D1,D0表示一个数值,其可以是编码为整数、浮点、固定、对数或任何其他用于在计算机上编码数值的数字格式的任何位数(例如,4位(“半字节”)、8位(“字节”)、16位(“半”)、32位(“字”)、64位(“双”)等)。
图2示出示例性的2:4压缩格式200。在所示示例中,未压缩格式200中的8个元素(其位于两个4元素数据结构204和205中)被压缩为压缩数据格式202中的4个元素,其包括两个保存4个元素的数值的2元素数据结构206和207,以及两个保存4个元素的位置的元数据208和209。因此,在图示的例子中,N是4,M是2。
在所示示例中,选择第一个4元素数据结构204中的元素D和C,并将其复制到第一个2元素数据结构206中,选择第二个4元素数据结构205中的元素B和A并将其复制到第二个2元素数据结构207中。第一个元数据208指示第一个4元素数据结构204中所选元素的位置(例如,索引),第二个元数据209指示第二个4元素数据结构205中所选元素的位置。
执行的压缩指令中规定了要选择的元素数目以及选择这些元素进行压缩的基础。为了方便4元素数据结构和2元素数据结构及其元数据之间的通信,压缩指令中还规定了4元素数据结构和2元素数据结构及其元数据的大小、位置(如寄存器)和偏移量。
压缩指令可分为两个单独的指令,一个指令用于生成元数据,另一个指令用于收集数据,或组合成单个超级指令。还可以执行压缩指令,以对单个数据集(例如,第一个4元素数据结构204或第2个4元素数据结构205)进行操作,或者对多个数据集(例如,第一个4元素数据结构204和第二个4元素数据结构205两者)进行操作。
由于所示压缩是一种有损类型的压缩,其逻辑上操作一个或更多个相对少元素(例如,4个元素)的集合,因此它可以应用于比图2所示数据大得多以及小得多的数据(例如,元素数目上)。此外,正如所示的压缩遵循M:N压缩比,因此每N个元素保留M个元素,它在整个压缩数据格式中始终保持结构化稀疏性。
图3示出了计算系统300的实施例的框图,该计算系统300被配置为根据本公开的原理对数据执行压缩操作。在所示实施例中,系统300包括并行处理单元(PPU)310到310-N(以下简称PPU 310)及其各自的存储器315到315-N(以下简称存储器315)。PPU 310和存储器315使用常规手段(如高速互连)彼此通信地耦合。
每个PPU 310包括一个或更多个处理器312,其被配置为执行各种操作,例如数据的压缩、解压缩和换位。数据可以是例如向量、张量或矩阵。每个处理器312都是多线程的,并且被配置为并发执行来自特定的线程组的多个线程(例如,32个线程)。在一个实施例中,处理器312实现SIMD(单指令、多数据)体系架构,其中线程组(例如,warp(线程束))中的每个线程被配置为基于同一指令集处理不同的数据集。在另一个实施例中,处理器312实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于同一指令集处理不同的数据集,其中每个线程可以执行同一指令集的不同子集。
每个PPU 310还包括临时存储(TS)314,例如寄存器文件或存储器,其被配置为在处理器312和存储器315之间为分级(stage)数据或临时存储数据。PPU 310可以是不同类型的通用或专用处理单元,例如中央处理单元(CPU)、图形处理单元(GPU)、现场可编程门阵列(FPGA)和应用程序特定集成电路(ASIC)。
每个存储器315被配置为存储执行各种操作所需的数据。每个存储器315可存储操作中涉及的数据的实际值和一系列指令,这些指令可导致PPU310执行操作。在一个实施例中,存储器315可包括多个动态随机存取存储器(DRAM)器件和/或随机存取存储器(RAM)器件。
图4示出了用于根据本公开原理执行压缩数据的方法400的实施例的流程图。方法400或其至少一部分可由计算系统执行,例如图3中的计算系统300。方法400从步骤405开始。
在步骤410中,元数据由要通过执行第一指令进行压缩的N元素数据结构生成。N是正整数,指示正在被压缩的数据结构中的元素的数目。在所示实施例中,N元素数据结构表示N元素向量。N元素数据结构还可以表示N元素张量或N元素矩阵。N元素数据结构可以是源存储中许多N元素数据结构之一。在所示实施例中,第一指令是元数据生成指令,称为GENMETADATA指令。在一个实施例中,第一指令是执行元数据生成和数据压缩操作的“超级指令”的操作。下面提供了GENMETADATA指令的示例格式。
作为步骤410的第一个子步骤,接收N元素数据结构作为第一指令的输入。N元素数据结构是从源寄存器或存储器位置中拉取的,这在第一指令中指示。源寄存器/存储器位置可以对应于临时存储(如图3中的TS 314)中的特定寄存器文件或存储器位置。
作为第二个子步骤,步骤410使用第一指令中的函数从N元素数据结构中选择M个元素。M是小于N的正整数。该函数可以是,例如比较N元素数据结构中所有元素的值并选择M个具有较大值的元素的MAX函数,比较N元素数据结构中所有元素的大小并选择M个具有较大大小的元素的MAXABS函数,比较N元素数据结构中所有元素的值并选择M个具有较小值的元素的MIN函数,或比较N元素数据结构中所有元素的大小并选择M个具有较小大小的元素的MINABS函数。可以理解,也可以使用其他函数,例如选择在某个范围内具有值的某数量元素的函数。
作为步骤410的第三个子步骤,确定所选的M个元素在N元素数据结构中的位置。当N元素数据结构是较大数据结构中的多个N元素数据结构之一时,该N元素数据结构在较大数据结构中的起始位置使用第一指令中指示的组索引确定,并用作该M个元素在N元素数据结构中的位置的偏移量。
作为步骤410的第四个子步骤,M个元素的位置作为元数据存储在目的地寄存器/存储器位置中。使用第一指令中指示的元数据索引确定元数据存储在目的地寄存器中的位置,例如,元数据在目的地寄存器中的起始位置(偏移量)。目的地寄存器可以对应于临时存储(如图3中的TS 314)中的特定寄存器文件或存储器位置。可以理解,步骤410的第二个子步骤中未选择的元素的位置未确定,因此不存储在第三个子步骤和第四个子步骤中。
在步骤420中,通过执行第二指令,根据元数据将N元素数据结构压缩为M元素数据结构。在所示实施例中,与第一指令不同,第二指令是数据压缩指令。数据压缩指令被称为GATHER指令。在一个实施例中,第二指令是执行元数据生成和数据压缩操作的“超级指令”的操作。下面提供了GATHER指令的示例格式。作为步骤420的第一个子步骤,接收在步骤410生成的元数据以及N元素数据结构作为第二指令的输入。从它们各自的源寄存器/存储器位置访问N元素数据结构和元数据。源寄存器可以对应于临时存储(如图3中的TS 314)中的特定寄存器文件或存储器位置。
作为步骤420的第二个子步骤,根据元数据中指示的位置,从N元素数据结构中收集所选元素(即M个元素)的值。当N元素数据结构是较大数据结构中的多个N元素数据结构之一时,N元素数据结构在较大数据结构中的起始位置使用组索引确定,并用作M个元素的位置的偏移量。使用元数据索引确定源寄存器中元数据的起始位置。组索引和元数据索引包含在第二指令中/在第二指令中指示。
作为步骤420的第三个子步骤,所收集的M个元素的值被存储在M元素结构中。在所示实施例中,M元素数据结构表示M元素向量。在其他实施例中,M元素数据结构可以表示M元素张量或M元素矩阵。M元素结构位于目的地寄存器/存储器位置,其在第二指令中指示。目的地寄存器可以对应于临时存储(如图3中的TS 314)中的特定寄存器文件或存储器位置。在步骤420的结束处,方法400实现了M:N的结构化稀疏格式。方法400结束于步骤425。
方法400可由单个执行线程执行。或者,方法400可以由多个线程执行。在一个实施例中,单个线程压缩输入的所有N元素数据结构。在另一个实施例中,每对线程中的每一个压缩输入的N元素数据结构的一半。在另一个实施例中,四个线程中的每一个都压缩输入的N元素数据结构的四分之一。虽然上面和下面的目前描述描述了执行线程(例如,在GPU上),但应该注意的是,执行通道(例如,在单指令、多数据(SIMD)CPU的每个执行路径上)也可以在适当的位置或线程之外使用。
方法400可重复/级联以获得更高的压缩比或稀疏度。例如,当N为4且M为2时,方法400可重复三次,以达到2:8的压缩比。方法400可以执行两次,以从两个N元素结构生成两个中间M元素数据结构,然后执行第三次,以从两个中间M元素结构的组合生成最终M元素数据结构。
GENMETADATA指令的示例的示例格式如下:
GENMETADATA.func.selectN.fmt.idxsize.num{.SEQ}Rd,Ra,Rb,Rc,
#VecIdxU06,#MDidxU04
其中:
.func:控制N元素数据结构中元素的值如何相互比较以供选择的函数(如上所述,.func可以是例如MAX、MAXABS、MIN、MINABS等);
.selectN:使用.func选择的元素的数目,如1或2;
.fmt:Ra和Rb中元素的一种格式,包括整数格式,如有符号的2、4、8、16和32位整数(.S2、.S4、.S8、.S16、.S32)和无符号的2、4、8、16和32位整数(.U2、.U4、.U8、.U16、.U32)以及非整数格式,如IEEE半精度(16位)或单精度(32位)浮点(.FP16、.FP32),截断版本的FP16和FP32(E8M7,E8M10)、LNS(对数系统)、POSITs(一种建议的新的动态缩放的数字格式)、其他8位浮点类似格式和块指数格式;
.idxsize:元数据索引的大小,如2位、4位或8位(.U2、.U4、.U8)
.num:源存储中输入的N元素数据结构的数目,如1个数据结构、2个数据结构或4个数据结构(.1G、.2G、.4G);
.SEQ:可选顺序索引:当对不止一个N元素数据结构进行操作时,所有N元素数据结构都按顺序被索引,就像它们是单个较大数据结构的一部分一样,而不是对每个N元素数据结构重复相同的N索引;
Rd:目的地寄存器或存储器位置;
Ra:包含N元素数据结构的全部或部分的第一源寄存器或存储器位置。
Rb:包含N元素数据结构的全部或部分的第二源寄存器或存储器位置;
Rc:可选的源寄存器或存储器位置;当GENMETADATA指定.idxsize和.num,使得不是所有的Rd位都被写入时,Rc的内容流到Rd的其他未写入的位。当没有使用可选的源存储时,Rz(例如,具有零值的寄存器或存储器位置)用作占位符;
#VecIdxU06:组索引;6位立即数,指示N元素数据结构在较大数据结构中的(起始)位置,例如,当N元素数据结构是较大数据结构中的多个N元素数据结构之一时;
#MDidxU04:元数据索引;4位立即数,其确定将元数据写入Rd的偏移量(单位为位)。
图5-图9提供使用上述格式的GENMETADATA指令的示例。
图5说明了从N元素数据结构520生成元数据510的GENMETADATA指令500的示例。在所示的示例中,N是4,M是2,并且该示例生成指示2个元素在4元素数据结构520中的位置的元数据510。
在所示示例中,4元素数据结构520存储在源寄存器R1和R2中,所生成的元数据510存储在目的地寄存器R10中。在GENMETADATA指令500中,“.1G”表示源寄存器中只存储了一个4元素数据结构,“.F16”表示4元素数据结构520中的每个元素都是16位。由于在所示示例中,每个源位置的大小被限制为32位,因此每个源寄存器包含两个元素。#VecIdxU06值为0表示4元素数据结构520的起始位置为“0”。
如MAX.2所指示的,指令500从R1和R2中选择两个具有较大值‘3’和‘7’的元素,这些元素的位置分别为‘2’和‘1’。由于元数据510中的索引大小为2位(如.U2所指示的),因此在元数据510中,位置‘2’被写入为1 0,并且位置‘1’被写入为0 1。由于#MDidxU04为零,所选元素的位置位被写入目的地寄存器R10的前4位(2x2位)。
图6说明了从N元素数据结构620生成元数据610的GENMETADATA指令600的另一个示例。在所示的示例中,N是4,M是2,并且该示例生成元数据610,元数据610指示2个元素在4元素数据结构620中的位置。
在所示示例中,如.2G与R1和R2所指示的,两个4元素输入数据结构(总共64位)被存储在两个源寄存器R1和R2中。由于4元素数据结构620的每个元素都是8位(如.S8所指示的),因此每个源寄存器包含4个8位元素。#VecIdx U06值为2表示4元素数据结构620在每个源寄存器中的起始位置为“8”。起始位置可通过将#VecIdx U06的值乘以4来计算。如MAXABS.2所指示的,指令600从输入的4元素数据结构620的每一个中选择两个大小较大的元素。值为‘3’和‘-7’的元素从R1中选择,值为‘6’和‘5’的元素从R2中选择。由于元素在每个源位置中的起始位置为‘8’,R2中值为‘6’和‘5’的元素的位置分别为‘11’和‘9’,而R1中值为‘3’和‘-7’的元素的位置分别为‘10’和‘9’。由于元数据中的索引大小为4位(如.U4所指示的),因此位置‘11’和‘9’以十六进制格式写入为‘B’和‘9’,位置‘10’和‘9’在元数据610中写入为‘A’和‘9’。由于没有指定偏移量,因此位置被写入目的地寄存器R10的前16位(4x4位)。应理解,当元数据中的索引大小为8位(如.U8所指示的)时,位置以十六进制格式写入,最高有效的4位设置为零。
图7说明了从N元素数据结构720生成元数据710的GENMETADATA指令700的另一个示例。在所示的示例中,N是4,M是2,并且该示例生成元数据710,元数据710指示2个元素在输入的4元素数据结构720中的位置。
在所示示例中,如.2G与R1和R2所指示的,两个输入的4元素数据结构(总共64位)被存储在两个源寄存器R1和R2中。由于4元素输入数据结构720的每个元素是8位(如.S8所指示的),每个源寄存器包含四个8位元素。#VecIdx U06值为1指示每个输入数据结构720应该从位置4(1x4)开始。然而,.SEQ的存在表明源寄存器R1和R2中的输入数据结构720是按顺序排列的,输入数据结构720不是从位置4开始,而是从位置8开始,并前行到位15。当设置.SEQ时,可以通过将#VecIdx U06的值乘以4和.num的值来计算源寄存器中元素的起始位置。如MAXBS.2所指示的,指令700从每个4元素数据结构720中选择两个大小较大的元素。值为3和-7的元素从R1中选择,值为6和5的元素从R2中选择。由于元素在源位置的起始位置是8,具有值‘6’和‘5’的所选元素的位置分别为‘15’和‘13’,具有值‘3’和‘-7’的所选元素的位置分别为‘10’和‘9’。由于元数据中的索引大小为4位(如.U4所指示的),因此在元数据710中,位置‘11’和‘9’以十六进制格式写入为‘F’和‘D’,而‘10’和‘9’则写入为‘A’和‘9’。由于#MDidxU04为零,位置被写入目的地寄存器R10的前16位(4x4位)。
图8说明了从输入的N元素数据结构820生成元数据810的GENMETADATA指令800的另一个示例。在所示的示例中,N是4,M是2,并且该示例生成元数据810,元数据810指示2个元素在输入的4元素数据结构820中的位置。
在所示示例中,如.2G与R1和R2所指示的,两个4元素数据结构(总共64位)被存储在两个源寄存器R1和R2中。由于输入的数据结构820的每个元素是8位(如.S8所指示的),每个源寄存器R1、R2包含四个8位元素。由于#VecIdxU06的值为2,并且不存在.SEQ,因此每个输入的数据结构820从每个源寄存器的位置8(2x4)开始。由于#MDidxU04的值为4,所以目的地寄存器中元数据810的起始位是16,这是通过将#MDidxU04的值与.idxsize的值相乘来计算的。
如MAXABS.2所指示的,示例指令800从每个输入的数据结构820中选择两个大小较大的元素。因此,具有值‘3’和‘-7’的元素从R1中选择,具有值‘6’和‘5’的元素从R2中选择。由于每个输入的数据结构820的起始位置是8,所以在R2中具有值‘6’和‘5’的所选元素的位置分别为‘11’和‘9’,在R1中具有值‘3’和‘-7’的所选元素的位置分别为‘10’和‘9’。由于元数据中的索引大小为4位(如.U4所指示的),因此在元数据810中,位置‘11’和‘9’以十六进制格式写入为‘B’和‘9’,而‘10’和‘9’则写入为的‘A’和‘9’。当偏移量为16时,位置以目的地寄存器R10的位16-31写入。
图9说明了从输入的N元素数据结构912生成元数据910的GENMETADATA指令的示例。在所示的示例中,N是4,M是1,并且该示例生成元数据910,元数据910指示1个元素在输入的4元素数据结构912中的位置。如.1G、R10和R11所指示的,一个输入的4元素数据结构(总共64位)被存储在两个源寄存器R10和R11中。由于4元素输入数据结构912的每个元素都是16位(如.F16所指示的),所以每个源寄存器包含2个16位元素。
在所示的示例中,指令为每个通过(pass)选择并确定一个元素的位置(如MAX后面的.1所指示的),并分别使用#PassU01和#NibbleU03而不是#VecIdxU06和#MDidxU04。#PassU01是1位立即数,表示通过数和存在过滤/屏蔽(0表示第一个通过且无过滤),而#NibbleU03是3位立即数,用于确定用于过滤的元素的位置。
如#PassU01为0所指示的,第一指令914选择一个具有最大值(“5”)的元素,并在第一通过中将其位置(“2”)写入元数据916。第二指令中#nibbleU03的“0”表示源寄存器R3中位置0处的值2是要从源输入数据结构中过滤的元素的位置。因此,在第二通过中,指令918首先过滤/屏蔽值为‘5’的元素,该元素位于其余元素的输入数据结构912中的位置2处,然后第二指令918选择具有最大值为‘4’的元素,并将其位置(‘3’)写入元数据910。‘3’将覆盖元数据中的‘2’,因为未指示#MDidxU04的值。在第二通过结束时,元数据910指示具有第二最大值的元素的位置。可以理解,所描述的过滤过程可以修改,例如使用不同的函数,和/或可以扩展,例如使用一个或更多个附加通过,以从输入数据结构中过滤出某些元素。也可以理解,通过设置#MDidxU04以保持上一通过的位置值,所描述的过滤过程模拟了2:4GENMETADATA指令,对于执行1:4GENMETADATA两次的处理资源来说,这更为昂贵。
下面示出了GATHER指令的示例的示例格式。
GATHER.datasize.idxsize.num Rd,Ra,Rb,Rc,#VecIdxU06,#MDidxU04,
#DstByteU02,#SrcHalfU01
其中:
.datasize:Ra、Rb、Rd中数据元素的位宽度,如16位、8位或4位(.16、.18、.4);
.idxsize:元数据索引的大小,如2位、4位或8位(.U2、.U4、.U8);
.num:由Ra和Rb表示的输入的N元素数据结构的数目,如1个数据结构、2个数据结构或4个数据结构(.1G、.2G、.4G);
Rd:目的地寄存器或存储器位置;
Ra:包含N元素数据结构的全部或部分的第一源寄存器或存储器位置;
Rb:包含N元素数据结构的全部或部分的第二源寄存器或存储器位置;
Rc:包含元数据的第三源寄存器或存储器位置;
#VecIdxU06:组索引;6位立即数,表示N元素数据结构在较大数据结构中的(起始)位置,例如,当N元素数据结构是较大数据结构中多个N元素数据结构之一时。
#MDidxU04:元数据索引;4位立即数,其确定元数据位于Rc中的偏移量(单位为位);
#DstByteU02:2位立即数,用于确定当总输入数据分别为32位或16位时(1组int8、2组int4或1组int4)在Rd中分别写入16位或8位字的位置。当总输入数据为32位时,则该立即数的值必须为2的倍数。当该立即数的值为2的倍数时,Ra自己包含所有输入数据,所收集的数据元素为16位或8位,并且只有部分Rd用该数据写入;其余的Rd用Rb的内容写入;
#SrcHalfU01:1位立即数,用于确定在对单组int4数据元素操作时是从Ra的下半部分还是上半部分读取。
图10-图14提供使用上述格式的GENMETADATA指令的示例。
图10说明了根据使用元数据生成指令(如上文所描述的GENMETADATA)生成的元数据将N元素数据结构压缩为M元素数据结构的GATHER指令1000的示例。在所示示例中,N为4,M为2。
在所示示例中,根据第二源寄存器R10中的元数据1030,第一源寄存器R1和R2中的一个输入的4元素数据结构1010(如.1G所指示的)被压缩为目的地寄存器R15中的一个2元素数据结构。.16表示输入的4元素数据结构1010中的每个元素都是16位。
由于每个元数据索引为2位(如由.U2指示的),前2个值1 0(元数据1030中的位位置3和2)表示位置2,后2个值0 1(元数据1030中的位位置1和0)表示位置1。因此,收集输入数据结构1010的位置2中的“3”和位置1中的“7”,并将其写入目的地寄存器R15中的2元素数据结构1020中。在所示示例中,未指定#VecIdxU06,#MDidxU04,#DstByteU02和#SrcHalfU01。
图11说明了根据使用元数据生成指令(如上文所述的GENMETADATA)生成的元数据将N元素数据结构压缩为M元素数据结构的GATHER指令的另一个示例。在所示示例中,N为4,M为2。
在所示示例中,根据第二源寄存器R10中的元数据1130,第一源寄存器R1和R2中的两个输入的4元素数据结构1110(如.2G所指示的)被压缩为目的地寄存器1120中的两个2元素数据结构1120。.8指示输入的4元素数据结构1110中的每个元素都是8位。
由于每个元数据索引为2位(如由.U2指示的),前2个值1 1表示R2中的位置3,接下来的2个值0 1表示R2中的位置1,接下来的2个值1 0表示R1中的位置2,最后的2个值0 1表示R1中的位置1。因此,寄存器R2的位置3和1中的值‘6’和‘5’,以及寄存器R1的位置2和1中的值‘3’和‘-7’被收集并写入目的地寄存器R20中的两个2元素数据结构1120中。在所示示例中,未指定#VecIdxU06,##MDidxU04,#DstByteU02和#SrcHalfU01。
图12说明了根据使用元数据生成指令(如上文所述的GENMETADATA)生成的元数据将N元素数据结构压缩为M元素数据结构的GATHER指令的另一个示例1200。在所示示例中,N为4,M为2。在所示示例中,根据第二源寄存器R10中的元数据1230,第一源寄存器R1和R2中的两个输入的4元素数据结构1210(如.2G所指示的)被压缩为目的地寄存器R20中的两个2元素数据结构1220。.8指示输入的4元素数据结构1210中的每个元素都是8位。由于#VecIdxU06为1,每个输入的4元素数据结构1210从位置4(1x4)开始。由于#MDidxU04为零,因此第二源寄存器R10中的元数据1230没有偏移量。
由于每个元数据索引为4位(如.U4所指示的),元数据1230的第一个值‘7’表示R2中的位置7,第二个值‘5’表示R2中的位置5,第三个值‘6’表示R1中的位置6,第四个值‘5’表示R1中的位置5。因此,寄存器R2的位置7和5中的值‘6’和‘5’,以及寄存器文件R1的位置6和5中的值‘3’和‘-7’被收集并写入目的地寄存器R20中的两个2元素数据结构1220中。在所示示例中,未指定#DstByteU02和#SrcHalfU01。
图13说明了根据使用元数据生成指令(如上文所述的GENMETADATA)生成的元数据将N元素数据结构压缩为M元素数据结构的GATHER指令的另一个示例。在所示示例中,N为4,M为2。
在所示示例中,根据存储在第二源寄存器R10中的元数据1330,存储在第一源寄存器R1和R2中的两个输入的4元素数据结构1310(如由.2G指示的)被压缩为目的地寄存器R20中的两个2元素数据结构1320。.8指示输入的4元素数据结构1310中的每个元素都是8位。由于#VecIdxU06是1,每个输入的数据结构中的元素从位置4(1x4)开始,并且由于#MDidxU04和.idxsize都是4,第二源寄存器中的元数据1330的起始位是16(4x4)。
由于每个元数据索引为4位(如.U4所指示的),元数据1330的前两个值‘7’和‘5’表示R2中的位置7和5,后两个值‘6’和‘5’表示R1中的位置6和5。因此,寄存器R2的位置7和5中的值‘6’和‘5’,以及寄存器R1的位置6和5中的值‘3’和‘-7’被收集并写入目的地寄存器R20中的两个2元素数据结构中。在示例中,未指定#DstByteU02和#SrcHalfU01。
图14说明了根据使用元数据生成指令(如上文所述的GENMETADATA)生成的元数据将N元素数据结构压缩为M元素数据结构的GATHER指令的另一个示例。在所示示例中,N为4,M为2。
在所示示例中,#DstByteU02的存在表示第一源寄存器R1包含所有输入数据,收集的数据为16位。另外,#DstByteU02的值2表示所收集的数据将在R20中偏移2字节或16位,而R20的其余部分将用另一个第一源寄存器R2的内容写入。因此,根据第二源寄存器R10中的元数据1230,第一源寄存器R1中的两个输入的4元素数据结构1410(如.2G所指示的)被压缩为目的地寄存器R20的位置16-31中的两个2元素数据结构1320。.4表示输入的4元素数据结构1410中的每个元素都是4位。
由于每个元数据索引为4位,前两个值‘3’和‘1’表示组1中的位置3和1,后两个值‘2’和‘1’表示组0中的位置2和1。因此,收集组1中的值‘6’和‘5’以及组0中的值‘3’和‘-7’,并将其写入目的地寄存器R20的位置16-31中的两个2元素数据结构中。R20的其余部分用另一个第一源寄存器R2的内容写入。由于指令1400处理两组4位元素,因此不使用#SrcHalfU01。
下面示出了被称为GATHERPLUS指令的“超级指令”的示例的示例格式。
GATHERPLUS{.mode}.func.selectN.fmt.idxsize.num{.SEQ}Rd1,Rd2,Ra,Rb,Rc,#VecIdxU06,#MDidxU04,#DstByteU02,#SrcHalfU01
其中:
.mode:可选模式,其指示是否生成元数据(“METADATA”)或压缩数据(“DATA”);如果缺少,则生成元数据和压缩数据两者;
.func:控制N元素数据结构中元素的值如何相互比较以供选择的函数(如上所述,.func可以是例如MAX、MAXABS、MIN、MINABS等);
.selectN:使用.func选择的元素的数目,如1或2;
.fmt:Ra和Rb中元素的一种格式,包括整数格式,如有符号的2、4、8、16和32位整数(.S2、.S4、.S8、.S16、.S32)和无符号的2、4、8、16和32位整数(.U2、.U4、.U8、.U16、.U32)以及非整数格式,如IEEE半精度(16位)或单精度(32位)浮点(.FP16、.FP32),截断版本的FP16和FP32(E8M7,E8M10)、LNS(对数系统)、POSITs(一种建议的新的动态缩放的数字格式)、其他8位浮点类似格式和块指数格式;
.idxsize:元数据索引的大小,如2位、4位或8位(.U2、.U4、.U8)
.num:源存储中输入的N元素数据结构的数目,如1个数据结构、2个数据结构或4个数据结构(.1G、.2G、.4G);
.SEQ:可选顺序索引:当对不止一个N元素数据结构进行操作时,所有N元素数据结构都按顺序被索引,就像它们是单个较大数据结构的一部分一样,而不是对每个N元素数据结构重复相同的N索引;
Rd1:第一目的寄存器或存储器位置;
Rd2:第二目的寄存器或存储器位置;
Ra:包含N元素数据结构的全部或部分的第一源寄存器或存储器位置;
Rb:包含N元素数据结构的全部或部分的第二源寄存器或存储器位置;
Rc:可选的源寄存器或存储器位置;当GENMETADATA指定.idxsize和.num,使得不是Rd1或Rd2的所有位都会被写入时,Rc的内容会流到Rd1或Rd2的其他未写入的位;
#VecIdxU06:组索引;6位立即数,指示N元素数据结构在较大数据结构中的(起始)位置,例如,当N元素数据结构是较大数据结构中多个N元素数据结构之一时;
#MDidxU04:元数据索引;4位立即数,其确定元数据位于Rc中的偏移量(单位为位);
#DstByteU02:2位立即数,用于确定当总输入数据分别为32位或16位时(1组int8、2组int4或1组int4)在Rd中分别写入16位或8位字的位置。当总输入数据为32位时,则该立即数的值必须为2的倍数。当该立即数的值为2的倍数时,Ra自己包含所有输入数据,所收集的数据元素为16位或8位,并且只有部分Rd用该数据写入;其余的Rd用Rb的内容写入;
#SrcHalfU01:1位立即数,用于确定在对单组int4数据元素操作时是从Ra的下半部分还是上半部分读取。
如上所述,超级指令是元数据生成指令(例如GENMETADATA)和数据压缩指令(例如GATHER)的组合。超级指令包括组合指令的所有公共字段/参数,以及元数据和压缩数据的两个寄存器/存储器位置。
超级指令和上述两个单独的指令之间的一个主要区别是超级指令产生(例如写入)两组输出,元数据和压缩数据。这两组输出可以,例如,1)并行生成和/或2)按顺序产生。当并行产生时,超级指令可以同时写入两个不同的寄存器/存储器位置。当按顺序产生时,超级指令可以一次写入一个位置,因此操作(元数据生成和数据压缩)就可以一个接一个地执行。这意味着指令具有内部状态。
图15说明了GATHERPLUS指令1300的示例,该指令从N元素数据结构生成元数据,并将N元素数据结构压缩为M元素数据结构。在所示示例中,N为4,M为2。
在指令1300的第一个操作中,来自源寄存器R1和R2中两个输入的4元素数据结构1520(如.2G所指示的)中每一个的两个元素的位置被写入第一目的地寄存器R10中的元数据1510。更具体地说,在指令1500的第一操作期间,来自源寄存器R1和R2中两个输入的4元素数据结构1520中每一个的具有较大大小的两个元素的位置(如MAXABS.2所指示的),即R2中具有值‘6’和‘5’的元素的位置‘3’和‘1’以及R1中具有值‘3’和‘-7’的元素的位置‘2’和‘1’被写入第一目的地寄存器R10中的元数据1510。
在指令1300的另一个操作中,来自两个输入的4元素数据结构1320中每一个的具有较大大小的两个元素的值,即R2中元素的值‘6’和‘5’,以及R1中元素的值‘3’和‘-7’被收集并被写入第二目的地寄存器R20中的两个2元素数据结构1330中。这两个操作可以并行地或按顺序进行。尽管在所示示例中,#VecIdxU06和#MDidxU04都为零,但可以将它们设置为指示各个寄存器/存储器位置中的偏移量,类似于GENMETADATA和GATHER指令。
因此,R2中具有值‘6’和‘5’的元素的位置‘3’和‘1’以及R1中具有值‘3’和‘-7’的元素的位置‘2’和‘1’写入第一目的地寄存器R10中的元数据1310的前16位(4x4位)。同时,R2中值为‘6’和‘5’的元素以及R1中值为‘3’和‘-7’的元素被收集并写入第二目的地寄存器R20中的两个2元素数据结构1330中。
图16-图21说明了实现2:8稀疏/压缩比的GENMETADATA与GATHER指令的级联的示例。如图16所示,所示示例将原始数据(由两个4元素数据结构1602和1604组成)压缩为压缩数据,一个2元素数据结构1620,其具有值为‘12’和‘7’的两个元素。2元素数据结构1620将具有元数据1630。
在图17中,元数据1730由两个输入的4元素数据结构1602、1604产生。首先,使用第一GENMETADATA指令1710,确定第一输入数据结构1602中具有较大值的元素的位置,并将其写入元数据1730中。由于在第一GENMETADATA指令1710中,#VecIdxU06和#MDidxU04的值都为零,因此第一输入数据结构1602中具有较大值的元素的位置‘2’和‘1’(其从(较大数据结构的)位0开始)被存储在元数据1730的位0-7。其次,使用第二GENMETADATA指令1720,确定第二输入数据结构1604中具有较大值的元素的位置,并将其写入元数据1730中。在第二GENMETADATA指令中,#VecIdxU06和#MDidxU04的值分别设置为‘1’和‘2’。因此,第二输入数据结构1604中具有较大值的元素的位置‘7’和‘6’(从第4位开始)被存储在元数据1730的第8-15位。
在图18中,使用元数据1730将输入数据结构1602、1604中具有较大值的元素的值收集到两个2元素数据结构1830、1840中。首先,使用第一GATHER指令1810,将第一输入数据结构1602中具有较大值的元素的值收集到第一个2元素数据结构1830中。由于#VecIdxU06和#MDidxU04的值在第一GATHER指令1810中均为零,因此使用元数据1730的第0-7位的位置‘2’和‘1’,从第一个输入数据结构1602收集值‘2’和‘1’,该数据结构从(较大数据结构的)位置0开始。第二,使用第二GATHER指令1320,将第二输入数据结构1604中具有较大值的元素的值收集到第二个2元素数据结构1840中。在第二GATHER指令1820中,#VecIdxU06和#MDidxU04的值分别设置为‘1’和‘2’。因此,使用元数据1730第8-15位的位置‘7’和‘6’从第二个输入数据结构1604收集值‘7’和‘6’,该数据结构从(较大数据结构的)位置4开始。
在图19中,通过执行另一个GENMETADATA指令1910,确定两个2元素数据结构1830、1840中具有较大值的元素的位置,并将其写入元数据1730中。由于#MDidxU04的值为‘4’,值为‘12’和‘7’的元素的位置‘2’和‘1’被偏移16位,并写入元数据1730的位16-23中。
在图20中,通过执行另一个GATHER指令2010,两个2元素数据结构1830、1840中具有较大值的元素的值被收集并被写入到2元素数据结构2020中。#MDidxU04的值被设置为‘4’,这样元数据1730的位16-23处的位置‘2’和‘0’用于收集相应元素的值‘12’和‘7’。2元素数据结构2020与最终压缩数据相同,即图16中的2元素数据结构1620。
在图21中,元数据1730被视为另一个GATHER指令2110的输入数据结构和元数据。由于#MDidxU04的值为‘4’,元数据1730的位16-23处的位置用于收集相应元素的值。因此,GATHER指令2110产生的数据结构2120与图16中的最终元数据1630相同。应理解,图15-图21所示的指令可以根据需要重复,以实现更高程度的稀疏度。例如,重复元数据生成,然后对四个4元素数据结构进行压缩,直到剩下2个元素(图17-20),然后为剩余的2个元素生成最终元数据,可以创建2:16稀疏度/压缩率。
可以理解,通过设置可选的模式参数以匹配正在产生的数据,可以将所示示例中的每个GENMETADATA和GATHER指令替换为超级指令,例如GATHERPLUS。例如,要替换GENMETADATA指令,GATHERPLUS指令的模式参数被设置为“METADATA”,并且要替换GATHER指令,GATHERPLUS指令的模式参数被设置为“DATA”。
上述装置、系统或方法的一部分可以体现在各种数字数据处理器或计算机中或由其执行,其中计算机被编程或存储软件指令序列的可执行程序,以执行方法的一个或更多个步骤。这些程序的软件指令可以表示算法,并以机器可执行形式编码在非暂时性数字数据存储介质上,例如磁盘或光盘、随机存取存储器(RAM)、磁盘、闪存和/或只读存储器(ROM),以使各种类型的数字数据处理器或计算机能够执行上述一种或更多种方法或本文所述功能、系统或装置的一个、多个或全部步骤。
所公开实施例的部分可以涉及具有非暂时性计算机可读介质的计算机存储产品,所述非暂时性计算机可读介质具有用于执行各种计算机实现的操作的程序代码,其包含设备、装置的一部分或执行本文所述方法的步骤。本文所用的非暂时性是指除暂时性传播信号外的所有计算机可读介质。非暂时性计算机可读介质的例子包括但不限于:诸如磁盘、软盘和磁带等磁介质;诸如CD-ROM盘等光介质;诸如软磁光盘等磁光介质;以及专门配置用于存储和执行程序代码的硬件设备,如ROM和RAM设备。程序代码的例子包括机器代码(如编译器生成的代码)和包含高级代码的文件(可由计算机使用解释器执行)。
在解释本公开时,所有术语应以与上下文一致的尽可能广泛的方式解释。特别是,术语“包含”和“包括”应解释为以非排他性的方式提及元素、组件或步骤,表明所引用的元素、组件或步骤可以存在、使用,或者与未明确提及的其他元素、组件或步骤结合使用。
本申请所涉及领域的技术人员将理解可以对所述实施例进行其他和进一步的添加、删除、替换和修改。还应理解,本文所用术语仅用于描述特定实施例,并不意图限制,因为本公开的范围仅由权利要求限制。除非另有定义,否则本发明所用的所有技术和科学术语的含义与本发明所属领域的普通技术人员通常理解的含义相同。尽管与本文所述方法和材料类似或等效的任何方法和材料也可用于本发明的实践或测试中,但本文描述了有限数量的示例性方法和材料。
Claims (32)
1.一种用于压缩数据的方法,包括:
从N元素数据结构生成元数据,所述生成包括:
从所述N元素数据结构中选择M个元素,其中N大于M;
确定所述M个元素在所述N元素数据结构中的位置;以及
将所述M个元素的所述位置存储为所述元数据;以及
根据所述元数据将所述N元素数据结构压缩为M元素数据结构,所述压缩包括:
根据所述位置从所述N元素数据结构中收集所述M个元素的值;以及
将所述M个元素的所述值存储在所述M元素数据结构中。
2.根据权利要求1所述的方法,其中所述生成是使用第一指令执行的。
3.根据权利要求2所述的方法,其中所述生成包括:使用所述第一指令中的组索引确定所述N元素数据结构在较大数据结构中的起始位置。
4.根据权利要求2所述的方法,其中所述生成进一步包括:使用所述第一指令中的元数据索引确定所述元数据在目的地寄存器中的起始位置。
5.根据权利要求2所述的方法,其中所述生成包括:接收所述N元素数据结构作为所述第一指令的输入。
6.根据权利要求2所述的方法,其中所述第一指令是GENMETADATA指令。
7.根据权利要求2所述的方法,其中所述选择是基于所述第一指令中的函数的,所述函数将所述N元素数据结构中N个元素的值相互比较。
8.根据权利要求7所述的方法,其中所述函数是MAX函数或MAXABS函数。
9.根据权利要求1所述的方法,其中所述压缩是使用第二指令执行的。
10.根据权利要求9所述的方法,其中所述压缩包括:使用所述第二指令中的组索引确定所述N元素数据结构在较大数据结构中的起始位置。
11.根据权利要求9所述的方法,其中所述压缩包括:使用所述第二指令中的元数据索引确定所述元数据在源寄存器中的起始位置。
12.根据权利要求9所述的方法,其中所述压缩包括:接收所述元数据和所述N元素数据结构作为所述第二指令的输入。
13.根据权利要求9所述的方法,其中所述第二指令是GATHER指令。
14.根据权利要求1所述的方法,其中:
所述N元素数据结构为N元素向量,所述M元素数据结构为M元素向量;或
所述N元素数据结构为N元素张量,所述M元素数据结构为M元素张量。
15.根据权利要求1所述的方法,其中M为2,N为4。
16.根据权利要求1所述的方法,还包括:重复所述生成和所述压缩,以将所述N元素数据结构压缩为P元素数据结构,P小于M。
17.根据权利要求1所述的方法,其中所述生成和所述压缩是使用单个指令执行的。
18.一种用于压缩数据的系统,包括:
存储器;和
至少一个处理器,其通信地耦合至所述存储器,所述至少一个处理器被配置为:
通过以下步骤从N元素数据结构生成元数据:
从所述N元素数据结构中选择M个元素,其中N大于M;
确定所述M个元素在所述N元素数据结构中的位置;以及
将所述M个元素的所述位置存储为所述元数据;以及
根据所述元数据,通过以下步骤将所述N元素数据结构压缩为M元素数据结构:
根据所述位置从所述N元素数据结构中收集所述M个元素的值;
将所述M个元素的所述值存储在所述M元素数据结构中。
19.根据权利要求18所述的系统,其中所述至少一个处理器被配置为通过执行第一指令生成所述元数据。
20.根据权利要求19所述的系统,其中所述第一指令是GENMETADATA指令。
21.根据权利要求19所述的系统,其中所述存储所述位置包括:使用所述第一指令中的元数据索引确定所述元数据在目的地寄存器中的起始位置。
22.根据权利要求19所述的系统,其中所述至少一个处理器还被配置为:接收所述N元素数据结构作为所述第一指令的输入。
23.根据权利要求19所述的系统,其中所述确定包括:使用所述第一指令中的组索引确定所述N元素数据结构在较大数据结构中的起始位置。
24.根据权利要求19所述的系统,其中所述选择是基于所述第一指令中的函数的,所述函数将所述N元素数据结构中N个元素的值相互比较。
25.根据权利要求24所述的系统,其中所述函数是MIN函数或MINABS函数。
26.根据权利要求18所述的系统,其中所述至少一个处理器被配置为:通过执行第二指令压缩所述N元素数据结构。
27.根据权利要求26所述的系统,其中所述收集包括:使用所述第二指令中的组索引确定所述N元素数据结构在较大数据结构中的起始位置。
28.根据权利要求26所述的系统,其中所述收集包括:使用所述第二指令中的元数据索引确定所述元数据在源寄存器中的起始位置。
29.根据权利要求26所述的系统,其中所述至少一个处理器还被配置为:接收所述元数据和所述N元素数据结构作为所述第二指令的输入。
30.根据权利要求26所述的系统,其中所述第二指令是GATHER指令。
31.根据权利要求18所述的系统,其中M是2,N是4。
32.根据权利要求18所述的系统,其中:
所述N元素数据结构为N元素向量,所述M元素数据结构为M元素向量;或
所述N元素数据结构为N元素张量,所述M元素数据结构为M元素张量。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962850727P | 2019-05-21 | 2019-05-21 | |
US62/850,727 | 2019-05-21 | ||
US16/426,303 | 2019-05-30 | ||
US16/426,303 US11489541B2 (en) | 2019-05-21 | 2019-05-30 | Compression techniques for data structures suitable for artificial neural networks |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111985636A true CN111985636A (zh) | 2020-11-24 |
Family
ID=73052732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910823453.7A Pending CN111985636A (zh) | 2019-05-21 | 2019-09-02 | 适用于人工神经网络的数据结构压缩技术 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11489541B2 (zh) |
CN (1) | CN111985636A (zh) |
DE (1) | DE102020103414A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114723033A (zh) * | 2022-06-10 | 2022-07-08 | 成都登临科技有限公司 | 数据处理方法、装置、ai芯片、电子设备及存储介质 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021129143A (ja) * | 2020-02-10 | 2021-09-02 | キオクシア株式会社 | デコード装置 |
US20240162916A1 (en) * | 2022-11-16 | 2024-05-16 | Samsung Electronics Co., Ltd. | Runtime reconfigurable compression format conversion |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130064370A1 (en) * | 2011-09-12 | 2013-03-14 | Microsoft Corporation | Distribution of portions of content |
CN109683825A (zh) * | 2018-12-24 | 2019-04-26 | 广东浪潮大数据研究有限公司 | 一种存储系统在线数据压缩方法、装置及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11379420B2 (en) | 2019-03-08 | 2022-07-05 | Nvidia Corporation | Decompression techniques for processing compressed data suitable for artificial neural networks |
-
2019
- 2019-05-30 US US16/426,303 patent/US11489541B2/en active Active
- 2019-09-02 CN CN201910823453.7A patent/CN111985636A/zh active Pending
-
2020
- 2020-02-11 DE DE102020103414.8A patent/DE102020103414A1/de active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130064370A1 (en) * | 2011-09-12 | 2013-03-14 | Microsoft Corporation | Distribution of portions of content |
CN109683825A (zh) * | 2018-12-24 | 2019-04-26 | 广东浪潮大数据研究有限公司 | 一种存储系统在线数据压缩方法、装置及设备 |
Non-Patent Citations (1)
Title |
---|
孙竞;余宏亮;郑纬民;: "支持分布式存储删冗的相似文件元数据集合索引", 计算机研究与发展, no. 01, 15 January 2013 (2013-01-15) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114723033A (zh) * | 2022-06-10 | 2022-07-08 | 成都登临科技有限公司 | 数据处理方法、装置、ai芯片、电子设备及存储介质 |
CN114723033B (zh) * | 2022-06-10 | 2022-08-19 | 成都登临科技有限公司 | 数据处理方法、装置、ai芯片、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US11489541B2 (en) | 2022-11-01 |
DE102020103414A1 (de) | 2020-11-26 |
US20200373941A1 (en) | 2020-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111985636A (zh) | 适用于人工神经网络的数据结构压缩技术 | |
CN110378468B (zh) | 一种基于结构化剪枝和低比特量化的神经网络加速器 | |
DE112007001989B4 (de) | Ausführung von Rundungsoperationen entsprechend einer Anweisung | |
US10884744B2 (en) | System and method of loop vectorization by compressing indices and data elements from iterations based on a control mask | |
EP3564863B1 (en) | Apparatus for executing lstm neural network operation, and operational method | |
CN110097172A (zh) | 一种基于winograd卷积运算的卷积神经网络数据处理方法及装置 | |
WO2019051027A1 (en) | EFFECTIVE DIRECT CONVOLUTION USING HMIS INSTRUCTIONS | |
DE19920214C2 (de) | Verfahren und Einrichtung zum Konvertieren einer Zahl zwischen einem Gleitkommaformat und einem Ganzzahlformat | |
DE112004001648T5 (de) | Verfahren, Vorrichtung und Befehle für parallele Datenumwandlung | |
RU2599970C2 (ru) | Многокаскадный iir-фильтр и распараллеленная фильтрация данных таковым | |
US20040193848A1 (en) | Computer implemented data parsing for DSP | |
CN112200300A (zh) | 卷积神经网络运算方法及装置 | |
CN111010189B (zh) | 一种对数据集的多路压缩方法、装置及存储介质 | |
CN114328360A (zh) | 一种数据传输方法、装置、电子设备和介质 | |
KR20180027537A (ko) | 와이드 데이터 타입들의 비교 | |
CN112766397A (zh) | 一种分类网络及其实现方法和装置 | |
US20130262819A1 (en) | Single cycle compare and select operations | |
US11195094B2 (en) | Neural network connection reduction | |
CN113285720B (zh) | 基因数据无损压缩方法、集成电路及无损压缩设备 | |
CN110175185A (zh) | 一种基于时序数据分布特征的自适应无损压缩方法 | |
CN113902088A (zh) | 神经网络结构搜索的方法、装置与系统 | |
Fuentes-Alventosa et al. | Cuvle: Variable-length encoding on cuda | |
CN113011577A (zh) | 处理单元、处理器核、神经网络训练机及方法 | |
US20240338253A1 (en) | Batch processing of multi-channel data | |
US20230176867A1 (en) | Multibit shift instruction |
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 |