CN115333544B - 一种数据解压缩电路及其方法、芯片及电子设备 - Google Patents
一种数据解压缩电路及其方法、芯片及电子设备 Download PDFInfo
- Publication number
- CN115333544B CN115333544B CN202211250448.XA CN202211250448A CN115333544B CN 115333544 B CN115333544 B CN 115333544B CN 202211250448 A CN202211250448 A CN 202211250448A CN 115333544 B CN115333544 B CN 115333544B
- Authority
- CN
- China
- Prior art keywords
- data
- decompression
- module
- weight data
- weight
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Memory System (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请涉及一种数据解压缩电路及其方法、芯片及电子设备,属于计算机技术领域。该数据解压缩电路包括:N个第一读取控制模块、第二读取控制模块、N个解压缩模块;每个第一读取控制模块,用于从第一存储器件的存储体中读取压缩权重数据,第一存储器件包括与N个第一读取控制模块一一对应的N个存储体,N为正整数;第二读取控制模块,用于从第二存储器件中读取每个压缩权重数据对应的索引数据;每个解压缩模块与第二读取控制模块和一个第一读取控制模块连接,每个解压缩模块,用于根据输入自身的压缩权重数据和对应的索引数据进行解压缩操作,得到原始权重数据。该电路能够实现快速还原原始权重数据的目的,提高数据解压缩的效率。
Description
技术领域
本申请属于计算机技术领域,具体涉及一种数据解压缩电路及其方法、芯片及电子设备。
背景技术
近年来,人工智能(Artificial Intelligence,AI)技术得到了迅猛的发展,也取得了显著的成果,特别是在图像检测和识别以及语言识别等方向上,人工智能的识别率已经超过了人类。神经网络处理是实现人工智能的重要处理技术,而卷积神经网络算法作为现有的深度学习算法的代表算法之一,其推理预测部分的很大一部分的运算均是基于离散数域的卷积运算。卷积运算就是要完成输入特征图和权重的乘累加运算,运算量巨大,加上权重数据本身存在一定的稀疏性。因此对这类权重数据进行压缩,不仅可以减少从外部存储模块到内部计算模块的数据搬运的数据量,而且还可以有效减少内部运算的数据量。
有了高效的压缩算法,还需要配合高速的解压缩电路来快速还原原始权重,这样才能最有效的获取压缩算法带来的带宽压缩优势,同时保持高带宽传输。
发明内容
鉴于此,本申请的目的在于提供一种数据解压缩电路及其方法、芯片及电子设备,以快速将压缩权重数据解压缩成原始权重的目的。
本申请的实施例是这样实现的:
第一方面,本申请实施例提供了一种数据解压缩电路,包括:N个第一读取控制模块、第二读取控制模块和N个解压缩模块;N个第一读取控制模块,每个所述第一读取控制模块,用于从第一存储器件的存储体中读取压缩权重数据,所述第一存储器件包括与所述N个第一读取控制模块一一对应的N个存储体,N为正整数;第二读取控制模块,用于从第二存储器件中读取每个所述压缩权重数据对应的索引数据;N个解压缩模块,每个所述解压缩模块与所述第二读取控制模块和一个所述第一读取控制模块连接,每个所述解压缩模块,用于根据输入自身的压缩权重数据和对应的索引数据进行解压缩操作,得到原始权重数据。
本申请实施例中,通过设置N个解压缩模块能够并行的对第一存储器件中各个存储体中的压缩权重数据进行解压缩,从而实现快速还原原始权重数据的目的,能最有效的获取压缩算法带来的带宽压缩优势,同时保持高带宽传输。同时,由于每个存储体中压缩权重数据的压缩率不同,使得解压缩过程消耗的压缩权重数据的快慢有区别,通过设置与N个解压缩模块一一对应的N个第一读取模块从对应的存储体内读取压缩权重数据,以保证每个存储体都有一套独立的读取逻辑,以提高压缩效率。通过使用一个第二读取控制模块来统一读取对应的索引数据,可以节约成本。
结合第一方面实施例的一种可能的实施方式,所述数据解压缩电路还包括:后级处理模块,与每个所述解压缩模块连接,所述后级处理模块,用于将指定的所述解压缩模块输出的原始权重数据进行排序组合,得到当前时钟周期的一笔传输数据,其中,指定的所述解压缩模块共同完成一笔传输数据的解压缩。
本申请实施例中,由于解压缩模块相互异步的特性,通过设置后级处理模块,来对多个解压缩模块共同完成的一笔传输数据进行同步处理,将这些解压缩模块输出的原始权重数据进行排序组合,以输出符合后级流水线的数据,同时通过将多个解压缩模块的输出的原始权重数据进行排序组合成一笔数据再输出,可以减少数据传输的次数。
结合第一方面实施例的一种可能的实施方式,所述数据解压缩电路还包括:中央控制模块,分别与所述第二读取控制模块、所述后级处理模块、每个所述第一读取控制模块、每个所述解压缩模块连接;所述中央控制模块,用于控制所述第二读取控制模块、每个所述第一读取控制模块的读取逻辑,以及调度每个所述解压缩模块的运行过程,以及控制所述后级处理模块对指定的所述解压缩模块输出的原始权重数据进行排序组合。
本申请实施例中,通过设置中央控制模块来统一调度各个模块的工作,从而实现各个模块高效的相互配合,高效的完成数据的解压缩操作。
结合第一方面实施例的一种可能的实施方式,若在压缩权重数据采用了分通道量化压缩;所述中央控制模块,还用于将每个通道对应的量化零数值,分配给正在做该通道数据解压的每个所述解压缩模块;相应地;每个所述解压缩模块,用于根据输入自身的压缩权重数据和对应的索引数据,以及所述中央控制模块分配的量化零数值进行解压缩操作,得到原始权重数据。
本申请实施例中,在压缩权重数据采用了分通道量化压缩,中央控制模块还用于正确的将每个通道对应的量化零数值,分配给正在做该通道数据解压的每个解压缩模块,使得相应的解压缩模块基于分配的量化零数值进行解压缩操作,从而得到正确的原始权重数据。
结合第一方面实施例的一种可能的实施方式,每个所述解压缩模块包括缓存区,所述缓存区的存储量不小于两倍所述存储体的最大读数据量,所述缓存区用于缓存先于索引数据输入的压缩权重数据。
本申请实施例中,通过设置缓存区来缓存先于索引数据输入的压缩权重数据,且该缓存区的存储量不小于两倍存储体的最大读数据量,使得在解压缩时,可以提前进行数据预取,以提高解压缩的效率。
结合第一方面实施例的一种可能的实施方式,每个所述解压缩模块还包括计数器,所述计数器用于对所述缓存区中存储的权重元素个数进行计数,以及对每次解压缩所消耗的权重元素个数进行计数。
本申请实施例中,通过设置计数器来对缓存区中存储的权重元素个数以及每次解压缩所消耗的权重元素个数进行计数,以避免在解压缩时造成数据遗漏。
结合第一方面实施例的一种可能的实施方式,每个所述解压缩模块包括蝶形网络结构,所述蝶形网络结构包括多层,每一层包括M个输入节点,每个输入节点用于接收压缩权重数据中的一个权重元素或者一个权重元素的一部分;M为正整数;每个所述解压缩模块,用于根据所述压缩权重数据中权重元素的数据类型和对应的索引数据,得到M位的掩码信息;基于所述M位的掩码信息和预设规则计算出每一层的控制位;根据每一层的控制位去控制该层蝶形网络结构的工作方式,得到解压缩后的原始权重数据。
本申请实施例中,通过采用蝶形网络来解压缩,配合对应的控制位来解码出正确的原始权重数据,由于蝶形网络结构对应的功耗和面积相对较小,从而可以减小面积和节约功耗,同时非常容易适配不同的存储体大小,如果存在时序违例,也很容易打拍处理。结合第一方面实施例的一种可能的实施方式,所述数据解压缩电路还包括:所述第一存储器件和/或所述第二存储器件,所述第一存储器件包括N个存储体,每个所述存储体用于存储压缩权重数据; 所述第二存储器件,包括N个存储体,每个存储体用于存储对应的索引数据。
本申请实施例中,通过内设第一存储器件和第二存储器件,可以减少数据解压缩电路与外部的数据交流次数,节约数据搬运的距离,从而可以节省功耗,提高芯片的性能。
第二方面,本申请实施例还提供了一种芯片,包括如上述第一方面实施例和/或结合第一方面实施例的任一种可能的实施方式提供的数据解压缩电路。
第三方面,本申请实施例还提供了一种电子设备,包括如上述第二方面实施例提供的芯片。
第四方面,本申请实施例还提供了一种数据解压缩方法,包括:获取N组压缩权重数据以及对应的N组索引数据;根据每组压缩权重数据和对应的索引数据进行解压缩操作,得到N组压缩权重数据对应的原始权重数据。
第五方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行上述第四方面实施例提供的方法。
本申请的其他特征和优点将在随后的说明书阐述。本申请的目的和其他优点可通过在所写的说明书以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本申请的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本申请的主旨。
图1示出了本申请实施例提供的一种存储在bank0和bank1中的待压缩权重数据的示意图。
图2示出了本申请实施例提供的一种对bank0内和bank1内存储的原始权重数据进行初次压缩后得到的初次压缩后的数据及对应的索引数据的示意图。
图3示出了本申请实施例提供的一种对bank1内存储的原始权重数据进行重新压缩后得到的新压缩权重数据及对应的新索引数据的示意图。
图4示出了本申请实施例提供的一种数据解压缩电路的结构示意图。
图5示出了本申请实施例提供的一种蝶形网络结构的结构示意图。
图6示出了本申请实施例提供的一种LROTC(0000,3)的移位原理图。
图7示出了本申请实施例提供的又一种数据解压缩电路的结构示意图。
图8示出了本申请实施例提供的数据解压缩方法的流程示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中诸如“第一”、“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
再者,本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
为了提高权重数据的压缩效率,本申请在压缩权重数据时,通过将同一组待压缩权重数据分成N份,分别存储于存储器件(buffer)的N个存储体(bank)中,并对N个存储体中的每一个存储体内存储的原始权重数据进行压缩,得到压缩权重数据及对应的索引数据,这样使得后续各个存储体之间解压缩过程可以并行化处理。
在对N个存储体中的每一个存储体内存储的原始权重数据进行压缩,得到压缩权重数据及对应的索引数据之后,对每个存储体压缩得到的压缩权重数据及对应的索引数据分别进行存储,如将得到的压缩权重数据存储在第一存储器件的N个存储体中,将对应的索引数据存储到第二存储器件的N个存储体中。
例如,以N为16为例,当然N的取值并不限于16。在压缩权重数据时,通过将同一组待压缩权重数据分成16份,分别存储于存储器件的16个存储体中,并对16个存储体中的每一个存储体内存储的权重数据进行压缩,得到压缩权重数据及对应的索引数据。之后,将得到的压缩权重数据存储在第一存储器件的N个存储体内,将对应的索引数据存储到第二存储器件的N个存储体内。如将bank1压缩得到的压缩权重数据存储到第一存储器件的bank1内,将bank2压缩得到的压缩权重数据存储到第一存储器件的bank2内,将bank3压缩得到的压缩权重数据存储到第一存储器件的bank3内,以此类推,将bank16压缩得到的压缩权重数据存储到第一存储器件的bank16内。
可以理解的是,除了将压缩得到的压缩权重数据存储在第一存储器件对应的存储体内,还可以存储在第一存储器件的其他存储体内,或者存储在原存储器件的对应存储体内。
在将压缩得到的索引数据存储到第二存储器件的N个存储体内时,可以是将第一存储器件的bank1内压缩权重数据对应的索引数据,存储到第二存储器件的bank1内,将第一存储器件的bank2内压缩权重数据对应的索引数据,存储到第二存储器件的bank2内,将第一存储器件的bank3内压缩权重数据对应的索引数据,存储到第二存储器件的bank3内,以此类推,将第一存储器件的bank16内压缩权重数据对应的索引数据,存储到第二存储器件的bank16内。可以理解的是,除了上述的存储方式来存储索引数据外,还可以是采用其他方式来存储索引数据,如反过来,将第一存储器件的bank1内压缩权重数据对应的索引数据,存储到第二存储器件的bank16内,将第一存储器件的bank2内压缩权重数据对应的索引数据,存储到第二存储器件的bank15内,以此类推,将第一存储器件的bank16内压缩权重数据对应的索引数据,存储到第二存储器件的bank1内。
对每一个存储体内存储的原始权重数据进行压缩的过程可以是:先去除每一个存储体内存储的零值数据,之后将剩余的原始权重数据依次排列组合在一起,从而得到压缩权重数据。另外为了便于在解压缩时,将压缩权重数据还原,还需要对应生成索引数据,以便于指示哪些原始权重数据是零值数据,是被剔除掉的数据。
为了便于理解,举例进行说明,假设某个存储体内存储的原始权重数据为{0,1,3,0,0,0,0,0,0,5,2,5,1,0,0,1},则进行压缩后得到的压缩权重数据为{1,3,5,2,5,1,1}。用于还原压缩后的原始权重数据的索引数据可以有多种实现方式,例如,可以是用1和0来构成索引数据,如用1表示原始权重数据中的非零值数据,用0表示原始权重数据中的零值数据。以上述的例子为例,则对应的索引数据为{0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,1}。由于上述示例中的第0个位置的数据为“0”,相应的索引为0;第1个位置的数据为“1”,对应的索引为1;以此类推,第14个位置的数据为“0”,相应的索引为0;第15个位置的数据为“1”,对应的索引为1。当然也可以反过来,如用用0表示原始权重数据中的非零值数据,用1表示原始权重数据中的零值数据。
在压缩时,在去除每一个存储体内存储的零值数据,将剩余的原始权重数据依次排列组合在一起后,还可以利用指定数值数据(如0)将排列组合后所占据的行的空格补齐,以便于硬件更好地区分不同的权重组,能加快解压缩的效率。假设每一个存储体的每一行可以存储8个数据,16个原始权重数据压缩后得到7个非零数据,由于这7个非零数据所占据的行还存在一个空格,因此可以用0将剩余的空格补齐。又例如,16个原始权重数据压缩后得到9个非零数据,这9个非零数据会占据两行,其中第二行只有1个数据,剩余7个空格,因此可以0将剩余的7个空格补齐。
假设每个存储体的每行可存储的数据位宽为C,用[C-1:0]表示可存储的数据的比特范围,其中本领域中常用的数据位宽包括但不限于64、128以及256比特等。用c表示单个数据所占用的比特数目,通常c应该是4的倍数,则每行可存储C/c个数据。本申请所支持的数据类型包括4bit整型、8bit整型、16bit整型、32bit整型、8bit浮点类型、16bit浮点类型、32bit浮点类型及64bit 浮点类型等类型。
为了更好的理解,结合图1、图2所示对上述的压缩原理解析说明,图1所示的bank0和bank1中存储的数据为压缩之前的原始权重数据,压缩后的得到的压缩权重数据和对应的索引数据如图2所示。
需要说明的是,本申请中,每个存储体压缩得到的压缩权重数据的长度一致,也即压缩后数据所占行数相同。若初次压缩后,存在存储体压缩得到的压缩权重数据的长度不一致的情况,则可以获取每一个存储体的初次压缩后数据所占据的行数,从N个存储体中选取出初次压缩后数据行数不等于最大行数的存储体。之后以该最大行数所在的目标存储体为基准,对初次压缩后数据行数不等于最大行数的存储体重新进行压缩,使得重新压缩后的数据行数等于该最大行数。其中,初次压缩后数据行数不等于最大行数的存储体可以称为不符合规则的存储体。
为了便于理解,结合例进行说明。假设有3个存储体,分别为存储体0、存储体1、存储体2,若存储体0的初次压缩后的数据所占据行数为5,存储体1的初次压缩后的数据所占据行数为4,存储体2的初次压缩后的数据所占据行数为3,则需要对存储体1和存储体2进行重新压缩,使得压缩后的数据所占行数为5。
在以该最大行数所在的目标存储体为基准,对初次压缩后数据行数不等于最大行数的存储体重新进行压缩,其过程可以是:获取目标存储体内存储的原始权重数据中的零值数据的第一数量,以及获取不符合规则的存储体内存储的原始权重数据中的零值数据的第二数量,然后获取第一数量与第二数量之差的绝对值,并选取绝对值与第二数值中的最小值,之后对不符合规则的存储体内存储的原始权重数据进行重新压缩,在重新压缩时,将不符合规则的存储体内存储的原始权重数据中,从最低地址(Least Significant Bit,LSB)开始的前最小值个数的零值数据当成非零数据进行重新压缩。假设每个存储体内存储的原始权重数据中的零值数据的个数用org_zero_count表示,非零数据的个数用non_zero_count表示,第一数量与第二数量之差的绝对值用delta_non_zero_count表示,则绝对值与第二数值中的最小值可以表示为min(delta_non_zero_count,org_zero_count)。假设最小值为5,由于将从最低地址开始的前5个零值数据当成非零数据,因此,在重新压缩时,从最低地址开始的前5个零值数据不再剔除,仅剔除之后的零值数据。这样不符合规则的存储体重新压缩后,便可符合规则,使得所有压缩后的数据的格式统一,简化了解码逻辑,具备对解压缩硬件实现友好的特点。
为了更好的理解,结合图2和图3进行说明。从图2可知,bank1初次压缩后的数据所占行数为2,bank0初次压缩后的数据所占行数为3,因此需要对bank1中的原始权重元素进行重新压缩。在对bank1内存储的原始权重数据进行重新压缩时,可以是先获取bank0内存储的原始权重数据中数据的第一数量(如13),以及获取bank1内存储的原始权重数据中的零值数据的第二数量(如为22),则第一数量与第二数量之差的绝对值为9。则Min(9,22)=9,因此,在对bank1内存储的原始权重数据进行重新压缩时,需要将原始权重数据中从最低地址(LSB)开始的前9个零值数据当成非零数据进行重新压缩,即将原始权重数据第一行中的5个零及第二行中的前4个零当成非零进行重压缩,对bank1内存储的原始权重数据进行重新压缩后得到的新压缩权重数据及对应的新索引数据,如图3所示。
有了高效的压缩算法,还需要配合高速的硬件解压缩电路实现快速还原原始权重数据的目的,这样才能最有效的获取压缩算法带来的带宽压缩优势,同时保持高带宽传输。
为了能快速还原原始权重数据,本申请实施例提供了一种数据解压缩电路,如图1所示。该数据解压缩电路包括:N个第一读取控制模块和第二读取控制模块和N个解压缩模块,N为正整数。每个解压缩模块均与第二读取控制模块和一个第一读取控制模块连接。
每个第一读取控制模块,用于从第一存储器件(如weight buffer)的存储体中读取压缩权重数据,并发送给对应的解压缩模块。第二读取控制模块,用于从第二存储器件(如index buffer)中读取压缩权重数据对应的索引数据,并发给对应的解压缩模块。每个解压缩模块,用于根据输入自身的压缩权重数据和对应的索引数据进行解压缩操作,得到原始权重数据。该数据解压缩电路能够并行的对第一存储器件中各个存储体中的压缩权重数据进行解压缩处理,从而实现快速还原原始权重数据的目的,能最有效的获取压缩算法带来的带宽压缩优势,同时保持高带宽传输。
第一存储器件中的存储体的数量不小于N。第一存储器件中存储的是原始权重数据压缩后的压缩权重数据,这些数据可以是从其他的存储体中搬运过来的,可以是部分数据也可以是全部数据。需要说明的是,在不开启压缩功能时,第一存储器件仍然可以用来存储别的类型的数据。
第二存储器件中的存储体的数量不小于N。第二存储器件中存储的是原始权重数据压缩后的压缩权重数据对应的索引数据,这些数据可以是从其他的存储体中搬运过来的,可以是部分数据也可以是全部数据。需要说明的是,在不开启压缩功能时,第二存储器件可以仍然可以用来存储别的类型的数据。
第一读取控制模块可以在后级流水线(如解压缩模块)可以接收新数据后产生读请求,从第一存储器件对应的存储体内读取压缩权重数据,第一读取控制模块每次从对应的bank中读取一行数据。在读取到压缩权重数据后,传输给对应的解压缩模块。因为每个bank的解压缩过程都是异步的,而且每个bank压缩后数据的压缩率都不尽相同(由于存储到N个存储体内的原始权重数据中的非零元素或零元素的占比不同,使得压缩率不同),所以解压缩过程消耗的压缩权重数据的快慢有区别,因此需要每个bank独立有一套相应的控制逻辑。
第二读取控制模块可以在后级流水线(如解压缩模块)可以接收新数据后产生读请求,第二读取控制模块每次从对应的一个bank中读取一行数据。因为解压缩过程并不总是所有bank同一时刻全部并行执行,需要读第二存储器件的哪些bank中的索引数据,要根据每次解压缩需要用到第一存储器件的哪几个bank来决定,所以可以使用一个控制逻辑来统一处理。当读取到索引数据后,将索引数据发送给对应的解压缩模块。
第二读取控制模块每次从bank中读到的数据量较多,一次解压缩并不能全部用完,可以分多次传输给对应的解压缩模块。例如,第一读取控制模块、第二读取控制模块每次从一个bank中读取的数据量均为32byte。假设一个权重元素所占用的比特数目为4bit,则32byte 的压缩权重数据中包含64个4bit的权重元素,当然,若一个权重元素所占用的比特数目为8bit,则32byte 的压缩权重数据中包含32个8bit的权重元素。由于一个权重元素对应的索引数据所占的比特数目为1bit,则对这64个权重元素解压缩仅需要64bit的索引数据。则在解压缩时,第一读取控制模块将32byte 的压缩权重数据发送给对应的解压缩模块,第二读取控制模块仅需要将64bit的索引数据发送给对应的解压缩模块。之后,第一读取控制模块又从该解压缩模块对应的bank中读取后续的32byte 的压缩权重数据发给对应的解压缩模块,由于之前读取的索引数据还未用完,因此,第二次解压缩时,第二读取控制模块不需要再去读取对应的索引数据,仅需要将对应的64bit的索引数据发送给对应的解压缩模块即可。
每个解压缩模块包括缓存区,缓存区的存储量不小于两倍存储体的最大读数据量,缓存区用于缓存先于索引数据输入的压缩权重数据,以及还用于缓存当前未完成数据解压缩的压缩权重数据。当每次解压缩的元素数据小于等于1倍存储体的最大读数据量,便可以接收新的压缩权重数据。解压缩模块作为进行解压缩计算逻辑的核心模块,需要接收待解压的压缩权重数据和对应的索引数据,以及一些控制信息(包括当前待解压的bank是权重组的第几笔数据,以及待解压缩的权重元素的数据类型)。由于待解压的压缩权重数据和对应的索引数据是异步来的,若压缩权重数据先于索引数据到来,则可以先将其存储到解压缩模块内部的缓存区中,这个缓存区的存储量不小于两倍存储体的最大读数据量,也即若最大读数据量为32byte,则缓存区的存储量不小于64byte。索引数据需要晚于压缩权重数据到来,如果,索引数据先于压缩权重数据到来,需要堵住当前解压缩模块的流水线,等待压缩权重数据的到来,再开始进行解压缩过程,也即,索引数据只能在压缩权重数据到来后,才能发送成功。
每个解压缩模块输出的数据量可以为32Byte,因此一次输入的数据在一次解压缩时,可能并不全部用完,需要将当前未完成数据解压缩的压缩权重数据存储到缓存区。此外,解压缩模块还会对当前解压缩消耗的权重元素进行统计,每次完成一笔解压缩后,从缓存区中剔除当前已消耗的权重元素。可选地,解压缩模块内有一个计数器用于统计目前模块内有多少个待解压缩元素,每次待解压缩元素数据小于等于1倍存储体的最大读数据量对应的权重元素个数,便可以接收新的待解压缩权重数据,待新的待解压缩权重数据进来后,在该计数器上增加对应的权重元素个数。每次完成了一笔解压缩,统计消费了多少待解压缩权重元素个数,计数器便减去该数值,每次解压缩后把已用数据剔除。
结合图2中bank0所示的压缩权重数据为例,bank0对应的第一读取控制模块第一次从会从bank0中读取32byte数据,也即会读取bank0中的第一行数据(1,2,4,8,9,10,11,16)。要将图2中的bank0中的数据还原成图1中bank0存储的数据,则在第一次解压缩时,消耗掉了其中的1,2,4这三个权重元素。第二次解压缩时,消耗掉了其中的8,9,10,11这四个权重元素。此时,由于bank0中的第一行数据中剩余的数据仅有16这个权重元素,因此,第三次解压缩时,还需要消耗掉bank0第二行的数据(17,18,19,20,21,22,23,24)中的前7个权重元素,即第三次解压缩时,消耗掉了第一行的16以及第二行中的17,18,19,20,21,22,23这8个权重元素。从上述示例可以看出,第一次读取的压缩权重数据需要三次解压缩才能完全消耗掉,对于第一次解压缩时,未用完解压缩的权重数据8,9,10,11,16这5个数据需要继续缓存在缓存区中。
若在压缩权重数据采用了量化压缩,即对权重数据采用了量化操作,则每个解压缩模块,还用于根据输入自身的压缩权重数据和对应的索引数据,以及指定的量化零数值(可以根据量化需要进行设定)进行解压缩操作,得到原始权重数据,也即,每个解压缩模块先根据输入自身的压缩权重数据和对应的索引数据进行解压缩操作,之后,将解压缩得到的数据中的零元素替换为量化零数值,得到原始权重数据。如假设量化零数值为1,则将解压缩得到的数据中的零元素替换为1。
解压缩模块可以采用软件方式进行解压缩,也可以是采用硬件方式进行解压缩,若采用硬件方式进行解压缩时,可选地,解压缩模块可以包括蝶形网络结构,其示意图如图5所示,蝶形网络结构包括多层(stage),每一层包括M个输入节点,每个输入节点用于接收压缩权重数据中的一个权重元素或者一个权重元素的一部分。M为正整数。图5中的每一个小矩形块均为输入节点,需要说明的是,图5仅示出了M=8,其层级stag为3的示意图。
蝶形网络的层级等于log2M,当log2M的值不为整数时,需要向上取整。M的数值取决于存储体的最大读数据量(此处以32byte为例)和权重元素的类型。例如,一个bank对应的解压缩模块要完成32byte数据量的解压缩,若权重元素类型为4bit 整形,则需要有64个4bit的输入元素,即M为64,蝶形网络的层级为6。可以理解的是,若权重元素类型为8bit 整形,则需要有32个8bit的输入元素,即M为32,蝶形网络的层级为5。当权重元素类型为32bit整形,则M=8,对应的蝶形网络的层级为3。其余情形的不再示例。
每个解压缩模块,用于根据压缩权重数据中权重元素的数据类型和对应的索引数据,得到M位的掩码信息(mask信息);基于M位的掩码信息和预设规则计算出每一层的控制位(control bit);根据每一层的控制位去控制该层蝶形网络结构的工作方式(也即控制该层蝶形网络结构的选择器的输出),得到解压缩后的原始权重数据。
此处以需要64个4bit的输入元素为例,相应的,图5中每一行需要包含64个输入节点,即64个小矩形,此时,一个小矩形代表一个4bit元素节点,比如第一行的最低的4bit节点,命名为N0_0,最高的4bit节点命名为N0_63,最后一行的最低的4bit 节点命名为N6_0,最高的4bit 节点命名为N6_63。图5中虚线框所示的结构叫做一个交换器,由2个2选一选择器组成,控制它是否做交换的控制信号,命名为control bit(控制位),可以看到其中每一个stage,都有32个交换器,也就是64个2选一选择器。
控制位的计算过程如下:根据压缩权重数据中权重元素的数据类型和对应的索引数据,得到M位的掩码信息;基于M位的掩码信息和预设规则计算出每一层的控制位。在基于M位的掩码信息和预设规则计算出每一层的控制位的过程可以是:
基于M位的掩码信息和预设的位1计数公式计算出第j位掩码信息中的位数为1的个数,j依次取1至M-1。预设的位1计数公式为:PC[j]=POPCNT(mask{j:0})= mask[0]+mask[1]+…+mask[j-1]);之后基于第j位掩码信息中的位数为1的个数和控制位计算公式,便可计算出每一层的控制位。对于共有6个stage的蝶形网络,每一层的输入节点为64,控制位计算公式为:
对于stage1,从高到低使用的32bit control bit 等于LROTC(032,popcnt(mask{32:0}))。
对于stage2,高16bit的control bit等于LROTC(016,popcnt(mask{16:0})),低16bit的control bit等于LROTC(016,popcnt(mask{48:0}))。
对于stage3, 按照8bit分开的最高到最低的control bit等于LROTC(08,popcnt(mask{8:0})),LROTC(08,popcnt(mask{24:0})),LROTC(08,popcnt(mask{40:0})),LROTC(08,popcnt(mask{56:0}))。
对于Stage4,按照4bit分开的最高到最低的control bit等于LROTC(04,popcnt(mask{4:0})),LROTC(04,popcnt(mask{12:0})),LROTC(04,popcnt(mask{20:0})),LROTC(04,popcnt(mask{28:0})),LROTC(04,popcnt(mask{36:0})),LROTC(04,popcnt(mask{44:0})),LROTC(04,popcnt(mask{52:0})),LROTC(04,popcnt(mask{60:0}))。
对于Stage5, 按照2bit分开的最高对最低的control bit等于LROTC(02,popcnt(mask{2:0})),LROTC(02,popcnt(mask{6:0})),LROTC(02,popcnt(mask{10:0})), LROTC(02,popcnt(mask{14:0})),LROTC(02,popcnt(mask{18:0})),LROTC(02,popcnt(mask{22:0})),LROTC(02,popcnt(mask{26:0})),LROTC(02,popcnt(mask{30:0})),LROTC(02,popcnt(mask{34:0})),LROTC(02,popcnt(mask{38:0})),LROTC(02,popcnt(mask{42:0})),LROTC(02,popcnt(mask{46:0})),LROTC(02,popcnt(mask{50:0})),LROTC(02,popcnt(mask{54:0})),LROTC(02,popcnt(mask{58:0})),LROTC(02,popcnt(mask{62:0}))。
对于Stage6,按照1bit分开的最高对最低的control bit等于LROTC(0,popcnt(mask{1:0})),LROTC(0,popcnt(mask{3:0})),LROTC(0,popcnt(mask{5:0})),LROTC(0,popcnt(mask{7:0})),LROTC(0,popcnt(mask{9:0})),LROTC(0,popcnt(mask{11:0})),LROTC(0,popcnt(mask{13:0})),LROTC(0,popcnt(mask{15:0})),LROTC(0,popcnt(mask{17:0})),LROTC(0,popcnt(mask{19:0})),LROTC(0,popcnt(mask{21:0})),LROTC(0,popcnt(mask{23:0})),LROTC(0,popcnt(mask{25:0})),LROTC(0,popcnt(mask{27:0})),LROTC(0,popcnt(mask{29:0})),LROTC(0,popcnt(mask{31:0})),LROTC(0,popcnt(mask{33:0})),LROTC(0,popcnt(mask{35:0})),LROTC(0,popcnt(mask{37:0})),LROTC(0,popcnt(mask{39:0})),LROTC(0,popcnt(mask{41:0})),LROTC(0,popcnt(mask{43:0})),LROTC(0,popcnt(mask{45:0})),LROTC(0,popcnt(mask{47:0})),LROTC(0,popcnt(mask{49:0})),LROTC(0,popcnt(mask{51:0})),LROTC(0,popcnt(mask{53:0})),LROTC(0,popcnt(mask{55:0})),LROTC(0,popcnt(mask{57:0})),LROTC(0,popcnt(mask{59:0})),LROTC(0,popcnt(mask{61:0})),LROTC(0,popcnt(mask{63:0}))。
LROTC(Left ROTate and Complement on wrap around)的计算原理如图6所示。如LROTC(04,3)= LROTC(0000,3)=0111。
为了便于理解,结合下述的例子进行说明:
假设待压缩的32个元素从低位到高位依次为:4f、2a、6e、8c、ff、ff、ff、ff、e3、9d、cf、13、e4、51、a1、b5、89、8、61、fb、ff、ff、ff、ff、0a、7b、0c、1c、ff、ff、ff、ff。
假设32个元素对应的索引从低位到高位依次为:0、0、1、1、0、0、1、0、1、1、0、1、1、0、0、0、0、0、1、1、0、1、1、0、0、1、0、1、1、0、0、1。
由于权重元素的类型为8bit,对应的mask信息为:
00、00、11、11、00、00、11、00、11、11、00、11、11、00、00、00、00、00、11、11、00、11、11、00、00、11、00、11、11、00、00、11。
需要说明的是,如果权重元素的类型为16bit,则索引0对应的mask信息为0000,索引1对应的mask信号为1111。同理,如果权重元素的类型为32bit,则索引0对应的mask信息为00000000,索引1对应的mask信号为11111111;同理,如果权重元素的类型为4bit,则索引0对应的mask信息为0,索引1对应的mask信号为1。
基于上述的mask信息以及POPCNT计算公式,可以得到POPCNT1-POPCNT32依次为:0、0、0、0、1、2、3、4、4、4、4、4、5、6、6、6、7、8、9、10、10、10、11、12、13、14、14、14、14、14、14、14。
POPCNT33-POPCNT63依次为:14、14、14、14、15、16、17、18、18、18、19、20、21、22、22、22、22、22、23、24、24、24、25、26、27、28、28、28、28、29、30。
control bit31-0为:
对于stage1,有LROTC(032,14)=00000000000000000011111111111111。
对于stage2,高16bit的control bit=LROTC(016,6),低16bit的control bit=LROTC(016,22),其对应的控制位为11111111110000000000000000111111。
对于stage3,其对应的控制位为11111100000000111111000000001111。对于stage4,其对应的控制位为11110000111111001100001111110000。
对于stage5,其对应的控制位为00000011111100111111110011001100。
对于stage6,其对应的控制位为10011010011011 000001101101001100。
利用上述公式计算出蝶形网络结构中每一层的控制位后,便可基于每一层的控制位去控制该层蝶形网络结构的工作方式,得到解压缩后的原始权重数据。如果在压缩过程中引入了量化零,解压缩后,将其中的量化零替换为量化之前对应的数值即可。其中,控制位用于控制蝶形网络结构中二选一选择器,若对应的控制位为1,则不需要将选择器的输出数据交换给与其斜箭头连接的下一个节点,而是直接传输给与其直线箭头连接的下一个节点;对应的控制位为0,则需要将选择器的输出数据交换给与其斜线箭头连接的下一个节点。
通过采用蝶形网络结构来完成解压缩,可以看到对于一个bank的最大读数据量为32byte,权重元素为4bit整形的数据类型时,一个解压缩的蝶形网络包含的二选一多路选择器数目为64*log2(64)*4= 1536,这个数目是比较小的,对应的功耗也是很小的,而且使用这种蝶形网络的结构非常容易适配不同的bank大小,如果存在时序违例,也很容易打拍处理。
为了高效的控制第二读取控制模块、每个第一读取控制模块、每个解压缩模块的逻辑,一种实施方式下,该数据解压缩电路还包括:中央控制模块,如图7所示。中央控制模块分别与第二读取控制模块、每个第一读取控制模块、每个解压缩模块连接。中央控制模块,用于控制第二读取控制模块、每个第一读取控制模块的读取逻辑,以及调度每个解压缩模块的运行过程,以保证各个模块可以高效的相互配合,完成解压缩操作。
中央控制模块用于统筹调度第一存储器件中各bank的解压缩过程,可以根据解压缩前后的权重组的大小,相应的计算出解压缩需要用到第一存储器件中的哪些bank,以及第二存储器件中的哪些bank;每个解压缩模块每次解压缩所需的压缩权重数据,以及需要传输解压缩后的数据的传输次数。因为一个权重组是放到总共16个bank中的,对于解压缩部分由于每个bank是并行执行的,所以每一个解压缩模块需要知道做几次解压能完成整个权重组中该解压缩模块需要完成的工作。
其次根据第一存储器件和第二存储器件中的起始bank指针位置,计算出每次解压缩时哪些bank在工作,每个第一存储器件中的bank解压缩时需要的索引数据是来自第一存储器件的哪个bank,并以此来控制对应的第一读取控制模块和第二读取控制模块去读取对应的压缩权重数据和索引数据。
此外,中央控制模块还需要将一些控制信息(包括当前待解压的bank是权重组的第几笔数据,以及待解压缩的权重元素的数据类型)发给解压缩模块,若原始权重数据在压缩时引入了分通道量化,则中央控制模块,还用于获取每个通道的量化零数值,并正确分配给正在做该通道数据解压缩的解压缩模块,以便于解压缩模块根据输入自身的压缩权重数据和对应的索引数据进行解压缩操作之后,将解压缩后的数据中的零元素替换为量化零数值。其中,对于分通道量化,就是指每一个通道内的权重元素在量化操作时相互独立,比如通道1,选择的量化零数值为1,通道2选择的量化零数值为2,则压缩时,会把各自通道内的对应数值的权重元素量化为量化零,从而压缩掉,当解压缩的时候,需要得到该通道的量化零数值,在解压缩中使用。
一个权重组的大小等于通道(channel)数乘以一个通道内的数据量大小。假设解压缩模块之后的流水线可以一次传输包含2个通道的数据,如512 byte的数量。如果一个通道的数据量比较小,就可能会出现总共两个channel需要传输的数据量小于16(bank数)x32byte(一个bank一次解压缩产生的数据量),这样中央控制模块只会控制所需要的bank和对应的解压缩模块进行工作,另外的bank和解压缩模块对于这一次传输暂时不工作。
比如一个权重组的大小为8KB,通道数为256,通道内数据量为 32B也即32byte,解压缩模块之后的流水线一次传输只需要传输2x32B = 64B的数据量,而一个解压缩模块 模块一个时钟周期可以解压缩出32B数据量,所以这种情况下每一个时钟周期只需要2个解压缩模块并行执行。由于整个权重组是平均放在16个bank中的,所以第一个周期,需要解压缩模块1和解压缩模块2来工作,第二个周期需要解压缩模块3和解压缩模块4来工作,第三个周期需要解压缩模块5和解压缩模块6来工作,以此类推。不总是使用解压缩模块1和解压缩模块2来工作的原因,是每个bank只有到自己对应的解压缩模块的数据通路,如果总是用解压缩模块1和解压缩模块2来,需要增加更多的逻辑和面积。以上控制工作需要由中央调度模块来完成。
为了减少后级流水线传输的次数,可选地,如图7所示,该数据解压缩电路还包括:后级处理模块,后级处理模块与每个解压缩模块连接。后级处理模块,用于将指定的解压缩模块输出的原始权重数据进行排序组合,得到当前时钟周期的一笔传输数据,其中,指定的解压缩模块共同完成一笔传输数据的解压缩。
相应地,后级处理模块还与中央控制模块连接,中央控制模块还用于控制后级处理模块对指定的解压缩模块输出的原始权重数据进行排序组合。由于解压缩模块相互异步的特性,如果所需的一笔传输数据由多个解压缩模块共同完成,就需要后级处理模块对他们进行同步处理。
后级处理模块在将指定的解压缩模块输出的原始权重数据进行排序组合时,是将共同完成一笔传输数据的多个解压缩模块输出的原始权重数据进行排序组合。每个时钟周期都有一笔传输数据,该笔传输数据可能从任意一个bank指针开始,到任意一个bank指针结束,所以按照固定的数据高低位拼接方法是不能完成正确的数据传输的。比如这16个解压缩模块同时工作,总共产生16*32B = 512B的数据量,其中包含两个通道,每个通道256B数据量,如果bank0产生的32B数据是通道0中的最低的32B数据,那么由高位到低位bank7至bank0正好组成一个正确的256B数据,同时bank15至bank8正好组成另一个channel的256B数据。
但是更多的情况是,由于有时存在一个channel中的数据量不足256B的情况,导致并不是所有情况下都需要16个解压缩模块全部一起工作,因此,后级处理模块需要维护一个指针,该指针用来维护此次给后级流水线的2个channel的数据中最低位的32B,是哪个解压缩模块产生。假设这16个解压缩模块的依次为解压缩模块1、解压缩模块2……解压缩模块15、解压缩模块16,比如此时该指针为15,每个通道内的数据量为64B,可以得知channel0中的数据从解压缩模块 15和解压缩模块16中产生,channel1中的数据从解压缩模块 1,和2中产生。因为后级处理模块传给后级流水线的接口为512B的数据通路,其中高256B为channel(x+1),低256B为channel(x),x为当前通道数的编号。对于这个例子,需要按高低位拼接解压缩模块2和解压缩模块1,形成64B channel (x+1)的数据,放到512B中的高256B中的最低64B的位置。同理需要按高低位拼接解压缩模块16和解压缩模块15,形成64Bchannel(x)的数据,放到512B中的低256B中的最低64B的位置。
可选地,数据解压缩电路还包括:第一存储器件和/或第二存储器件,第一存储器件包括N个存储体,每个存储体用于存储压缩权重数据。第二存储器件包括N个存储体,每个存储体用于存储对应的索引数据。
基于同样的发明构思,本申请实施例还提供了一种芯片,该芯片包括上述的数据解压缩电路。该芯片可以是一种集成电路芯片,具有信号的处理能力。上述的芯片可以是通用处理器,包括中央处理器(Central Processing Unit, CPU)、网络处理器(NetworkProcessor,NP) 微处理器等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。或者该芯片也可以是任何常规的处理器等。
芯片实施例所提供的数据解压缩电路,其实现原理及产生的技术效果和前述数据解压缩电路实施例相同,为简要描述,芯片实施例部分未提及之处,可参考前述数据解压缩电路实施例中相应内容。
基于同样的发明构思,本申请实施例还提供了一种电子设备,该电子设备包括上述的芯片。该电子设备包括但不限于智能手机、平板、电脑、服务器、工控设备、车载设备等。
电子设备实施例所提供的芯片,其实现原理及产生的技术效果和前述芯片实施例相同,为简要描述,电子设备实施例部分未提及之处,可参考前述芯片实施例中相应内容。
基于同样的发明构思,本申请实施例还提供了一种数据解压缩方法,如图8所示。下面将结合图8对其原理进行说明。
S1:获取N组压缩权重数据以及对应的N组索引数据。
例如,可以从第一存储器件的N个存储体各自获取一组压缩权重数据,得到N组压缩权重数据,一个存储体对应一组压缩权重数据。
可以从第二存储器件的N个存储体各自获取一组索引数据,得到N组索引数据,一个存储体对应一组索引数据。
S2:根据每组压缩权重数据和对应的索引数据进行解压缩操作,得到N组压缩权重数据对应的原始权重数据。
例如,可以利用N 个解压缩模块来根据每组压缩权重数据和对应的索引数据进行解压缩操作,得到N组压缩权重数据对应的原始权重数据。一个解压缩模块对应一组压缩权重数据和对应的索引数据。
采用并行的解压缩方式从而可以快速将压缩权重数据还原成原始权重数据。
该数据解压缩方法可以是利用上述的数据解压缩电路来实现,也可以是利用软件方式来实现。若是利用软件方式实现,相应地,基于同样的发明构思,本申请实施例还提供一种数据解压缩装置,包括获取模块和解压缩模块。
获取模块用于获取N组压缩权重数据以及对应的N组索引数据。解压缩模块,用于根据每组压缩权重数据和对应的索引数据进行解压缩操作,得到N组压缩权重数据对应的原始权重数据。
数据解压缩装置实施例所提供的芯片,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,数据解压缩装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
本申请实施例还提供了一种非易失性的计算机可读取存储介质(以下简称存储介质),该存储介质上存储有计算机程序,该计算机程序被计算机如上述的电子设备运行时,执行上述所示的数据解压缩方法。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个计算机可读存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,笔记本电脑,服务器,或者电子设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的计算机可读存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种数据解压缩电路,其特征在于,包括:
N个第一读取控制模块,每个所述第一读取控制模块,用于从第一存储器件的存储体中读取压缩权重数据,所述第一存储器件包括与所述N个第一读取控制模块一一对应的N个存储体,N为正整数;
第二读取控制模块,用于从第二存储器件中读取每个所述压缩权重数据对应的索引数据;
N个解压缩模块,每个所述解压缩模块与所述第二读取控制模块和一个所述第一读取控制模块连接,每个所述解压缩模块,用于根据输入自身的压缩权重数据和对应的索引数据进行解压缩操作,得到原始权重数据;
其中,每个所述解压缩模块包括蝶形网络结构,所述蝶形网络结构包括多层,每一层包括M个输入节点,每个输入节点用于接收压缩权重数据中的一个权重元素或者一个权重元素的一部分,M为正整数;
每个所述解压缩模块,用于根据所述压缩权重数据中权重元素的数据类型和对应的索引数据,得到M位的掩码信息;基于所述M位的掩码信息和预设规则计算出每一层的控制位;根据每一层的控制位去控制该层的蝶形网络结构的工作方式,得到解压缩后的原始权重数据,其中,控制位用于控制蝶形网络结构中二选一选择器,若对应的控制位为1,则不需要将选择器的输出数据交换给与其斜箭头连接的下一个节点,而是直接传输给与其直线箭头连接的下一个节点;对应的控制位为0,则需要将选择器的输出数据交换给与其斜线箭头连接的下一个节点;
其中,基于所述M位的掩码信息和预设规则计算出每一层的控制位,包括:
基于M位的掩码信息和预设的位1计数公式计算出第j位掩码信息中的位数为1的个数,j依次取1至M-1;
基于第j位掩码信息中的位数为1的个数和控制位计算公式,计算出每一层的控制位。
2.根据权利要求1所述的数据解压缩电路,其特征在于,所述数据解压缩电路还包括:
后级处理模块,与每个所述解压缩模块连接,所述后级处理模块,用于将指定的所述解压缩模块输出的原始权重数据进行排序组合,得到当前时钟周期的一笔传输数据,其中,指定的所述解压缩模块共同完成一笔传输数据的解压缩。
3.根据权利要求2所述的数据解压缩电路,其特征在于,所述数据解压缩电路还包括:
中央控制模块,分别与所述第二读取控制模块、所述后级处理模块、每个所述第一读取控制模块、每个所述解压缩模块连接;
所述中央控制模块,用于控制所述第二读取控制模块、每个所述第一读取控制模块的读取逻辑,以及调度每个所述解压缩模块的运行过程,以及控制所述后级处理模块对指定的所述解压缩模块输出的原始权重数据进行排序组合。
4.根据权利要求3所述的数据解压缩电路,其特征在于,若在压缩权重数据采用了分通道量化压缩;所述中央控制模块,还用于将每个通道对应的量化零数值,分配给正在做该通道数据解压的每个所述解压缩模块;相应地;
每个所述解压缩模块,用于根据输入自身的压缩权重数据和对应的索引数据,以及所述中央控制模块分配的量化零数值进行解压缩操作,得到原始权重数据。
5.根据权利要求1所述的数据解压缩电路,其特征在于,每个所述解压缩模块包括缓存区,所述缓存区的存储量不小于两倍所述存储体的最大读数据量,所述缓存区用于缓存先于索引数据输入的压缩权重数据。
6.根据权利要求5所述的数据解压缩电路,其特征在于,每个所述解压缩模块还包括计数器,所述计数器用于对所述缓存区中存储的权重元素个数进行计数,以及对每次解压缩所消耗的权重元素个数进行计数。
7.根据权利要求1所述数据解压缩电路,其特征在于,所述数据解压缩电路还包括:
所述第一存储器件,所述第一存储器件包括N个存储体,每个所述存储体用于存储压缩权重数据;和/或;
所述第二存储器件,包括N个存储体,每个存储体用于存储对应的索引数据。
8.一种芯片,其特征在于,包括如权利要求1-7中任一项所述的数据解压缩电路。
9.一种电子设备,其特征在于,包括如权利要求8所述的芯片。
10.一种数据解压缩方法,其特征在于,应用于如权利要求1-7任一项所述的数据解压缩电路,所述方法包括:
获取N组压缩权重数据以及对应的N组索引数据;
根据每组压缩权重数据和对应的索引数据进行解压缩操作,得到N组压缩权重数据对应的原始权重数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211250448.XA CN115333544B (zh) | 2022-10-13 | 2022-10-13 | 一种数据解压缩电路及其方法、芯片及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211250448.XA CN115333544B (zh) | 2022-10-13 | 2022-10-13 | 一种数据解压缩电路及其方法、芯片及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115333544A CN115333544A (zh) | 2022-11-11 |
CN115333544B true CN115333544B (zh) | 2023-01-31 |
Family
ID=83914101
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211250448.XA Active CN115333544B (zh) | 2022-10-13 | 2022-10-13 | 一种数据解压缩电路及其方法、芯片及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115333544B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3968524A1 (en) * | 2019-05-07 | 2022-03-16 | University of Tsukuba | Data compression and decompression methods, data compression device, and data decompression device |
CN114640354A (zh) * | 2022-03-24 | 2022-06-17 | 上海登临科技有限公司 | 数据压缩方法、装置、电子设备及计算机可读存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10608664B2 (en) * | 2018-05-09 | 2020-03-31 | Samsung Electronics Co., Ltd. | Electronic apparatus for compression and decompression of data and compression method thereof |
US11671111B2 (en) * | 2019-04-17 | 2023-06-06 | Samsung Electronics Co., Ltd. | Hardware channel-parallel data compression/decompression |
US20210209450A1 (en) * | 2020-01-03 | 2021-07-08 | International Business Machines Corporation | Compressed weight distribution in networks of neural processors |
US20220114454A1 (en) * | 2020-10-08 | 2022-04-14 | Samsung Electronics Co., Ltd. | Electronic apparatus for decompressing a compressed artificial intelligence model and control method therefor |
-
2022
- 2022-10-13 CN CN202211250448.XA patent/CN115333544B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3968524A1 (en) * | 2019-05-07 | 2022-03-16 | University of Tsukuba | Data compression and decompression methods, data compression device, and data decompression device |
CN114640354A (zh) * | 2022-03-24 | 2022-06-17 | 上海登临科技有限公司 | 数据压缩方法、装置、电子设备及计算机可读存储介质 |
Non-Patent Citations (2)
Title |
---|
Novel pipelined neural network architecture for image compression and decompression in terms of low power and optimized area;S. Murali Mohan;《2016 International Conference on Emerging Trends in Engineering, Technology and Science (ICETETS)》;20161231;1-7 * |
神经网络压缩模型的解压算法设计及其硬件实现;彭瑾;《第二十二届计算机工程与工艺年会暨第八届微处理器技术论坛论文集》;20180816;190-197 * |
Also Published As
Publication number | Publication date |
---|---|
CN115333544A (zh) | 2022-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110266316B (zh) | 一种数据压缩、解压方法、装置和设备 | |
JP3136796B2 (ja) | 可変長符号デコーダ | |
CN110784225A (zh) | 数据压缩、解压方法及相关装置、电子设备、系统 | |
JP6009676B2 (ja) | データ圧縮装置およびデータ伸張装置 | |
KR20030040567A (ko) | 허프만 디코딩을 수행하는 방법 | |
US11424761B2 (en) | Multiple symbol decoder | |
CN111008698A (zh) | 用于混合压缩循环神经网络的稀疏矩阵乘法加速器 | |
CN113630125A (zh) | 数据压缩、编码解压缩方法、装置、电子设备及存储介质 | |
Najmabadi et al. | An architecture for asymmetric numeral systems entropy decoder-a comparison with a canonical Huffman decoder | |
CN114640354A (zh) | 数据压缩方法、装置、电子设备及计算机可读存储介质 | |
CN114301468A (zh) | 一种fse编码方法、装置、设备及存储介质 | |
CN110363291B (zh) | 神经网络的运算方法、装置、计算机设备和存储介质 | |
CN113902097A (zh) | 针对稀疏化cnn神经网络模型的游程编码加速器及方法 | |
CN115333544B (zh) | 一种数据解压缩电路及其方法、芯片及电子设备 | |
CN115828044B (zh) | 基于神经网络双重稀疏性矩阵乘法运算电路、方法和装置 | |
KR101030726B1 (ko) | 확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치 | |
CN113141508A (zh) | 算术编码器及实现算术编码的方法和图像编码方法 | |
US20050071151A1 (en) | Compression-decompression mechanism | |
US6789097B2 (en) | Real-time method for bit-reversal of large size arrays | |
CN112527951B (zh) | 整数数据的存储方法、装置及存储介质 | |
CN103581675A (zh) | 视频数据的压缩/解压缩方法及系统 | |
US10491241B1 (en) | Data compression scheme utilizing a repetitive value within the data stream | |
JP7305609B2 (ja) | 受信したデータを処理する装置 | |
Mohamed | Wireless Communication Systems: Compression and Decompression Algorithms | |
US20210303975A1 (en) | Compression and decompression of weight values |
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 |