CN113485750B - 数据处理方法及数据处理装置 - Google Patents
数据处理方法及数据处理装置 Download PDFInfo
- Publication number
- CN113485750B CN113485750B CN202110724020.3A CN202110724020A CN113485750B CN 113485750 B CN113485750 B CN 113485750B CN 202110724020 A CN202110724020 A CN 202110724020A CN 113485750 B CN113485750 B CN 113485750B
- Authority
- CN
- China
- Prior art keywords
- vector
- target
- vectors
- elements
- invalid
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 254
- 238000003672 processing method Methods 0.000 title claims abstract description 36
- 239000013598 vector Substances 0.000 claims abstract description 1112
- 238000007906 compression Methods 0.000 claims abstract description 161
- 230000006835 compression Effects 0.000 claims abstract description 113
- 238000000034 method Methods 0.000 claims abstract description 64
- 230000008569 process Effects 0.000 claims abstract description 47
- 238000003860 storage Methods 0.000 claims description 74
- 238000007781 pre-processing Methods 0.000 claims description 51
- 230000015654 memory Effects 0.000 claims description 40
- 230000004044 response Effects 0.000 claims description 27
- 238000004364 calculation method Methods 0.000 abstract description 31
- 238000010586 diagram Methods 0.000 description 28
- 239000011159 matrix material Substances 0.000 description 12
- 238000013527 convolutional neural network Methods 0.000 description 7
- 238000009825 accumulation Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 239000002699 waste material Substances 0.000 description 4
- 238000013473 artificial intelligence Methods 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 101000641224 Homo sapiens Vimentin-type intermediate filament-associated coiled-coil protein Proteins 0.000 description 2
- 102100034331 Vimentin-type intermediate filament-associated coiled-coil protein Human genes 0.000 description 2
- 230000004913 activation Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000001788 irregular Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 101100519700 Candida albicans (strain SC5314 / ATCC MYA-2876) PGA12 gene Proteins 0.000 description 1
- 101001010621 Homo sapiens Interleukin-21 Proteins 0.000 description 1
- 102100030704 Interleukin-21 Human genes 0.000 description 1
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 101100520505 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) PMU1 gene Proteins 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- 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
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Complex Calculations (AREA)
Abstract
一种数据处理方法及数据处理装置。该数据处理方法包括:对多个第一向量和第二向量进行压缩处理,用于去除多个第一向量中的至少一个无效第一向量和第二向量中的至少一个无效第二元素,以得到压缩后的第二组第一向量和压缩后第二向量,其中,第二组第一向量为第一组第一向量的子集。该数据处理方法能够通过压缩处理,删除运算数据中的无效数据,减少运算过程中的无效计算,在获得相同的计算结果的同时可以大幅减少所需要的操作周期,对于通用的乘加运算存在广泛的适应性。
Description
技术领域
本公开的实施例涉及一种数据处理方法和数据处理装置。
背景技术
在矩阵中,若数值为0的元素的数目远远多于数值为非0的元素的数目,并且数值为非0的元素分布没有规律时,称该矩阵为稀疏矩阵。
随着人工智能及机器学习的发展,对以并行处理器(例如,多核处理器、图形处理器、数字信号处理器等)为代表的众多并行处理器设备提出了新的要求。原有由超级计算机计算的矩阵,单个矩阵具有数据密度高,矩阵维度大的特点,而在人工智能等领域中经常使用的神经网络,例如,卷积神经网络,其具有矩阵数量多,但单个矩阵多为维度较小的稀疏矩阵的特点。
发明内容
本公开至少一实施例提供一种数据处理方法,用于乘加运算,其中,所述乘加运算用于实现将第一组第一向量和第二向量进行乘加操作,所述第一组第一向量包括多个第一向量,每个第一向量包括P个第一元素,所述第二向量包括多个第二元素,所述多个第一向量与所述多个第二元素一一对应,所述方法包括:对所述多个第一向量和所述第二向量进行压缩处理,用于去除所述多个第一向量中的至少一个无效第一向量和所述第二向量中的至少一个无效第二元素,以得到压缩后的第二组第一向量和压缩后第二向量,其中,所述第二组第一向量为所述第一组第一向量的子集,所述至少一个无效第二元素包括数值为预设值的第二元素,所述至少一个无效第一向量包括第一组无效第一向量,所述第一组无效第一向量包括与所述至少一个无效第二元素对应的第一向量,和/或所述至少一个无效第一向量包括第二组无效第一向量,所述第二组无效第一向量包括所包括的P个第一元素的数值均为所述预设值的第一向量,所述至少一个无效第二元素包括与所述第二组无效第一向量对应的第二元素,P为大于1的正整数。
例如,在本公开至少一实施例提供的数据处理方法中,对所述多个第一向量和所述第二向量进行压缩处理,包括:基于所述多个第二元素的数值,对所述多个第一向量和所述第二向量进行第一压缩处理,和/或基于所述多个第一向量中的所有第一元素的数值,对所述多个第一向量和所述第二向量进行第二压缩处理。
例如,在本公开至少一实施例提供的数据处理方法中,所述多个第二元素中每个被选择的第二元素作为目标第二元素,所述多个第一向量中与所述目标第二元素对应的第一向量为目标第一向量,基于所述多个第二元素的数值,对所述多个第一向量和所述第二向量进行第一压缩处理,包括:对于所述目标第一向量和所述目标第二元素:判断所述目标第二元素的数值是否为所述预设值,响应于所述目标第二元素的数值为所述预设值,丢弃所述目标第二元素,不执行对所述目标第一向量的读取操作,并将所述目标第二元素作为无效第二元素,将所述目标第一向量作为无效第一向量,响应于所述目标第二元素的数值不为所述预设值,存储所述目标第二元素,执行对所述目标第一向量的读取操作。
例如,在本公开至少一实施例提供的数据处理方法中,所述多个第一向量中每个被选择的第一向量作为目标第一向量,所述多个第二元素中与所述目标第一向量对应的第二元素为目标第二元素,基于所述所有第一元素的数值,对所述多个第一向量和所述第二向量进行第二压缩处理,包括:对于所述目标第一向量和所述目标第二元素:判断所述目标第一向量包括的P个第一元素的数值是否均为所述预设值,响应于所述目标第一向量包括的P个第一元素的数值均为所述预设值,将所述目标第二元素作为无效第二元素,将所述目标第一向量作为无效第一向量,丢弃所述目标第一向量和所述目标第二元素,响应于所述P个第一元素的数值不均为所述预设值,将所述目标第一向量作为所述第二组第一向量中的一个第一向量,将所述目标第二元素作为所述压缩后第二向量中的一个元素。
例如,在本公开至少一实施例提供的数据处理方法中,所述第二组第一向量包括所述多个第一向量中的M个第一向量,在所述乘加运算中,对于所述M个第一向量中的每个待处理的第一向量,将所述待处理的第一向量中的P个第一元素分别与所述待处理的第一向量对应的第二元素相乘,以得到所述待处理的第一向量对应的P个第一中间结果,并将所述M个第一向量分别对应的P个第一中间结果分别对应累加,得到P个乘加结果,其中,M为正整数且小于所述多个第一向量的总数。
例如,本公开至少一实施例提供的数据处理方法还包括:对所述第二组第一向量进行第三压缩处理,以得到至少一个第三向量;基于所述至少一个第三向量,对所述压缩后第二向量进行处理,以得到与所述至少一个第三向量一一对应的至少一个第四向量,其中,所述至少一个第三向量和所述至少一个第四向量中均不存在数值为所述预设值的元素,在所述乘加运算中,将所述至少一个第三向量和所述至少一个第四向量中对应位置的两个元素相乘,以得到每个第三向量对应的P个第二中间结果,并将所述至少一个第三向量分别对应的P个第二中间结果分别对应累加,得到P个乘加结果。
例如,在本公开至少一实施例提供的数据处理方法中,对所述第二组第一向量进行第三压缩处理,以得到至少一个第三向量,包括:将所述第二组第一向量中的所有数值为所述预设值的第一元素设置为空缺元素,以得到与所述至少一个第一向量一一对应的至少一个第一中间向量,其中,所述空缺元素表示未设置任何数值的元素;基于所述至少一个第一中间向量,得到所述至少一个第三向量。
例如,在本公开至少一实施例提供的数据处理方法中,所述至少一个第三向量中的每个被选择的第三向量为目标第三向量,所述目标第三向量包括P个第三元素,所述P个第三元素中的至少部分第三元素为第一元素,基于所述至少一个第三向量,对所述压缩后第二向量进行处理,以得到与所述至少一个第三向量一一对应的至少一个第四向量,包括:对于所述目标第三向量中的每个被选择的第三元素:响应于所述被选择的第三元素为第一元素,确定所述被选择的第三元素所属的第一向量,将所述被选择的第三元素所属的第一向量对应的第二元素作为所述至少一个第四向量中与所述目标第三向量对应的第四向量中的一个元素。
本公开至少一实施例提供一种数据处理装置,用于乘加运算,其中,所述乘加运算用于实现将第一组第一向量和第二向量进行乘加操作,所述第一组第一向量包括多个第一向量,每个第一向量包括P个第一元素,所述第二向量包括多个第二元素,所述多个第一向量与所述多个第二元素一一对应,所述数据处理装置包括:压缩处理单元,被配置为对所述多个第一向量和所述第二向量进行压缩处理,用于去除所述多个第一向量中的至少一个无效第一向量和所述第二向量中的至少一个无效第二元素,以得到压缩后的第二组第一向量和压缩后第二向量,其中,所述第二组第一向量为所述第一组第一向量的子集,所述至少一个无效第二元素包括数值为预设值的第二元素,所述至少一个无效第一向量包括第一组无效第一向量,所述第一组无效第一向量包括与所述至少一个无效第二元素对应的第一向量,和/或所述至少一个无效第一向量包括第二组无效第一向量,所述第二组无效第一向量包括所包括的P个第一元素的数值均为所述预设值的第一向量,所述至少一个无效第二元素包括与所述第二组无效第一向量对应的第二元素,P为大于1的正整数。
例如,在本公开至少一实施例提供的数据处理装置中,所述压缩处理单元执行对所述多个第一向量和所述第二向量的压缩处理时,包括执行以下操作:获取所述多个第二元素的数值,基于所述多个第二元素的数值,对所述多个第一向量和所述第二向量进行第一压缩处理,和/或获取所述多个第一向量中的所有第一元素的数值,基于所述所有第一元素的数值,对所述多个第一向量和所述第二向量进行第二压缩处理。
例如,本公开至少一实施例提供的数据处理装置还包括:存储单元,其中,所述存储单元被配置为存储所述第二向量,所述多个第二元素中每个被选择的第二元素作为目标第二元素,所述多个第一向量中与所述目标第二元素对应的第一向量为目标第一向量,每个第二元素具有对应的元素存储信息,所述压缩处理单元包括预处理模块,所述预处理模块被配置为:对于所述目标第一向量和所述目标第二元素,获取所述目标第二元素的元素存储信息,基于所述元素存储信息,从所述存储单元中提取所述目标第二元素;确定所述目标第二元素的数值,基于所述目标第二元素的数值,对所述目标第一向量和所述目标第二元素进行所述第一压缩处理。
例如,本公开至少一实施例提供的数据处理装置还包括读取单元,其中,所述预处理模块执行基于所述目标第二元素的数值,对所述目标第一向量和所述目标第二元素进行所述第一压缩处理时,包括执行以下操作:判断所述目标第二元素的数值是否为所述预设值,响应于所述目标第二元素的数值为所述预设值,输出第一信号至所述读取单元,以通知所述读取单元不再执行对所述目标第一向量的读取操作,其中,所述目标第二元素被处理为无效,所述目标第一向量被处理为无效,响应于所述目标第二元素的数值不为所述预设值,将所述目标第二元素存入第一缓存队列,并输出第二信号至所述读取单元,以通知所述读取单元执行对所述目标第一向量的读取操作,其中,所述目标第二元素作为压缩后第二向量中的一个元素,所述目标第一向量作为所述第二组第一向量中的一个第一向量。
例如,在本公开至少一实施例提供的数据处理装置中,所述读取单元被配置为,响应于接收到所述第一信号,不执行对所述目标第一向量的读取操作,响应于接收到所述第二信号,执行对所述目标第一向量的读取操作,并将所述目标第一向量发送至所述压缩处理单元。
例如,在本公开至少一实施例提供的数据处理装置中,所述压缩处理单元还包括判断模块,所述判断模块被配置为:在接收到所述第二向量时,将所述第二向量存入所述存储单元;在接收到所述多个第一向量时,对所述多个第一向量进行所述第二压缩处理。
例如,在本公开至少一实施例提供的数据处理装置中,所述多个第一向量中每个被选择的第一向量作为目标第一向量,所述判断模块对所述多个第一向量进行所述第二压缩处理时,包括执行以下操作:判断所述目标第一向量包括的P个第一元素的数值是否均为所述预设值,响应于所述目标第一向量包括的P个第一元素的数值均为所述预设值,输出第三信号至所述预处理模块,并丢弃所述目标第一向量包括的P个第一元素,其中,所述目标第一向量被处理为无效,响应于所述目标第一向量包括的P个第一元素的数值不均为所述预设值,输出第四信号至所述预处理模块,并输出所述目标第一向量,将所述目标第一向量作为所述第二组第一向量中的一个第一向量。
例如,在本公开至少一实施例提供的数据处理装置中,所述多个第二元素中与所述目标第一向量对应的第二元素为目标第二元素,所述预处理模块还被配置为对所述第二向量进行所述第二压缩处理,所述预处理模块执行对所述第二向量进行所述第二压缩处理时,包括执行以下步骤:针对所述目标第二元素,响应于所述第三信号,将所述目标第二元素从所述第一缓存队列中去除,其中,所述目标第二元素被处理为无效;响应于所述第四信号,输出所述目标第二元素,并将所述目标第二元素作为所述压缩后第二向量的一个元素。
例如,本公开至少一实施例提供的数据处理装置还包括元素级压缩单元,其中,所述元素级压缩单元被配置为,在接收到来自所述压缩处理单元的所述第二组第一向量和所述压缩后第二向量时:对所述第二组第一向量进行第三压缩处理,以得到至少一个第三向量,基于所述至少一个第三向量,对所述压缩后第二向量进行处理,以得到与所述至少一个第三向量一一对应的至少一个第四向量,其中,所述至少一个第三向量和所述至少一个第四向量中均不存在数值为所述预设值的元素。
例如,在本公开至少一实施例提供的数据处理装置中,所述元素级压缩单元包括第一处理模块、第二处理模块和缓存控制模块,所述第一处理模块被配置为接收从所述压缩处理单元输出的所述至少一个第一向量,并对所述至少一个第一向量进行第三压缩处理,以生成所述至少一个第三向量;所述第二处理模块被配置为接收从所述压缩处理单元输出的所述压缩后第二向量,并基于所述至少一个第三向量,对所述压缩后第二向量进行处理,以生成所述至少一个第四向量;所述缓存控制模块被配置为对所述第一处理模块的状态和所述第二处理模块的状态进行监控,基于所述第一处理模块的状态和所述第二处理模块的状态,控制所述第一处理模块和所述第二处理模块输出所述至少一个第三向量和所述至少一个第四向量。
例如,在本公开至少一实施例提供的数据处理装置中,所述第一处理模块包括第一调度模块和P个第一缓存子模块,所述第二处理模块包括第二调度模块和P个第二缓存子模块,所述P个第一缓存子模块与所述P个第二缓存子模块一一对应,所述第一调度模块被配置为针对所述目标第一向量,接收所述目标第一向量,基于所述目标第一向量包括的P个第一元素的数值,生成所述目标第一向量对应的缓存写入信息,并基于所述缓存写入信息,将所述P个第一元素中数值不为所述预设值的第一元素写入对应的第一缓存子模块;所述第二调度模块被配置为接收所述目标第二元素和所述缓存写入信息,基于所述缓存写入信息,将所述目标第二元素写入对应的第二缓存子模块;所述P个第一缓存子模块被配置为,在所述缓存控制模块的控制下,输出所述P个第一缓存子模块中存储的第一元素,以得到第三向量;所述P个第二缓存子模块被配置为,在所述缓存控制模块的控制下,输出所述P个第二缓存子模块中存储的第二元素,以得到与所述第三向量对应的第四向量。
例如,在本公开至少一实施例提供的数据处理装置中,所述第二调度模块执行基于所述缓存写入信息,将所述目标第二元素写入对应的第二缓存子模块时,包括执行以下操作:基于所述缓存写入信息,确定所述P个第一元素中数值不为所述预设值的第一元素;基于所述P个第一元素中数值不为所述预设值的第一元素,确定所述对应的第二缓存子模块;将所述目标第二元素写入所述对应的第二缓存子模块。
例如,本公开至少一实施例还提供一种并行处理器,所述并行处理器包括多个并行存储单元和共享存储器,其中,每个并行存储单元包括同步子单元、冲突解决子单元、数据读取子单元、输出子单元、选择子单元以及如本公开任一实施例所述的数据处理装置,所述同步子单元被配置为接收输入参数;所述冲突解决子单元被配置为基于所述输入参数,获得元素存储信息,并将所述元素存储信息发送至所述数据处理装置,接收所述数据处理装置发送的第一信号或第二信号,其中,所述元素存储信息为所述第二向量中的待处理的第二元素对应的元素存储信息;所述数据读取子单元被配置为在所述冲突解决子单元接收到所述第二信号时,从所述共享存储器中读取与所述待处理的第二元素对应的第一向量,并将所述第一向量发送至所述输出子单元;所述输出子单元被配置为执行对所述第一向量的格式匹配处理,并将格式匹配后的第一向量发送至所述数据处理装置。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1A为一种卷积运算示意图;
图1B为本公开一实施例提供的卷积处理的示意图;
图1C为本公开一实施例提供的一种并行处理器的示意性结构图;
图1D为并行处理器执行乘加运算的示意图;
图2为本公开至少一实施例提供的一种数据处理方法的示意性流程图;
图3A为本公开至少一实施例提供的并行处理器执行乘加运算的过程示意图;
图3B为本公开至少一实施例提供的并行处理器执行乘加运算的过程示意图;
图3C为本公开至少一实施例提供的并行处理器执行乘加运算的过程示意图;
图4A为本公开至少一实施例提供的另一种数据处理方法的流程图;
图4B为本公开至少一实施例提供的第一中间向量的示意图;
图4C为本公开至少一实施例提供的并行处理器执行乘加运算的过程示意图;
图5A为本公开至少一实施例提供的数据处理装置的示意性结构图;
图5B为本公开至少一实施例提供的数据处理装置的示意性结构图;
图5C为本公开至少一实施例提供的元素级压缩单元的示意性结构图;
图6为本公开至少一实施例提供的并行存储单元的示意性结构图。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
卷积神经网络(Convolutional Neural Networks,CNN)通常由输入层、卷积层、激活函数、池化层、全连接层等组成,在卷积神经网络的输入层中,卷积核会被重复利用以对输入特征图进行卷积操作,此时,一个输入特征图往往对应于多个卷积核,多个卷积核分别用于提取不同方向的特征。
图1A为一种卷积运算示意图,如图1A所示,在该卷积运算中,输入(1)为输入特征图,输入(2)为该卷积运算中的K个卷积核,利用该K个卷积核分别对输入特征图进行卷积处理,得到输出(3)中的K个输出特征图。
例如,在卷积运算过程中,对于K个卷积核中的某个卷积核,根据该卷积核的尺寸以及移动步长(stride),在输入特征图中逐个选择对应大小的处理区域,针对每个处理区域,将处理区域与该卷积核中对应位置的元素相乘并累加,得到每个处理区域对应的卷积处理结果,基于与多个处理区域对应的多个卷积处理结果,得到对应该卷积核的输出特征图。
例如,对于图1A中的输入特征图中由虚线框限定的阴影区域,该阴影区域即为一个处理区域,将K个卷积核与该处理区域分别进行卷积运算时,得到的K个卷积处理结果分别为K个输出特征图中的位于第二行第二列的元素Ma11、元素Na11...以及元素Za11。
例如,在神经网络的输出层中,可能利用一个卷积核分别对多个输入特征图进行卷积处理,以得到多个特征图。例如,图1B为本公开一实施例提供的卷积处理的示意图,如图1B所示,该卷积处理中的输入(3)为K个输入特征图,输入(4)为1个卷积核,输出(2)为K个输出特征图,卷积运算过程与前述过程类似,这里不再赘述。
在将处理区域与某个卷积核进行卷积运算时,本质上是将处理区域和该卷积核中对应位置的元素相乘,得到多个相乘结果,并将多个相乘结果进行累加以得到一个卷积处理结果,因而,卷积处理可以转换为简单的乘加运算。
例如,并行处理器可以包括多核处理器、图形处理器(GPU)以及数字信号处理器等。由于卷积处理可以转换为简单的乘加运算,因而可以利用并行处理器实现卷积处理,具体过程如下所述。例如,利用并行处理器可以完成卷积神经网络的运算等,实现图像识别、图像处理等。
图1C为本公开一些实施例提供的一种并行处理器的示意性结构图。如图1C所示,并行处理器可以包括多个矢量处理单元(Vector Process Unit,简称VPU),例如矢量处理单元0、矢量处理单元1、矢量处理单元2、矢量处理单元3等。例如,1个矢量处理单元可以包括多个并行存储单元(Parallel Memory Unit,简称PMU),并行存储单元配置为存储用于矢量计算的中间数据,例如,以矢量处理单元0为例,矢量处理单元0包括并行存储单元PMU0、并行存储单元PMU1、并行存储单元PMU2、并行存储单元PMU3等。例如,一个并行存储单元对应于多个矢量乘加器(Vector Multiply Accumulate,简称VMAC),以为多个矢量乘加器提供用于乘加运算的中间数据。
例如,并行处理器在执行乘加运算时通常以工作组为单位进行。例如,在一个并行存储单元中,全局执行空间被划分为大量大小相等的工作项(work_item)集合,这些工作项集合也称为workgroup(工作集合),每个workgroup包括多个工作项,根据workgroup包括的工作项的数量,可以将每个workgroup包括的多个工作项进一步划分成多个子集合(subgroup),例如每个subgroup包括多个工作项,例如,64个工作项,每个workgroup包括多个subgroup,此时,工作组可以为workgroup或者subgroup。具体执行乘加运算时,每个工作项执行对应于一个乘加结果的运算,多个并行处理的工作项可以同时得到多个乘加结果。
图1D为并行处理器执行乘加运算的过程示意图,该并行处理器中的一个并行存储单元包括64个工作项,每个工作项用于执行对应于一个乘加结果的乘加运算。
如图1D所示,64列被乘数向量分别为被乘数向量1、被乘数向量2、被乘数向量3...、被乘数向量m、被乘数向量m+1...,例如,被乘数向量1包括被乘数a(0)、被乘数a(1)...、被乘数a(n-1),被乘数向量2包括被乘数b(0)、被乘数b(1)...、被乘数b(n-1),被乘数向量3包括被乘数c(0)、被乘数c(1)...、被乘数c(n-1),以此类推,关于其他被乘数向量的参数定义与上述内容相似,这里不再赘述。
如图1D所示,乘数向量包括乘数M(0)、乘数M(1)...、乘数M(n-1)。64列被乘数向量分别与乘数向量进行乘加处理,得到64个乘加结果:Ma、Mb、Mc…、Mo、Mp,其中,Ma为乘加结果(1)、Mb为乘加结果(2)、Mc为乘加结果(3)…、Mo为乘加结果(m)、Mp为乘加结果(m+1)。
例如,对于工作项1,其执行被乘数向量1和乘数向量的乘加运算,以得到乘加结果(1),即Ma,该乘加运算可以表示为公式(1):
其中,a(i)为被乘数向量1中的第i个被乘数,M(i)为乘数向量中的第i个乘数。
同样的,其他被乘数向量和乘数向量的乘加运算过程与工作项1相同,这里不再赘述。
例如,64个被乘数向量中位于同一行的被乘数,在同一个操作周期中由不同工作项并行地执行乘法运算,例如,64个被乘数向量中位于不同行的被乘数,在不同操作周期中执行乘法运算。
例如,在并行处理器中,64个工作项并行工作,每个工作项在一个操作周期中计算得到一个被乘数与一个乘数的相乘结果,执行n次操作后,也即经过n个操作周期后,将该工作项得到的n个相乘结果累加,得到该工作项对应的乘加运算结果。
例如,在第1个操作周期中,同时计算a(0)×M(0)、b(0)×M(0)、c(0)×M(0)...、o(0)×M(0)、p(0)×M(0)...,得到64个相乘结果,分别为Ma(0)、Mb(0)、Mc(0)...、Mo(0)、Mp(0)...;在第二次操作中,同时计算a(1)×M(1)、b(1)×M(1)、c(1)×M(1)...、o(1)×M(1)、p(1)×M(1)...,得到64个相乘结果,分别为Ma(1)、Mb(1)、Mc(1)...、Mo(1)、Mp(1)...;以此类推,在第n次操作中,同时计算a(n-1)×M(n-1)、b(n-1)×M(n-1)、c(n-1)×M(n-1)...、o(n-1)×M(n-1)、p(n-1)×M(n-1)...,得到64个相乘结果,分别为Ma(n-1)、Mb(n-1)、Mc(n-1)...、Mo(n-1)、Mp(n-1)...。之后,对Ma(0)、Ma(1)...和Ma(n-1)执行累加处理得到乘加结果(1)Ma,对Mb(0)、Mb(1)...和Mb(n-1)执行累加运算得到乘加结果(2)Mb,对Mc(0)、Mc(1)...和Mc(n-1)执行累加运算得到乘加结果(2)Mc,以此类推,得到64个乘加结果(1)Ma、乘加结果(2)Mb、乘加结果(3)Mc...、乘加结果(m)Mo、乘加结果(m+1)Mp...。
下面结合图1A和图1D具体说明利用并行处理器执行卷积运算的处理过程。当K小于等于64时,可以将输入特征图中的a00、a01、a02、a10、a11、a12、a20、a21和a22作为图1D中的乘数M(0)、乘数M(1)...、乘数M(8),将K个卷积核中的第一个卷积核中的元素M00、元素M01、元素M02、元素M10、元素M11、元素M12、元素M20、元素M21和元素M22,作为被乘数a(0)、被乘数a(1)...、被乘数a(8),并行处理器中对应的工作项基于前述过程进行乘加运算,得到卷积处理结果Ma00;类似的,可以将输入特征图中的a00、a01、a02、a10、a11、a12、a20、a21和a22作为图1D中的乘数M(0)、乘数M(1)...、乘数M(8),可以将第二个卷积核中的元素N00、元素N01、元素N02、元素N10、元素N11、元素N12、元素N20、元素N21和元素N22,作为被乘数b(0)、被乘数b(1)...、被乘数b(8),并行处理器中对应的工作项基于前述过程进行乘加运算,得到卷积处理结果Na00,以此类推,得到K个卷积处理结果Ma00、Na00…、Za00。
之后,不断将输入特征图中不同的处理区域的参数更新至乘数向量,基于上述过程进行处理,最终得到K个输出特征图。
例如,对于图1B所示的卷积处理过程,当K小于等于64时,可以将输入(4)中的元素M00、元素M01、元素M02、元素M10、元素M11、元素M12、元素M20、元素M21和元素M22,作为图1D中的乘数M(0)、乘数M(1)...、乘数M(8),将输入(3)中的第一个输入特征图中的元素a00、元素a01、元素a02、元素a10、元素a11、元素a12、元素a20、元素a21和元素a22,作为被乘数a(0)、被乘数a(1)...、被乘数a(8),并行处理器中对应的工作项基于前述过程进行乘加运算,得到卷积处理结果Ma00,该卷积处理结果为K个输出特征图(图1B的输出(2))中的第一个输出特征图中位于第一行第一列的元素;类似地,可以将输入(4)中的元素M00、元素M01、元素M02、元素M10、元素M11、元素M12、元素M20、元素M21和元素M22,作为图1D中的乘数M(0)、乘数M(1)...、乘数M(8),将输入(3)中的第二个输入特征图中的元素b00、元素b01、元素b02、元素b10、元素b11、元素b12、元素b20、元素b21和元素b22,作为被乘数b(0)、被乘数b(1)...、被乘数b(8),并行处理器中对应的工作项基于前述过程进行乘加运算,得到卷积处理结果Mb00,该卷积处理结果为K个输出特征图中的第二个输出特征图中位于第一行第一列的元素,以此类推,后续过程不再赘述。
需要说明的是,图1A至图1D所述的利用并行处理器执行卷积运算的过程为示意性的,本领域技术人员可以根据计算需求,选择卷积核作为并行处理器中的乘数向量或者被乘数向量,对应的,选择输入特征图作为并行处理器中的被乘数向量或者乘数向量。
在如上所述的过程中,当多个乘数或者多个被乘数中的元素的数值为0时,此时是否进行该元素的数值计算对结果不产生影响。
例如,如果卷积核为稀疏矩阵,那么矩阵中过多的0值会导致数据的重复读取和无效的乘积累加运算(Multiply Accumulate,MAC),从而导致计算资源的浪费。例如,在卷积神经网络中,卷积核中的元素的数值有一定几率为0,参考图1B和图1D所述的处理过程,卷积核被作为乘数向量,卷积核中的数值为0的元素会产生无效计算,从而导致计算资源的浪费。
例如,在神经网络的计算过程中,随着特征图的通道数不断增多,也即每个卷积层中的卷积核的数量不断增多,卷积核的稀疏性不断增强,并且随着激活函数的应用,进一步增多了数据的无效重复读取以及无效的乘积累加运算。
例如,在卷积神经网络的输出层中,特征图经过多轮的特征提取,特征图中可能存在大量数值为0的像素点,例如,参考图1B和图1D所述的处理过程,若K个输入特征图中位于相同位置的元素的数值均为0,则可能存在一个操作周期中,同时进行乘法运算的多个被乘数(例如a00、b00...、m00...)的数值均为0,此时在该操作周期中执行的乘法计算为无效计算,从而导致计算资源的浪费。
例如,参考图1A和图1D所述的处理过程,当卷积核的稀疏性较强时,若K个卷积核中位于相同位置的元素的数值均为0,此时在该操作周期中执行的乘法计算也为无效计算,导致计算资源的浪费。
对于上述情况,常规的利用并行处理器进行矩阵计算的方法和思路并不能很好的适应于人工智能的发展需求,这些无效计算和重复的数据读取无论对效率还是功耗而言都是一种浪费。因此,在卷积等应用乘加运算的处理过程中,如何在保持整体运算流程的基础上,减少无用的乘加运算成为优化神经网络在并行处理器中运算的关键。
本公开至少一实施例提供一种数据处理方法、数据处理装置。该数据处理方法包括:对多个第一向量和第二向量进行压缩处理,用于去除多个第一向量中的至少一个无效第一向量和第二向量中的至少一个无效第二元素,以得到压缩后的第二组第一向量和压缩后第二向量,其中,第二组第一向量为第一组第一向量的子集,至少一个无效第二元素包括数值为预设值的第二元素,至少一个无效第一向量包括第一组无效第一向量,第一组无效第一向量包括与至少一个无效第二元素对应的第一向量,和/或至少一个无效第一向量包括第二组无效第一向量,第二组无效第一向量包括所包括的P个第一元素的数值均为预设值的第一向量,至少一个无效第二元素包括与第二组无效第一向量对应的第二元素,P为大于1的正整数。
该数据处理方法能够通过压缩处理,删除运算数据中的无效数据,减少运算过程中的无效计算,在获得相同的计算结果的同时可以大幅减少所需要的操作周期,对于通用的乘加运算存在广泛的适应性。
需要说明的是,在本公开中均以乘加运算为例进行描述,但本公开所提供的数据处理方法不限于乘加运算,例如被乘数和乘数的乘法运算也可以是除法运算等,乘法结果的相加运算也可以是相减运算等,本公开对此不作限制,本领域技术人员在不脱离本发明宗旨情况下所得到的其他变形,均在本公开的保护范围内。
下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
例如,本公开至少一实施例提供的数据处理方法应用于乘加运算,这里,乘加运算用于实现将第一组第一向量和第二向量进行乘加操作,第一组第一向量包括多个第一向量,每个第一向量包括P个第一元素,第二向量包括多个第二元素,多个第一向量与多个第二元素一一对应,这里,P为大于1的正整数,例如,P为一个工作组包括的工作项的总数,例如P为64。本公开的下面的实施例以P为64为例进行描述,但本公开不限于此,P的值可以根据具体实施情况设置。
例如,第一向量包括在同一个操作周期中执行乘法操作的多个被乘数,第二向量包括多个乘数,在一个操作周期中,第一向量与第二向量中对应的一个第二元素分别相乘。例如,如图1D所示,第一组第一向量中的第一向量(0)可以由被乘数a(0)、被乘数b(0)、被乘数c(0)...、被乘数o(0)、被乘数p(0)...组成,第一组第一向量中的第一向量(1)可以由被乘数a(1)、被乘数b(1)、被乘数c(1)...、被乘数o(1)、被乘数p(1)...组成,以此类推;第二向量可以为乘数向量,由乘数M(0)、乘数M(1)、乘数M(2)...、乘数M(n-1)组成;第一向量(0)对应于乘数M(0),第一向量(1)对应于乘数M(1),以此类推。
例如,被乘数和乘数可以为如前所述的卷积核中的元素或者输入特征图中的元素,当然,被乘数和乘数也可以为其他乘加运算场景下的乘加参数,本公开对此不作限制。
例如,本公开至少一实施例提供的数据处理方法包括:对多个第一向量和第二向量进行压缩处理,用于去除多个第一向量中的至少一个无效第一向量和第二向量中的至少一个无效第二元素,以得到压缩后的第二组第一向量和压缩后第二向量。
例如,第二组第一向量为第一组第一向量的子集,也即第二组第一向量包括多个第一向量中的M个第一向量,这里,M为正整数且小于多个第一向量的总数。
例如,至少一个无效第二元素包括数值为预设值的第二元素,至少一个无效第一向量包括第一组无效第一向量,第一组无效第一向量包括与至少一个无效第二元素对应的第一向量;或者,至少一个无效第一向量包括第二组无效第一向量,第二组无效第一向量包括所包括的P个第一元素的数值均为预设值的第一向量,至少一个无效第二元素包括与第二组无效第一向量对应的第二元素。
例如,至少一个无效第二元素包括数值为预设值的第二元素,至少一个无效第一向量包括第一组无效第一向量,第一组无效第一向量包括与至少一个无效第二元素对应的第一向量,并且,至少一个无效第一向量还包括第二组无效第一向量,第二组无效第一向量包括所包括的P个第一元素的数值均为预设值的第一向量,至少一个无效第二元素还包括与第二组无效第一向量对应的第二元素。
例如,在一些实施例中,预设值为0,当然,根据实际计算需要,可以设置预设值为其他表示无效计算的数值,本公开对此不作限制。
本公开所提供的数据处理方法为对第一组第一向量和第二向量进行数据压缩,所得到的第二组第一向量和压缩后第二向量在后续操作中输入对应的工作项中以由并行处理器执行如前所述的乘加运算。
图2为本公开至少一实施例提供的一种数据处理方法的示意性流程图。
例如,如图2所示,本公开实施例提供的数据处理方法的一个示例可以包括步骤S10至S20。
在步骤S10,基于多个第二元素的数值,对多个第一向量和第二向量进行第一压缩处理。
在步骤S20,基于多个第一向量中的所有第一元素的数值,对多个第一向量和第二向量进行第二压缩处理。
例如,在一些实施例中,压缩处理可以包括步骤S10中的第一压缩处理,例如,在另一些实施例中,压缩处理可以包括步骤S20中的第二压缩处理,例如,在另一些实施例中,压缩处理可以包括步骤S10中的第一压缩处理和步骤S20中的第二压缩处理,本领域技术人员可以根据需要进行选择,本公开对此不作限制。
此外,在本公开中,步骤S10和步骤S20的执行顺序可以根据需要进行适应性调整,本公开对两个步骤的执行顺序不作限制。
例如,如前所述,当某个乘数的数值为0时,此时在该操作周期中所产生的乘法运算是无效运算,因此可以不执行与该乘数相关的乘加运算。
例如,多个第二元素中每个被选择的第二元素作为目标第二元素,多个第一向量中与目标第二元素对应的第一向量为目标第一向量,步骤S10可以包括:对于目标第一向量和目标第二元素,判断目标第二元素的数值是否为预设值,响应于目标第二元素的数值为预设值,丢弃目标第二元素,不执行对目标第一向量的读取操作,并将目标第二元素作为无效第二元素,将目标第一向量作为无效第一向量;响应于目标第二元素的数值不为预设值,存储目标第二元素,执行对目标第一向量的读取操作。也就是说,当目标第二元素的数值不为预设值时,将目标第二元素作为压缩后第二向量中的一个元素,将目标第一向量作为第二组第一向量中的一个第一向量。
图3A为本公开至少一实施例提供的并行处理器执行乘加运算的过程示意图。
例如,如前所述,每个被乘数向量包括的多个被乘数按时间顺序依次由对应的工作项在不同的操作周期中进行乘法处理,在同一个操作周期中执行乘法运算的多个被乘数构成第一向量,第二向量即为前述的乘数向量。
例如,在一些实施例中,如图3A所示,第一组第一向量包括9个第一向量,分别为第一向量(0)至第一向量(8),第二向量包括9个第二元素,分别为第二元素M(0)至第二元素M(8),每个第一向量对应一个第二元素,该第二元素用于与第一向量进行乘法处理,例如,第一向量(0)对应于第二元素M(0),第一向量(1)对应于第二元素M(1)(也即图3A中的“0”),第一向量(2)对应于第二元素M(2)等。
在一个操作周期中,各个工作项分别将第一向量中的多个第一元素与对应的第二元素相乘以得到各个工作项在一个操作周期中的相乘结果,在经过9个操作周期后,每个工作项将其在9个操作周期中分别得到的9个相乘结果累加,得到每个工作项对应的乘加结果,也即图3A中的乘加结果(0)Ma、乘加结果(1)Mb、乘加结果(2)Mc…、乘加结果(7)Mh、乘加结果(8)Mi,具体过程可以参考图1D的相关描述,这里不再赘述。
例如,在本公开的并行处理器的示意图中,图中示出的第一元素或第二元素除标记为“0”以外,其他第一元素或第二元素的数值均不为0,并且,除示出的被乘数向量1、被乘数向量2、被乘数向量3、被乘数向量m、被乘数向量m+1外,其他未示出的被乘数向量中的被乘数的数值均为0。
例如,将第二元素M(0)作为目标第二元素,将第二元素M(0)对应的第一向量(0)作为目标第一向量,由于第二元素M(0)的数值不为0(预设值),存储第二元素M(0),读取第一向量(0)。例如,在压缩处理仅包括第一压缩处理时,可以将第二元素M(0)作为压缩后第二向量中的一个元素,将第一向量(0)作为第二组第一向量中的一个第一向量,并行处理器可以对第一向量(0)和第二元素M(0)执行乘法运算。
例如,将第二元素M(1)作为目标第二元素,将第二元素M(1)对应的第一向量(1)作为目标第一向量,由于第二元素M(1)的数值为0,丢弃第二元素M(1),不读取第一向量(1),即将第二元素M(1)作为无效第二元素,将第一向量(1)作为无效第一向量。
例如,将第二元素M(2)作为目标第二元素,将第二元素M(2)对应的第一向量(2)作为目标第一向量,由于第二元素M(2)的数值不为0,存储第二元素M(2),读取第一向量(2)。例如,在压缩处理仅包括第一压缩处理时,可以将第二元素M(2)作为压缩后第二向量中的一个元素,将第一向量(2)作为第二组第一向量中的一个第一向量,并行处理器可以对第一向量(2)和第二元素M(2)执行乘法运算。
对第一向量(3)至第一向量(8)以及第二向量中的其他第二元素进行第一压缩处理的过程与上述过程相同,这里不再赘述。
图3B为本公开至少一实施例提供的并行处理器执行乘加运算的过程示意图。例如,图3B所示的并行处理器中的数据为第二组第一向量和压缩后第二向量。图3B所示的示例中,第二组第一向量和压缩后第二向量为对图3A所示的第一组第一向量和第二向量执行第一压缩处理后得到的向量。
如图3B所示,相比于图3A所示的第一组第一向量和第二向量,经过第一压缩处理后,第二组第一向量包括7个第一向量,压缩后第二向量包括7个元素,第二向量中的两个数值为0的元素(即第二元素M(1)和第二元素M(7))被作为无效第二元素而去除,且该两个无效第二元素对应的第一向量(1)和第一向量(7)也被作为无效第一向量而去除,不再执行它们对应的乘法运算。
经过上述过程的第一压缩处理,可以将第二向量中数值为0的第二元素作为无效第二元素而去除,将第一组第一向量中与这些无效第二元素对应的第一向量作为无效第一向量而去除,从而减少无效的乘加运算,提升计算效率。若目标第二元素的数值为0,则后续的乘加操作和读取操作均无需执行,不仅可以减少无效的数据计算,还可以减少无效的数据读取,降低读取数据带来的功耗。
例如,多个第一向量中每个被选择的第一向量作为目标第一向量,多个第二元素中与目标第一向量对应的第二元素为目标第二元素,步骤S20可以包括:对于目标第一向量和目标第二元素,判断目标第一向量包括的P个第一元素的数值是否均为预设值,响应于目标第一向量包括的P个第一元素的数值均为预设值,将目标第二元素作为无效第二元素,将目标第一向量作为无效第一向量,丢弃目标第一向量和目标第二元素;响应于P个第一元素的数值不均为预设值,将目标第一向量作为第二组第一向量中的一个第一向量,将目标第二元素作为压缩后第二向量中的一个元素。
例如,对于图3A所示的第一组第一向量和第二向量,在步骤S20中,可以将第一向量(3)作为目标第一向量,将第一向量(3)对应的第二元素M(3)作为目标第二元素,由于第一向量(3)包括的64个第一元素的数值均为0,将第一向量(3)作为无效第一向量,将第二元素M(3)作为无效第二元素,若已存储或读取第二元素M(3)和第一向量(3),则丢弃第二元素M(3)和第一向量(3)。
例如,将第一向量(4)作为目标第一向量,将第一向量(4)对应的第二元素M(4)作为目标第二元素,由于第一向量(4)包括的64个第一元素的数值不均为0,可以将目标第一向量作为第二组第一向量中的一个第一向量,将目标第二元素作为压缩后第二向量中的一个元素。
例如,在一些实施例中,也可以仅针对第一向量包括的第一元素的数值进行第二压缩处理,本领域技术人员根据需要选择即可,本公开对此不作限制。
图3C为本公开至少一实施例提供的并行处理器执行乘加运算的过程示意图。例如,图3C所示的并行处理器的中的数据为第二组第一向量和压缩后第二向量。图3C所示的示例中,第二组第一向量和压缩后第二向量为对图3A所示的第一组第一向量和第二向量执行第一压缩处理和第二压缩处理后得到的向量。
如图3C所示,相比于图3A所示的第一组第一向量和第二向量,经过第一压缩处理和第二压缩处理后,第二组第一向量包括5个第一向量,压缩后第二向量包括5个元素。相比于图3A所示的多个第一向量和第二向量,在经过第二压缩处理后,多个第一向量中的两个所包括的64个第一元素的数值均为0的第一向量被作为无效第一向量而去除,且该两个无效第一向量对应的第二元素M(3)和第二元素M(5)也被作为无效第二元素而去除,不再执行它们对应的乘法运算。
如图3C所示,经过第一压缩处理和第二压缩处理,可以将第一向量中所包括的第一元素的数值均为0的第一向量和预设值的第二元素对应的第一向量作为无效第一向量而去除,将第二向量中与这些无效第一向量对应的第二元素作为无效第二元素而去除,从而减少无效的乘加运算,提升计算效率。
例如,第二组第一向量包括第一组第一向量的多个第一向量中的M个第一向量,在图3B所示的示例中,M为7,在图3C所示的示例中,M为5。
例如,在乘加运算中,对于第二组第一向量包括的M个第一向量中的每个待处理的第一向量,将待处理的第一向量中的P个第一元素分别与待处理的第一向量对应的第二元素相乘,以得到待处理的第一向量对应的P个第一中间结果,并将M个第一向量分别对应的P个第一中间结果分别对应累加,得到P个乘加结果。例如,如图3C所示,在执行将M个第一向量分别对应的P个第一中间结果分别对应累加时,将每个被乘数向量对应的多个第一中间结果进行累加以得到一个对应的乘加结果。例如,以被乘数向量1为例进行说明,被乘数向量1包括五个元素,分别为第一向量(0)中的元素0、第一向量(2)中的元素a(2)、第一向量(4)中的元素a(4)、第一向量(6)中的元素a(6)和第一向量(8)中的元素a(8),在五个操作周期中,被乘数向量1中的五个元素分别与压缩后第二向量中的五个元素相乘,以得到的五个第一中间结果(分别为M(0)*0、M(2)*a(2)、M(4)*a(4)、M(6)*a(6)、M(8)*a(8)),然后该五个第一中间结果累加,以得到乘加结果(0)Ma。
需要说明的是,在本公开中,乘加运算的具体执行过程可以根据需要实现。例如,可以每获得一个第一中间结果时就执行累加,不存储第一中间结果,仅保存累加得到的中间结果,在经过五个操作周期后得到乘加结果;例如,可以在获得所有第一中间结果后一起执行累加处理,以得到乘加结果,本公开对此不作限制。
具体的乘加运算过程参见图1D所述的相关内容,这里不再赘述。
结合图3A至图3C可以看出,经过第一压缩处理后,完成一轮乘加运算所需的操作周期由9个下降至7个;在此基础上经过第二压缩处理后,完成一轮乘加运算所需的操作周期由7个下降至5个,通过第一压缩处理和第二压缩处理可以大幅减少得到一个乘加结果所需要的操作周期,提升运算效率。
由于一个第二元素与多个第一元素相对应,上述第一压缩处理和第二压缩处理只能进行低密度的乘加运算的压缩。如图3C所示,如果一个第一向量中存在一个第一元素的数值不为0,则该第一向量无法被作为无效第一向量而去除,在工作项执行乘加运算的过程,仍会对该第一向量中的所有数值为0的第一元素执行数据读取和乘加运算,但这些运算本质上都是无效运算。
图4A为本公开至少一实施例提供的另一种数据处理方法的流程图。
如图4A所示,本公开至少一实施例提供的数据处理方法还步骤S30。
在步骤S30中,对第二组第一向量进行第三压缩处理,以得到至少一个第三向量;基于至少一个第三向量,对压缩后第二向量进行处理,以得到与至少一个第三向量一一对应的至少一个第四向量,例如,至少一个第三向量和至少一个第四向量中均不存在数值为预设值的元素。
例如,对第二组第一向量进行第三压缩处理,以得到至少一个第三向量,可以包括:将第二组第一向量中的所有数值为预设值的第一元素设置为空缺元素,以得到与至少一个第一向量一一对应的至少一个第一中间向量,其中,空缺元素表示未设置任何数值的元素;基于至少一个第一中间向量,得到至少一个第三向量。
例如,每个第一中间向量仍包括P个第一元素,在每个第一中间向量中,已被删除的第一元素所在的位置描述为“空缺位置”,空缺位置对应的元素为空缺元素,也即空缺元素所在位置中未填入任何数值。
例如,每个工作项执行对应于一个乘加结果的运算,也即执行对应于一个被乘数向量的计算,因而对于每个被乘数向量,可以将数值为0的元素删除后,从该被乘数向量中寻找原本应当在后续操作周期内执行乘法运算的数值不为0的第一元素,将该第一元素提前至当前操作周期内执行乘法运算。
基于上述原理,基于至少一个第一中间向量,得到至少一个第三向量,可以包括:对于第s1个第一中间向量中的空缺元素,可以从第s2个第一中间向量中选择该空缺元素对应的第一元素(该第一元素与该空缺元素均属于同一个被乘数向量),将该第一元素填入第s1个第一中间向量中的空缺元素对应的空缺位置,并且此时,将第s2个第一中间向量中的该第一元素所在位置也设定为空缺位置,这里,s1和s2为正整数且小于等于第一中间向量的总数,s2大于s1,也即第s2个第一中间向量在第s1个第一中间向量之后执行乘法操作;在对所有第一中间向量执行上述处理后,得到至少一个第三向量。
例如,在一些实施例中,一个或多个被乘数向量包括的被乘数的数值均为0,则该被乘数向量中的各个被乘数均被设置为空缺元素,从而所得到的第三向量中对应的位置仍为空缺位置。
例如,在一些实施例中,当被乘数向量为稀疏矩阵时,由于数值为0的第一元素的分布无规律且数量较多,经过第三压缩处理所得到的第三向量中仍可能存在有空缺位置,可以标记第三向量中的这些空缺位置为无效状态,从而在并行处理器执行对第三向量的乘法运算时,不执行或关闭对这些空缺位置的乘法处理。
例如,在另一些实施例中,可以将不同乘加结果对应的多条指令的计算数据组合打包,例如,对于图1A所述的乘加处理过程,可以将多个待处理区域的计算数据组合起来,共同进行第三压缩处理。
例如,至少一个第三向量中的每个被选择的第三向量为目标第三向量,目标第三向量包括P个第三元素,P个第三元素中的至少部分第三元素为第一元素,基于至少一个第三向量,对压缩后第二向量进行处理,以得到与至少一个第三向量一一对应的至少一个第四向量,可以包括:对于目标第三向量中的每个被选择的第三元素:响应于被选择的第三元素为第一元素,确定被选择的第三元素所属的第一向量,将被选择的第三元素所属的第一向量对应的第二元素作为至少一个第四向量中与目标第三向量对应的第四向量中的一个元素。
下面以对图3C所示的第二组第一向量和压缩后第二向量进行第三压缩处理为例,具体说明第三压缩处理的处理过程。
例如,图4B为本公开至少一实施例提供的第一中间向量的示意图。如图4B所示,第一中间向量中不存在数值为0的第一元素,数值为0的第一元素的位置表示为“N”,也即前述的空缺位置。
例如,对于第一向量(0),在确定与第一向量(0)对应的第一中间向量(0)时,获取第一向量(0)包括的64个第一元素的数值,由于第一向量(0)中除第一元素b(0)、第一元素c(0)、第一元素o(0)、第一元素p(0)外的第一元素的数值均为0,将这些数值为0的第一元素从第一向量(0)中删除并将第一向量(0)中的数值为0的第一元素设置为空缺元素,得到第一中间向量(0)。例如,如图4B所示,第一中间向量(0)仍包括64个元素,其中,除第一元素b(0)、第一元素c(0)、第一元素o(0)、第一元素p(0)外,其他60个元素均为空缺元素,即其他60个元素所在位置均为前述的“空缺位置”,也即这些元素所在位置中未填入任何数值。
例如,对于第一向量(2),在确定与第一向量(2)对应的第一中间向量(1)时,获取第一向量(2)包括的64个第一元素的数值,由于第一向量(2)中除第一元素a(2)、第一元素c(2)、第一元素p(2)外的第一元素的数值均为0,将这些数值为0的第一元素从第一向量(2)中删除并将第一向量(2)中的数值为0的第一元素为空缺元素,得到第一中间向量(1)。例如,如图4B所示,第一中间向量(1)仍包括64个元素,其中,除第一元素a(0)、第一元素c(0)、第一元素p(0)外,其他61个元素均为空缺元素,即其他61个元素所在位置均为前述的“空缺位置”,也即这些元素所在位置中未填入任何数值。
同样的,对于第一向量(4)、第一向量(6)、第一向量(8)进行上述处理,得到如图4B所示的第一中间向量(2)、第一中间向量(3)、第一中间向量(4),具体过程不再赘述。
对于除被乘数向量1、被乘数向量2、被乘数向量3、被乘数向量m、被乘数向量m+1以外的其他被乘数向量,其包括的被乘数的数值均为0,则在第一中间向量中,这些数值均为0的被乘数所在位置均为“N”,也即空缺位置。由于这些被乘数向量中的被乘数的数值均为0,因而在第三向量中这些位置仍为空缺位置,可以基于前述方式将这些空缺位置标记为无效状态,以在并行处理器执行乘加运算时不执行或关闭相应的计算操作。
之后,基于这些第一中间向量,得到多个第三向量。
图4C为本公开至少一实施例提供的并行处理器执行乘加运算的过程示意图。
例如,图4C所示的第三向量和第四向量,为对图3C所示的第二组第一向量和压缩后第二向量进行第三压缩处理所得到的第三向量和第四向量。
例如,第一中间向量(0)中的第一个位置为空缺位置,由于第一中间向量(1)中的第一个第一元素的数值不为0,将第一中间向量(1)中的第一元素a(2)填入第一中间向量(1)中的第一个位置,此时,第一中间向量(1)中的第一个位置也被处理为空缺位置;由于其他未示出的被乘数向量包括的被乘数的数值均为0,因而不会发生填入操作,从而可以得到第三向量(0)。
如图4C所示,第三向量(0)包括64个第三元素,其中,5个第三元素分别为第一元素a(2)、第一元素b(0)、第一元素c(0)、第一元素o(0)和第一元素p(0),其余59个第三元素所在位置均为空缺位置(未示出)。
例如,第一中间向量(1)中的第一个位置、第二个位置和第m个位置为空缺位置,将第一中间向量(2)中的第一元素a(4)填入第一中间向量(1)中的第一个位置,将第一中间向量(2)中的第一元素b(4)填入第一中间向量(1)中的第二个位置,将第一中间向量(2)中的第一元素o(4)填入第一中间向量(1)中的第m个位置,得到第三向量(1)。
如图4C所示,第三向量(1)包括64个第三元素,其中,5个第三元素分别为第一元素a(4)、第一元素b(4)、第一元素c(2)、第一元素o(4)和第一元素p(2),其余59个第三元素所在位置均为空缺位置(未示出)。
关于生成第三向量(2)至第三向量(4)的过程与前述过程相似,这里不再赘述。需要说明的是,虽然在图4C所示的示例中,第三向量的数量和第二组第一向量中的第一向量的数量相同,然而本公开不限于此,第三向量的数量也可以小于第二组第一向量中的第一向量的数量。
之后,基于所获得的第三向量对压缩后第二向量进行处理,得到第四向量。
例如,将第三向量(0)作为目标第三向量,将第一元素a(2)作为被选择的第三元素,则第一元素a(2)所属的第一向量为第一向量(2),该第一向量(2)对应的第二元素为第二元素M(2),将第二元素M(2)作为第四向量(0)中的一个元素。由于第一元素a(2)为第三向量(0)中的第一个元素,相应地,第二元素M(2)为第四向量(0)中的第一个元素。
例如,将第一元素b(0)作为被选择的第三元素,则第一元素b(0)所属的第一向量为第一向量(0),该第一向量(0)对应的第二元素为第二元素M(0),将第二元素M(0)作为第四向量(0)中的一个元素。由于第一元素b(0)为第三向量(0)中的第二个元素,相应地,第二元素M(0)为第四向量(0)中的第二个元素。
例如,将第一元素c(0)作为被选择的第三元素,则第一元素c(0)所属的第一向量为第一向量(0),该第一向量(0)对应的第二元素为第二元素M(0),将第二元素M(0)作为第四向量(0)中的一个元素。由于第一元素c(0)为第三向量(0)中的第三个元素,相应地,第二元素M(0)为第四向量(0)中的第三个元素。
例如,将第一元素o(0)作为被选择的第三元素,则第一元素o(0)所属的第一向量为第一向量(0),该第一向量(0)对应的第二元素为第二元素M(0),将第二元素M(0)作为第四向量(0)中的一个元素。由于第一元素c(0)为第三向量(0)中的第m个元素,相应地,第二元素M(0)为第四向量(0)中的第m个元素。
例如,将第一元素p(0)作为被选择的第三元素,则第一元素p(0)所属的第一向量为第一向量(0),该第一向量(0)对应的第二元素为第二元素M(0),将第二元素M(0)作为第四向量(0)中的一个元素。由于第一元素p(0)为第三向量(0)中的第m+1个元素,相应地,第二元素M(0)为第四向量(0)中的第m+1个元素。
对于第三向量中的空缺位置,由于这些位置的第三元素不为第一元素,在第四向量中的对应位置处也不填入任何数值,表示为“N”,在进行乘法运算时,不执行对应的乘法操作。
类似的,基于上述过程得到第四向量(1)至第四向量(4),具体过程不再赘述。
之后,可以基于得到的多个第三向量和多个第四向量,利用并行处理器完成乘加运算。
例如,在乘加运算中,将至少一个第三向量和至少一个第四向量中对应位置的两个元素相乘,以得到每个第三向量对应的P个第二中间结果,并将至少一个第三向量分别对应的P个第二中间结果分别对应累加,得到P个乘加结果。
例如,对于工作项1,其执行被乘数向量1和第二向量的乘加运算,以得到乘加结果(1)Ma。基于图4C所示的第三向量(0)和第四向量(0),该乘加运算可以表示为公式(2):
Ma=a(2)×M(2)+a(4)×M(4)
+a(6)×M(6)+a(8)×M(8) (公式2)
其中,a(2)×M(2)为第三向量(0)对应的P个第二中间结果中的一个第二中间结果,a(4)×M(4)为第三向量(1)对应的P个第二中间结果中的一个第二中间结果,a(6)×M(6)为第三向量(2)对应的P个第二中间结果中的一个第二中间结果,a(8)×M(8)为第三向量(3)对应的P个第二中间结果中的一个第二中间结果。
结合图4C可以看出,经过第三压缩处理后,完成一轮乘加运算所需的操作周期的数量虽然仍为5,但此时乘加运算过程中已不存在任何无效运算。
在上述方式中,可以通过对所有第一元素中的数值为0的第一元素进行进一步压缩、优化,突破原有以指令操作为单位的优化,将多条指令的计算数据压缩并重新打包,从像素级别对乘加运算进行优化,对多条乘加指令中的乘数和被乘数统一考量,最大程度上地实现计算压缩,最大范围地删除所有无效运算,避免所有由于数值为0的元素所导致的计算资源的浪费,提升计算效率。
本公开至少一实施例还提供与上述数据处理方法相对应的一种数据处理装置。图5A为本公开至少一实施例提供的数据处理装置的示意性结构图。
例如,该数据处理装置50用于乘加运算,例如,乘加运算用于实现将第一组第一向量和第二向量进行乘加操作,第一组第一向量包括多个第一向量,每个第一向量包括P个第一元素,第二向量包括多个第二元素,多个第一向量与多个第二元素一一对应,P为大于1的正整数。
例如,该数据处理装置50执行对第一组第一向量和第二向量的数据压缩处理,将得到的第二组第一向量和压缩后第二向量(或第三向量和第四向量)发送至矢量寄存器(Vector Register)或直接发送至外部计算设备(例如VMAC等),从而外部计算设备对第二组第一向量和压缩后第二向量(或第三向量和第四向量)执行乘加操作。
如图5A所示,该数据处理装置50包括压缩处理单元51。
压缩处理单元51被配置为,执行对多个第一向量和第二向量进行压缩处理,用于去除多个第一向量中的至少一个无效第一向量和第二向量中的至少一个无效第二元素,以得到压缩后的第二组第一向量和压缩后第二向量。
例如,第二组第一向量为第一组第一向量的子集,至少一个无效第二元素包括数值为预设值的第二元素,至少一个无效第一向量包括第一组无效第一向量,第一组无效第一向量包括与至少一个无效第二元素对应的第一向量,和/或至少一个无效第一向量包括第二组无效第一向量,第二组无效第一向量包括所包括的P个第一元素的数值均为预设值的第一向量,至少一个无效第二元素包括与第二组无效第一向量对应的第二元素。
关于第一组第一向量、第二向量、第二组第一向量、压缩后第二向量等参数的概念、定义以及示意图,可以参考上述的数据处理方法的实施例中的相关描述,这里不再赘述。
例如,压缩处理单元51执行对多个第一向量和第二向量的压缩处理时,包括执行以下操作:获取多个第二元素的数值,基于多个第二元素的数值,对多个第一向量和第二向量进行第一压缩处理,和/或获取多个第一向量中的所有第一元素的数值,基于所有第一元素的数值,对多个第一向量和第二向量进行第二压缩处理。
例如,如图5A所示,该数据处理装置50还包括存储单元52,存储单元52被配置为存储第二向量。例如,一个数据处理装置可以服务于多个VMAC,单个VMAC可以支持多个工作组的乱序操作,例如乱序的乘加操作,也就是说,当前操作周期执行的乘加操作可能是由多个工作组中的任意一个工作组执行,下一个操作周期执行的乘加操作可能是由多个工作组中的任意另一个工作组执行,存储单元52可以包括多个存储子单元,如图5A所示的存储子单元0、存储子单元1、…存储子单元38和存储子单元39。存储单元52可以同时存储多个(例如40个)第二向量,例如每个存储子单元存储1个第二向量,存储子单元0至存储子单元39可以同时存储40个第二向量,以便支持多个工作组以及多个VMAC的相关操作。
例如,每个第二元素具有对应的元素存储信息,例如,元素存储信息包括向量标识和元素标识,根据向量标识可以唯一确定一个第二向量,根据元素标识可以唯一确定该第二向量中的一个第二元素。
例如,压缩处理单元51包括预处理模块511和判断模块512。
例如,判断模块512被配置为:在接收到第二向量时,将第二向量存入存储单元52。例如,如图5A所示,判断模块512接收输入向量v1,并判断输入向量v1的类型,当输入向量v1为第二向量时,经由通道1将第二向量存储至存储单元52中的一个存储子单元。
例如,多个第二元素中每个被选择的第二元素作为目标第二元素,多个第一向量中与目标第二元素对应的第一向量为目标第一向量,预处理模块511被配置为:对于目标第一向量和目标第二元素,获取目标第二元素的元素存储信息,基于元素存储信息,从存储单元中提取目标第二元素;确定目标第二元素的数值,基于目标第二元素的数值,对目标第一向量和目标第二元素进行第一压缩处理。
例如,目标第一向量可以为图3A所示的第一向量(0),目标第二元素可以为第二元素M(0)。
例如,数据处理装置50还包括读取单元53,预处理模块511执行基于目标第二元素的数值,对目标第一向量和目标第二元素进行第一压缩处理时,包括执行以下操作:判断目标第二元素的数值是否为预设值,响应于目标第二元素的数值为预设值,输出第一信号至读取单元,以通知读取单元不再执行对目标第一向量的读取操作;响应于目标第二元素的数值不为预设值,将目标第二元素存入第一缓存队列,并输出第二信号至读取单元,以通知读取单元执行对目标第一向量的读取操作。在目标第二元素的数值为预设值时,目标第二元素作为无效第二元素,目标第一向量作为无效第一向量;而在目标第二元素的数值不为预设值时,则目标第一向量作为第二组第一向量中的一个第一向量,目标第二元素作为压缩后第二向量中的一个元素。
读取单元53被配置为:响应于接收到第一信号,不执行对目标第一向量的读取操作(此时,目标第一向量作为一个无效第一向量);响应于接收到第二信号,执行对目标第一向量的读取操作,并将目标第一向量发送至压缩处理单元51(此时,目标第一向量作为第二组第一向量中的一个第一向量)。
例如,在预处理模块511接收到元素存储信息时,预处理模块511将元素存储信息经由通道2发送至存储单元52,并根据元素存储信息提取目标第二元素,经由通道3接收目标第二元素。
之后,预处理模块511判断目标第二元素的数值是否为预设值(例如预设值为0),若目标第二元素的数值为0,则预处理模块511经由通道5将第一信号输出至读取单元53,并且预处理模块511丢弃该目标第二元素,此时,该目标第二元素被作为无效第二元素,读取单元53在接收到第一信号后,不再执行对目标第一向量的读取操作,此时,目标第一向量被作为无效第一向量,并且,预处理模块511还输出操作信息至外部其他模块(例如VMAC或指令发送模块等),以通知外部其他模块该条指令对应的操作已完成,可以准备下一条指令的读取等相关操作;若目标第二元素的数值不为0,预处理模块511将目标第二元素存入第一缓存队列,此时,该目标第二元素作为压缩后第二向量中的一个元素,例如,第一缓存队列可以为预设深度的FIFO(First Input First Output,先进先出)存储器,并且,预处理模块511经由通道5将第二信号输出至读取单元53,读取单元53在接收到第二信号后,执行对目标第一向量的读取操作,并将目标第一向量作为输入向量v1传输至判断模块512,此时,目标第一向量作为所述第二组第一向量中的一个第一向量。
在上述过程中,根据目标第二元素的数值决定是否读取目标第一向量,若目标第二元素的数值为0,则后续的乘加操作和读取操作均无需执行,减少无效的数据读取和数据计算。
例如,判断模块512还被配置为,在接收到多个第一向量时,对多个第一向量进行第二压缩处理。
例如,判断模块512对多个第一向量进行第二压缩处理时,包括执行以下操作:判断目标第一向量包括的P个第一元素的数值是否均为预设值,响应于目标第一向量包括的P个第一元素的数值均为预设值,输出第三信号至预处理模块,并丢弃目标第一向量包括的P个第一元素,其中,目标第一向量被处理为无效;响应于目标第一向量包括的P个第一元素的数值不均为预设值,输出第四信号至预处理模块,并输出目标第一向量,将目标第一向量作为第二组第一向量中的一个第一向量。
例如,预处理模块511还被配置为对第二向量进行第二压缩处理。预处理模块511执行对第二向量进行第二压缩处理时,包括执行以下步骤:针对目标第二元素,响应于第三信号,将目标第二元素从第一缓存队列中去除(此时,目标第二元素作为无效第二元素);响应于第四信号,输出目标第二元素,并将目标第二元素作为压缩后第二向量的一个元素。
例如,数据处理装置50还包括第二缓存队列,例如,第二缓存队列为预设深度的FIFO存储器。例如,第二缓存队列被配置为缓存目标第一向量和目标第二元素,以生成并输出第二组第一向量和压缩后第二向量。
例如,目标第一向量包括64个第一元素,判断模块512在接收到目标第一向量时,判断目标第一向量包括的64个第一元素的数值是否均为0,若目标第一向量包括的64个第一元素的数值均为0,判断模块512经由通道4将第三信号输出至预处理模块511,并丢弃目标第一向量,预处理模块511在接收到第三信号时,将目标第二元素从第一缓存队列中去除,也即不再存储该目标第二元素,并且,预处理模块511还输出操作信息至外部其他模块,以通知外部其他模块该条指令对应的操作已完成,可以准备下一条指令的读取等相关操作;若目标第一向量包括的64个第一元素的数值不均为0,判断模块512经由通道6将目标第一向量输出至第二缓存队列,并且,判断模块512还经由通道4将第四信号输出至预处理模块511,预处理模块511在接收到第四信号后,经由通道7输出目标第二元素至第二缓存队列,从而通过第二缓存队列生成并输出结果向量v2,例如,结果向量v2包括第二组第一向量中的一个向量或压缩后第二向量。
在上述过程中,根据目标第一向量包括的多个第一元素的数值决定是否输出目标第一向量以及是否存储目标第二元素,若目标第一向量包括的多个第一元素的数值均为0,则丢弃目标第一向量和目标第二元素,后续的乘加操作无需执行,减少无效的数据计算。
从计算速度的角度而言,本公开提供的数据处理装置可以删除无效的数据计算,有效减少了VMAC等模块用于计算无效数据而带来的工作效率的损失,并且,计算对象的稀疏度越高,工作效率提高的越多;从功耗的角度而言,频繁的存储器读写操作会带来较大的功耗损失,本公开提供的数据处理装置基于目标第二元素是否属于无效第二元素执行提前预判,减少无效的数据读取,降低了对存储器的读写频率,有效节约了功耗。
图5B为本公开至少一实施例提供的数据处理装置50’的示意性结构图。如图5B所示,该数据处理装置50’还包括元素级压缩单元54,但不包括第二缓存队列。
关于数据处理装置50’中的其他单元(例如,压缩处理单元51、存储单元52和读取单元53)的结构、功能如前所述,这里不再赘述。
元素级压缩单元54被配置为,在接收到来自压缩处理单元51的第二组第一向量和压缩后第二向量时:对第二组第一向量进行第三压缩处理,以得到至少一个第三向量,基于至少一个第三向量,对压缩后第二向量进行处理,以得到与至少一个第三向量一一对应的至少一个第四向量,其中,至少一个个第三向量和至少一个第四向量中均不存在数值为预设值的元素。
关于第三向量和第四向量的概念、定义、示意图可以参考前述的数据处理方法的实施例中的相关描述,这里不再赘述。
例如,如图5B所示,元素级压缩单元54经由通道6接收判断模块512输出的目标第一向量,如前所述,此时目标第一向量所包括的多个第一元素的数值不均为0。此外,元素级压缩单元54还接收预处理模块511经由通道7发送的目标第二元素、以及经由通道8发送的切换指示信号,例如,预处理模块511可以比对相邻两次指令中的元素存储信息,根据元素存储信息中的向量标识是否发生改变,确定是否发生工作组的切换,从而给出相应的切换指示信号。
例如,元素级压缩单元54基于接收到的目标第二向量、目标第二元素以及切换指示信号,执行第三压缩处理,以生成并输出结果向量v2,例如,结果向量v2包括第三向量或第四向量。
例如,预处理模块511还被配置为输出准备信息至外部其他模块。例如,当目标第一向量所包括的多个第一元素的数值不均为0时,判断模块512将目标第一向量发送至元素级压缩单元,预处理模块511将目标第二元素发送至元素级压缩单元,并且,预处理模块511还输出准备信息至外部其他模块,例如VMAC等,以通知外部其他模块准备接收压缩后数据。
图5C为本公开至少一实施例提供的元素级压缩单元的示意性结构图。
如图5C所示,元素级压缩单元54包括第一处理模块541、第二处理模块542和缓存控制模块543。
例如,第一处理模块541被配置为接收从压缩处理单元51输出的至少一个第一向量,并对至少一个第一向量进行第三压缩处理,以生成至少一个第三向量。
例如,第二处理模块542被配置为接收从压缩处理单元51输出的压缩后第二向量,并基于至少一个第三向量,对压缩后第二向量进行处理,以生成至少一个第四向量。
例如,缓存控制模块543被配置为对第一处理模块541的状态和第二处理模块542的状态进行监控,基于第一处理模块541的状态和第二处理模块542的状态,控制第一处理模块541和第二处理模块542输出至少一个第三向量和至少一个第四向量。
例如,元素级压缩单元54还包括选择模块544,选择模块544配置为在缓存控制模块543的控制下,输出结果向量v2。
例如,如图5C所示,第一处理模块541包括第一调度模块和P个第一缓存子模块,例如,P为64,P个第一缓存模块分别为图5C所示的第一缓存模块0至第一缓存模块63。
例如,如图5C所示,第二处理模块542包括第二调度模块和P个第二缓存子模块,例如,P为64,P个第二缓存模块分别为图5C所示的第二缓存模块0至第二缓存模块63。
例如,P个第一缓存子模块与P个第二缓存子模块一一对应。例如,第一缓存子模块0对应于第二缓存子模块0,第一缓存子模块1对应于第二缓存子模块1,以此类推。例如,第一缓存子模块0还可以对应于第二缓存子模块1,第一缓存子模块1还可以对应于第二缓存子模块2,也就说,第一缓存子模块和第二缓存子模块存在一一对应的关系即可,关于具体的第一缓存子模块和第二缓存子模块之间的映射关系,本公开对此不作限制。
第一调度模块被配置为针对目标第一向量,接收目标第一向量,基于目标第一向量包括的P个第一元素的数值,生成目标第一向量对应的缓存写入信息,并基于缓存写入信息,将P个第一元素中数值不为预设值的第一元素写入对应的第一缓存子模块。
例如,目标第一向量包括的P个第一元素中的每个第一元素对应于一个第一缓存模块,例如,目标第一向量中的第一个第一元素对应于第一缓存子模块0,目标第一向量中的第二个第一元素对应于第一缓存子模块1,目标第一向量中的第三个第一元素对应于第一缓存子模块2,以此类推。
例如,第二调度模块被配置为接收目标第二元素和缓存写入信息,基于缓存写入信息,将目标第二元素写入对应的第二缓存子模块。
例如,第二调度模块执行基于缓存写入信息,将目标第二元素写入对应的第二缓存子模块时,包括执行以下操作:基于缓存写入信息,确定P个第一元素中数值不为预设值的第一元素;基于P个第一元素中数值不为预设值的第一元素,确定对应的第二缓存子模块;将目标第二元素写入对应的第二缓存子模块。
例如,基于缓存写入信息确定了P个第一元素中仅第一个第一元素和第二个第一元素的数值不为0,其他第一元素的数值均为0,若第一个第一元素写入第一缓存子模块0,第二个第一元素写入第一缓存子模块1,第一缓存子模块0对应于第二缓存子模块0,第一缓存子模块1对应于第二缓存子模块1,则需写入目标第二元素的第二缓存子模块分别为第二缓存子模块0和第二缓存子模块1。
例如,P个第一缓存子模块被配置为:在缓存控制模块543的控制下,输出P个第一缓存子模块中存储的第一元素,以得到第三向量。例如,第一缓存子模块为预设深度的FIFO存储器。例如,缓存控制模块543的控制信号经由通道11_1、通道11_2、通道11_3和通道11_4发送至第一缓存模块0至第一缓存模块63,从而控制这些FIFO存储器输出所存储的第一元素,以得到第三向量。
例如,P个第二缓存子模块被配置为:在缓存控制模块543的控制下,输出P个第二缓存子模块中存储的第二元素,以得到与第三向量对应的第四向量。例如,第二缓存子模块为预设深度的FIFO存储器。例如,缓存控制模块543的控制信号经由通道12_1、通道12_2、通道12_3和通道12_4发送至第二缓存模块0至第二缓存模块63,从而控制这些FIFO存储器输出所存储的第二元素,以得到第四向量。
例如,每个时钟周期可以传输16个数据,目标第一向量(包括64个第一元素)共需4个时钟周期传输完毕,因此,设置4组第一缓存子模块,每组第一缓存模块包括16个第一缓存子模块用于接收该时钟周期中传输的16个第一元素。
例如,缓存写入信息包括16比特的掩码信号,每个比特表示对应的第一元素的数值是否为0,例如,若接收到的一个第一元素的数值为0,则掩码信号中与该第一元素对应的比特为0,反之为1。例如,可以根据缓存写入信息,决定接收到的第一元素进入是否写入对应的第一缓存子模块。
例如,第一调度模块经由通道7将缓存写入信息发送至第二调度模块,从而第二调度模块可以基于缓存写入信息,将目标第二元素写入对应的第二缓存子模块。
例如,以目标第一向量中的第1个第一元素至第16个第一元素分别为“0、x(1)、x(2)、0、0、0、x(3)、x(4)、0、x(5)、0、0、0、0、x(6)、0”为例,目标第二元素为U(0)为例,具体说明元素级压缩单元54的工作过程。例如,这里“0”表示第一元素的数值为0,“x(.)”表示第一元素的数值不为0。
例如,第一缓存子模块0对应于第二缓存子模块0,第一缓存子模块1对应于第二缓存子模块1,以此类推。
例如,第一调度模块在接收到16个第一元素后,根据16个第一元素的数值,生成缓存写入信息。例如,缓存写入信息中的掩码信息可以为:0110 0011 0100 0010,其中,“1”表示对应的第一元素的数值不为0,“0”表示对应的第一元素的数值为0。
根据缓存写入信息,第一调度模块将数值不为0的第一元素写入对应的第一缓存子模块。例如,第一调度模块将第一元素x(1)写入第一缓存子模块1,将第一元素x(2)写入第一缓存子模块2,将第一元素x(3)写入第一缓存子模块6,将第一元素x(4)写入第一缓存子模块7,将第一元素x(5)写入第一缓存子模块9,将第一元素x(6)写入第一缓存子模块14。
第二调度模块根据接收到的缓存写入信息,将目标第二元素U(0)写入第二缓存子模块1、第二缓存子模块2、第二缓存子模块6、第二缓存子模块7、第二缓存子模块9以及第二缓存子模块14,从而完成一轮写入操作。
之后,在接下来的三个时钟周期中继续执行上述操作,完成目标第一向量和目标第二元素的第三压缩处理。
例如,第三向量包括P个第三元素,每个第三元素为对应的第一缓存子模块的输出。例如,以第一缓存子模块0为例,若第一缓存子模块0输出第一元素,则第三向量中的第一个位置的第三元素0即为该第一元素,若第一缓存子模块0中为空,则第三元素0为“空”,也即第三向量中的第一个位置为前文所述的“空缺位置”。例如,第三向量中的每个第三元素具有标记信息,标记信息为有效表示该第三元素可以执行乘法运算,标记信息为无效表示该第三元素不必执行乘法运算,从而对于处于“空”状态的第三元素,可以设置这些第三元素的标记信息为无效,在对第三向量和第四向量进行乘加运算时,不执行或关闭相关的乘法操作。
同样的,第四向量包括P个第四元素,每个第四元素为对应的第二缓存子模块的输出。若第二缓存子模块在数据输出时为空,则对应的第四元素也为“空”。
例如,缓存控制模块543对P个第一缓存子模块和P个第二缓存子模块进行状态监控,包括监控每个第一缓存子模块和第二缓存子模块的存储状态是否已满,输出端信息是否有效等。
例如,对于P个第一缓存子模块,每个第一缓存子模块所存储的数据是不均匀的,当有任意一个第一缓存子模块存储的数据达到存储空间的上限,此时如果继续接收新的数据,可能造成数据丢失。因此,当有任意一个第一缓存子模块存储的数据达到存储空间的上限时,需要由缓存控制模块543控制P个第一缓存子模块和P个第二缓存子模块输出所存储的数据。
例如,当P个第一缓存子模块的输出端信息均有效时,由缓存控制模块543控制P个第一缓存子模块和P个第二缓存子模块输出所存储的数据。
此外,缓存控制模块543还接收切换指示信号,当切换指示信号指示当前指令发生了工作组切换时,缓存控制模块543控制P个第一缓存子模块和P个第二缓存子模块输出所存储的数据。
例如,缓存控制模块543控制P个第一缓存子模块和P个第二缓存子模块输出所存储的数据时,可以包括如下操作:
首先,在第一个时钟周期,缓存控制模块543通过通道11_1发送控制信号至第一缓存子模块0至第一缓存子模块15,控制第一缓存子模块0至第一缓存子模块15输出所存储的第一元素,并且,缓存控制模块543通过通道13控制选择模块544选择第一缓存子模块0至第一缓存子模块15的数据输出,以得到第三向量中的第三元素0至第三元素15。
之后,在第二个时钟周期,缓存控制模块543通过通道11_2发送控制信号至第一缓存子模块16至第一缓存子模块31,控制第一缓存子模块16至第一缓存子模块31输出所存储的第一元素,并且,缓存控制模块543通过通道13控制选择模块544选择第一缓存子模块16至第一缓存子模块31的数据输出,以得到第三向量中的第三元素16至第三元素31。
之后,在第三个时钟周期,按照上述过程输出第三向量中的第三元素32至第三元素47,在第四个时钟周期,按照上述过程输出第三向量中的第三元素48至第三元素63,至此,经过4个时钟周期,完成第三向量的输出。
之后,在第五个时钟周期,缓存控制模块543通过通道12_1发送控制信号至第二缓存子模块0至第二缓存子模块15,控制第二缓存子模块0至第二缓存子模块15输出所存储的第二元素,并且,缓存控制模块543通过通道13控制选择模块544选择第二缓存子模块0至第二缓存子模块15的数据输出,以得到第四向量中的第四元素0至第四元素15。
之后,在第六个时钟周期,缓存控制模块543通过通道12_2发送控制信号至第二缓存子模块16至第二缓存子模块31,控制第二缓存子模块16至第二缓存子模块31输出所存储的第二元素,并且,缓存控制模块543通过通道13控制选择模块544选择第二缓存子模块16至第二缓存子模块31的数据输出,以得到第四向量中的第四元素16至第四元素31。
之后,在第七个时钟周期,按照上述过程输出第四向量中的第四元素32至第三元素47,在第八个时钟周期,按照上述过程输出第四向量中的第四元素48至第四元素63,至此,又经过4个时钟周期,完成第四向量的输出。
元素级压缩单元可以实现与前述数据处理方法中的步骤S30相似的技术效果,在此不再赘述。
现有架构中,在VMAC(矢量乘法累加器)中进行乘加运算,并不会考虑当乘数或被乘数为0的情况。虽然可能出于功耗考虑,不会调用乘法器进行乘法运算,但是对数据的调用及计算的时隙依旧存在,无效计算的存在导致并行计算计算效率的降低。如果计算数据在进入VMAC之前就完成了是否为无效计算的判断,并跳过无效运算,只进行有效运算,这就可以有效提高计算的效率。
例如,在并行处理器中,用于计算的中间数据的存储通常由并行存储单元(Parallel Memory Unit,简称PMU)完成,由并行存储单元传输给对应的矢量寄存器(VECTOR_REGISTER),之后由VMAC从矢量寄存器中提取中间数据完成乘加运算。因此,在并行存储单元中直接完成数据的判断和处理,并传输给矢量寄存器是最为合适的,此时在原有的并行存储器的基础上添加上述数据存储装置,并对应修改一些模块的指令即可实现,具体描述如下。
图6为本公开至少一实施例提供的并行存储单元的示意性结构图。
例如,如图1C所示,并行处理器可以包括多个并行存储单元,例如,PMU0-PUM3,此外,如图6所示,并行处理器还可以包括共享存储器。
如图6所示,该并行存储单元包括同步子单元、冲突解决子单元、数据读取子单元、数据处理装置、选择子单元和输出子单元。
例如,数据处理装置可以是前述数据处理装置50,或者,数据处理装置可以是前述数据处理装置50’,从而关于数据处理装置的结构和功能可以参考上述数据处理装置的实施例的相关描述,重复之处在此不再赘述。
例如,常规的并行存储单元可以包括同步子单元、冲突解决子单元、数据读取子单元、输出子单元和选择子单元。在常规的并行存储单元基础上,可以调整冲突解决子单元和选择子单元的相关逻辑,增加数据处理装置,从而可以基于现有的并行存储单元实现压缩处理,减少无效运算,以较小的修改成本实现计算效率的提高。
例如,同步子单元被配置为接收输入参数,例如,输入参数可以包括输入的指令、数据/地址,此外,同步子单元可以同步需要传输至VMAC的数据和地址。
例如,冲突解决子单元被配置为基于输入参数,获得元素存储信息,并将元素存储信息发送至数据处理装置,接收数据处理装置发送的第一信号或第二信号,这里,元素存储信息为第二向量中的待处理的第二元素对应的元素存储信息。此外,冲突解决子单元还可以用于判断是否发生内存访问冲突并完成基本的进程排序,例如,当多个不同线程访问同一个内存块(bank)时,会发生内存访问冲突,此时需要由冲突解决子单元完成相应的判断操作。
例如,数据读取子单元被配置为在冲突解决子单元接收到第二信号时,从共享存储器中读取待处理的第二元素对应的第一向量,并将第一向量发送至输出子单元,也即是,数据读取子单元用于从共享存储器中读取、映射需要的数据。
例如,输出子单元被配置为执行对第一向量的格式匹配处理,并将格式匹配后的第一向量发送至数据处理装置。
这里待处理的第二元素为上述实施例中的目标第二元素,待处理的第二元素对应的第一向量为上述实施例中的目标第一向量。
例如,数据读取子单元还被配置为读取第二向量,并将第二向量发送至输出子单元。例如,输出子单元还被配置为对接收到的第二向量执行格式匹配处理,并将格式匹配后的第二向量发送至数据处理装置。
例如,选择子单元被配置为基于输入参数,选择对应的数据输出。例如,输入参数包括指令,选择子单元根据指令特性,完成数据的选择输出。例如,当指令指示不进行压缩处理时,输出第一组第一向量中的一个第一向量或者第二向量(输入向量v1)至矢量寄存器或者VMAC等计算单元,从而完成乘加运算;当指令指示进行压缩处理时,输出结果向量v2至矢量寄存器或者VMAC等计算单元,从而完成乘加运算。
例如,数据处理装置用于接收冲突解决子单元发送的元素存储信息,根据元素存储信息进行第一压缩处理,并经由通道5发送第一信号或第二信号至冲突解决子单元;数据处理装置还接收输出子单元输出的输入向量v1,例如,输入向量v1包括目标第一向量或者第二向量;数据处理装置还可以对输入向量v1进行压缩处理,得到结果向量v2,关于输入向量v1和结果向量v2的相关处理过程,可以参考上述的数据处理装置,这里不再赘述;数据处理装置还用于将接收到的第二向量存入存储单元,具体过程如前所述,这里不再赘述;数据处理装置还可以输出操作信息和准备信息至外部其他模块,以通知外部其他模块执行相应的操作。下面结合图5B和图6,具体说明并行存储单元的工作流程。
首先,在步骤S1,并行存储单元接收到第一压缩指令,以对第二向量进行读取和存储。
例如,第一压缩指令的格式如下:
Conv_compress_kernel(V_DST,V_SRC,offset)
其中,Conv_compress_kernel表示第一压缩指令,V_DST表示输出的第二向量所存储的矢量寄存器的位置,V_SRC表示待读取的第二向量的存储位置,offset表示地址分区的相关信息。
例如,在步骤S1中,按照常规的数据流,从共享存储器中提取第二向量,经由输出子单元进行格式处理后,将第二向量作为输入向量v1输入至数据处理装置。数据处理装置中的判断模块在接收到第二向量后,将第二向量存入存储单元52。
之后,在步骤S2,并行存储单元接收到第二压缩指令,以对第一向量进行读取,并驱动VMAC执行对应的乘加操作。例如,第二压缩指令的格式如下:
Conv_compress_feature(V_DST2,V_DST1,V_SRC offset)
其中,Conv compress_feature为第二压缩指令,V_DST2表示第三向量所存储的矢量寄存器的位置,V_DST1表示第四向量所存储的矢量寄存器的位置,V_SRC表示待读取的第一向量的存储位置,offset表示地址分区的相关信息。
例如,在步骤S2中,冲突解决子单元解析第二压缩指令得到元素存储信息,并将元素存储信息发送至数据处理装置。数据处理装置中的预处理模块511根据当前元素存储信息与上一时刻接收到的指令中的元素存储信息做比对,判断元素存储信息中的向量标识是否相同,进而产生相应的切换指示信号。
之后,在步骤S3,数据处理装置中的预处理模块511根据元素存储信息读取目标第二元素,具体操作过程可以参考上述数据处理装置,这里不再赘述。
之后,若目标第二元素的数值为0,执行步骤S4,若目标第二元素的数值不为0,执行步骤S5和S6。
在步骤S4,预处理模块511丢弃该目标第二元素,并通过通道5将第一信号输出至冲突解决子单元,冲突解决子单元在接收到第一信号后,不再执行对目标第一向量的读取操作。此外,预处理模块511还输出操作信息至外部其他模块,以通知外部其他模块该条指令对应的操作已完成,可以准备下一条指令的读取等相关操作,此时跳转回步骤S2,继续从步骤S2开始下一条第二压缩指令的读取。
在步骤S5,预处理模块511将目标第二元素存入第一缓存队列,用于后续读取,预处理模块511经由通道5将第二信号输出至冲突解决子单元,冲突解决子单元在接收到第二信号后,执行对目标第一向量的读取操作,并将目标第一向量作为输入向量v1传输至数据处理装置中的判断模块512;判断模块512在接收到目标第一向量后,对目标第一向量进行第二压缩处理,预处理模块511响应于判断模块512的处理结果,对第二向量进行第二压缩处理,具体过程如前所述,这里不再赘述;之后,判断模块512经由通道6将包括的第一元素的数值不均为0的第一向量输出至元素级压缩单元54,并且此时,预处理模块511经由通道7将目标第二元素输出至元素级压缩单元54,经由通道8将切换指示信号输出至元素级压缩单元54。
之后,在步骤S6,由元素级压缩单元54对接收到的目标第一向量和目标第二元素进行相应压缩处理,以最终输出第三向量和第四向量,具体过程如前所述,这里不再赘述。
对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)为了清晰起见,在用于描述本发明的实施例的附图中,层或结构的厚度和尺寸被放大。可以理解,当诸如层、膜、区域或基板之类的元件被称作位于另一元件“上”或“下”时,该元件可以“直接”位于另一元件“上”或“下”,或者可以存在中间元件。
(3)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (19)
1.一种数据处理方法,用于利用并行处理器执行乘加运算,其中,所述乘加运算用于实现将第一组第一向量和第二向量进行乘加操作,所述第一组第一向量包括多个第一向量,每个第一向量包括P个第一元素,所述第二向量包括多个第二元素,所述多个第一向量与所述多个第二元素一一对应,
所述方法包括:
对所述多个第一向量和所述第二向量进行压缩处理,用于去除所述多个第一向量中的至少一个无效第一向量和所述第二向量中的至少一个无效第二元素,以得到压缩后的第二组第一向量和压缩后第二向量,
其中,所述第二组第一向量为所述第一组第一向量的子集,
所述至少一个无效第二元素包括数值为预设值的第二元素,所述至少一个无效第一向量包括第一组无效第一向量,所述第一组无效第一向量包括与所述至少一个无效第二元素对应的第一向量,和/或
所述至少一个无效第一向量包括第二组无效第一向量,所述第二组无效第一向量包括所包括的P个第一元素的数值均为所述预设值的第一向量,所述至少一个无效第二元素包括与所述第二组无效第一向量对应的第二元素,P为大于1的正整数,
其中,对所述多个第一向量和所述第二向量进行压缩处理,包括:
基于所述多个第二元素的数值,对所述多个第一向量和所述第二向量进行第一压缩处理,和/或
基于所述多个第一向量中的所有第一元素的数值,对所述多个第一向量和所述第二向量进行第二压缩处理,
其中,所述多个第二元素中每个被选择的第二元素作为目标第二元素,所述多个第一向量中与所述目标第二元素对应的第一向量为目标第一向量,基于所述多个第二元素的数值,对所述多个第一向量和所述第二向量进行第一压缩处理,包括:
对于所述目标第一向量和所述目标第二元素,判断所述目标第二元素的数值是否为所述预设值;以及
响应于所述目标第二元素的数值不为所述预设值,存储所述目标第二元素至第一缓存队列,执行对所述目标第一向量的读取操作。
2.根据权利要求1所述的数据处理方法,其中,
基于所述多个第二元素的数值,对所述多个第一向量和所述第二向量进行第一压缩处理,还包括:
响应于所述目标第二元素的数值为所述预设值,丢弃所述目标第二元素,不执行对所述目标第一向量的读取操作,并将所述目标第二元素作为无效第二元素,将所述目标第一向量作为无效第一向量。
3.根据权利要求1所述的数据处理方法,其中,所述多个第一向量中每个被选择的第一向量作为目标第一向量,所述多个第二元素中与所述目标第一向量对应的第二元素为目标第二元素,
基于所述所有第一元素的数值,对所述多个第一向量和所述第二向量进行第二压缩处理,包括:
对于所述目标第一向量和所述目标第二元素:
判断所述目标第一向量包括的P个第一元素的数值是否均为所述预设值,
响应于所述目标第一向量包括的P个第一元素的数值均为所述预设值,将所述目标第二元素作为无效第二元素,将所述目标第一向量作为无效第一向量,丢弃所述目标第一向量和所述目标第二元素,
响应于所述P个第一元素的数值不均为所述预设值,将所述目标第一向量作为所述第二组第一向量中的一个第一向量,将所述目标第二元素作为所述压缩后第二向量中的一个元素。
4.根据权利要求1-3任一项所述的数据处理方法,其中,所述第二组第一向量包括所述多个第一向量中的M个第一向量,
在所述乘加运算中,对于所述M个第一向量中的每个待处理的第一向量,将所述待处理的第一向量中的P个第一元素分别与所述待处理的第一向量对应的第二元素相乘,以得到所述待处理的第一向量对应的P个第一中间结果,并将所述M个第一向量分别对应的P个第一中间结果分别对应累加,得到P个乘加结果,其中,M为正整数且小于所述多个第一向量的总数。
5.根据权利要求1-3任一项所述的数据处理方法,所述方法还包括:
对所述第二组第一向量进行第三压缩处理,以得到至少一个第三向量;
基于所述至少一个第三向量,对所述压缩后第二向量进行处理,以得到与所述至少一个第三向量一一对应的至少一个第四向量,
其中,所述至少一个第三向量和所述至少一个第四向量中均不存在数值为所述预设值的元素,
在所述乘加运算中,将所述至少一个第三向量和所述至少一个第四向量中对应位置的两个元素相乘,以得到每个第三向量对应的P个第二中间结果,并将所述至少一个第三向量分别对应的P个第二中间结果分别对应累加,得到P个乘加结果。
6.根据权利要求5所述的方法,其中,对所述第二组第一向量进行第三压缩处理,以得到至少一个第三向量,包括:
将所述第二组第一向量中的所有数值为所述预设值的第一元素设置为空缺元素,以得到与所述至少一个第一向量一一对应的至少一个第一中间向量,其中,所述空缺元素表示未设置任何数值的元素;
基于所述至少一个第一中间向量,得到所述至少一个第三向量。
7.根据权利要求6所述的方法,其中,所述至少一个第三向量中的每个被选择的第三向量为目标第三向量,
所述目标第三向量包括P个第三元素,所述P个第三元素中的至少部分第三元素为第一元素,
基于所述至少一个第三向量,对所述压缩后第二向量进行处理,以得到与所述至少一个第三向量一一对应的至少一个第四向量,包括:
对于所述目标第三向量中的每个被选择的第三元素:
响应于所述被选择的第三元素为第一元素,确定所述被选择的第三元素所属的第一向量,
将所述被选择的第三元素所属的第一向量对应的第二元素作为所述至少一个第四向量中与所述目标第三向量对应的第四向量中的一个元素。
8.一种数据处理装置,用于利用并行处理器执行乘加运算,其中,所述乘加运算用于实现将第一组第一向量和第二向量进行乘加操作,所述第一组第一向量包括多个第一向量,每个第一向量包括P个第一元素,所述第二向量包括多个第二元素,所述多个第一向量与所述多个第二元素一一对应,
所述数据处理装置包括:
压缩处理单元,被配置为对所述多个第一向量和所述第二向量进行压缩处理,用于去除所述多个第一向量中的至少一个无效第一向量和所述第二向量中的至少一个无效第二元素,以得到压缩后的第二组第一向量和压缩后第二向量,
其中,所述第二组第一向量为所述第一组第一向量的子集,
所述至少一个无效第二元素包括数值为预设值的第二元素,所述至少一个无效第一向量包括第一组无效第一向量,所述第一组无效第一向量包括与所述至少一个无效第二元素对应的第一向量,和/或
所述至少一个无效第一向量包括第二组无效第一向量,所述第二组无效第一向量包括所包括的P个第一元素的数值均为所述预设值的第一向量,所述至少一个无效第二元素包括与所述第二组无效第一向量对应的第二元素,P为大于1的正整数,
所述压缩处理单元执行对所述多个第一向量和所述第二向量的压缩处理时,包括执行以下操作:
获取所述多个第二元素的数值,基于所述多个第二元素的数值,对所述多个第一向量和所述第二向量进行第一压缩处理,和/或
获取所述多个第一向量中的所有第一元素的数值,基于所述所有第一元素的数值,对所述多个第一向量和所述第二向量进行第二压缩处理,
其中,所述数据处理装置还包括读取单元和预处理模块,所述多个第二元素中每个被选择的第二元素作为目标第二元素,所述多个第一向量中与所述目标第二元素对应的第一向量为目标第一向量,所述预处理模块被配置为:
基于所述目标第二元素的数值,对所述目标第一向量和所述目标第二元素进行所述第一压缩处理,
所述预处理模块还配置为执行基于所述目标第二元素的数值,对所述目标第一向量和所述目标第二元素进行所述第一压缩处理,所述预处理模块执行所述第一压缩处理时,包括执行以下操作:
判断所述目标第二元素的数值是否为所述预设值;
响应于所述目标第二元素的数值不为所述预设值,将所述目标第二元素存入第一缓存队列,并输出第二信号至所述读取单元,以通知所述读取单元执行对所述目标第一向量的读取操作,其中,所述目标第二元素作为压缩后第二向量中的一个元素,所述目标第一向量作为所述第二组第一向量中的一个第一向量。
9.根据权利要求8所述的数据处理装置,还包括:存储单元,
其中,所述存储单元被配置为存储所述第二向量,每个第二元素具有对应的元素存储信息,
所述预处理模块还被配置为:
对于所述目标第一向量和所述目标第二元素,获取所述目标第二元素的元素存储信息,基于所述元素存储信息,从所述存储单元中提取所述目标第二元素;
确定所述目标第二元素的数值,以便基于所述目标第二元素的数值,对所述目标第一向量和所述目标第二元素进行所述第一压缩处理。
10.根据权利要求9所述的数据处理装置,其中,所述预处理模块执行基于所述目标第二元素的数值,对所述目标第一向量和所述目标第二元素进行所述第一压缩处理时,还包括执行以下操作:
响应于所述目标第二元素的数值为所述预设值,输出第一信号至所述读取单元,以通知所述读取单元不再执行对所述目标第一向量的读取操作,其中,所述目标第二元素被处理为无效,所述目标第一向量被处理为无效。
11.根据权利要求10所述的数据处理装置,其中,所述读取单元被配置为,响应于接收到所述第一信号,不执行对所述目标第一向量的读取操作,响应于接收到所述第二信号,执行对所述目标第一向量的读取操作,并将所述目标第一向量发送至所述压缩处理单元。
12.根据权利要求10所述的数据处理装置,其中,所述压缩处理单元还包括判断模块,
所述判断模块被配置为:
在接收到所述第二向量时,将所述第二向量存入所述存储单元;
在接收到所述多个第一向量时,对所述多个第一向量进行所述第二压缩处理。
13.根据权利要求12所述的数据处理装置,其中,所述多个第一向量中每个被选择的第一向量作为目标第一向量,
所述判断模块对所述多个第一向量进行所述第二压缩处理时,包括执行以下操作:
判断所述目标第一向量包括的P个第一元素的数值是否均为所述预设值,
响应于所述目标第一向量包括的P个第一元素的数值均为所述预设值,输出第三信号至所述预处理模块,并丢弃所述目标第一向量包括的P个第一元素,其中,所述目标第一向量被处理为无效,
响应于所述目标第一向量包括的P个第一元素的数值不均为所述预设值,输出第四信号至所述预处理模块,并输出所述目标第一向量,将所述目标第一向量作为所述第二组第一向量中的一个第一向量。
14.根据权利要求13所述的数据处理装置,其中,所述多个第二元素中与所述目标第一向量对应的第二元素为目标第二元素,所述预处理模块还被配置为对所述第二向量进行所述第二压缩处理,
所述预处理模块执行对所述第二向量进行所述第二压缩处理时,包括执行以下步骤:
针对所述目标第二元素,响应于所述第三信号,将所述目标第二元素从所述第一缓存队列中去除,其中,所述目标第二元素被处理为无效;
响应于所述第四信号,输出所述目标第二元素,并将所述目标第二元素作为所述压缩后第二向量的一个元素。
15.根据权利要求10-14任一项所述的数据处理装置,还包括元素级压缩单元,
其中,所述元素级压缩单元被配置为,在接收到来自所述压缩处理单元的所述第二组第一向量和所述压缩后第二向量时:
对所述第二组第一向量进行第三压缩处理,以得到至少一个第三向量,
基于所述至少一个第三向量,对所述压缩后第二向量进行处理,以得到与所述至少一个第三向量一一对应的至少一个第四向量,
其中,所述至少一个第三向量和所述至少一个第四向量中均不存在数值为所述预设值的元素。
16.根据权利要求15所述的数据处理装置,其中,所述元素级压缩单元包括第一处理模块、第二处理模块和缓存控制模块,
所述第一处理模块被配置为接收从所述压缩处理单元输出的所述至少一个第一向量,并对所述至少一个第一向量进行第三压缩处理,以生成所述至少一个第三向量;
所述第二处理模块被配置为接收从所述压缩处理单元输出的所述压缩后第二向量,并基于所述至少一个第三向量,对所述压缩后第二向量进行处理,以生成所述至少一个第四向量;
所述缓存控制模块被配置为对所述第一处理模块的状态和所述第二处理模块的状态进行监控,基于所述第一处理模块的状态和所述第二处理模块的状态,控制所述第一处理模块和所述第二处理模块输出所述至少一个第三向量和所述至少一个第四向量。
17.根据权利要求16所述的数据处理装置,其中,所述第一处理模块包括第一调度模块和P个第一缓存子模块,
所述第二处理模块包括第二调度模块和P个第二缓存子模块,
所述P个第一缓存子模块与所述P个第二缓存子模块一一对应,
所述第一调度模块被配置为针对所述目标第一向量,接收所述目标第一向量,基于所述目标第一向量包括的P个第一元素的数值,生成所述目标第一向量对应的缓存写入信息,并基于所述缓存写入信息,将所述P个第一元素中数值不为所述预设值的第一元素写入对应的第一缓存子模块;
所述第二调度模块被配置为接收所述目标第二元素和所述缓存写入信息,基于所述缓存写入信息,将所述目标第二元素写入对应的第二缓存子模块;
所述P个第一缓存子模块被配置为,在所述缓存控制模块的控制下,输出所述P个第一缓存子模块中存储的第一元素,以得到第三向量;
所述P个第二缓存子模块被配置为,在所述缓存控制模块的控制下,输出所述P个第二缓存子模块中存储的第二元素,以得到与所述第三向量对应的第四向量。
18.根据权利要求17所述的数据处理装置,其中,所述第二调度模块执行基于所述缓存写入信息,将所述目标第二元素写入对应的第二缓存子模块时,包括执行以下操作:
基于所述缓存写入信息,确定所述P个第一元素中数值不为所述预设值的第一元素;
基于所述P个第一元素中数值不为所述预设值的第一元素,确定所述对应的第二缓存子模块;
将所述目标第二元素写入所述对应的第二缓存子模块。
19.一种并行处理器,包括多个并行存储单元和共享存储器,
其中,每个并行存储单元包括同步子单元、冲突解决子单元、数据读取子单元、输出子单元、选择子单元以及如权利要求10-18任一项所述的数据处理装置,
所述同步子单元被配置为接收输入参数;
所述冲突解决子单元被配置为基于所述输入参数,获得元素存储信息,并将所述元素存储信息发送至所述数据处理装置,接收所述数据处理装置发送的所述第一信号或所述第二信号,其中,所述元素存储信息为所述第二向量中的待处理的第二元素对应的元素存储信息;
所述数据读取子单元被配置为在所述冲突解决子单元接收到所述第二信号时,从所述共享存储器中读取与所述待处理的第二元素对应的第一向量,并将所述第一向量发送至所述输出子单元;
所述输出子单元被配置为执行对所述第一向量的格式匹配处理,并将格式匹配后的第一向量发送至所述数据处理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110724020.3A CN113485750B (zh) | 2021-06-29 | 2021-06-29 | 数据处理方法及数据处理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110724020.3A CN113485750B (zh) | 2021-06-29 | 2021-06-29 | 数据处理方法及数据处理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113485750A CN113485750A (zh) | 2021-10-08 |
CN113485750B true CN113485750B (zh) | 2024-01-23 |
Family
ID=77937714
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110724020.3A Active CN113485750B (zh) | 2021-06-29 | 2021-06-29 | 数据处理方法及数据处理装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113485750B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116013B (zh) * | 2022-01-29 | 2022-04-19 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN114416180B (zh) * | 2022-03-28 | 2022-07-15 | 腾讯科技(深圳)有限公司 | 向量数据的压缩方法、向量数据的解压方法、装置及设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8108625B1 (en) * | 2006-10-30 | 2012-01-31 | Nvidia Corporation | Shared memory with parallel access and access conflict resolution mechanism |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102425668B1 (ko) * | 2017-02-23 | 2022-07-28 | 에이알엠 리미티드 | 데이터 처리장치에서의 곱셈-누적 |
CN109344840B (zh) * | 2018-08-07 | 2022-04-01 | 深圳市商汤科技有限公司 | 图像处理方法和装置、电子设备、存储介质、程序产品 |
US11544559B2 (en) * | 2019-01-08 | 2023-01-03 | Neuralmagic Inc. | System and method for executing convolution in a neural network |
WO2021026225A1 (en) * | 2019-08-08 | 2021-02-11 | Neuralmagic Inc. | System and method of accelerating execution of a neural network |
-
2021
- 2021-06-29 CN CN202110724020.3A patent/CN113485750B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8108625B1 (en) * | 2006-10-30 | 2012-01-31 | Nvidia Corporation | Shared memory with parallel access and access conflict resolution mechanism |
Also Published As
Publication number | Publication date |
---|---|
CN113485750A (zh) | 2021-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11698773B2 (en) | Accelerated mathematical engine | |
CN112214726B (zh) | 运算加速器 | |
CN112840356B (zh) | 运算加速器、处理方法及相关设备 | |
CN111414994B (zh) | 一种基于FPGA的Yolov3网络计算加速系统及其加速方法 | |
KR20200143685A (ko) | 연산을 가속하기 위한 방법 및 가속기 장치 | |
CN113485750B (zh) | 数据处理方法及数据处理装置 | |
KR20200143686A (ko) | 연산을 가속하기 위한 가속기 및 시스템 | |
CN106846235B (zh) | 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统 | |
CN112292816A (zh) | 处理核心数据压缩和存储系统 | |
CN112668708B (zh) | 一种提高数据利用率的卷积运算装置 | |
CN110727911B (zh) | 一种矩阵的运算方法及装置、存储介质、终端 | |
US20240119114A1 (en) | Matrix Multiplier and Matrix Multiplier Control Method | |
CN111915001A (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
CN114092336B (zh) | 基于双线性插值算法的图像缩放方法、装置、设备及介质 | |
CN111240746A (zh) | 一种浮点数据反量化及量化的方法和设备 | |
CN113486298A (zh) | 基于Transformer神经网络的模型压缩方法、矩阵乘法模块 | |
CN109902821B (zh) | 一种数据处理方法、装置及相关组件 | |
CN116888591A (zh) | 一种矩阵乘法器、矩阵计算方法及相关设备 | |
US11409840B2 (en) | Dynamically adaptable arrays for vector and matrix operations | |
CN114138231B (zh) | 执行矩阵乘法运算的方法、电路及soc | |
KR102372869B1 (ko) | 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법 | |
TWI798591B (zh) | 卷積神經網路運算方法及裝置 | |
US11995149B2 (en) | Sparse matrix-vector multiplication | |
CN112418417B (zh) | 基于simd技术的卷积神经网络加速装置及方法 | |
CN118132456A (zh) | 数据存储方法、数据处理方法、数据存储器、数据处理器 |
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 |