CN113452376A - 激活数据的压缩和/或解压缩 - Google Patents
激活数据的压缩和/或解压缩 Download PDFInfo
- Publication number
- CN113452376A CN113452376A CN202110308681.8A CN202110308681A CN113452376A CN 113452376 A CN113452376 A CN 113452376A CN 202110308681 A CN202110308681 A CN 202110308681A CN 113452376 A CN113452376 A CN 113452376A
- Authority
- CN
- China
- Prior art keywords
- data
- data elements
- subgroup
- zero
- 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
-
- 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/3066—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction by means of a mask or a bit-map
-
- 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
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- 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/3071—Prediction
-
- 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/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4068—Parameterized codes
- H03M7/4075—Golomb codes
-
- 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/60—General implementation details not specific to a particular type of compression
- H03M7/6011—Encoder aspects
-
- 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/70—Type of the data to be coded, other than image and sound
-
- 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
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本公开涉及激活数据的压缩和/或解压缩。提供了一种用于压缩神经网络的要写入到存储装置的激活数据的方法。所述激活数据被形成为多个组,并且状态指示符指示每个组内是否存在任何具有非零值的数据元素。第二状态指示符指示对于具有非零值的组,所述组内的子组是否包含具有非零值的数据元素。子组状态指示符指示对于具有非零值的每个子组,所述子组内的哪些数据元素具有非零值。对所述激活数据中的数据元素的非零值进行编码并且形成压缩数据集,所述压缩数据集包括所述第一状态指示符、任何第二状态指示符、任何子组状态指示符和所述编码的非零值。
Description
发明背景
发明领域
本发明涉及激活数据的压缩和/或解压缩,并且更具体地涉及来自神经网络等的激活数据的压缩和/或解压缩。
相关技术描述
一种执行无损数据压缩的方式是将值转换为Golomb Rice代码。为了将数值转换为Golomb Rice代码,选择被称为除数的参数。要创建Golomb Rice代码,就将数值除以除数以生成两个部分。第一部分是商,其为数值将被除数整除的次数。第二部分是余数,其为在数值被除数整除之后的余量(如果有的话)。
Golomb Rice代码的示例在图1中示出。在图1所示的示例中,0与10之间的值被示出为Golomb Rice代码。Golomb Rice代码的第一部分,即商,以一进制格式表示。以此格式,数字由等于商值的‘1’的数量后跟停止位‘0’表示。例如,数字9的一进制部分为‘1110’,其为三个‘1’后跟停止位‘0’,因为9被3除三次。Golomb Rice代码的第二部分是固定长度二进制部分。由于在此示例中的除数为‘3’,因此余数只能是0、1或2。因此,这可由两个位的固定长度二进制表示。Golomb Rice代码中的每一者中的最后两个位表示呈二进制形式的余数。余数可被称为Golomb Rice代码的‘尾数’,因为该余数出现在Golomb Rice代码的一进制部分的停止位之后。
神经网络在本领域中也是已知的。在神经网络中,激活函数负责将来自某一节点的相加的加权输入变换为该节点的激活。来自多个节点的激活值形成激活图。当硬件执行神经网络时,每个激活值可需要可能多次地保存到存储装置和从存储装置加载。由Computer Vision Foundation发布的Samsung Semiconductor公司的GeorgiosGeorgiadis的标题为‘Accelerating Convolutional Neural Networks via ActivationMap Compression’的论文描述了使用熵编码算法的激活图压缩,该熵编码算法是指数Golomb编码的变体。
鉴于上述情况,期望压缩激活数据的改进的方法,以便提高神经网络的处理效率。
发明内容
根据第一方面,提供了一种由处理元件执行的用于压缩神经网络的要写入到存储装置的激活数据的方法,其中激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述方法包括:在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;识别在每个组内是否存在任何具有非零值的数据元素并且形成每个组的第一状态指示符,该第一状态指示符指示该组是否包含具有非零值的数据元素;在被识别为包含至少一个具有非零值的数据元素的每个数据元素组内形成多个子组;识别在每个子组内是否存在任何具有非零值的数据元素并且形成第二状态指示符,该第二状态指示符指示对于每个子组,该子组是否包含具有非零值的数据元素;对于包含具有非零值的数据元素的每个子组,形成该子组的子组状态指示符,该子组状态指示符指示该子组内的哪些数据元素具有非零值;对数据单元中的数据元素的非零值进行编码;以及形成压缩数据集,该压缩数据集包括第一状态指示符、任何第二状态指示符、任何子组状态指示符和编码的非零值。
根据第二方面,提供了一种由处理元件执行的用于压缩神经网络的要写入到存储装置的激活数据的方法,其中激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述方法包括:在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;识别在每个组内是否存在任何具有零值的数据元素值并且形成每个组的第一状态指示符,该第一状态指示符指示该组是否包含具有零值的数据元素;在被识别为包含至少一个具有零值的数据元素的每个数据元素组内形成多个子组;识别在每个子组内是否存在任何具有零值的数据元素并且形成第二状态指示符,该第二状态指示符指示对于每个子组,该子组是否包含具有零值的数据元素;对于包含具有零值的数据元素的每个子组,形成该组的子组状态指示符,该子组状态指示符指示该子组内的哪些数据元素具有零值;对数据单元中的数据元素的非零值进行编码;以及形成压缩数据集,该压缩数据集包括第一状态指示符、任何第二状态指示符、任何子组状态指示符和编码的非零值。
根据第三方面,提供了一种数据处理系统,所述数据处理系统包括处理元件和存储装置,该存储装置存储代码部分,该代码部分在由处理元件执行时致使数据处理系统执行压缩神经网络的激活数据的方法,其中激活数据以数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,该方法包括:在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;识别在每个组内是否存在任何具有非零值的数据元素并且形成每个组的第一状态指示符,该第一状态指示符指示该组是否包含具有非零值的数据元素;在被识别为包含至少一个具有非零值的数据元素的每个数据元素组内形成多个子组;识别在每个子组内是否存在任何具有非零值的数据元素并且形成第二状态指示符,该第二状态指示符指示对于每个子组,该子组是否包含具有非零值的数据元素;对于包含具有非零值的数据元素的每个子组,形成该子组的子组状态指示符,该子组状态指示符指示该子组内的哪些数据元素具有非零值;对数据单元中的数据元素的非零值进行编码;以及形成压缩数据集,该压缩数据集包括第一状态指示符、任何第二状态指示符、任何子组状态指示符和编码的非零值。
附图说明
现在将参考如在附图中所示的实施方案仅以示例的方式来描述本技术,在附图中:
图1是Golomb-Rice代码的表;
图2示出了神经处理单元的部件;
图3a是示出用于压缩激活数据的步骤的图;
图3b是示出可用于压缩激活数据的多个压缩方案的表;
图4示出了用于对激活数据进行增量编码的预测方案的逻辑;
图5示出了激活数据的增量编码的工作示例;
图6示出了激活数据的掩码编码的工作示例;
图7示出了激活数据的反掩码编码的工作示例;
图8是示出在处理激活数据的方法中的步骤的流程图;
图9示出了将Golomb-Rice代码分为流;
图10示出了用于在对激活数据进行编码以供存储中使用的多个组块结构;
图11是示出用于对激活数据进行编码以供存储的方法的步骤的流程图;
图12是示出用于选择在对激活数据进行解码中使用的组块结构的步骤的流程图;
图13是示出用于选择在对激活数据进行解码中使用的组块结构的步骤的流程图;
图14是示出用于选择在对激活数据进行解码中使用的组块结构的步骤的流程图;
图15a是示出用于对一进制数据进行解码的方法的步骤的流程图;
图15b示出了对一进制数据进行解码的工作示例;并且
图16示出了用于恢复增量编码的激活数据的处理次序。
具体实施方式
在参考附图讨论实施方案之前,提供实施方案和相关联的优点的以下描述。
根据一个实施方案,提供了一种由处理元件执行的用于压缩神经网络的要写入到存储装置的激活数据的方法,该激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述方法包括:在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;识别在每个组内是否存在任何具有非零值的数据元素并且形成每个组的第一状态指示符,该第一状态指示符指示该组是否包含具有非零值的数据元素;在被识别为包含至少一个具有非零值的数据元素的每个数据元素组内形成多个子组;识别在每个子组内是否存在任何具有非零值的数据元素并且形成第二状态指示符,该第二状态指示符指示对于每个子组,该子组是否包含具有非零值的数据元素;对于包含具有非零值的数据元素的每个子组,形成该子组的子组状态指示符,该子组状态指示符指示该子组内的哪些数据元素具有非零值;对数据单元中的数据元素的非零值进行编码;以及形成压缩数据集,该压缩数据集包括第一状态指示符、任何第二状态指示符、任何子组状态指示符和编码的非零值。
该实施方案可用于改进因包括大量零值而稀疏的激活数据的压缩。例如,该方法在压缩来自利用ReLU激活函数的神经网络的激活数据时可为有效的。
数据元素组、数据元素子组和数据元素可形成四叉树结构。更具体地,在一些实施方案中,数据单元可包括64个数据元素,数据单元可被划分为各有16个元素的四个组,并且组可被细分为各有4个数据元素的子组。
在压缩数据集内,第一状态指示符可被分组为第一状态指示符集,并且第二状态指示符可被分组为第二状态指示符集。这在其他实施方案中被称为广度优先编码,因为组的第一状态指示符被集中在一起并且子组的第二状态指示符也被集中在一起。这样的布置可允许神经处理单元的解析器更高效地解析压缩数据集。
数据元素的非零值的编码可包括对非零值进行增量编码。例如,可通过获取每个数据元素的实际值与该数据元素的预测值之间的差值来执行增量编码。数据单元可包括数据元素的正方形数量,并且除了左上角数据元素之外,在数据元素正方形的左手边缘上的每个数据元素的预测值可等于定位在预测的数据元素上方一个位置的数据元素的值。除了左上角数据元素之外,针对在数据元素正方形的顶行上的数据元素的预测可等于定位在预测的数据元素左侧一个位置的数据元素的值。针对数据元素正方形内的数据元素的预测可基于定位在数据元素周围的数据元素的值的线性组合。在一些实施方案中,针对数据元素正方形内的数据元素的预测可基于具有定位在数据元素左侧一个位置、在数据元素上方一个位置和在数据元素的左上角斜对地一个位置的数据元素的值的线性组合。
增量编码的非零值可被编码为Golomb-Rice代码。在一些实施方案中,在将增量编码的非零值转换为Golomb-Rice代码之前,将所述增量编码的非零值转换为无符号形式,使得所有增量编码的非零值都被转换为大于或等于零的整数。增量编码的非零值的Golomb-Rice编码可具有改进的压缩的效果,因为非零值因增量编码而较小并且较低值的Golomb-Rice代码较短。
根据第二实施方案,提供了一种由处理元件执行的用于压缩神经网络的要写入到存储装置的激活数据的方法,该激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述方法包括:在每个激活数据单元内形成多个数据元素组,每个组包括多个数据元素;识别在每个组内是否存在任何具有零值的数据元素值并且形成每个组的第一状态指示符,该第一状态指示符指示该组是否包含具有零值的数据元素;在被识别为包含至少一个具有零值的数据元素的每个数据元素组内形成多个子组;识别在每个子组内是否存在任何具有零值的数据元素并且形成第二状态指示符,该第二状态指示符指示对于每个子组,该子组是否包含具有零值的数据元素;对于包含具有零值的数据元素的每个子组,形成该组的子组状态指示符,该子组状态指示符指示该子组内的哪些数据元素具有零值;对数据单元中的数据元素的非零值进行编码;以及形成压缩数据集,该压缩数据集包括第一状态指示符、任何第二状态指示符、任何子组状态指示符和编码的非零值的。
根据第二实施方案实现的一些方法在压缩包括一些具有零值的数据元素但不包括大量具有零值的数据元素的略稀疏的激活数据时可能更高效。
根据第三实施方案,提供了一种数据处理系统,所述数据处理系统包括处理元件和存储装置,该存储装置存储代码部分,该代码部分在由处理元件执行时致使数据处理系统执行压缩激活数据的方法,其中激活数据以数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,该方法包括:在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;识别在每个组内是否存在任何具有非零值的数据元素并且形成每个组的第一状态指示符,该第一状态指示符指示该组是否包含具有非零值的数据元素;在被识别为包含至少一个具有非零值的数据元素的每个数据元素组内形成多个子组;识别在每个子组内是否存在任何具有非零值的数据元素并且形成第二状态指示符,该第二状态指示符指示对于每个子组,该子组是否包含具有非零值的数据元素;对于包含具有非零值的数据元素的每个子组,形成该子组的子组状态指示符,该子组状态指示符指示该子组内的哪些数据元素具有非零值;对数据单元中的数据元素的非零值进行编码;以及形成压缩数据集,该压缩数据集包括第一状态指示符、任何第二状态指示符、任何子组状态指示符和编码的非零值。
根据第四实施方案,提供了一种数据处理系统,所述数据处理系统包括处理元件和存储装置,该存储装置存储代码部分,该代码部分在由处理元件执行时致使数据处理系统执行压缩来自神经网络的激活数据的方法,该激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,该方法包括:在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;识别在每个组内是否存在任何具有零值的数据元素并且形成每个组的第一状态指示符,该第一状态指示符指示该组是否包含具有零值的数据元素;在被识别为包含至少一个具有零值的数据元素的每个数据元素组内形成多个子组;识别在每个子组内是否存在任何具有零值的数据元素并且形成第二状态指示符,该第二状态指示符指示对于每个子组,该子组是否包含具有零值的数据元素;对于包含具有零值的数据元素的每个子组,形成该组的子组状态指示符,该子组状态指示符指示该子组内的哪些数据元素具有零值;对数据单元中的数据元素的非零值进行编码;以及形成压缩数据集,该压缩数据集包括第一状态指示符、任何第二状态指示符、任何子组状态指示符和编码的非零值。
根据第五实施方案,提供了一种由处理元件执行的用于对神经网络的从存储装置读取的压缩激活数据进行解压缩的方法,该激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述方法包括:从压缩激活数据获得激活数据单元内的多个数据元素组中的每一者的第一状态指示符,每个组包括多个数据元素;如果第一状态指示符指示组内不存在具有非零值的数据元素,则向该组内的每个数据元素指派零值;如果第一状态指示符指示每个数据元素组包含至少一个具有非零值的数据元素,则从压缩激活数据获得该组内的多个子组中的每一者的第二状态指示符;如果第二状态指示符指示子组内不存在具有非零值的数据元素,则向该子组内的每个数据元素指派零值;对于第二状态指示符指示每个子组内的数据元素具有非零值的情况,从压缩激活数据获得该子组的子组指示符并且根据子组指示符向该子组内的数据元素指派零值;对压缩激活数据内的具有非零值的数据元素的有序集进行解码;以及通过向尚未被指派给具有零值的数据元素的定位指派具有非零值的解码的数据元素来形成解压缩激活数据。
压缩激活数据内的数据元素组、数据元素子组和数据元素可形成四叉树结构。数据单元可包括六十四个数据元素,数据单元可被划分为各有十六个元素的四个组,并且组可被细分为各有四个数据元素的子组。
在压缩数据集内,第一状态指示符可被分组为第一状态指示符集,第二状态指示符可被分组为第二状态指示符集。第一状态指示符、第二状态指示符和子组状态指示符可按行优先次序或列优先次序中的一者布置在压缩数据集中。
向尚未被指派给具有零值的数据元素的定位指派具有非零值的解码的数据元素的步骤可包括按行优先次序或列优先次序中的一者向尚未被指派给具有零值的数据元素的定位指派解码的数据元素。
根据第六实施方案,提供了一种由处理元件执行的用于对神经网络的从存储装置读取的压缩激活数据进行解压缩的方法,该激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述方法包括:从压缩激活数据获得激活数据单元内的多个数据元素组中的每一者的第一状态指示符,每个组包括多个数据元素;如果第一状态指示符指示每个数据元素组包含至少一个具有零值的数据元素,则从压缩激活数据获得该组内的多个子组中的每一者的第二状态指示符;对于第二状态指示符指示每个子组包含具有零值的数据元素的情况,从压缩激活数据获得该子组的子组指示符并且根据子组指示符向该子组内的数据元素指派零值;对压缩激活数据内的具有非零值的数据元素的有序集进行解码;以及通过向尚未被指派给具有零值的数据元素的定位指派具有非零值的解码的数据元素来形成解压缩激活数据。
根据第七实施方案,提供了一种数据处理系统,所述数据处理系统包括处理元件和存储装置,该存储装置存储代码部分,该代码部分在由处理元件执行时致使数据处理系统执行用于对压缩激活数据进行解压缩的方法,该激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,该方法包括:从压缩激活数据获得激活数据单元内的多个数据元素组中的每一者的第一状态指示符,每个组包括多个数据元素;如果第一状态指示符指示组内不存在具有非零值的数据元素,则向该组内的每个数据元素指派零值;如果第一状态指示符指示每个数据元素组包含至少一个具有非零值的数据元素,则从压缩激活数据获得该组内的多个子组中的每一者的第二状态指示符;如果第二状态指示符指示子组内不存在具有非零值的数据元素,则向该子组内的每个数据元素指派零值;对于第二状态指示符指示每个子组内的数据元素具有非零值的情况,从压缩激活数据获得该子组的子组指示符并且根据子组指示符向该子组内的数据元素指派零值;对压缩激活数据内的具有非零值的数据元素的有序集进行解码;以及通过向尚未被指派给具有零值的数据元素的定位指派具有非零值的解码的数据元素来形成解压缩激活数据。
根据第八实施方案,提供了一种数据处理系统,所述数据处理系统包括处理元件和存储装置,该存储装置存储代码部分,该代码部分在由处理元件执行时致使数据处理系统执行用于对压缩激活数据进行解压缩的方法,给激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,该方法包括:从压缩激活数据获得激活数据单元内的多个数据元素组中的每一者的第一状态指示符,每个组包括多个数据元素;如果第一状态指示符指示每个数据元素组包含至少一个具有零值的数据元素,则从压缩激活数据获得该组内的多个子组中的每一者的第二状态指示符;对于第二状态指示符指示每个子组内的数据元素具有零值的情况,从压缩激活数据获得该子组的子组指示符并且根据子组指示符向该子组内的数据元素指派零值;对压缩激活数据内的具有非零值的数据元素的有序集进行解码;以及通过向尚未被指派给具有零值的数据元素的定位指派具有非零值的解码的数据元素来形成解压缩激活数据。
根据第九实施方案,提供了一种数据处理系统,所述数据处理系统用于压缩激活数据,其中激活数据以数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述数据处理系统包括处理构件,该处理构件被配置为:在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;识别在每个组内是否存在任何具有非零值的数据元素并且形成每个组的第一状态指示符,该第一状态指示符指示该组是否包含具有非零值的数据元素;在被识别为包含至少一个具有非零值的数据元素的每个数据元素组内形成多个子组;识别在每个子组内是否存在任何具有非零值的数据元素并且形成第二状态指示符,该第二状态指示符指示对于每个子组,该子组是否包含具有非零值的数据元素;对于包含具有非零值的数据元素的每个子组,形成该子组的子组状态指示符,该子组状态指示符指示该子组内的哪些数据元素具有非零值;对数据单元中的数据元素的非零值进行编码;以及形成压缩数据集,该压缩数据集包括第一状态指示符、任何第二状态指示符、任何子组状态指示符和编码的非零值。
根据第十实施方案,提供了一种用于压缩来自神经网络的激活数据的数据处理系统,该激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述数据处理系统包括处理构件,该处理构件被配置为:在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;识别在每个组内是否存在任何具有零值的数据元素并且形成每个组的第一状态指示符,该第一状态指示符指示该组是否包含具有零值的数据元素;在被识别为包含至少一个具有零值的数据元素的每个数据元素组内形成多个子组;识别在每个子组内是否存在任何具有零值的数据元素并且形成第二状态指示符,该第二状态指示符指示对于每个子组,该子组是否包含具有零值的数据元素;对于包含具有零值的数据元素的每个子组,形成该组的子组状态指示符,该子组状态指示符指示该子组内的哪些数据元素具有零值;对数据单元中的数据元素的非零值进行编码;以及形成压缩数据集,该压缩数据集包括第一状态指示符、任何第二状态指示符、任何子组状态指示符和编码的非零值。
根据第十一实施方案,提供了一种用于对压缩激活数据进行解压缩的数据处理系统,该激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述数据处理系统包括处理构件,该处理构件被配置为:从压缩激活数据获得激活数据单元内的多个数据元素组中的每一者的第一状态指示符,每个组包括多个数据元素;如果第一状态指示符指示组内不存在具有非零值的数据元素,则向该组内的每个数据元素指派零值;如果第一状态指示符指示每个数据元素组包含至少一个具有非零值的数据元素,则从压缩激活数据获得该组内的多个子组中的每一者的第二状态指示符;如果第二状态指示符指示子组内不存在具有非零值的数据元素,则向该子组内的每个数据元素指派零值;对于第二状态指示符指示每个子组内的数据元素具有非零值的情况,从压缩激活数据获得该子组的子组指示符并且根据子组指示符向该子组内的数据元素指派零值;对压缩激活数据内的具有非零值的数据元素的有序集进行解码;以及通过向尚未被指派给具有零值的数据元素的定位指派具有非零值的解码的数据元素来形成解压缩激活数据。
根据第十二实施方案,提供了一种用于对压缩激活数据进行解压缩的数据处理系统,该激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述数据处理系统包括处理构件,该处理构件被配置为:从压缩激活数据获得激活数据单元内的多个数据元素组中的每一者的第一状态指示符,每个组包括多个数据元素;如果第一状态指示符指示每个数据元素组包含至少一个具有零值的数据元素,则从压缩激活数据获得该组内的多个子组中的每一者的第二状态指示符;对于第二状态指示符指示每个子组内的数据元素具有零值的情况,从压缩激活数据获得该子组的子组指示符并且根据子组指示符向该子组内的数据元素指派零值;对压缩激活数据内的具有非零值的数据元素的有序集进行解码;以及通过向尚未被指派给具有零值的数据元素的定位指派具有非零值的解码的数据元素来形成解压缩激活数据。
现在将参考附图来描述特定的实施方案。
图2示出了神经处理单元(NPU)的一些但非全部部件2,该神经处理单元是用于结合人工智能应用程序来执行计算并且特别是与神经网络有关的计算的专用芯片。换句话说,NPU允许对有关神经网络的某些计算的硬件加速。部件2是用于将激活值写入到在NPU外部的DRAM(未示出)的部件。
当执行与神经网络有关的计算时,可针对神经网络的每个层执行计算。这些计算生成被称为激活数据的输出,该数据可能是大量的并且需要先进行存储,之后才能使用该数据执行进一步计算。由于对从外部存储器到处理器的数据传输的约束,存储和从存储器检索激活数据可能是相对慢的过程。因此,期望使用Golomb Rice代码对来自激活层的数据进行压缩,以便提高处理器性能。对激活数据进行压缩的一些其他方法可能会涉及有损压缩。然而,这种‘有损’压缩可能会影响神经网络的准确度,这对于某些应用可能是不可接受的。以下压缩方案是无损方案,因此预计对于所有应用都是可接受的。
部件2被配置为处理激活数据以供存储。接收激活数据收并以数据区块的形式将其分组为单元。数据区块被定义为8×8元素组,其中数据元素是8位未压缩的激活数据值。激活数据包括零点,该零点是激活数据的指示将无符号值0至255中的哪一个视为零的全局参数。零点具有8位长度的值。零点的值的选择可引起激活数据的高效压缩,但是,由于这与本文中讨论的实现方式无关,因此将不对此进行进一步讨论。贯穿本说明书,术语‘零’和‘零点’可互换地使用。呈编码器20的形式的处理元件被配置为通过将激活数据转换为Golomb Rice代码来压缩接收到的激活数据。然后,执行将在下文描述的另外的步骤,以使压缩的激活数据更容易进行解码。
如上文所指出,下文描述的实施方案利用无符号(即,仅具有正值)的8位激活数据。在其他实现方式中,激活数据可为有符号的(取正值和负值),并且激活可具有不同的值范围,诸如16位值。为了处理有符号数据,在压缩之前添加某一偏移量,并且在解压缩之后去除相同的偏移量。对于8位有符号数字,可在有符号到无符号转换(即,翻转符号位)期间添加值128。随后,可在解压缩之后通过翻转8位值的第7位来执行无符号到有符号转换。
图3a示出了用于压缩激活数据的步骤。数据的压缩是逐区块地执行的。因此,区块31被示出为输入。在激活数据的压缩期间,执行方案选择32。然后,将选定的方案33编码为压缩的激活数据中的4位以被发送来存储在DRAM中。图3b中示出了可用方案。‘原始’方案是对激活数据进行简单地编码而不应用任何压缩的方案。在错误的情况下,‘原始’方案可用作备用方案。如果激活数据区块内的所有激活数据值都具有零值,则使用‘零’方案。在这种情况下,可通过简单地指示选择零方案来高效地压缩区块,该零方案指示激活数据区块内的所有值都是零。方案2至6用于增量Golomb-Rice编码。此过程将在下文更详细地解释。在增量GRC 1、增量GRC 2、增量GRC 3、增量GRC 4和增量GRC 5之间的差异在于用于计算Golomb-Rice代码的除数的值。Golomb Rice除数随方案的编号而变化,因此对于增量GRC1、增量GRC 2、增量GRC 3、增量GRC 4和增量GRC 5,除数分别为二、四、八、十六和三十二。方案7至11用于掩码增量Golomb-Rice编码,并且方案12至15用于反掩码增量Golomb-Rice编码。这些编码方案也将在下文更详细地解释。同样,在相同类型的方案内的变体使用不同的Golomb-Rice代码除数。
首先将解释增量Golomb-Rice编码(方案2至6)。Golomb-Rice代码是可变长度代码,其在对较小值进行编码的情况下具有较小大小。因此,期望在可能的情况下减小要编码的数据的数值。增量Golomb-Rice编码对激活数据区块中的值进行预测并且然后从该预测确定差值。然后,仅对差值进行编码,这倾向于造成对较小值进行编码并且因此产生更好的编码效率。
图4示出了如何进行针对数据区块的预测。8×8数据区块31具有值elem[i][j],其中i是垂直坐标并且j是水平坐标。区块中最左上角的数据元素为elem[0][0]。针对区块中的每个条目的预测是pred[i][j],其中i是垂直坐标并且j是水平坐标。差值delta[i][j]是在elem[i][j]与pred[i][j]之间的差值。
delta[i][j]=elem[i][j]–pred[i][j]
为了计算pred[i][j],使用以下方案。如图4所示,使用位于上方一个位置的数据元素来预测区块的左侧的元素。这适用于除了左上角元素之外的所有左边缘元素。
pred[i][j]=elem[i-1][j],其中j=0并且i≠0
使用位于左侧一个位置的数据元素来预测顶行上的pred[i][j]的元素。这适用于除了左上角元素之外的所有顶部元素。
pred[i][j]=elem[i][j-1],其中i=0并且j≠0
对于pred[i][j]的除了左上角元素之外的剩余元素,使用位于左侧一个位置的数据元素、位于在左上角斜对地一个位置的数据元素和位于预测的元素上方的数据元素的加权组合来进行预测。
pred[i][j]=3*elem[i][j-1]+2*elem[i-1][j-1]+3*elem[i-1][j]>>3
以上公式指示在线性组合中将左侧和上部数据元素值乘以三并且将左上角数据元素乘以二。最后一个特征(>>3)指示计算以二进制完成并且表示3位的位移位。这具有除以8的效果,同时维持pred[i][j]的整数值。
未预测最左上角数据值并且以原始格式进行存储。此数据值形成图3a中示出的8位initval 34。
现在将参考图5提供增量编码的工作示例。如上文所指出,对8×8激活数据区块执行增量编码。然而,为了使描述简洁,将给出对4×4数据网格的增量编码的解释。图5中示出的顶部数据网格是用于增量编码的原始数据。此数据形成如上所述的elem[i][j]。
在中间数据网格中,示出了预测值pred[i][j]。由于elem[i][j]数据的顶行全部都是零值,因此顶行上的pred[i][j]值也全部都是零值。看左列,elem数据中只有一个非零值。pred[3][0]等于elem[2][0],其值为1。
看远离左边缘和顶边缘的值,将解释pred[i][j]中的三个非零值的计算。pred[3][2]的值为4并且计算如下:
pred[3][2]=3*0+2*0+3*11>>3
=33>>3
=100001>>3
=100
=4
pred[2][3]的值为5并且计算如下:
pred[2][3]=3*11+2*0+3*3>>3
=40>>3
=101000>>3
=101
=5
pred[3][3]的值为19并且计算如下:
pred[3][3]=3*23+2*11+3*22>>3
=157>>3
=10011101>>3
=10011
=19
图5中的底部数据网格是delta[i][j]并且这只是elem[i][j]与pred[i][j]之间的差值。delta[i][j]的值小于elem[i][j]的值,这有助于高效的Golomb-Rice编码。
在增量Golomb-Rice代码方案(方案2至6)中,数据值delta[i][j]被转换为Golomb-Rice代码。然而,为了做到这一点,优选的是,所有要编码的值都为正,因为这避免了使用符号位的需要。因此,执行有符号到无符号转换,如下:
udelta[i][j]=delta[i][j]<0?-2*delta[i][j]-1:2*delta[i][j]
这里的逻辑是如果delta[i][j]为零,则udelta[i][j]为零。否则,将delta[i][j]的正值加倍,并且将delta[i][j]的负值乘以-2并从中减去1。这将正delta[i][j]值映射到在正轴上的偶数并且将负delta[i][j]值映射到在正轴上的奇数。然后,对udelta[i][j]的值进行Golomb-Rice编码。
如先前所提及,图3b中的方案2至6之间的差异是用于生成Golomb-Rice代码的除数的值。一旦udelta[i][j]的值已经被转换为Golomb-Rice代码,压缩数据就由方案值(4位)、对应于左上角数据元素(elem[0][0])的初始值(initval)和对应于udelta[i][j]的Golomb-Rice代码形成。
现在将描述掩码增量Golomb-Rice编码方案(方案7至11)。除了增量编码步骤之外,这些方案还包括掩码编码步骤。参考图3,掩码增量Golomb-Rice编码包括增量编码35、有符号到无符号转换36、到Golomb-Rice代码的转换37和附加的掩码编码步骤38。
图6示出了掩码过程。图6的顶部示出了其中每个正方形小区表示8×8激活数据区块的数据元素的网格。许多神经网络产生包括许多零值的激活数据。例如,神经网络可使用ReLU激活函数,该激活函数倾向于产生稀疏激活图。零值在图6中的网格中被示出为未填充小区,而具有任何非零值的激活数据值被示出为已填充。从图6中的稀疏示例可看出,存在许多零值。掩码过程提供了对零值的定位进行编码的方式,如现在将解释。
通过将8×8网格视为呈以下四个4×4网格的形式的数据元素组的集合来生成第一掩码:左上4×4网格、右上4×4网格、左下4×4网格和右下4×4网格。检查每个4×4网格以查看是否存在任何非零值。在图5所示的示例中,左上、右上和左下网格中的每一者中都存在非零值。然而,右下4×4网格不包括任何非零值。因此,形成4×4掩码[1110]。呈位值‘1’的形式的第一状态指示符指定将被进一步细分的4×4网格,因为该网格包含非零值,并且呈位值‘0’的形式的第一状态指示符指示其中所有数据元素都具有零值的4×4网格。
对于包括非零值的每个4×4网格,形成呈2×2网格的形式的子组:左上、右上、左下和右下。检查这些子网格中的每一者以查看它们是否包含非零值。在被发现具有非零值的4×4网格上按行优先次序执行该过程。对于左上4×4网格,每个2×2网格都包括非零值元素。因此,该网格的2×2掩码为[1111]。呈位值‘1’的形式的第二状态指示符指定被进一步细分的2×2网格,因为该网格包含至少一个非零值,并且呈位值‘0’的形式的第二状态指示符表示2×2网格中的所有数据元素都具有零值。右上4×4网格包括单个2×2网格,其中右下角没有非零元素。因此,该4×4网格的2×2掩码为[1110]。看左下4×4网格,只有左上2×2网格包含非零值。因此,该4×4网格的2×2掩码为[1000]。这给出了图6所示的2×2掩码[111111101000]。应注意,在图6所示的网格下方示出的2×2掩码中的换行符示出了顶行与底行之间的换行以便于阅读。
对于那些包括非零值的2×2网格,创建呈1×1掩码的形式的子组指示符,该子组指示符示出了每个2×2网格内的零值和非零值的位置。对于每个4×4网格,这是按行优先次序完成的,因此左上4×4网格中的左上2×2网格被编码为[0001],右上2×2网格被编码为[0001],左下2×2网格被编码为[0101],并且右下2×2网格被编码为[1101]。‘1’指定具有不同于零点的值的数据元素,并且‘0’指示等于零点的值。图6中的1×1掩码中的换行符示出了在不同的4×4网格(左上、右上和左下)中的1×1掩码。总体掩码编码是4×4掩码、2×2掩码和1×1掩码的连结。
一旦零值已经被编码在掩码中,如上所述,仍需要对非零值进行编码,使得它们的值及其定位被包括在压缩激活数据中。这是以与参考图4解释的增量编码中描述的类似方式完成的。然而,仅针对非零值计算增量值,而不是针对区块内的所有数据元素计算增量值。对于每个非零值,计算pred[i][j]并且计算差值delta[i][j]。值delta[i][j]通过转换为udelta[i][j]来变为无符号的,如上所述,并且然后使用为选定的方案(掩码增量GRC1至掩码增量GRC 5)指定的除数来转换为Golomb-Rice代码。
用于掩码增量GRC方案的压缩激活数据包括方案标识符(4位)、用于增量编码的初始值(initval,8位)和对零值的定位进行编码的掩码编码。掩码编码是4×4掩码(4位)、2×2掩码(位计数=4*4×4网格的位计数)和1×1掩码(位计数=4*2×2网格的位计数)。这种形式的掩码的特征是所有内容都是4位对准的,这使得随后更容易通过NPU进行解析以将激活数据解压缩。
现在将描述反掩码增量Golomb-Rice编码方案(方案12至15)。这些方案与掩码增量Golomb-Rice编码方案密切地相关。在上述掩码增量Golomb-Rice编码方案中,非零值的定位在4×4和2×2掩码中指示。然而,如果非零值比零值多,则可能更高效的是对区块内的零值的定位而不是非零值的位置进行编码。图7中将使用图6所示的相同数据网格来描述反掩码增量Golomb-Rice编码。该解释还将表明,当零值比非零值更常见时,掩码增量Golomb-Rice编码比反掩码增量Golomb-Rice编码更高效。
看图7,将执行与针对图6描述的相同过程,不同之处在于确定每个4×4网格中是否存在任何零值,而不是确定每个4×4网格中是否存在任何非零值。如前所述,考虑左上4×4网格、右上4×4网格、左下4×4网格和右下4×4网格。检查每个4×4网格以查看是否存在任何零值。在图7所示的示例中,在所有网格中都存在零值。因此,形成4×4掩码[1111]。‘1’位值指示4×4网格内存在零值并且该网格将被细分,并且‘0’值指示4×4网格仅由非零值形成。
对于包括零值的每个4×4网格,形成2×2网格:左上、右上、左下和右下。检查这些2×2网格中的每一者以查看它们是否包含零值。在包含零值的4×4网格上按行优先次序执行该过程。‘1’位值指示2×2网格内存在零值,并且‘0’值指示2×2网格仅由非零值形成。对于左上4×4网格,每个2×2网格都包括零值元素。因此,该网格的2×2掩码为[1111]。右上4×4网格包括单个2×2网格,其中在左上角没有零值元素。因此,该4×4网格的2×2掩码为[0111]。看左下4×4网格,所有2×2网格都具有零值数据元素。因此,该4×4网格的2×2掩码为[1111]。此外,右下4×4网格在每个2×2网格中都包括零值元素。这给出了右下4×4网格的掩码[1111]。这给出了图7所示的2×2掩码[1111011111111111]。应注意,在图7中的网格下方示出的2×2掩码中的换行符示出了顶行与底行之间的换行。
对于那些包括零值数据元素的2×2网格,创建1×1掩码,该掩码示出了每个2×2网格内的零值和非零值的位置。对于从左上4×4网格开始的每个4×4网格,这是按行优先次序完成的。在左上4×4网格中,左上2×2网格被编码为[1110],右上2×2网格被编码为[1110],左下2×2网格被编码为[1010],并且右下2×2网格被编码为[0010]。图7中的1×1掩码中的换行符示出了在不同的4×4网格(左上、右上、左下和右下)中的1×1掩码。‘1’值指示零值,并且‘0’值指示非零值。总体掩码编码是4×4掩码、2×2掩码和1×1掩码的连结。
与掩码增量Golomb-Rice编码一样,非零值以与结合图4描述的相同方式进行增量编码。然而,仅针对非零值计算增量值,而不是针对区块内的所有数据元素计算增量值。对于每个非零值,计算pred[i][j]并且计算差值delta[i][j]。值delta[i][j]通过转换为udelta[i][j]来变为无符号的,如上文结合增量Golomb-Rice编码所述,并且然后使用为选定的方案(反掩码增量GRC1至反掩码增量GRC 5)指定的除数来转换为Golomb-Rice代码。
压缩激活数据由方案标识符(4位)、增量编码的初始值(8位)和上述反掩码组成。
如结合图2解释,基于哪个方案能最高效对激活数据区块进行编码而在不同的编码方案之间进行选择。可通过确定性过程(即,计算将使用每个方案创建的位流的长度)来做出决定。位计数为:
增量编码的位计数:Golomb-Rice位计数+方案位+initval
掩码增量位计数:掩码位计数+Golomb-Rice位计数(非零元素)+方案位+initval
反掩码增量位计数:反掩码位计数+Golomb-rice位计数(非零元素)+方案位+initval
使用增量Golomb-Rice编码、掩码增量Golomb-Rice编码和反掩码增量Golomb-Rice编码(图3b所示的方案2至15)中的一者对激活数据进行压缩会生成Golomb-Rice代码和其他数据。其他数据(其为方案位和initval或者方案位、initval和掩码数据)在下文将被称为SIM数据。
一般来讲,增量Golomb-Rice编码对缓慢地变化的激活数据是高效的,掩码增量Golomb-Rice编码对包括许多零值的稀疏数据是高效的,并且反掩码增量Golomb-Rice编码对具有一定稀疏度的数据是高效的。例如,如果在激活数据区块中存在多于32个非零值,则反掩码增量Golomb-Rice编码可为有效的,否则掩码增量Golomb Rice编码将可能是更有效的。
当对可变长度代码(诸如Golomb Rice代码)进行解码时,很难以高速率进行解析。这是因为在Golomb Rice代码之间存在序列依赖性,使得需要先知道前一个Golomb Rice代码的长度才能识别下一个Golomb Rice代码并进行解码。因此,当使用单个解析器直接地进行解析时,用于对Golomb Rice代码进行解码的典型硬件实现方式可能会达到每时钟周期1或2个Golomb Rice代码的速率。出于此原因,在存储在DRAM中之前进一步处理Golomb-Rice代码和SIM数据,如现在将描述。
图8是示出由编码器20对压缩激活数据执行的步骤的流程图。在步骤S80中,获得用于每个激活数据区块的Golomb Rice代码,在这种情况下,通过由编码器20进行转换来获得。然后,在步骤S81中,编码器20将Golomb Rice代码分离为一进制值流和余数值流,并且将它们存储在图2所示的RAM 21中。
图9示出了三个数据流。源数据流90是Golomb Rice代码流。源数据流90包括由值GR1至GR5指示的一系列Golomb Rice代码。每个Golomb Rice代码具有可变长度一进制部分和相关技术描述中所描述的类型的固定长度二进制部分。尽管图9中示出了三位固定长度二进制部分,但是二进制部分的长度不重要,并且可使用其他长度。编码器20将GolombRice代码分为两个部分,以生成图9所示的另外两个流91和92。第一流91是一进制流并且第二流92是余数流,每个二进制值具有固定长度。
在步骤S82中,图2所示的拼接处理器22将第一流、第二流和SIM数据流拼接在一起以形成经处理的流。这是逐小区完成的,其中每个小区表示存储在2112字节槽中的32个未压缩数据区块(2,048个元素)。槽大于小区,以便允许一定的开销和舍入为64字节的整数。
每个小区由拼接处理器22形成为多个组块。小区的第一组块始终包括标头。来自流90的一进制数据始终由拼接处理器22以32位的部分拼接到经处理的流的组块中。
小区由拼接处理器22使用流控制规则集形成,如现在将参考图10至图11描述。图10示出了拼接处理器22可用来形成小区的组块的不同结构,并且图11示出了在形成小区时由拼接处理器22执行的步骤。
如上文所提及,小区的第一组块必须包括标头,该标头提供关于小区的长度和被包括在该小区内的一进制子流的长度的信息。小区内的余数值的长度不被包括在标头中,而是可从小区的长度和一进制子流的长度得出。
图10示出了可用组块格式,为了解析效率,所述可用组块格式已经被设计为允许每个组块在对Golomb-Rice代码进行解码的解码器的单个时钟周期中被消耗。所示的组块结构分为三类:前两个组块结构100和101用于在选择小区中的第一组块时使用,接下来的三个组块结构102至104用于在发送区块中的第一组块时使用,并且底部五个组块结构105至109是用于在以其他方式发出一进制和余数数据时使用的扩展组块。最上面的两个组块结构100和101包括32位长度的标头部分,这是在小区的开始处所需的。形成对小区内的新区块进行编码的第一组块的组块结构102至104包括在组块的前部的SIM数据,其后可为余数数据和/或一进制数据。
为了选择要使用的适当组块结构,编码器20使用流控制规则集。一旦已经识别出组块的组块结构,就可用适当的数据填充该组块结构并将其发出。由拼接处理器22使用的流控制规则如下。当为小区选择第一组块结构时,如果结合该小区的第一区块传输少于64位的SIM数据,则选择图10所示的第一组块结构100,存在可用于该小区的至少32位的一进制数据,这与在标头的开始处一样,并且该小区的第一区块的SIM数据和余数数据的组合大小为至少64位。否则,使用第二第一组块结构101来形成小区的第一组块。在图10中标记为‘SIM…REM’的组块结构部分最初用SIM数据填充,直到未剩余SIM数据为止,并且然后再用余数数据填充以填充组块内的分配的位。
对于小区中的在第一组块已经被发出之后由编码器20发出的仍包含与该小区中的第一区块有关的压缩激活数据的组块,使用扩展组块105至109。如果仍有第一区块的一进制数据要发送,并且仍有多于128位的一进制数据要包括在小区中,则使用组块结构105。如果小区仍有96位一进制数据要进行编码,那么使用组块结构106,如果小区仍有64位一进制数据要进行编码,那么使用组块结构107,并且如果小区仍有32位一进制数据要进行编码,那么使用组块结构108。在区块的所有一进制数据都已经被编码的情况下,那么使用组块结构109来发出该区块的余数数据,包括小区的第一区块的余数数据。应注意,选择上述组块结构中包括的一进制数据和余数数据,而不管下面的区块和下面的激活数据的元素分组如何,使得来自不同区块和/或元素的一进制数据可被包括在相同的组块中。
在第一区块的所有SIM数据、一进制数据和余数数据已经被包括在组块中的情况下,从组块结构102至104选择下一区块的第一组块。表示携带的余数的值‘CR’由编码器监测。携带的余数是区块的在该区块的第一组块之前已经在组块结构中发出的余数位的数量。类似地,表示携带的一进制的值‘CU’由编码器监测。携带的一进制是区块的在该区块的第一组块之前已经在组块结构中发出的一进制位的数量。当为新区块选择第一组块结构时,在以下情况下选择组块结构102:携带的余数小于表示余数值的缓冲阈值的阈值,携带的一进制小于表示一进制值的缓冲阈值的阈值,新区块仍有至少32位一进制数据要发出,以及新区块仍要发出的SIM和余数数据的量大于96位。在这种情况下,由于一进制和余数数据均可与SIM数据一起发出,因此可使用组块结构102。如果不使用组块结构102,并且携带的余数小于余数值的缓冲阈值,则使用组块结构103来发出SIM数据,接着是发出余数数据。否则,使用组块结构104,并且仅在组块中发出SIM数据。
图11中示出了用于形成压缩激活数据的小区的以上方法。在步骤S110中,从图10所示的组块结构100和101选择第一组块结构。此选择取决于上述选择标准。在选择组块结构之后,拼接处理器22创建标头部分。拼接处理器22基于32个未压缩数据区块来评估要被包括在小区中的一进制子流的长度并且将指示该长度的信息添加到标头部分。拼接处理器22基于32个未压缩数据区块来评估要被包括在小区中的SIM数据子流的长度并且将指示该长度的信息添加到标头部分。还评估要被包括在小区中的所有数据的长度并且将其添加到标头部分。根据由拼接处理器22选择的选定的组块结构将来自第一一进制数据流41的数据(如果需要的话)和来自第二余数数据流的数据添加到组块。
在步骤S111中,通过根据上述流控制规则从组块结构102至109选择适当的组块结构来形成经处理的数据流的下一组块。在选择组块结构之后,通过用来自第一一进制数据流91的数据、来自第二余数数据流92的数据和SIM数据填充组块结构的相关部分来形成组块。
在步骤S112中,拼接处理器22确定是否有更多的数据要形成为组块以完成小区。如果有更多的数据要形成组块,则方法进行到S111以形成下一组块。如果没有更多的数据要处理,则方法进行到S113,在那里,该方法对于该小区来说结束。该方法针对多个小区进行,直到压缩激活数据已经被编码为止。
上述方法假设可由小区中的32个区块形成完整的128位组块,并且一进制部分可拼接到32位部分中。实际上,可能无法满足这些条件,在这种情况下,使用用于填充的停止位‘0’来填充第一一进制部分流和第二余数部分流,直到它们达到期望的大小为止。由于添加到小区的数据的长度存储在标头中,因此可能识别小区内的数据的长度,并且在对经处理的数据流进行解码时确定填充开始的地方。
然后,将已经由拼接处理器22编码为小区的压缩激活数据存储在DRAM中。
接下来,将参考图12至图14描述由解码器对存储的压缩激活数据进行解码的方法。在这种情况下,解码器是NPU的一部分,其允许从DRAM读取激活数据以用于进一步计算。解码器存储图10所示的组块结构的副本,该副本被编码器20用来将压缩激活数据存储在DRAM中。在图12的步骤S120中,解码器从RAM接收用于解码的激活数据的小区的第一组块。解码器读取标头,并且识别小区中的一进制数据的长度、小区中的SIM数据的长度和总小区长度。解码器还通过从总小区长度减去该小区中的其他分量的长度来确定该小区中的余数的长度。在步骤S121中,解码器识别标头中指定的一进制数据的长度是否为32位或更大、小区中的SIM是否小于64位并且小区中的SIM加上余数数据是否大于64位。如果满足S121中的条件,则解码器使用组块结构100进行解码。否则,解码器使用组块结构101进行解码。如果基于接收到的SIM数据,仍有第一区块的数据,则将根据图13所示的处理来选择下一组块。在对数据进行解码时,解码器维护参数U_剩下,该参数最初在检查小区的标头时设置为该小区中的一进制的长度的值,并且每次从组块检索一进制数据时进行更新以记录小区中剩余的一进制数据的量。因此,如果将组块结构100用于第一组块,那么在从第一组块提取32位的一进制数据之后,参数U_剩下将减少32。
在此阶段,解码器已经接收到第一区块的SIM并且可确定它将针对第一区块接收多少一进制部分(一进制符号)和余数值。如果解码器确定第一区块仍有数据要接收,则图13示出了由解码器用来确定下一个组块的扩展组块结构的方法。在步骤S130中,接收存储的激活数据的后续组块。基于解码的一进制部分(一进制符号)的数量来确定第一区块是否仍有一进制数据要发出。如果第一区块仍有一进制要发出,则方法进行到步骤S131。在步骤S131中,检查参数U_剩下以确定小区的有待提取的一进制数据的量是否大于或等于128位。如果待提取的一进制数据的量大于或等于128位,则解码器确定正在使用组块结构105。在步骤S132中,解码器根据组块结构105从组块提取数据,并且更新参数U_剩下以考虑到提取的一进制数据的量。
如果有待提取的一进制数据少于128位,则方法进行到步骤S133。在步骤S133中,检查参数U_剩下以确定小区的有待提取的一进制数据的量是否等于96位。如果待提取的一进制数据的量等于96位,则解码器确定正在使用组块结构106。在步骤S134中,解码器根据组块结构106从组块提取数据,并且更新参数U_剩下以考虑到提取的一进制数据的量。
如果有待提取的一进制数据少于96位,则方法进行到步骤S135。在步骤S135中,检查参数U_剩下以确定小区的有待提取的一进制数据的量是否等于64位。如果待提取的一进制数据的量等于64位,则解码器确定正在使用组块结构107。在步骤S136中,解码器根据组块结构107从组块提取数据,并且更新参数U_剩下以考虑到提取的一进制数据的量。
如果待提取的一进制数据少于64位,则方法进行到步骤S137。在步骤S137中,检查参数U_剩下以确定小区的有待提取的一进制数据的量是否等于32位。如果待提取的一进制数据的量等于32位,则解码器确定正在使用组块结构108。在步骤S136中,解码器根据组块结构108从组块提取数据,并且更新参数U_剩下以考虑到提取的一进制数据的量。
如果在步骤S130中,解码器基于解码的一进制部分(一进制符号)的数量而确定第一区块没有剩余的一进制要发出,但是第一区块有余数数据要发出,则解码器确定正在使用组块结构109。在步骤S139中,解码器根据组块结构109从组块提取数据。
当解码器基于解码的一进制部分(一进制符号)和接收到的余数数据的数量而确定已经接收到某一区块的所有值时,基于图14所示的逻辑来确定下一组块结构。在步骤S140中,确定正在发送新区块中的第一组块。与编码器一样,解码器监测表示携带的余数的值‘CR’。携带的余数是下一区块的在该下一区块的第一组块之前已经在组块结构中接收到的余数位的数量。类似地,表示携带的一进制的值‘CU’由解码器监测。携带的一进制是下一区块的在该下一区块的第一组块之前已经在组块结构中接收到的一进制位的数量。
在步骤S141中,确定携带的余数是否小于携带的余数的缓冲值。携带的余数的缓冲值与由编码器使用的携带的余数的缓冲值相同。还确定携带的一进制是否小于携带的一进制的缓冲值。同样,携带的一进制的缓冲值与由编码器使用的携带的一进制的缓冲值相同。解码器还确定小区中是否仍有多于32位的一进制数据并且小区中的SIM加上余数数据的量是否大于64位。如果满足所有这些条件,则解码器决定组块结构102是下一组块的结构。
如果不满足步骤S141中的条件,则方法进行到步骤S143。在S143中,如果携带的余数小于携带的余数的缓冲值,则将使用组块结构103来对下一数据组块进行解码。否则,使用组块结构104来对下一数据组块进行解码。
基于上文结合图12至图14描述的过程,解码器可从由编码器20存储在DRAM中的经处理的数据流来高效地重新创建第一一进制数据流41、第二余数数据流42和SIM数据。在从小区对32个数据区块进行解码时,当对小区中的第一组块进行解码时,使用图12所示的步骤,并且此后,当对下一区块的第一组块或者扩展组块进行解码时,使用图13和图14所示的逻辑。通过使用图12至图14所示的流控制规则,解码器可决定在进入流中的任何点处将发现的数据类型,而无需指示进入的压缩数据流内的数据类型的位成本。
在从经处理的数据流提取一进制和余数数据后,解码器需要对Golomb-Rice代码进行解码以重新创建非零值。第二余数数据流42是固定长度二进制值的阵列,并且使用本领域中已知的技术直接进行解码。因此,在此不进一步讨论该过程。
接下来结合图15a描述对第一一进制数据流91进行解码。在步骤S150中,将一进制数据的8位块转换为二进制形式,其中二进制形式指示二进制块内的停止位的一个或多个位置。这是通过使用查找表完成的。在步骤S151中,由于一进制代码可跨越8位块,因此将四个8位块组合成32位块,并且然后将四个32位块组合成128位块。128位块同样是停止位定位的位置列表。为了检索一进制值,在步骤S152中,获取每个相邻的停止位定位的值之间的差值,该差值给出一进制码的值。
可通过使用查找表将一进制数据的8位块分析为中间形式来实现图15a的方法。这在图15b中示出,其中顶行154标识在其下方示出的每个字节内的位位置。每个字节中的第一位是位‘0’并且最后一位是位‘7’。第二行155示出一进制数据的字节。将回想到,一进制数据中的停止位为‘0’。在第三行156所示的中间形式中,每个字节被扩展为指示字节内的停止位的定位的多达八个3位代码的列表。执行将四个8位段到32位段的Radix-4组合并且在图15b的第四行97和第五行98中示出。在第四行157中,将一对识别位作为最高有效位(MSB)添加到代码。对于第一个字节,将值'00'添加到3位代码,对于第三个字节,将值'10'添加到3位代码等。在第五行158中,5位代码进行连结以形成32位字内的停止位位置的列表。四个32位段到128位段的随后Radix-4组合使用类似的过程生成指示一进制停止位的定位的7位代码的列表。如在步骤S152中,相邻值的相减产生一进制数据的长度以及因此一进制数据的值。
逐区块地执行激活数据的重新创建,并且该重新创建根据用于对激活数据进行编码的方案而变化。可从区块的SIM数据中的方案位读取方案。方案标识符还标识用于创建Golomb-Rice代码的除数,从而一旦已经识别出一进制和二进制余数的长度,就允许对Golomb-Rice代码进行解码。使用以下逻辑将从Golomb-Rice代码恢复的值转换回有符号的数据值:
delta[i][j]=udelta[i][j]=奇数值?-0.5*(udelta[i][j]+1):0.5udelta[i][j]
逻辑是如果udelta[i][j]具有奇数值,则其对应于负delta[i][j]值。因此,将1添加到udelta值,并且将其乘以-0.5。如果udelta[i][j]具有偶数值,则其对应于正delta[i][j]值。将正delta[i][j]值恢复为udelta[i][j]值的0.5倍。
在激活数据已经进行增量编码(方案2至6)的情况下,可恢复原始数据,如下。再次参考图4,已知左上角值elem[0][0],因为它作为initval被存储在SIM数据中。基于此值,可通过确定pred[1][0]等于initval并使用以下公式来确定左手列中的elem[1][0]:
elem[i][j]=delta[i][j]+pred[i][j]
一旦确定了elem[1][0],就可能计算elem[2][0],沿左手边缘依此类推。类似地,可基于压缩激活数据中的initval和值delta[0][1]来确定顶边缘上的elem[0][1]。因此,可恢复顶行的elem[i][j]的值。可确定以对角线远离左上角的elem[i][j]的剩余值。
图16中示出了恢复值elem[i][j]的次序。先完成计算沿着左手边缘的值并且在图16中用数字1示出。接着完成沿顶边缘的值,并且也可通过以elem[0][1]开始并沿该边缘进行工作来计算。这在图16中用数字‘2’示出。一旦知道了区块的顶边缘和左边缘的elem[i][j]值,就可能确定以对角线远离左上角的elem[i][j]的值,因为确定pred[i][j]所必需的elem[i][j]的值变得已知。这些计算在图16中按次序由数字‘3’至‘15’示出。以此方式,按照增量Golomb Rice编码方案(方案2至6)来恢复激活数据。
用于恢复掩码和反掩码激活数据的过程与上文针对增量编码的激活数据描述的过程类似。然而,由于零值未进行增量编码,因此它们先被恢复。在反掩码编码方案(方案12至15)的情况下,掩码指示零值的位置。因此,直接从4×4掩码识别出哪些4×4小区包括零值、识别出2×2小区中的哪些2×2小区包括零值,并且从1×1掩码识别出零值的实际定位。对于掩码方案(方案7至11),从4×4、2×2和1×1掩码识别出非零值的定位,并且然后将掩码反转以识别零值的位置。一旦知道了elem[i][j]的零值,就可执行恢复增量编码的值的过程,如上文结合图16描述。
如上所述,第一特定实施方案在小区内将Golomb Rice代码的一进制和余数部分进行组合。每个小区都可包括一进制和余数部分。这样在小区内混合激活数据的一进制和余数部分倾向于在从DRAM检索的经处理的数据流上散布一进制部分和余数部分。这允许在解码器处用于在解码之前存储一进制数据的解析缓冲器的大小减小,从而降低硬件要求。
上述实施方案应被理解为说明性的。设想了另外的实施方案。例如,结合图6和图7描述的掩码编码先对4×4网格值进行编码,接着对2×2网格值进行编码,并且然后对1×1网格值进行编码。这被称为广度优先遍历,因为先评估所有4×4网格,接着再评估所有相关2×2网格,并且然后对相关1×1值进行编码。替代编码方法是可能的,其将被称为深度优先遍历。在深度优先遍历中,在移至下一4×4网格之前,将在每个深度级(2×2和1×1)处考虑每个4×4区块。例如,对于图6所示的左上4×4网格,4×4编码将为1,因为该网格包括具有非零值的数据元素。编码中的接下来位将用于2×2网格并且将是[1111],因为左上网格内的每个2×2网格都包括具有非零值的数据元素。编码中的接下来位将用于1×1网格,其将被编码为[0001000101011101]。因此,左上网格将被编码为[111110001000101011101]。在此之后,将在所有深度级处对右上4×4网格进行编码,在所有深度级处对左下网格进行编码,并且在所有深度级处对右下网格进行编码。
上述深度优先编码与第一实施方案中描述的广度优先编码的比较表明广度优先编码可优选地用于NPU,因为其具有良好地对准的4位字段,这允许更高效的解析器设计。
以上实施方案描述了其中小区中有32个区块的实现方式。这仅是示例,并且不同的实现方式可在每小区包括不同数量的区块。类似地,以上实施方案包括具有8位值的数据元素。根据实现方式,数据元素可具有不同的值范围。图10所示的组块结构示出了可采取128位SIM、余数或一进制数据的组块。在其他实现方式中,组块结构可改变为具有不同的大小和/或具有不同的结构配置。
以上实施方案描述了由8×8元素的阵列组成的数据区块。在其他实现方式中,区块大小可为4×4。在这种实现方式中,当执行掩码编码时,上述并通过将8×8网格视为呈四个4×4网格的形式的数据元素组的集合而生成的第一掩码是不必要的。在此之后,4×4区块由4位2×2掩码和16位1×1掩码进行掩码。
在另外的实施方案中,区块的大小可根据神经网络的正被处理的层的类型而变化。例如,上述掩码编码可用于神经网络的一些层,但是2×2区块大小可用于批处理大小为四的全连接层。
Claims (10)
1.一种由处理元件执行的用于压缩神经网络的要写入到存储装置的激活数据的方法,其中所述激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述方法包括:
在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;
识别在每个组内是否存在任何具有非零值的数据元素并且形成每个组的第一状态指示符,所述第一状态指示符指示所述组是否包含具有非零值的数据元素;
在被识别为包含至少一个具有非零值的数据元素的每个数据元素组内形成多个子组;
识别在每个子组内是否存在任何具有非零值的数据元素并且形成第二状态指示符,所述第二状态指示符指示对于每个子组,所述子组是否包含具有非零值的数据元素;
对于包含具有非零值的数据元素的每个子组,形成所述子组的子组状态指示符,所述子组状态指示符指示所述子组内的哪些数据元素具有非零值;
对所述数据单元中的数据元素的所述非零值进行编码;以及
形成压缩数据集,所述压缩数据集包括所述第一状态指示符、任何第二状态指示符、任何子组状态指示符和所述编码的非零值。
2.根据权利要求1所述的方法,其中所述数据元素组、所述数据元素子组和所述数据元素形成四叉树结构。
3.根据权利要求1所述的方法,其中在所述压缩数据集内,所述第一状态指示符被分组为第一状态指示符集,所述第二状态指示符被分组为第二状态指示符集。
4.根据权利要求3所述的方法,其中所述第一状态指示符、所述第二状态指示符和所述子组状态指示符按行优先次序或列优先次序中的一者布置在所述压缩数据集中。
5.根据权利要求1所述的方法,其中对数据元素的所述非零值的所述编码包括对所述非零值进行增量编码,其中通过获取每个数据元素的实际值与所述数据元素的预测值之间的差值来执行所述增量编码。
6.根据权利要求5所述的方法,其中所述数据单元包括数据元素的正方形数量,并且除了左上角数据元素之外,在数据元素正方形的左手边缘上的每个数据元素的预测值等于定位在预测的数据元素上方一个位置的所述数据元素的所述值。
7.根据权利要求6所述的方法,其中针对所述数据元素正方形内的数据元素的预测是基于定位在所述数据元素左侧一个位置、在所述数据元素上方一个位置和在所述数据元素的左上角斜对地一个位置的所述数据元素的值的线性组合。
8.根据权利要求5所述的方法,其中将所述增量编码的非零值编码为Golomb-Rice代码,并且在将所述增量编码的非零值转换为Golomb-Rice代码之前,将所述增量编码的非零值转换为无符号形式,使得所有的所述增量编码的非零值都被转换为大于或等于零的整数。
9.一种由处理元件执行的用于压缩神经网络的要写入到存储装置的激活数据的方法,其中所述激活数据由数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述方法包括:
在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;
识别在每个组内是否存在任何具有零值的数据元素值并且形成每个组的第一状态指示符,所述第一状态指示符指示所述组是否包含具有零值的数据元素;
在被识别为包含至少一个具有零值的数据元素的每个数据元素组内形成多个子组;
识别在每个子组内是否存在任何具有零值的数据元素并且形成第二状态指示符,所述第二状态指示符指示对于每个子组,所述子组是否包含具有零值的数据元素;
对于包含具有零值的数据元素的每个子组,形成所述组的子组状态指示符,所述子组状态指示符指示所述子组内的哪些数据元素具有零值;
对所述数据单元中的数据元素的所述非零值进行编码;以及
形成压缩数据集,所述压缩数据集包括所述第一状态指示符、任何第二状态指示符、任何子组状态指示符和所述编码的非零值。
10.一种数据处理系统,所述数据处理系统包括处理元件和存储装置,所述存储装置存储代码部分,所述代码部分在由所述处理元件执行时致使所述数据处理系统执行压缩神经网络的激活数据的方法,其中所述激活数据以数据元素单元形成,每个单元包括多个数据元素并且每个数据元素具有数值,所述方法包括:
在激活数据单元内形成多个数据元素组,每个组包括多个数据元素;
识别在每个组内是否存在任何具有非零值的数据元素并且形成每个组的第一状态指示符,所述第一状态指示符指示所述组是否包含具有非零值的数据元素;
在被识别为包含至少一个具有非零值的数据元素的每个数据元素组内形成多个子组;
识别在每个子组内是否存在任何具有非零值的数据元素并且形成第二状态指示符,所述第二状态指示符指示对于每个子组,所述子组是否包含具有非零值的数据元素;
对于包含具有非零值的数据元素的每个子组,形成所述子组的子组状态指示符,所述子组状态指示符指示所述子组内的哪些数据元素具有非零值;
对所述数据单元中的数据元素的所述非零值进行编码;以及
形成压缩数据集,所述压缩数据集包括所述第一状态指示符、任何第二状态指示符、任何子组状态指示符和所述编码的非零值。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/829,879 US10938411B1 (en) | 2020-03-25 | 2020-03-25 | Compression and/or decompression of activation data |
US16/829,879 | 2020-03-25 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113452376A true CN113452376A (zh) | 2021-09-28 |
Family
ID=74683149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110308681.8A Pending CN113452376A (zh) | 2020-03-25 | 2021-03-23 | 激活数据的压缩和/或解压缩 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10938411B1 (zh) |
EP (1) | EP3886324B1 (zh) |
CN (1) | CN113452376A (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20210136476A (ko) * | 2020-05-07 | 2021-11-17 | 삼성전자주식회사 | 쿼드 트리 방법의 파라미터들을 이용하여 압축하는 장치 및 방법 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106991477B (zh) * | 2016-01-20 | 2020-08-14 | 中科寒武纪科技股份有限公司 | 一种人工神经网络压缩编码装置和方法 |
US10565207B2 (en) * | 2016-04-12 | 2020-02-18 | Hsilin Huang | Method, system and program product for mask-based compression of a sparse matrix |
US10762426B2 (en) * | 2016-08-12 | 2020-09-01 | Beijing Deephi Intelligent Technology Co., Ltd. | Multi-iteration compression for deep neural networks |
US10411727B1 (en) * | 2018-10-10 | 2019-09-10 | Ambarella, Inc. | High throughput hardware unit providing efficient lossless data compression in convolution neural networks |
-
2020
- 2020-03-25 US US16/829,879 patent/US10938411B1/en active Active
-
2021
- 2021-03-23 CN CN202110308681.8A patent/CN113452376A/zh active Pending
- 2021-03-25 EP EP21164833.2A patent/EP3886324B1/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP3886324B1 (en) | 2023-04-26 |
EP3886324A1 (en) | 2021-09-29 |
US10938411B1 (en) | 2021-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7365659B1 (en) | Method of context adaptive binary arithmetic coding and coding apparatus using the same | |
KR101049699B1 (ko) | 데이터의 압축방법 | |
US5594435A (en) | Permutation-based data compression | |
CN108886367B (zh) | 用于压缩和解压缩数据的方法、设备和系统 | |
JP2006050605A (ja) | バイナリ状態を符号化および復号化するための方法と装置および対応するコンピュータプログラム | |
CN112398484B (zh) | 一种编码方法及相关设备 | |
CN107565970B (zh) | 一种基于特征识别的混合无损压缩方法及装置 | |
US6225922B1 (en) | System and method for compressing data using adaptive field encoding | |
EP1266455A1 (en) | Method and apparatus for optimized lossless compression using a plurality of coders | |
CN113452376A (zh) | 激活数据的压缩和/或解压缩 | |
US6055273A (en) | Data encoding and decoding method and device of a multiple-valued information source | |
KR101023536B1 (ko) | 데이터 무손실 압축 방법 | |
KR100674937B1 (ko) | 컨텍스트 적응형 이진 산술 복호화 장치 | |
CN112332857B (zh) | 一种用于ldpc码的循环移位网络系统及循环移位方法 | |
US10931303B1 (en) | Data processing system | |
CN112449191A (zh) | 压缩多个图像的方法、解压缩图像的方法和装置 | |
CN114614832A (zh) | 基于前后游程长度编码的测试数据压缩及解压方法 | |
KR101612281B1 (ko) | 이진 데이터의 압축 및 복원 방법과 장치 | |
US6101281A (en) | Method for improving data encoding and decoding efficiency | |
CN114429200A (zh) | 规范化哈夫曼编解码方法及神经网络计算芯片 | |
CN103024380A (zh) | 一种数据的熵编码方法和装置 | |
JPH0629861A (ja) | データ圧縮方法 | |
WO2024045216A1 (en) | Train-linking lossless compressor of numeric values | |
RU2739705C1 (ru) | Компрессионный накопитель данных и устройство для его осуществления | |
Wei et al. | Efficient VLSI Huffman encoder implementation and its application in high rate serial data encoding |
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 |