CN115952846A - Ai算法架构的实现装置、稀疏卷积运算方法及相关设备 - Google Patents
Ai算法架构的实现装置、稀疏卷积运算方法及相关设备 Download PDFInfo
- Publication number
- CN115952846A CN115952846A CN202211605350.1A CN202211605350A CN115952846A CN 115952846 A CN115952846 A CN 115952846A CN 202211605350 A CN202211605350 A CN 202211605350A CN 115952846 A CN115952846 A CN 115952846A
- Authority
- CN
- China
- Prior art keywords
- data
- mask
- weight
- bit
- sub
- 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.)
- Granted
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Complex Calculations (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请提供一种AI算法架构的实现装置、稀疏卷积运算方法及相关设备,装置包括:数据预处理单元,用于根据待运算数据的数据类型将待运算数据按位拆分为对应不同位区间的子数据;权重预处理单元,用于按照数据类型对应的复制数量对权重掩码进行复制,复制后的权重掩码的数量等于单个待运算数据拆分得到的子数据数量;卷积计算单元,包括数据选择器和卷积运算电路;数据选择器用于根据各权重掩码分别从每n个不同待运算数据的同一位区间的子数据中选出m个目标子数据;卷积运算电路用于根据权重数据对各目标子数据进行卷积运算。本申请可以将多套稀疏选择逻辑统一为了1套,可以节约大量高位宽数据选择逻辑开销,并减小面积开销。
Description
技术领域
本申请涉及数据处理技术领域,具体而言,涉及一种AI算法架构的实现装置、稀疏卷积运算方法及相关设备。
背景技术
为了降低权重内存开销,降低计算开销和提升推理效率,AI(ArtificialIntelligence,人工智能)算法中通过压缩模型(例如模型剪枝)等方法降低weight(权重)中非0参数值的数量(即增加权重中0的数量)。因此AI算法中存在大量的sparsityConvolution(稀疏卷积)运算。根据运算精度的需求,稀疏卷积运算需要支持不同类型的数据,如fp32/tf32/fp16/bf16/int8/int4等。其中稀疏卷积运算普遍采用的压缩算法为sparsity4:2压缩,即每2个weight有4bits(比特)的mask(掩码),每4bits mask指示卷积运算时从4个data(数据)中选择2个有效的data和weight进行卷积运算,使得参与运算的数据减少一半,达到降低计算开销和提升推理效率的目的。
但是,目前不同的数据类型在进行sparsity4:2数据选择时,每种数据位宽都需要单独的硬件选择逻辑:对于fp32/tf32数据类型每4bits mask对应的数据选择范围4×b32为128bits;对于bf16/bf16数据类型每4bits mask对应的数据选择范围4×b16为64bits;对于int8/uint8数据类型每4bits mask对应的数据选择范围4×b8为32bits;对于int4/uint4数据类型每4bits mask对应的数据选择范围4×b4为16bits。这就导致目前需要为不同位宽的数据类型分别配置不同的mux(数据选择器),从而会存在较大的面积开销。
发明内容
本申请实施例的目的在于提供一种AI算法架构的实现装置、稀疏卷积运算方法及相关设备,用以解决相关技术存在着的面积开销和功耗大的问题。
本申请实施例提供了一种稀疏卷积运算方法,包括:获取待运算数据、权重数据、数据类型以及权重掩码;其中,所述待运算数据为需要进行稀疏处理的数据;按照所述数据类型对应的权重掩码复制数量N,对所述权重掩码进行N次复制;按照所述待运算数据的数据类型,将所述待运算数据按位拆分为对应不同位区间的子数据;其中,复制后的权重掩码的数量等于单个所述待运算数据拆分得到的子数据数量;根据各所述权重掩码分别从每n个不同待运算数据的同一位区间的子数据中,选出m个目标子数据;所述n为大于等于2的常数,所述m为大于等于1的常数,且所述m小于所述n;根据所述权重数据对各所述目标子数据进行卷积运算。
在上述实现过程中,通过对稀疏数据进行拆分以及按照数据类型对权重掩码进行复制,从而将不同数据类型的稀疏数据选择操作统一为从同一尺寸大小的子数据中选择出所需的目标子数据的稀疏选择操作,避免了需要为不同位宽的数据类型分别配置不同的mux以实现不同数据类型的稀疏选择操作的问题,将多套稀疏选择逻辑统一为了1套,可以节约大量高位宽数据选择逻辑开销,并减小面积开销。
进一步地,获取所述待运算数据包括:获取待运算的dense(密集)数据;按照预设稀疏方式,对所述dense数据进行稀疏,得到所述待运算数据;获取所述权重掩码包括:按照预设生成方式生成所述权重掩码;其中,所述权重掩码中数值1所在的位置对应所述待运算数据中所述dense数据的位置。
在上述实现过程中,通过采用统一的稀疏方式和生成方式,可以将denseconvolution(非稀疏卷积)运算统一成sparsity convolution运算,从而可以保证后续运算是针对稀疏数据进行的运算,从而给可以在进行AI算法的硬件设计时,无需在后续的每一个卷积计算单元(用于进行卷积运算的硬件单元)中再设计判断是否为稀疏数据的电路,可以简化卷积计算中数据选择单元的设计,节约面积开销,节约对dense数据和sparsity数据(即稀疏数据)的数据选择逻辑开销,提高AI算法的运算效率。
进一步地,按照预设第一排序方式对待运算数据拆分得到的各所述子数据进行排序;按照预设第二排序方式对各所述权重数据进行排序;其中,在排序后的各所述权重数据与排序后的各所述子数据中相同排序位置处的权重数据和子数据具有正确对应关系。
在上述实现过程中,通过对拆分得到的子数据进行排序,以及对各权重数据进行排序,使得排序后的各所述权重数据与排序后的各所述子数据中,相同排序位置处的权重数据和子数据具有正确对应关系,从而保证卷积运算的正确性。
进一步地,所述按照预设第一排序方式对拆分得到的各所述待运算数据的子数据进行排序,包括:将各所述子数据按照位区间由大到小的顺序进行排序,且具有相同位区间的各所述子数据,按照各所述子数据所属的待运算数据之间的排列顺序进行排序。
在上述实现过程中,通过将相同位区间的各子数据排序在一起,从而可以很方便的从相同位区间的各子数据选出该位区间对应的目标子数据。同时,由于各子数据是按照位区间由大到小的顺序进行排序的,因此选出各目标子数据后,各目标子数据也是按照位区间由大到小的顺序进行排序的,从而可以保证卷积运算的数据准确,从而保证卷积运算的准确性。
进一步地,在选出所述目标子数据后,所述方法还包括:将选出的各所述目标子数据按位区间重排序为目标数据;所述目标数据为所支持的最大位宽数据类型的数据;根据所述权重数据对各所述目标子数据进行卷积运算,包括:采用各所述目标子数据对应的权重数据对各所述目标数据的各所述目标子数据进行卷积运算。
在上述实现过程中,通过将选出的各目标子数据按位区间排列成目标类型的目标数据后才进行卷积运算,而目标类型为支持的最大位宽数据类型,这就使得每一次进行卷积运算时,都是针对目标类型的数据进行运算,从而无需为不同数据类型分别配置对应的卷积运算数据选择电路,从而可以节约面积开销,提高AI算法的运算效率。
进一步地,按照预设第二排序方式对各所述权重数据进行排序,包括:将各所述权重数据按照所对应的目标子数据的排序顺序进行排序。
在上述实现过程中,可以保证相同排序位置处的权重数据和目标子数据具有正确对应关系,从而保证卷积运算的正确性。同时,考虑到在AI运算过程中,一组权重数据可能会持续被多组待运算数据使用,也即在AI运算过程中,待运算数据的变化频率会高于权重数据的变化频率,因此在上述方式中,通过对权重数据进行排序,就可以减少后续对待运算数据的排序处理开销。
进一步地,所述权重掩码为4bit的掩码,所述子数据为4bit的数据,所述n为4,所述m为2;根据各所述权重掩码分别从每n个不同待运算数据的同一位区间的子数据中,选出m个目标子数据,包括:将所述每个4bits权重掩码转换为一个3bit的第一权重掩码mask_l和一个3bit的第二权重掩码mask_h;其中:mask_l和mask_h中均最多有1个bit的数值为1;根据所述mask_l和mask_h从4个不同待运算数据的同一位区间的子数据中,选出2个目标子数据。
在上述实现过程中,通过将spasity4:2对应的4bits的权重掩码译码成2个3bits的权重掩码,且使得每个3bits的权重掩码中仅有一个bit的数值为1,这就可以将spasity4:2的数据选择逻辑优化成两个基于3bits的权重掩码进行数据选择的逻辑,从而可以简化数据选择逻辑,提高数据选择效率。
进一步地,所述mask_l为:{mask[2]&(mask[1:0]==0),mask[1]&!mask[0],mask[0]};所述mask_h为:{mask[3],mask[2]&!mask[3],mask[1]&(mask[3:2]==0)};其中,mask[3]、mask[2]、mask[1]、mask[0]、mask[1:0]、mask[3:2]分别表征4bit的所述权重掩码的第3位数据、第2位数据、第1位数据、第0位数据、第1位和第0位构成的2bit数据、第3位和第2位数据构成的2bit数据,&表征与运算,&!表征与非运算,==表征判断两端的值是否相等,相等则值为1,不相等则值为0。
在上述实现过程中,通过上述方式得到的mask_l和mask_h可以保证仅具有最多一个bit的值为1,从而保证数据选择效果。
进一步地,根据所述mask_l和mask_h从4个不同待运算数据的同一位区间的子数据中,选出2个目标子数据,包括:将所述mask_l的第0位数据与第一个子数据进行与运算,将所述mask_l的第1位数据与第二个子数据进行与运算,将所述mask_l的第2位数据与第三个子数据进行与运算,将三次与运算的值进行或运算,得到第一个所述目标子数据;将所述mask_h的第0位数据与第二个子数据进行与运算,将所述mask_l的第1位数据与第三个子数据进行与运算,将所述mask_l的第2位数据与第四个子数据进行与运算,将三次与运算的值进行或运算,得到第二个所述目标子数据。
在上述实现过程中,通过mask_l和mask_h的每一位数据分别与不同子数据进行与运算,然后进行或运算,这样,由于mask_l和mask_h中仅有一位数据为1,因此运算后得到的值必然为0或者为某一个子数据,从而实现对于目标子数据有效筛选。
本申请实施例还提供了一种AI算法架构的实现装置,包括:数据预处理单元,用于根据待运算数据的数据类型,将所述待运算数据按位拆分为对应不同位区间的子数据;权重预处理单元,用于按照所述数据类型对应的复制数量,对权重掩码进行复制;其中,复制后的权重掩码的数量等于单个所述待运算数据拆分得到的子数据数量;卷积计算单元,包括数据选择器和卷积运算电路;所述数据选择器用于根据各所述权重掩码分别从每n个不同待运算数据的同一位区间的子数据中,选出m个目标子数据;所述n为大于等于2的常数,所述m为大于等于1的常数,且所述m小于所述n;所述卷积运算电路用于根据权重数据对各所述目标子数据进行卷积运算。
在上述实现方式中,AI算法架构的实现装置可以将不同数据类型的稀疏数据选择操作统一为从同一尺寸大小的子数据中选择出所需的目标子数据的稀疏选择操作,避免了需要为不同位宽的数据类型分别配置不同的mux以实现不同数据类型的稀疏选择操作的问题,将多套稀疏选择逻辑统一为了1套,可以节约大量高位宽数据选择逻辑开销,并减小面积开销。
进一步地,所述AI算法架构的实现装置还包括:存储单元,用于存储待运算的密集dense数据;访存控制单元,用于从所述存储单元获取所述dense数据和所述数据类型;所述数据预处理单元,还用于按照预设稀疏方式,对所述dense数据进行稀疏,得到所述待运算数据;所述权重预处理单元,还用于按照预设生成方式生成所述权重掩码;其中,所述权重掩码中数值1所在的位置对应所述待运算数据中所述dense数据的位置。
进一步地,所述数据预处理单元,还用于按照预设第一排序方式对待运算数据拆分得到的各所述子数据进行排序;所述权重预处理单元,还用于按照预设第二排序方式对各所述权重数据进行排序;其中,在排序后的各所述权重数据与排序后的各所述子数据中,相同排序位置处的权重数据和子数据具有正确对应关系。
进一步地,所述数据预处理单元具体用于,将各所述子数据按照位区间由大到小的顺序进行排序,且具有相同位区间的各所述子数据,按照各所述子数据所属的待运算数据之间的排列顺序进行排序。
进一步地,所述数据选择器输出目标数据;所述目标数据为各所述目标子数据按位区间排列成的数据,所述目标数据为所述AI算法架构的实现装置所支持的最大位宽数据类型的数据。
进一步地,所述权重预处理单元具体用于,将各所述权重数据按照所对应的目标子数据的排序顺序进行排序。
进一步地,所述权重掩码为4bit的掩码,所述子数据为4bit的数据,所述n为4,所述m为2;所述权重预处理单元具体用于,将所述权重掩码转换为3bit的第一权重掩码mask_l和3bit的第二权重掩码mask_h;其中:mask_l和mask_h中均仅有最多1个bits的数值为1;所述数据选择器具体用于根据所述mask_l和mask_h从4个不同待运算数据的同一位区间的子数据中,选出2个目标子数据。
这样,通过在进入各计算单元之前将4bit的权重掩码转换为3bit的第一权重掩码mask_l和3bit的第二权重掩码mask_h,从而可以将spasity4:2的数据选择逻辑优化成两个基于3bits的权重掩码进行数据选择的逻辑,从而可以简化数据选择逻辑,提高数据选择效率,提高AI算法架构的实现装置的功耗表现。
进一步地,所述mask_l为:{mask[2]&(mask[1:0]==0),mask[1]&!mask[0],mask[0]};所述mask_h为:{mask[3],mask[2]&!mask[3],mask[1]&(mask[3:2]==0)};其中,mask[3]、mask[2]、mask[1]、mask[0]、mask[1:0]、mask[3:2]分别表征4bit的所述权重掩码的第3位数据、第2位数据、第1位数据、第0位数据、第1位和第0位构成的2bit数据、第3位和第2位数据构成的2bit数据,&表征与运算,&!表征与非运算,==表征判断两端的值是否相等,相等则值为1,不相等则值为0。
进一步地,所述数据选择器具体用于
将所述mask_l的第0位数据与第一个子数据进行与运算,将所述mask_l的第1位数据与第二个子数据进行与运算,将所述mask_l的第2位数据与第三个子数据进行与运算,将三次与运算的值进行或运算,得到第一个所述目标子数据;
将所述mask_h的第0位数据与第二个子数据进行与运算,将所述mask_l的第1位数据与第三个子数据进行与运算,将所述mask_l的第2位数据与第四个子数据进行与运算,将三次与运算的值进行或运算,得到第二个所述目标子数据。
进一步地,所述权重掩码为4bit的掩码,所述子数据为4bit的数据,所述n为4,所述m为2;
所述卷积计算单元,还包括:权重传输子单元,用于接收所述权重数据和所述权重掩码,并在所述权重数据与所述卷积计算单元不匹配时,将所述权重数据传输给所连接的另一卷积计算单元的权重传输子单元,在所述权重数据与所述卷积计算单元匹配时,存储所述权重数据,并将所述权重数据设置为有效;掩码转换单元,与所述权重传输子单元连接,用于在所述权重传输子单元中的权重数据有效时,将所述权重掩码转换为一个3bit的第一权重掩码mask_l和一个3bit的第二权重掩码mask_h,其中:mask_l和mask_h中均最多有1个bits的数值为1;权重执行子单元,用于在所述权重传输子单元中的权重数据有效,且所述权重执行子单元中的权重数据需要被替换或者为无效时,加载所述权重传输子单元中存储的权重数据以及所述掩码转换单元传输的所述mask_l和mask_h;所述数据选择器,具体用于根据每个所述mask_l和mask_h从每n个不同待运算数据的同一位区间的子数据中,选出m个目标子数据,发送到所述卷积运算电路中进行卷积运算。
这样,通过在计算单元中将4bit的权重掩码转换为3bit的第一权重掩码mask_l和3bit的第二权重掩码mask_h,从而一方面可以无需增大权重传输子单元的面积,提高AI算法架构的实现装置的面积表现;另一方面可以将spasity4:2的数据选择逻辑优化成两个基于3bits的权重掩码进行数据选择的逻辑,从而可以简化数据选择逻辑,提高数据选择效率,提高AI算法架构的实现装置的功耗表现。
进一步地,所述mask_l为:{mask[2]&(mask[1:0]==0),mask[1]&!mask[0],mask[0]};所述mask_h为:{mask[3],mask[2]&!mask[3],mask[1]&(mask[3:2]==0)};其中,mask[3]、mask[2]、mask[1]、mask[0]、mask[1:0]、mask[3:2]分别表征4bit的所述权重掩码的第3位数据、第2位数据、第1位数据、第0位数据、第1位和第0位构成的2bit数据、第3位和第2位数据构成的2bit数据,&表征与运算,&!表征与非运算,==表征判断两端的值是否相等,相等则值为1,不相等则值为0。
进一步地,所述数据选择器具体用于:接收所述权重执行子子单元中的所述mask_h和mask_l,将所述mask_l的第0位数据与第一个子数据进行与运算,将所述mask_l的第1位数据与第二个子数据进行与运算,将所述mask_l的第2位数据与第三个子数据进行与运算,将三次与运算的值进行或运算,得到第一个所述目标子数据;将所述mask_h的第0位数据与第二个子数据进行与运算,将所述mask_l的第1位数据与第三个子数据进行与运算,将所述mask_l的第2位数据与第四个子数据进行与运算,将三次与运算的值进行或运算,得到第二个所述目标子数据。
本申请实施例还提供了一种处理器,包括前文所述的AI算法架构的实现装置。
本申请实施例还提供了一种电子部件,包括前文所述的处理器。
本申请实施例中还提供了一种电子设备,包括前文所述的处理器,或包括前文所述的电子部件。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种稀疏卷积运算方法的流程示意图;
图2为本申请实施例提供的一种AI算法架构的实现装置的基本结构示意图;
图3为本申请实施例提供的一种更具体的AI算法架构的实现装置的结构示意图;
图4为本申请实施例提供的一种具体的卷积计算单元的结构示意图;
图5为本申请实施例提供的一种示例性的AI算法架构的实现装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
实施例一:
为了解决因不同的数据类型在进行sparsity4:2数据选择时,每种数据位宽都需要单独的硬件选择逻辑,从而需要为不同位宽的数据类型分别配置不同的数据选择器造成较大的面积开销问题,本申请实施例中提供了一种稀疏卷积运算方法。可以参见图1所示,图1为本申请实施例中提供的稀疏卷积运算方法的流程示意图,包括:
S101:获取待运算数据、权重数据、数据类型以及权重掩码。
需要说明的是,本申请实施例中所述的待运算数据应当为稀疏数据。在本申请实施例中,权重数据和待运算数据为芯片使用过程中需要参与卷积运算的权重和数据。待运算数据可以为对图像、音频、通信数据、频谱信息等转换为二进制数后得到的数据。本申请实施例可应用于AI训练、金融、高精度计算、智能驾驶、安防、通信、频谱测量、智能推理等领域中的一个或多个领域。
在本申请实施例中,可以预先在存储单元(例如可以是SPM(ScratchPadMemory,记事本存储器)等)中存储有待运算的数据。
在本申请实施例的一种可选实施方式中,存储单元中存储的待运算的数据可以是稀疏数据,此时权重掩码可以一并在存储单元中被预先存储,以和对应的稀疏数据相关联。本方式中,可以直接从存储单元中获取待运算数据和对应的权重掩码。
而在本申请实施例的另一种可选实施方式中,存储单元中存储的待运算的数据可以是dense数据。此时在获取待运算的密集dense数据后,需要按照预设稀疏方式,对dense数据进行稀疏得到待运算数据。并且,需要按照预设生成方式生成权重掩码。其中,权重掩码中数值中1所在的位置对应待运算数据中dense数据的位置。
在本申请实施例中,dense数据的稀疏方法可以为,根据数据类型在每2个dense数据中插入2个相同数据类型宽度的0,将dense数据扩展成2倍宽度的稀疏数据。具体的稀疏方式可以采用以下六种方式的任意一种,且每一种稀疏方式对应有一种权重掩码的生成方式:
方式一:根据数据类型在每2个dense数据前插入2个相同数据类型宽度的0,将dense数据扩展成2倍宽度的稀疏数据。对应的生成方式生成的权重掩码为{0011}。
方式二:根据数据类型在每个dense数据前分别插入1个相同数据类型宽度的0,将dense数据扩展成2倍宽度的稀疏数据。对应的生成方式生成的权重掩码为{0101}。
方式三:根据数据类型在每2个dense数据中间插入2个相同数据类型宽度的0,将dense数据扩展成2倍宽度的稀疏数据。对应的生成方式生成的权重掩码为{1001}。
方式四:根据数据类型在每2个dense数据前后分别插入1个相同数据类型宽度的0,将dense数据扩展成2倍宽度的稀疏数据。对应的生成方式生成的权重掩码为{0110}。
方式五:根据数据类型在每个dense数据后分别插入1个相同数据类型宽度的0,将dense数据扩展成2倍宽度的稀疏数据。对应的生成方式生成的权重掩码为{1010}。
方式六:根据数据类型在每2个dense数据后插入2个相同数据类型宽度的0,将dense数据扩展成2倍宽度的稀疏数据。对应的生成方式生成的权重掩码为{1100}。
示例性的:
对于int4/uint4类型的dense数据in_data[7:0],可以采用以下任一种方式生成待运算数据Data[15:0]以及权重掩码mask:
方式一:Data[15:0]={4’b0,4’b0,in_data[7:4],in_data[3:0]},对应的4bitsmask={0011}。
方式二:Data[15:0]={4’b0,in_data[7:4],4’b0,in_data[3:0]},对应的4bitsmask={0101}。
方式三:Data[15:0]={in_data[7:4],4’b0,4’b0,in_data[3:0]},对应的4bitsmask={1001}。
方式四:Data[15:0]={4’b0,in_data[7:4],in_data[3:0],4’b0},对应的4bitsmask={0110}。
方式五:Data[15:0]={in_data[7:4],4’b0,in_data[3:0],4’b0},对应的4bitsmask={1010}。
方式六:Data[15:0]={in_data[7:4],in_data[3:0],4’b0,4’b0},对应的4bitsmask={1100}。
需要说明的是:[]内表征的是数据的位区间,以[15:0]为例,表征的是数据的第0至15位;Data表征的是生成的待运算数据,in_data表征的是获取到的dense数据,4’b表征的是数据大小为4bits,也即4’b0是指插入4bits的0值。后文的定义是一致的,后续不再重复说明。
对于int8/uint8类型的dense数据in_data[15:0],可以采用以下任一种方式生成待运算数据Data[31:0]以及权重掩码mask:
方式一:Data[31:0]={8’b0,8’b0,in_data[15:8],in_data[7:0]},对应的4bitsmask={0011}。
方式二:Data[31:0]={8’b0,in_data[15:8],8’b0,in_data[7:0]},对应的4bitsmask={0101}。
方式三:Data[31:0]={in_data[15:8],8’b0,8’b0,in_data[7:0]},对应的4bitsmask={1001}。
方式四:Data[31:0]={8’b0,in_data[15:8],in_data[7:0],8’b0},对应的4bitsmask={0110}。
方式五:Data[31:0]={in_data[15:8],8’b0,in_data[7:0],8’b0},对应的4bitsmask={1010}。
方式六:Data[31:0]={in_data[15:8],in_data[7:0],8’b0,8’b0},对应的4bitsmask={1100}。
对于Fp16/bf16类型的dense数据in_data[31:0],可以采用以下任一种方式生成待运算数据Data[63:0]以及权重掩码mask:
方式一:Data[63:0]={16’b0,16’b0,in_data[31:16],in_data[15:0]},对应的4bits mask={0011};
方式二:Data[63:0]={16’b0,in_data[31:16],16’b0,in_data[15:0]},对应的4bits mask={0101};
方式三:Data[63:0]={in_data[31:16],16’b0,16’b0,in_data[15:0]},对应的4bits mask={1001};
方式四:Data[63:0]={16’b0,in_data[31:16],in_data[15:0],16’b0},对应的4bits mask={0110};
方式五:Data[63:0]={in_data[31:16],16’b0,in_data[15:0],16’b0},对应的4bits mask={1010};
方式六:Data[63:0]={in_data[31:16],in_data[15:0],16’b0,16’b0},对应的4bits mask={1100}。
对于fp32/tf32类型的dense数据in_data[63:0],可以采用以下任一种方式生成待运算数据Data[127:0]以及权重掩码mask:
方式一:Data[127:0]={32’b0,32’b0,in_data[63:32],in_data[31:0]},对应的4bits mask={0011};
方式二:Data[127:0]={32’b0,in_data[63:32],32’b0,in_data[31:0]},对应的4bits mask={0101};
方式三:Data[127:0]={in_data[63:32],32’b0,32’b0,in_data[31:0]},对应的4bits mask={1001};
方式四:Data[127:0]={32’b0,in_data[63:32],in_data[31:0],32’b0},对应的4bits mask={0110};
方式五:Data[127:0]={in_data[63:32],32’b0,in_data[31:0],32’b0},对应的4bits mask={1010};
方式六:Data[127:0]={in_data[63:32],in_data[31:0],32’b0,32’b0},对应的4bits mask={1100}。
通过上述方式,可以将dense数据转换为稀疏数据,从而将dense convolution(非稀疏卷积)运算统一成sparsity convolution运算,可以保证后续运算是针对稀疏数据进行的运算,无需在后续的每一个卷积计算单元(用于进行卷积运算的硬件单元)中再设计判断是否为稀疏数据的电路,节约对dense数据和稀疏数据的数据选择逻辑开销,简化了卷积计算单元的设计,节约面积开销。
S102:按照数据类型对应的复制数量,对权重掩码进行复制。
S103:按照待运算数据的数据类型,将待运算数据按位拆分为对应不同位区间的子数据。
需要说明的是,步骤S102和S103之间并不具有时序限制。步骤S10和S103的掩码复制和待运算数据拆分都是由数据类型决定。
还需要说明的是,在本申请实施例中,待运算数据可以是由电路在获取到的大位宽的原始数据基础上,按位拆分得到的多个所需的数据类型的待运算数据。例如,假设电路获取到的是512bit的数据,所需的数据类型为fp32/tf32类型,则可以将512bit的数据拆分成16个32bit的fp32/tf32数据。应理解,原始数据的尺寸由进行卷积运算的卷积计算单元决定。
在本申请实施例中,在得到待运算数据后,可以按照设计的子数据的位宽大小和待运算数据的数据类型对待运算数据进行按位拆分。
示例性的,
若待运算数据为int4/unit4类型的稀疏数据,则由于每个int4/unit4类型的数据只有4bits大小,因此不进行拆分。
若待运算数据为int8/unit8类型的稀疏数据,则将每个4×8bits的待运算数据{data3,data2,data1,data0}拆分为8个4bits的子数据(需要说明的是,data表征待运算数据,4×8bits是指有4个待运算数据data3、data2、data1、data0,每个待运算数据为8bits),每个4×8bits的待运算数据拆分后的子数据如下:
{data3[7:4],data2[7:4],data1[7:4],data0[7:4],data3[3:0],data2[3:0],data1[3:0],data0[3:0]};拆分的4×8bits待运算数据的数目由电路中实现数据传输的单元的带宽决定。
若待运算数据为fp16/bf16类型的稀疏数据,将每个4×16bits的{data3,data2,data1,data0}拆分为:
{data3[15:12],data2[15:12],data1[15:12],data0[15:12],data3[11:8],data2[11,8],data1[11:8],data0[11:8],data3[7:4],data2[7:4],data1[7:4],data0[7:4],data3[3:0],data2[3:0],data1[3:0],data0[3:0]}。拆分的4x16bits待运算数据的数目由电路中实现数据传输的单元的带宽决定。
若待运算数据为fp32/tf32类型的稀疏数据,将每个4×32bits的{data3,data2,data1,data0}拆分为:
{data3[31:28],data2[31:28],data1[31:28],data0[31:28],data3[27:24],data2[27:24],data1[27:24],data0[27:24],data3[23:20],data2[23:20],data1[23:20],data0[23:20],data3[19:16],data2[19:16],data1[19:16],data0[19:16],data3[15:12],data2[15:12],data1[15:12],data0[15:12],data3[11:8],data2[11,8],data1[11:8],data0[11:8],data3[7:4],data2[7:4],data1[7:4],data0[7:4],data3[3:0],data2[3:0],data1[3:0],data0[3:0]}。拆分的4x32bits待运算数据的数目由电路中实现数据传输的单元的带宽决定。
这样拆分之后,一个4bits大小的权重掩码即可从4个相同位区间的子数据中,选取出两个目标子数据,对于不同数据类型的稀疏数据,都可以进行依据同一方式进行sparsity4:2数据选择。
需要注意的是,在本申请实施例中,复制后的权重掩码的数量应当等于单个待运算数据拆分得到的子数据数量,从而保证可以对每一个位区间都进行数据选择。需要说明的是,拆分的子数据位宽由支持的最小位宽数据类型决定。本申请中支持的最小位宽数据类型为int4和uint4,为4bits位宽数据类型,但这只是本申请设计的稀疏卷积运算方法中的一种情况,不作为对本申请的限制。
示例性的,以进行sparsity4:2数据选择操作的情况为例:
对于int4/uint4数据类型的待运算数据,每个4×int4/4×uint4的待运算数据对应有4bits权重掩码,int4/uint4数据类型的待运算数据不进行拆分,也不进行权重掩码复制。
对于int8/uint8数据类型,一个待运算数据有8bits,可以拆分成两个4bits的子数据,根据数据类型对权重掩码进行1次复制,将权重掩码复制成{mask1,mask0}。应理解,本文中mask表征权重掩码。
对于fp16/bf16数据类型,一个待运算数据有16bits,可以拆分成4个4bits的子数据,根据数据类型对权重掩码进行3次复制,将权重掩码复制成{mask3,mask2,mask1,mask0}。
对于fp32/tf32数据类型,一个待运算数据有32bits,可以拆分成8个4bits的子数据,根据数据类型对权重掩码进行8次复制,将权重掩码复制成{mask7,mask6,mask5,mask4,mask3,mask2,mask1,mask0}。
S104:根据各权重掩码分别从每n个不同待运算数据的同一位区间的子数据中,选出m个目标子数据。
应理解,在本申请实施例中,n和m均为常数,n为大于等于2的常数,m为大于等于1的常数,且m小于n。n和m的具体取值由所采用的压缩算法决定。以采用sparsity4:2算法为例,sparsity4:2实现的是从4个数据中选出两个数据,那么n即为4,m即为2。若采用的是其他压缩算法,则n和m的值也随之不同。
在本申请实施例中,可以通过数据选择器实现步骤S104。
在实际应用过程中,每一个权重掩码,可以从对应相同位区间的n个子数据中选出m个目标子数据。
仍以sparsity4:2算法为例:
根据每一个权重掩码,即可以从对应相同位区间的4个子数据中选择出两个目标子数据。
例如,以fp32/tf32类型的待运算数据为例,如前文所述,可以得到复制后的权重掩码集合:{mask7,mask6,mask5,mask4,mask3,mask2,mask1,mask0}。
可以得到对4个待运算数据拆分后的子数据:
{data3[31:28],data2[31:28],data1[31:28],data0[31:28],data3[27:24],data2[27:24],data1[27:24],data0[27:24],data3[23:20],data2[23:20],data1[23:20],data0[23:20],data3[19:16],data2[19:16],data1[19:16],data0[19:16],data3[15:12],data2[15:12],data1[15:12],data0[15:12],data3[11:8],data2[11,8],data1[11:8],data0[11:8],data3[7:4],data2[7:4],data1[7:4],data0[7:4],data3[3:0],data2[3:0],data1[3:0],data0[3:0]}。
此时,可以根据mask7可以从{data3[31:28],data2[31:28],data1[31:28],data0[31:28]}中选择出两个目标子数据,根据mask6可以从{data3[27:24],data2[27:24],data1[27:24],data0[27:24]}中选择出两个待运算数据,根据mask5可以从{data3[23:20],data2[23:20],data1[23:20],data0[23:20]}中选择出两个目标子数据,根据mask4可以从{data3[19:16],data2[19:16],data1[19:16],data0[19:16]}中选择出两个目标子数据,根据mask3可以从{data3[15:12],data2[15:12],data1[15:12],data0[15:12]}中选择出两个目标子数据,根据mask2可以从{data3[11:8],data2[11,8],data1[11:8],data0[11:8]}中选择出两个目标子数据,根据mask1可以从{data3[7:4],data2[7:4],data1[7:4],data0[7:4]}中选择出两个目标子数据,根据mask0可以从{data3[3:0],data2[3:0],data1[3:0],data0[3:0]}中选择出两个目标子数据。
S105:根据权重数据对各目标子数据进行卷积运算。
在本申请实施例中,为了便于进行数据筛选,在本申请实施例中,可以按照预设第一排序方式对拆分得到的各所述子数据进行排序,排序方式包括:
将各子数据按照位区间由大到小的顺序进行排序,且具有相同位区间的各子数据,按照各子数据所属的待运算数据之间的排列顺序进行排序。
也即,可以按照前文所示例的排序方式进行排序。也即,对于4n个待运算数据data(4n-1)、data(4n-2)、…、data1、data0而言,排序方式即为:
data(4n-1)[4m-1:4m-4],…,data1[4m-1:4m-4],data0[4m-1:4m-4],
data(4n-1)[4m-5:4m-8],…,data1[4m-5:4m-8],data0[4m-5:4m-8],
…,
data(4n-1)[3:0],…,data1[3:0],data0[3:0]。
其中,n为大于等于1的整数,4m-1为待运算数据的最高位,[4m-1:4m-4]、[4m-5:4m-8]、[3:0]等通过中括号表达的为位区间,[4m-1:4m-4]表征待运算数据中的第4m-4至4m-1位,[4m-5:4m-8]表征待运算数据中的第4m-8至4m-5位,[3:0]表征待运算数据中的第0至3位。
在本申请实施例中,在从排序后的各子数据中选择出目标子数据后,可以将选出的各目标子数据按位区间排列成目标数据,从而采用各目标子数据对应的权重数据对各目标数据的各目标子数据进行卷积运算。
需要说明的是,本申请实施例中所述的目标数据为AI算法支持的最大位宽的数据类型的数据。以前文示例的几种数据类型为例,那么目标类型即为fp32/tf32。
示例性的,假设目标数据类型为fp32/tf32,则一个目标数据有32bit,需要8个目标子数据组成。若采用的压缩算法为sparsity4:2算法,则会得到两个目标数据,则需要对16个目标子数据组合为两个目标数据后,才进行卷积运算。
那么,假设目标数据类型为fp32/tf32,对于fp32/tf32类型的待运算数据而言,进行卷积运算前会根据选择出的目标子数据得到两个32bits的b32_data1和b32_data0(由于b32_data1和b32_data0刚好符合fp32/tf32类型,因此b32_data1和b32_data0为两个目标数据):
b32_data1={b4[15],b4[13],b4[11],b4[9],b4[7],b4[5],b4[3],b4[1]},
b32_data0={b4[14],b4[12],b4[10],b4[8],b4[6],b4[4],b4[2],b4[0]}。
其中:b4[15]和b[14]为data3[31:28],data2[31:28],data1[31:28],data0[31:28]中选择出的两个目标子数据;b[13]和b[12]为从data3[27:24],data2[27:24],data1[27:24],data0[27:24]中选择出的两个目标子数据;b[11]和b[10]为从data3[23:20],data2[23:20],data1[23:20],data0[23:20]中选择出的两个目标子数据;b[9]和b[8]为从data3[19:16],data2[19:16],data1[19:16],data0[19:16]中选择出的两个目标子数据;b[7]和b[6]为从data3[15:12],data2[15:12],data1[15:12],data0[15:12]中选择出的两个目标子数据;b[5]和b[4]为从data3[11:8],data2[11,8],data1[11:8],data0[11:8]中选择出的两个目标子数据;b[3]和b[2]为从data3[7:4],data2[7:4],data1[7:4],data0[7:4]中选择出的两个目标子数据;b[1]和b[0]为从data3[3:0],data2[3:0],data1[3:0],data0[3:0]中选择出的两个目标子数据。(后文b[x]的含义与这里相同,后续不再重复定义说明)
对于fp16/bf16类型的待运算数据而言,进行卷积运算前会根据选择出的目标子数据得到4个16bits的数据:b16_data3,b16_data1,b16_data2,b16_data0。排列后可以得到两个目标数据分别为:
{b16_data3,b16_data1}={b4[15],b4[13],b4[11],b4[9],b4[7],b4[5],b4[3],b4[1]},
{b16_data2,b16_data0}={b4[14],b4[12],b4[10],b4[8],b4[6],b4[4],b4[2],b4[0]}。
对于int8/uint8类型的待运算数据而言,进行卷积运算前会根据选择出的目标子数据得到8个8bits的数据:{b8_data7,b8_data5,b8_data3,b8_data1,b8_data6,b8_data4,b8_data2,b8_data0}。排列后可以得到两个目标数据分别为:
{b8_data7,b8_data5,b8_data3,b8_data1}={b4[15],b4[13],b4[11],b4[9],b4[7],b4[5],b4[3],b4[1]},
{b8_data6,b8_data4,b8_data2,b8_data0}={b4[14],b4[12],b4[10],b4[8],b4[6],b4[4],b4[2],b4[0]}。
对于int4/uint4类型的待运算数据而言,进行卷积运算前会根据选择出的目标子数据得到16个4bits的数据:b4_data15,b4_data13,b4_data11,b4_data9,b4_data7,b4_data5,b4_data3,b4_data1,b4_data14,b4_data12,b4_data10,b4_data8,b4_data6,b4_data4,b4_data2,b4_data0。排列后可以得到两个目标数据分别为:
{b4_data15,b4_data13,b4_data11,b4_data9,b4_data7,b4_data5,b4_data3,b4_data1}={b4[15],b4[13],b4[11],b4[9],b4[7],b4[5],b4[3],b4[1]},
{b4_data14,b4_data12,b4_data10,b4_data8,b4_data6,b4_data4,b4_data2,b4_data0}={b4[14],b4[12],b4[10],b4[8],b4[6],b4[4],b4[2],b4[0]}。
需要说明的是,上述b4[15]至b4[0]是指选择出的大小为4bits的目标子数据。
这样,通过将选出的各目标子数据排列成支持的最大数据类型的目标数据后才进行卷积运算,就使得每一次进行卷积运算时,都是针对目标类型的数据进行运算,从而无需为不同数据类型分别配置对应的卷积运算电路,从而可以节约面积开销,提高AI算法的运算效率。
需要说明的是,在采用sparsity4:2算法进行数据选择时(也即权重掩码为4bit的掩码,子数据为4bit的数据,n为4,m为2时),常规的方式是基于4bit的权重掩码,按照下述逻辑从4个子数据(data3、data2、data1、data0)中选择出两个目标子数据data_1和data_h:
data_1=mask[0]?data0:
mask[1:0]==2?data1:
mask[2:0]==4?data2:0;
data_h=mask[3]?data3:
mask[3:2]==1?data2:
mask[3:1]==1?data1:0。
其中,mask为4bits的权重掩码。data_1的选择逻辑为:先判断mask[0]是否为真,若为真,则data_1取data0,若不为真,判断mask[1:0]是否等于2,若等于,data_1取data1,若不等于,则判断mask[2:0]是否等于4,若等于,data_1取data2,若不等于,则data_1取0。data_h的选择逻辑为:先判断mask[3]是否为真,若为真,则data_h取data3,若不为真,判断mask[3:2]是否等于1,若等于,data_h取data2,若不等于,则判断mask[3:1]是否等于1,若等于,data_h取data1,若不等于,则data_h取0。
从上述逻辑中可以看出,常规方式需要依次进行多次“==”判断,逻辑较为复杂,运算开销较大。
为此,在本申请实施例中,可以将权重掩码转换为3bit的第一权重掩码mask_l和3bit的第二权重掩码mask_h,并使得mask_l和mask_h中均仅有1个bit的数值为1。然后根据mask_l和mask_h从4个不同待运算数据的同一位区间的子数据中,选出2个目标子数据。
示例性的,为了保证mask_l和mask_h中均仅有1个bit的数值为1,mask_l可以为:{mask[2]&(mask[1:0]==0),mask[1]&!mask[0],mask[0]};mask_h可以为:{mask[3],mask[2]&!mask[3],mask[1]&(mask[3:2]==0)}。其中,mask[3]、mask[2]、mask[1]、mask[0]、mask[1:0]、mask[3:2]分别表征4bit的权重掩码的第3位数据、第2位数据、第1位数据、第0位数据、第1位和第0位构成的2bit数据、第3位和第2位数据构成的2bit数据,&!表征与非运算。
进行选择时,可以将mask_l的第0位数据与第一个子数据进行与运算,将mask_l的第1位数据与第二个子数据进行与运算,将mask_l的第2位数据与第三个子数据进行与运算,将三次与运算的值进行或运算,得到第一个目标子数据;将mask_h的第0位数据与第二个子数据进行与运算,将mask_l的第1位数据与第三个子数据进行与运算,将mask_l的第2位数据与第四个子数据进行与运算,将三次与运算的值进行或运算,得到第二个目标子数据。
示例性的,选取逻辑可以通过如下公式体现(data_1和data_h为目标子数据):
data_1={4{mask_l[0]}}&data0|
{4{mask_l[1]}}&data1|
{4{mask_l[2]}}&data2;
data_h={4{mask_h[0]}}&data1|
{4{mask_h[1]}}&data2|
{4{mask_h[2]}}&data3。
其中,{4{mask[x]}}表征将mask[x]复制4份,得到4bit的数据{mask[x],mask[x],mask[x],mask[x]},x为0、1、2。&表征与运算,|表征或运算。
可见,本申请实施例中将4bits的权重掩码译码成2个3bits的权重掩码后,可以将spasity4:2的数据选择逻辑优化成两个基于3bits的权重掩码进行数据选择的3级门逻辑,从而简化了数据选择逻辑,提高数据选择效率。
需要说明的是,考虑到卷积运算中,权重数据与待运算数据之间是具有对应关系的。而在对选择出目标数据后,各目标数据之间的排序相对于原始情况发生了变化,因此,为了保证权重数据和选择出的构成目标数据的各目标子数据具有正确对应关系,保证卷积运算的正确性,还可以按照预设第二排序方式对各权重数据进行排序,使得排序后的各权重数据与排序后的各子数据中,相同排序位置处的权重数据和子数据具有正确对应关系。
在本申请实施例中,第二排序方式是预先就设定好的,其与各权重数据对应的目标子数据的排序顺序一致(应理解,由于权重掩码是复制的,因此从每一个位区间中选择的目标子数据都必然是对应的相同的待运算数据,因此最终选择出的每一个目标数据必然是某一个待运算数据,从而只需对各待运算数据之间的权重数据进行排序即可)。
示例性的,假设目标数据类型为fp32/tf32,那么对于fp32/tf32类型的待运算数据而言,其最终得到的两个目标数据排列为:
b32_data1={b4[15],b4[13],b4[11],b4[9],b4[7],b4[5],b4[3],b4[1]},
b32_data0={b4[14],b4[12],b4[10],b4[8],b4[6],b4[4],b4[2],b4[0]}。
此时对应的目标数据的顺序与原本的待运算数据的顺序一致,无需进行权重数据的重排序。
对于fp32/tf32类型的待运算数据而言,其最终得到的4个目标数据排列为:
{b16_data3,b16_data1}={b4[15],b4[13],b4[11],b4[9],b4[7],b4[5],b4[3],b4[1]},
{b16_data2,b16_data0}={b4[14],b4[12],b4[10],b4[8],b4[6],b4[4],b4[2],b4[0]}。
此时,可以将原本的权重数据{b16_weight3,b16_weight2,b16_weight1,b16_weight0}重新排序为:{b16_weight3,b16_weight1,b16_weight2,b16_weight0}。其中,b16_weight3、b16_weight2、b16_weight1、b16_weight0分别是目标数据b16_data3、b16_data2、b16_data1、b16_data0对应的权重数据。
对于int8/uint8类型的待运算数据而言,其最终得到的8个目标数据排列为:
{b8_data7,b8_data5,b8_data3,b8_data1}={b4[15],b4[13],b4[11],b4[9],b4[7],b4[5],b4[3],b4[1]},
{b8_data6,b8_data4,b8_data2,b8_data0}={b4[14],b4[12],b4[10],b4[8],b4[6],b4[4],b4[2],b4[0]}。
此时,可以将原本的权重数据{b8_weight7,b8_weight6,b8_weight5,b8_weight4,b18_weight3,b8_weight2,b8_weight1,b8_weight0}重新排序为:{b8_weight7,b8_weight5,b8_weight3,b8_weight1,b8_weight6,b8_weight4,b8_weight2,b8_weight0}。其中,b8_weight7、b8_weight6、b8_weight5、b8_weight4、b18_weight3、b8_weight2、b8_weight1、b8_weight0分别是目标数据b8_data7、b8_data6、b8_data5、b8_data4、b8_data3、b8_data2、b8_data1、b8_data0对应的权重数据。
对于int4/uint4类型的待运算数据而言,其最终得到的16个目标数据排列为:
{b4_data15,b4_data13,b4_data11,b4_data9,b4_data7,b4_data5,b4_data3,b4_data1}={b4[15],b4[13],b4[11],b4[9],b4[7],b4[5],b4[3],b4[1]},
{b4_data14,b4_data12,b4_data10,b4_data8,b4_data6,b4_data4,b4_data2,b4_data0}={b4[14],b4[12],b4[10],b4[8],b4[6],b4[4],b4[2],b4[0]}。
此时,可以将原本的权重数据{b4_weight15,b4_weight14,b4_weight13,b4_weight12,18_weight11,b4_weight10,b4_weight9,b4_weight8,b4_weight7,b4_weight6,b4_weight5,b4_weight4,b18_weight3,b4_weight2,b4_weight1,b4_weight0}重新排序为:{b4_weight15,b4_weight13,b4_weight11,b4_weight9,b4_weight7,b4_weight5,b4_weight3,b4_weight1,b4_weight14,b4_weight12,b4_weight10,b4_weight8,b4_weight6,b4_weight4,b4_weight2,b4_weight0}。
其中,b4_weight15、b4_weight14、b4_weight13、b4_weight12、18_weight11、b4_weight10、b4_weight9、b4_weight8、b4_weight7、b4_weight6、b4_weight5、b4_weight4、b18_weight3、b4_weight2、b4_weight1、b4_weight0分别是目标数据b4_data15、b4_data14、b4_data13、b4_data12、18_data11、b4_data10、b4_data9、b4_data8、b4_data7、b4_data6、b4_data5、b4_data4、b18_data3、b4_data2、b4_data1、b4_data0对应的权重数据。
应理解,上述方式中,考虑到在AI运算过程中,一组权重数据可能会持续被多组待运算数据使用,也即在AI运算过程中,待运算数据的变化频率会高于权重数据的变化频率,因此上述方式对权重数据进行排序而不再对目标数据进行重排序,就可以减少后续的排序处理开销。
当然,在本申请实施例中,也可以不对权重数据进行重排序,而是对选择出的目标数据进行重排序,以使得权重数据和目标子数据具有正确对应关系。
需要说明的是,本申请实施例的上述稀疏卷积运算方法,可以基于在处理器等实体上布设的硬件电路实现。
为此,本申请实施例中还提供了一种AI算法架构的实现装置(该AI算法架构的实现装置为基于硬件电路实现的可以实现AI算法的硬件架构)。参见图2所示,图2示出了该AI算法架构的实现装置的基本结构,包括数据预处理单元、权重预处理单元和卷积计算单元。其中:
数据预处理单元,用于根据待运算数据的数据类型,将待运算数据按位拆分为对应不同位区间的子数据。
权重预处理单元,用于按照数据类型对应的复制数量,对权重掩码进行复制,且复制后的权重掩码的数量等于单个待运算数据拆分得到的子数据数量。
也即数据预处理单元和权重预处理单元可以分别实现上述步骤S103和步骤S102的操作。
在本申请实施例中,权重预处理单元和数据预处理单元可以采用已有的各种可以进行数据复制的电路、数据排序的电路结构实现,在本申请实施例中对此不做限制。
在本申请实施例中,如图2所示,卷积计算单元包括数据选择器和卷积运算电路。
数据选择器用于根据各权重掩码分别从每n个不同待运算数据的同一位区间的子数据中,选出m个目标子数据。如前文所述,n和m均为常数,n为大于等于2的常数,m为大于等于1的常数,且m小于n。n和m的具体取值由所采用的压缩算法决定。
卷积运算电路用于根据权重数据对各目标子数据进行卷积运算。
在本申请实施例中,卷积运算电路可以采用现在已有的各种实现卷积运算的运算电路实现,本申请实施例对此不做限制。
在本申请实施例中,请参见图3所示,AI算法架构的实现装置还可以包括存储单元和访存控制单元。存储单元用于存储待运算的数据(可以是稀疏数据,也可以是dense数据)和权重数据(包括权重数据、数据类型等,在存储的是稀疏数据时,存储的权重数据中还包括权重掩码)。访存控制单元用于从存储单元获取权重数据和待运算的数据。
在本申请实施例中,存储单元可以采用各类存储器实现,例如可以采用SPM来实现,而访存控制单元则可以采用各类数据读取电路实现,但不作为限制。
在本申请实施例中,若存储单元中存储的是稀疏数据,则访存控制单元在获取到待运算的稀疏数据传输给数据预处理单元后,数据预处理单元即直接将该稀疏数据作为待运算数据,进行数据拆分。而权重预处理单元也可以直接按照数据类型对应的复制数量,对访存控制单元传来的权重掩码进行复制。
相反,若存储单元中存储的是dense数据,则数据预处理单元还会用于按照预设稀疏方式,对dense数据进行稀疏,得到待运算数据。而权重预处理单元则还用于按照预设生成方式生成权重掩码,而生成的权重掩码中数值1所在的位置对应待运算数据中dense数据的位置。
应理解,在本申请实施例中,稀疏方式和权重掩码的生成方式可以参见前文所述,在此不再赘述。
还应理解,在本申请实施例中,可以根据所采用的稀疏方式,在数据预处理单元中布设相应的数据插入电路,实现对于dense数据的稀疏。同时在权重预处理单元中布设相应的数据发生器,该数据发送器被配置为生成该稀疏方式对应的权重掩码。不同稀疏方式与权重掩码的对应关系可以参见前文所述,在此也不再赘述。
在本申请实施例中,数据预处理单元还可以用于按照预设第一排序方式对拆分得到的各子数据进行排序。而权重预处理单元还可以用于按照预设第二排序方式对各权重数据进行排序。在本申请实施例中,第一排序方式和第二排序方式固定,并使得排序后的各权重数据与排序后的各子数据中,相同排序位置处的权重数据和子数据具有正确对应关系。
示例性的,数据预处理单元具体可以将各子数据按照位区间由大到小的顺序进行排序,且具有相同位区间的各子数据,按照各子数据所属的待运算数据的获取顺序进行排序。具体示例可参见前文方法部分的介绍,在此不再赘述。
在本申请实施例中,数据选择器还可以将目标子数据组成输出目标数据(目标数据为各目标子数据按位区间排列成目标类型的数据,目标类型为支持的最大数据类型)后,再输出给卷积运算电路进行卷积运算。此时,卷积运算电路可以配置为数据处理规格为m×目标数据大小的电路结构。以数据选择器实现sparsity4:2数据选择,AI运算架构支持的最大数据类型为fp32/tf32的情况为例,卷积运算电路可以配置为数据处理规格为2×32的电路结构。
在本申请实施例中,权重预处理单元具体可以用于将各权重数据按照所对应的目标子数据的排序顺序进行排序,以保证权重数据与目标子数据的对应性。具体的排序示例可以参见前文所述,在此不再赘述。
在本申请实施例的一种可选实施方式中,若数据选择器实现的是sparsity4:2数据选择(即权重掩码为4bit的掩码,子数据为4bit的数据,n为4,m为2),则权重预处理单元还可以用于,将权重掩码转换为3bit的第一权重掩码mask_l和3bit的第二权重掩码mask_h。其中:mask_l和mask_h中均仅有1个bits的数值为1。
数据选择器可以根据mask_l和mask_h从4个不同待运算数据的同一位区间的子数据中,选出2个目标子数据。
如前文所述,mask_l可以为:{mask[2]&(mask[1:0]==0),mask[1]&!mask[0],mask[0]};mask_h可以为:{mask[3],mask[2]&!mask[3],mask[1]&(mask[3:2]==0)}。
此时,数据选择器具体可以将mask_l的第0位数据与第一个子数据进行与运算,将mask_l的第1位数据与第二个子数据进行与运算,将mask_l的第2位数据与第三个子数据进行与运算,将三次与运算的值进行或运算,得到第一个目标子数据;将mask_h的第0位数据与第二个子数据进行与运算,将mask_l的第1位数据与第三个子数据进行与运算,将mask_l的第2位数据与第四个子数据进行与运算,将三次与运算的值进行或运算,得到第二个目标子数据。
在本申请实施例的另一种可选实施方式中,如图4所示,卷积计算单元还可以包括:权重传输子单元和权重执行子单元。
权重传输子单元,用于接收权重数据和权重掩码,并在权重数据与卷积计算单元不匹配时,将权重数据传输给所连接的另一卷积计算单元的权重传输子单元,在权重数据与卷积计算单元匹配时,存储权重数据和权重掩码,并将权重数据和权重掩码设置为有效。
权重执行子单元,用于在权重传输子单元中的权重数据有效,且权重执行子单元中的权重数据需要被替换或者为无效时,加载权重传输子单元中存储的权重数据和权重掩码,并将权重掩码输出给数据选择器进行数据选择。
在本申请实施例中,可以权重数据中可以携带有第一唯一标识,而卷积计算单元可以具有第二唯一标识,从而通过判断第一唯一标识与卷积计算单元对应的第二唯一标识是否一致,在一致时确定权重数据与卷积计算单元匹配,反之确定权重数据与卷积计算单元不匹配。
如图4所示,卷积计算单元还可以包括:掩码转换单元,设置于权重传输子单元和权重执行子单元之间。若数据选择器实现的是sparsity4:2数据选择(即权重掩码为4bit的掩码,子数据为4bit的数据,n为4,m为2),则掩码转换单元可以在所述权重传输子单元中的权重掩码有效时,将所述权重掩码转换为一个3bit的第一权重掩码mask_l和一个3bit的第二权重掩码mask_h。其中:mask_l和mask_h中均最多有1个bits的数值为1。
数据选择器则可以根据所述mask_l和mask_h从4个不同待运算数据的同一位区间的子数据中,选出2个目标子数据。
此时,权重执行子单元在权重传输子单元中的权重数据有效,且权重执行子单元中的权重数据需要被替换或者为无效时,加载权重传输子单元中存储的权重数据以及掩码转换单元传输的mask_l和mask_h,并将mask_l和mask_h输出给数据选择器进行数据选择。
如前文所述,mask_l可以为:{mask[2]&(mask[1:0]==0),mask[1]&!mask[0],mask[0]};mask_h可以为:{mask[3],mask[2]&!mask[3],mask[1]&(mask[3:2]==0)}。
此时,数据选择器具体可以接收权重执行子单元中的mask_h和mask_l,将mask_l的第0位数据与第一个子数据进行与运算,将mask_l的第1位数据与第二个子数据进行与运算,将mask_l的第2位数据与第三个子数据进行与运算,将三次与运算的值进行或运算,得到第一个目标子数据;将mask_h的第0位数据与第二个子数据进行与运算,将mask_l的第1位数据与第三个子数据进行与运算,将mask_l的第2位数据与第四个子数据进行与运算,将三次与运算的值进行或运算,得到第二个目标子数据。
在本申请实施例中,权重执行子单元、权重传输子单元、数据传输子单元可以采用寄存器、缓存器等电子元件实现,但不作为限制。掩码转换单元可以采用逻辑门电路实现,该逻辑门电路的内部逻辑为前述mask_l和mask_h的拆分逻辑。
应理解,在本申请实施例中,AI运算架构除了可以包括图2和图3中示出的单元模块外,还可以具有其他的单元模块。且图2和图3中示出的一个单元模块也可以是由多个小的单元模型组成。
例如,如图5所示,AI运算架构中可以包括AI运算阵列,而AI运算阵列可以包括多个卷积计算链。其中,每个卷积计算链中包括至少一个用于进行卷积计算的卷积计算单元(卷积计算单元的结构可以如图2中所示,也可以如图4中所示)。而每个卷积计算单元中包括数据选择器和卷积运算电路。这样,通过AI运算阵列的多个卷积计算链,可以实现对于多个待运算数据的并行运算。
仍旧如图5所示,访存控制单元可以由权重访存控制单元和数据访存控制单元组成,权重访存控制单元和数据访存控制单元,分别用于获取权重数据和待运算数据。权重访存控制单元和数据访存控制单元可以是两个不同的电路实体,也可以是同一个电路实体,可以采用已有的各类数据访存电路实现。
为便于理解本申请实施例的方案,下面以图5所示的AI算法架构的实现装置为例,为本申请做进一步示例说明。其中,存储单元采用SPM实现,SPM中存储的数据为fp16类型的dense数据、权重数据、数据类型(由于fp16类型的dense数据稀疏后得到的是fp32的稀疏数据,因此数据类型配置为fp32),采用spasity4:2算法。
权重访存控制单元从SPM中获取待运算的dense数据对应的权重数据、数据类型信息交由权重预处理单元。
权重预处理单元生成权重掩码,并由于数据类型为fp32/tf32,复制7份,得到权重掩码集合{mask7,mask6,mask5,mask4,mask3,mask2,mask1,mask0}。
权重预处理单元将每一个权重掩码转换为两个3bit的权重掩码mask_l和mask_h。其中,mask_l为:{mask[2]&(mask[1:0]==0),mask[1]&!mask[0],mask[0]};mask_h为:{mask[3],mask[2]&!mask[3],mask[1]&(mask[3:2]==0)}。为实现mask_l和mask_h的拆分,权重预处理单元中可以加入逻辑门电路,以实现mask_l和mask_h的拆分。
权重预处理单元对权重数据进行重排序:
将原权重数据序列{b4_weight15,b4_weight14,b4_weight13,b4_weight12,18_weight11,b4_weight10,b4_weight9,b4_weight8,b4_weight7,b4_weight6,b4_weight5,b4_weight4,b18_weight3,b4_weight2,b4_weight1,b4_weight0}重新排序为:{b4_weight15,b4_weight13,b4_weight11,b4_weight9,b4_weight7,b4_weight5,b4_weight3,b4_weight1,b4_weight14,b4_weight12,b4_weight10,b4_weight8,b4_weight6,b4_weight4,b4_weight2,b4_weight0}。
将重排序的权重数据和复制后的掩码集合发送给AI运算阵列中的卷积计算单元。
数据访存控制单元从SPM中获取待运算的dense数据交由数据预处理单元。
数据预处理单元按照设定的稀疏方式将dense数据稀疏为32bits的稀疏数据。
数据预处理单元将每个4×32bits的稀疏数据{data3,data2,data1,data0}重新排序为:
{data3[31:28],data2[31:28],data1[31:28],data0[31:28],
data3[27:24],data2[27:24],data1[27:24],data0[27:24],
data3[23:20],data2[23:20],data1[23:20],data0[23:20],
data3[19:16],data2[19:16],data1[19:16],data0[19:16],
data3[15:12],data2[15:12],data1[15:12],data0[15:12],
data3[11:8],data2[11,8],data1[11:8],data0[11:8],
data3[7:4],data2[7:4],data1[7:4],data0[7:4],
data3[3:0],data2[3:0],data1[3:0],data0[3:0]}。
将重排序的数据发送给AI运算阵列中的卷积计算单元。
卷积计算单元的数据选择器:
采用mask7从data3[31:28],data2[31:28],data1[31:28],data0[31:28]中选出两个目标子数据记为b4[15]和b4[14];
采用mask6从data3[27:24],data2[27:24],data1[27:24],data0[27:24]中选出两个目标子数据记为b4[13]和b4[12];
采用mask5从data3[23:20],data2[23:20],data1[23:20],data0[23:20]中选出两个目标子数据记为b4[11]和b4[10];
采用mask4从data3[19:16],data2[19:16],data1[19:16],data0[19:16]中选出两个目标子数据记为b4[9]和b4[8];
采用mask3从data3[15:12],data2[15:12],data1[15:12],data0[15:12]中选出两个目标子数据记为b4[7]和b4[6];
采用mask2从data3[11:8],data2[11,8],data1[11:8],data0[11:8]中选出两个目标子数据记为b4[5]和b4[4];
采用mask1从data3[7:4],data2[7:4],data1[7:4],data0[7:4]中选出两个目标子数据记为b4[3]和b4[2];
采用mask0从data3[3:0],data2[3:0],data1[3:0],data0[3:0]中选出两个目标子数据记为b4[1]和b4[0]。
数据选择器的选择逻辑如下:
data_1={4{mask_l[0]}}&data0|
{4{mask_l[1]}}&data1|
{4{mask_l[2]}}&data2;
data_h={4{mask_h[0]}}&data1|
{4{mask_h[1]}}&data2|
{4{mask_h[2]}}&data3。
将选择出的数据摆放为:
b4[15],b4[13],b4[11],b4[9],b4[7],b4[5],b4[3],b4[1],b4[14],b4[12],b4[10],b4[8],b4[6],b4[4],b4[2],b4[0]。
卷积运算电路根据重排序的各权重数据,以按照排序顺序一一对应的方式,对上述各数据进行乘加完成不同数据类型的卷积计算。
通过上述方案,将不同数据类型的稀疏数据选择操作统一为从同一尺寸大小的子数据中选择出所需的目标子数据的稀疏选择操作,避免了需要为不同位宽的数据类型分别配置不同的数据选择器以实现不同数据类型的稀疏选择操作的问题,将多套稀疏选择逻辑统一为了1套,避免了多种数据类型权重掩码选择不均衡问题,可以节约大量高位宽数据选择逻辑开销,并减小面积开销。
此外,可以将dense convolution统一到sparsity convolution,不需要在每个卷积计算链中进行sparsity数据和dense数据的区分,简化了卷积计算链的设计,节约了卷积计算链中sparsity数据和dense数据的数据选择逻辑开销。
此外,通过对权重数据进行重排序,将数据选择后产生的数据交叉问题转移至了不经常变化的权重数据上,实现了面积,功耗和逻辑的优化。
本申请实施例中还提供了一种处理器,该处理器中包括前述的AI算法架构的实现装置。
需要说明的是,本申请实施例提供的处理器可以是GPU(Graphic ProcessingUnit,图形处理器)、CPU(Central Processing Unit,中央处理器)、AI处理器等可以布设上述AI算法架构的实现装置,实现AI运算的处理器。
本申请实施例中还提供了一种电子部件,该电子部件中包括有前述的处理器。
可选的,该电子部件可以是诸如边缘处理盒子等可以实现AI运算的部件。
本申请实施例中还提供了一种电子设备,该电子设备中包括有前述的处理器或者包括有前述的电子部件。
可选的,该电子设备可以是诸如电脑、手机、服务器等设备,但不作为限制。
在本申请所提供的实施例中,应该理解到,所揭露装置,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。另一点,所显示或讨论的相互之间的连接可以是通过一些接口电性连接的。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
在本文中,多个是指两个或两个以上,“/”是指或的关系。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (16)
1.一种AI算法架构的实现装置,其特征在于,包括:
数据预处理单元,用于根据待运算数据的数据类型,将所述待运算数据按位拆分为对应不同位区间的子数据;
权重预处理单元,用于按照所述数据类型对应的复制数量,对权重掩码进行复制;其中,复制后的权重掩码的数量等于单个所述待运算数据拆分得到的子数据数量;
卷积计算单元,包括数据选择器和卷积运算电路;
所述数据选择器用于根据各所述权重掩码分别从每n个不同待运算数据的同一位区间的子数据中,选出m个目标子数据;所述n为大于等于2的常数,所述m为大于等于1的常数,且所述m小于所述n;
所述卷积运算电路用于根据权重数据对各所述目标子数据进行卷积运算。
2.如权利要求10所述的AI算法架构的实现装置,其特征在于,所述AI算法架构的实现装置还包括:
存储单元,用于存储待运算的密集dense数据;
访存控制单元,用于从所述存储单元获取所述dense数据和所述数据类型;
所述数据预处理单元,还用于按照预设稀疏方式,对所述dense数据进行稀疏,得到所述待运算数据;
所述权重预处理单元,还用于按照预设生成方式生成所述权重掩码;
其中,所述权重掩码中数值1所在的位置对应所述待运算数据中所述dense数据的位置。
3.如权利要求1所述的AI算法架构的实现装置,其特征在于,
所述数据预处理单元,还用于按照预设第一排序方式对待运算数据拆分得到的各所述子数据进行排序;
所述权重预处理单元,还用于按照预设第二排序方式对各所述权重数据进行排序;
其中,在排序后的各所述权重数据与排序后的各所述子数据中,相同排序位置处的权重数据和子数据具有正确对应关系。
4.如权利要求3所述的AI算法架构的实现装置,其特征在于,
所述数据预处理单元具体用于,将各所述子数据按照位区间由大到小的顺序进行排序,且具有相同位区间的各所述子数据,按照各所述子数据所属的待运算数据之间的排列顺序进行排序。
5.如权利要求4所述的AI算法架构的实现装置,其特征在于,
所述数据选择器输出目标数据;所述目标数据为各所述目标子数据按位区间排列成的数据,所述目标数据为所述AI算法架构的实现装置所支持的最大位宽数据类型的数据。
6.如权利要求3所述的AI算法架构的实现装置,其特征在于,
所述权重预处理单元具体用于,将各所述权重数据按照所对应的目标子数据的排序顺序进行排序。
7.如权利要求1-6任一项所述的AI算法架构的实现装置,其特征在于,所述权重掩码为4bit的掩码,所述子数据为4bit的数据,所述n为4,所述m为2;
所述权重预处理单元具体用于,将所述权重掩码转换为一个3bit的第一权重掩码mask_l和一个3bit的第二权重掩码mask_h;其中:mask_l和mask_h中均最多有1个bits的数值为1;
所述数据选择器具体用于根据所述mask_l和mask_h从4个不同待运算数据的同一位区间的子数据中,选出2个目标子数据。
8.如权利要求7所述的AI算法架构的实现装置,其特征在于,
所述mask_l为:{mask[2]&(mask[1:0]==0),mask[1]&!mask[0],mask[0]};
所述mask_h为:{mask[3],mask[2]&!mask[3],mask[1]&(mask[3:2]==0)};
其中,mask[3]、mask[2]、mask[1]、mask[0]、mask[1:0]、mask[3:2]分别表征4bit的所述权重掩码的第3位数据、第2位数据、第1位数据、第0位数据、第1位和第0位构成的2bit数据、第3位和第2位数据构成的2bit数据,&表征与运算,&!表征与非运算,==表征判断两端的值是否相等,相等则值为1,不相等则值为0。
9.如权利要求7所述的AI算法架构的实现装置,其特征在于,
所述数据选择器具体用于:
将所述mask_l的第0位数据与第一个子数据进行与运算,将所述mask_l的第1位数据与第二个子数据进行与运算,将所述mask_l的第2位数据与第三个子数据进行与运算,将三次与运算的值进行或运算,得到第一个所述目标子数据;
将所述mask_h的第0位数据与第二个子数据进行与运算,将所述mask_l的第1位数据与第三个子数据进行与运算,将所述mask_l的第2位数据与第四个子数据进行与运算,将三次与运算的值进行或运算,得到第二个所述目标子数据。
10.如权利要求1-6任一项所述的AI算法架构的实现装置,其特征在于,所述权重掩码为4bit的掩码,所述子数据为4bit的数据,所述n为4,所述m为2;
所述卷积计算单元,还包括:
权重传输子单元,用于接收所述权重数据和所述权重掩码,并在所述权重数据与所述卷积计算单元不匹配时,将所述权重数据传输给所连接的另一卷积计算单元的权重传输子单元,在所述权重数据与所述卷积计算单元匹配时,存储所述权重数据和所述权重掩码,并将所述权重数据和所述权重掩码设置为有效;
掩码转换单元,与所述权重传输子单元连接,用于在所述权重传输子单元中的权重掩码有效时,将每个所述4bits权重掩码转换为一个3bit的第一权重掩码mask_l和一个3bit的第二权重掩码mask_h,其中:mask_l和mask_h中均最多有1个bits的数值为1;
权重执行子单元,用于在所述权重传输子单元中的权重数据有效,且所述权重执行子单元中的权重数据需要被替换或者为无效时,加载所述权重传输子单元中存储的权重数据以及所述掩码转换单元传输的所述mask_l和mask_h;
所述数据选择器,具体用于根据每个所述mask_l和mask_h从每n个不同待运算数据的同一位区间的子数据中,选出m个目标子数据,发送到所述卷积运算电路中进行卷积运算。
11.如权利要求10所述的AI算法架构的实现装置,其特征在于,
所述mask_l为:{mask[2]&(mask[1:0]==0),mask[1]&!mask[0],mask[0]};
所述mask_h为:{mask[3],mask[2]&!mask[3],mask[1]&(mask[3:2]==0)};
其中,mask[3]、mask[2]、mask[1]、mask[0]、mask[1:0]、mask[3:2]分别表征4bit的所述权重掩码的第3位数据、第2位数据、第1位数据、第0位数据、第1位和第0位构成的2bit数据、第3位和第2位数据构成的2bit数据,&表征与运算,&!表征与非运算,==表征判断两端的值是否相等,相等则值为1,不相等则值为0。
12.如权利要求10所述的AI算法架构的实现装置,其特征在于,
所述数据选择器具体用于:
接收所述权重执行子子单元中的所述mask_h和mask_l,将所述mask_l的第0位数据与第一个子数据进行与运算,将所述mask_l的第1位数据与第二个子数据进行与运算,将所述mask_l的第2位数据与第三个子数据进行与运算,将三次与运算的值进行或运算,得到第一个所述目标子数据;
将所述mask_h的第0位数据与第二个子数据进行与运算,将所述mask_l的第1位数据与第三个子数据进行与运算,将所述mask_l的第2位数据与第四个子数据进行与运算,将三次与运算的值进行或运算,得到第二个所述目标子数据。
13.一种稀疏卷积运算方法,其特征在于,包括:
获取待运算数据、权重数据、数据类型以及权重掩码;其中,所述待运算数据为稀疏数据;
按照所述数据类型对应的权重掩码复制数量N,对所述权重掩码进行N次复制;按照所述待运算数据的数据类型,将所述待运算数据按位拆分为对应不同位区间的子数据;其中,复制后的权重掩码的数量等于单个所述待运算数据拆分得到的子数据数量;
根据各所述权重掩码分别从每n个不同待运算数据的同一位区间的子数据中,选出m个目标子数据;所述n为大于等于2的常数,所述m为大于等于1的常数,且所述m小于所述n;
根据所述权重数据对各所述目标子数据进行卷积运算。
14.一种处理器,其特征在于,包括:如权利要求1-12任一项所述的AI算法架构的实现装置。
15.一种电子部件,其特征在于,包括如权利要求14所述的处理器。
16.一种电子设备,其特征在于,包括如权利要求15所述的电子部件。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211605350.1A CN115952846B (zh) | 2022-12-14 | 2022-12-14 | Ai算法架构的实现装置、稀疏卷积运算方法及相关设备 |
PCT/CN2023/096085 WO2024124808A1 (zh) | 2022-12-14 | 2023-05-24 | 卷积计算单元、ai运算阵列、稀疏卷积运算方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211605350.1A CN115952846B (zh) | 2022-12-14 | 2022-12-14 | Ai算法架构的实现装置、稀疏卷积运算方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115952846A true CN115952846A (zh) | 2023-04-11 |
CN115952846B CN115952846B (zh) | 2023-07-11 |
Family
ID=85891904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211605350.1A Active CN115952846B (zh) | 2022-12-14 | 2022-12-14 | Ai算法架构的实现装置、稀疏卷积运算方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115952846B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115796239A (zh) * | 2022-12-14 | 2023-03-14 | 北京登临科技有限公司 | Ai算法架构的实现装置、卷积计算单元及相关方法与设备 |
WO2024124808A1 (zh) * | 2022-12-14 | 2024-06-20 | 北京登临科技有限公司 | 卷积计算单元、ai运算阵列、稀疏卷积运算方法及相关设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109726045A (zh) * | 2017-10-27 | 2019-05-07 | 百度(美国)有限责任公司 | 用于块稀疏递归神经网络的系统和方法 |
CN110084762A (zh) * | 2019-04-26 | 2019-08-02 | 华南理工大学 | 一种深度学习逆卷积模型异常值处理方法 |
CN110334803A (zh) * | 2019-07-18 | 2019-10-15 | 南京风兴科技有限公司 | 基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器 |
CN112508040A (zh) * | 2020-12-21 | 2021-03-16 | 中国科学院微电子研究所 | 一种图像识别方法及相关装置 |
CN112990458A (zh) * | 2021-04-14 | 2021-06-18 | 北京灵汐科技有限公司 | 卷积神经网络模型的压缩方法及装置 |
US20220110600A1 (en) * | 2018-05-31 | 2022-04-14 | Canon Medical Systems Corporation | Apparatus and method for medical image reconstruction using deep learning to improve image quality in positron emission tomography (pet) |
-
2022
- 2022-12-14 CN CN202211605350.1A patent/CN115952846B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109726045A (zh) * | 2017-10-27 | 2019-05-07 | 百度(美国)有限责任公司 | 用于块稀疏递归神经网络的系统和方法 |
US20220110600A1 (en) * | 2018-05-31 | 2022-04-14 | Canon Medical Systems Corporation | Apparatus and method for medical image reconstruction using deep learning to improve image quality in positron emission tomography (pet) |
CN110084762A (zh) * | 2019-04-26 | 2019-08-02 | 华南理工大学 | 一种深度学习逆卷积模型异常值处理方法 |
CN110334803A (zh) * | 2019-07-18 | 2019-10-15 | 南京风兴科技有限公司 | 基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器 |
CN112508040A (zh) * | 2020-12-21 | 2021-03-16 | 中国科学院微电子研究所 | 一种图像识别方法及相关装置 |
CN112990458A (zh) * | 2021-04-14 | 2021-06-18 | 北京灵汐科技有限公司 | 卷积神经网络模型的压缩方法及装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115796239A (zh) * | 2022-12-14 | 2023-03-14 | 北京登临科技有限公司 | Ai算法架构的实现装置、卷积计算单元及相关方法与设备 |
CN115796239B (zh) * | 2022-12-14 | 2023-10-31 | 北京登临科技有限公司 | Ai算法架构的实现装置、卷积计算装置及相关方法与设备 |
WO2024124808A1 (zh) * | 2022-12-14 | 2024-06-20 | 北京登临科技有限公司 | 卷积计算单元、ai运算阵列、稀疏卷积运算方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN115952846B (zh) | 2023-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115952846A (zh) | Ai算法架构的实现装置、稀疏卷积运算方法及相关设备 | |
CN109104876B (zh) | 一种运算装置及相关产品 | |
CN110163359B (zh) | 一种计算装置及方法 | |
US20200026992A1 (en) | Hardware neural network conversion method, computing device, compiling method and neural network software and hardware collaboration system | |
CN109740754B (zh) | 神经网络计算装置、神经网络计算方法及相关产品 | |
US20190042915A1 (en) | Procedural neural network synaptic connection modes | |
EP3343466A1 (en) | Method and apparatus for a binary neural network mapping scheme utilizing a gate array architecture | |
US20220083857A1 (en) | Convolutional neural network operation method and device | |
CN115640494B (zh) | 卷积计算单元、ai运算阵列及相关设备 | |
CN103218348A (zh) | 快速傅里叶变换处理方法和系统 | |
CN111045728B (zh) | 一种计算装置及相关产品 | |
CN111563598A (zh) | 预估量子计算模拟时间的方法、系统 | |
CN112149047A (zh) | 数据的处理方法及装置、存储介质和电子装置 | |
CN112988229B (zh) | 基于异构计算的卷积神经网络资源优化配置方法 | |
US20230146689A1 (en) | Deep neural network | |
US20200134434A1 (en) | Arithmetic processing device, learning program, and learning method | |
CN117391148A (zh) | 卷积计算单元、ai运算阵列及相关设备 | |
Kageyama et al. | Implementation of Floating‐Point Arithmetic Processing on Content Addressable Memory‐Based Massive‐Parallel SIMD matriX Core | |
CN111897513B (zh) | 一种基于反向极性技术的乘法器及其代码生成方法 | |
WO2024124808A1 (zh) | 卷积计算单元、ai运算阵列、稀疏卷积运算方法及相关设备 | |
CN111381875B (zh) | 数据比较器、数据处理方法、芯片及电子设备 | |
Abubaker et al. | Scaling stratified stochastic gradient descent for distributed matrix completion | |
CN115796239B (zh) | Ai算法架构的实现装置、卷积计算装置及相关方法与设备 | |
CN111047024A (zh) | 一种计算装置及相关产品 | |
Shen et al. | Parallel CRC On An FPGA At Terabit Speeds |
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 |