CN108388446A - 运算模块以及方法 - Google Patents
运算模块以及方法 Download PDFInfo
- Publication number
- CN108388446A CN108388446A CN201810110875.5A CN201810110875A CN108388446A CN 108388446 A CN108388446 A CN 108388446A CN 201810110875 A CN201810110875 A CN 201810110875A CN 108388446 A CN108388446 A CN 108388446A
- Authority
- CN
- China
- Prior art keywords
- operation instruction
- input data
- index
- representation
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0495—Quantised networks; Sparse networks; Compressed networks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- 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)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明提供一种运算模块,包括:存储器、寄存器单元、依赖关系处理单元、运算单元和控制单元;存储器存储向量;寄存器单元存储扩展指令,控制单元获取扩展指令,解析所述扩展指令得到第一运算指令和第二运算指令,根据所述第一运算指令以及第二运算指令确定第一运算指令与第二运算指令的执行顺序,从存储器读取第一运算指令的输入向量;索引处理单元,完成和索引变换、根据索引筛选数据等相关的操作;运算单元完成第一运算指令的输入数据索引表示方式的变换,并根据索引筛选数据,并对第一运算指令的输入数据按执行顺序执行第一运算指令以及第二运算指令得到扩展指令的结果。本发明提供的技术方案具有功耗低、计算开销小的优点。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种运算模块以及方法。
背景技术
现代的通用和专用处理器中,越来越多地引入计算指令(例如向量指令)进行运算。向量指令是使处理器进行向量或者矩阵运算的指令,例如向量的加减、向量的内积、矩阵乘法、矩阵卷积等。向量指令中至少有一个输入为向量或者矩阵或运算结果是向量或矩阵。向量指令可以通过调用处理器内部的向量处理部件来进行并行计算,提高运算速度。现有的向量指令中,其操作数或结果中的向量或矩阵一般是固定规模的,例如ARM处理器中的向量扩展结构Neon中的向量指令一次可以处理长为4的32位浮点向量或者长为8的16位定点向量。所以现有的向量运算指令无法实现可变规模的向量或矩阵的运算。
另一方面,神经网络作为一个高计算量和高访存的算法,权值越多,计算量和访存量都会增大。为了减小计算量和权值数量,从而降低访存量,因此提出了稀疏神经网络。稀疏神经网络的定义为:在神经网络中,值为0的权值的数目很多,并且值为非0的权值分布没有规律,则称该神经网络为稀疏神经网络。定义权值为0的元素数量与神经网络所有权值元素数量的比值为神经网络的稀疏度,如图1a所示。
而现有的向量运算指令无法支持稀疏神经网络中的稀疏向量或稀疏矩阵的运算,更无法实现可变规模的稀疏向量或稀疏矩阵的运算,并且现在的向量运算指令只能实现一种运算,例如一条向量指令只能实现乘法、加法中的一种运算,一条向量指令无法实现二种以上的运算,所以现有的向量运算的运算开销大,能耗高。
发明内容
本发明实施例提供了一种运算模块及方法,可实现单条运算指令实现多种运算的目的,有利于减少运算开销,降低模块的功耗。
第一方面,本发明实施例提供一种运算模块,该运算模块用于根据扩展指令执行运算,该运算模块包括:存储器、运算单元和控制单元;
所述扩展指令包括:操作码和操作域,所述操作码包括:第一运算指令标识;所述操作域包括:第一运算指令的输入数据地址、所述第一运算指令的输入数据的索引、第一运算指令的输出数据地址、第二计算指令标识、第二运算指令的输入数据、所述第二运算指令的输入数据的类型以及所述第二运算指令的输入数据的长度N;
所述存储器,用于存储所述第一运算指令的输入数据;
所述控制单元,用于获取扩展指令,解析所述扩展指令,以得到第一运算指令、第二运算指令、所述第一运算指令的输入数据地址、所述第一运算指令的输出数据地址、所述第一运算指令的输入数据的索引和所述第二运算指令的输入数据;根据所述第一运算指令和所述第二运算指令确定所述第一运算指令与所述第二运算指令的执行顺序;根据所述第一运算指令的输入数据地址从所述存储器读取所述第一运算指令的输入数据地址对应的第一运算指令的输入数据;
所述运算单元,用于对所述第一运算指令的输入数据的索引的表示方式进行变换,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引;根据该第一运算指令的输入数据的索引对所述第一运算指令的输入数据进行筛选,以得到处理后的第一运算指令的输入数据;按照所述执行顺序对所述处理后的第一运算指令的输入数据和第二运算指令的输入数据分别执行所述第一运算指令和第二运算指令,以得到运算结果。
可选地,所述运算单元包括:
索引处理单元,用于判断所述第一运算指令的输入数据的索引的表示方式是否为默认索引表示方式;当所述第一运算指令的输入数据的索引的表示方式不为所述默认表示方式时,根据转换指令将所述第一运算指令的输入数据的索引的表示方式转换为所述默认索引表示方式,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引;根据该第一运算指令的输入数据的索引对所述第一运算指令的输入数据进行筛选,以得到处理后的第一运算指令的输入数据。
可选地,所述第一运算指令的输入数据的索引的表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、坐标列表COO表示方式、压缩稀疏行CSR表示方式、压缩稀疏列CSC表示方式、ELL表示方式和混合HYB表示方式;所述默认索引表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、COO表示方式、CSC表示方式、CSR表示方式、ELL表示方式和混合HYB表示方式。
可选地,所述第一运算指令的输入数据为稀疏数据,当所述第一运算指令的输入数据的索引表示方式为直接索引表示方式时,所述第一运算指令的输入数据的索引为由0和1组成的字符串,0表示所述第一运算指令的输入数据中元素的绝对值小于或者等于预设阈值,1表示所述第一运算指令的输入数据中的元素的绝对值大于所述预设阈值,或者;
所述第一第一运算指令的输入数据为稀疏数据,当所述输入数据的索引表示方式为步长索引表示方式时,所述第一运算指令的输入数据的索引为所述第一运算指令的输入数据中绝对值大于所述预设阈值的元素与上一个绝对值大于所述预设阈值的元素之间的距离值组成的字符串,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为LIL表示方式时,所述第一运算指令的输入数据的索引包括至少一个列表,所述至少一个列表中的每个列表包括至少一个记录,所述记录包括所述第一运算指令的输入数据中绝对值大于所述预设阈值的元素的列索引和绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为所述COO表示方式时,所述第一运算指令的输入数据的索引由至少一个元组组成,所述元组包括第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的行号、列号和该绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSR表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第一数组,第二数组和第三数组,所述第一数组存储第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素的值,所述第二数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列索引,所述第三数组用于累加存储所述第一运算指令的输入数据矩阵中每一行绝对值大于所述预设阈值的元素的个数,并且所述第三数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSC表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第四数组,第五数组和第六数组,所述第四数组存储第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素的值,所述第五数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的行索引,所述第六数组用于累加存储所述第一运算指令的输入数据矩阵中每一列绝对值大于所述预设阈值的元素的个数,并且所述第六数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述ELL表示方式时,所述第一运算指令的输入数据的索引包括两个矩阵,分别为第一矩阵和第二矩阵,所述第一矩阵用于存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述第二矩阵存储所述绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述HYB表示方式时,所述第一运算指令的输入数据的索引包括第三矩阵、第四矩阵和至少一个元组,所述第四矩阵存储所述第一运算指令的输入数据矩阵中每一行最大相同数量的绝对值大于所述预设阈值的元素,所述第三矩阵存储在所述第四矩阵中存储的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述至少一个元组中的每个元组用于存储所述第一运算指令的输入数据矩阵中的任一行相对于其他行多出来元素的行号,列号和该元素的值。
可选地,所述运算模块还包括:
寄存器单元,用于存储所述扩展指令;
依赖关系处理单元,用于在所述控制单元获取所述扩展指令前,判断该扩展指令与前一扩展指令是否访问相同的输入数据,若是,则等待前一扩展指令执行完毕后,将当前扩展指令的第一运算指令以及第二运算指令提供给所述运算单元;否则,将当前扩展指令的第一运算指令以及第二运算指令提供给所述运算单元;
所述依赖关系处理单元,还用于在当前扩展指令与前一扩展指令访问相同的输入数据时,将该当前扩展指令存储在一存储队列中,待前一扩展指令执行完毕后,将存储队列中的该当前扩展指令提供给所述控制单元。
可选地,所述控制单元包括:
取指子单元,用于从所述寄存器单元中获取扩展指令;
译码子单元,用于对所述扩展指令进行译码得到所述第一运算指令、所述第二运算指令以及所述执行顺序;
指令队列子单元,用于将所述第一运算指令和第二运算指令按照所述执行顺序存储。
可选地,所述运算单元还包括向量加法电路、向量乘法电路、大小比较电路、非线性运算电路和向量标量乘法电路;所述运算单元为多流水级结构,其中,所述索引处理单元处于第一流水级,所述向量乘法电路和所述向量标量乘法电路处于第二流水级,所述大小比较电路和所述向量加法电路处于第三流水级,所述非线性运算部件处于第四流水级,其中所述第一流水级的输出数据为所述第二流水级的输入数据,所述第二流水级的输出数据为所述第三流水级的输入数据,所述第三流水级的输出数据为所述第四流水级的输入数据。
可选地,所述运算单元还包括转换电路,所述转换电路位于第二流水级和第四流水级,或所述转换电路位于第二流水级,或所述转换电路位于第四流水级。
可选地,所述控制单元具体用于:
判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否相同,若相同,则确定所述执行顺序为正序;判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否相同,若相同,则确定所述执行顺序为倒序;判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否关联;若不关联,则确定所述执行顺序为无序;判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否关联;若不关联,则确定所述执行顺序为无序。
第二方面,本发明实施例提供了一种运算方法,该方法包括:
获取扩展指令,所述扩展指令包括操作码和操作域,所述操作码包括第一运算指令标识;所述操作域包括第一运算指令的输入数据地址、所述第一运算指令的输入数据的索引、所述第一运算指令的输出数据地址、第二计算指令标识、第二运算指令的输入数据、所述第二运算指令的输入数据的类型以及所述第二运算指令的输入数据的长度N;
解析所述扩展指令,以得到第一运算指令、第二运算指令、所述第一运算指令的输入数据地址、所述第一运算指令的输出数据地址、所述第一运算指令的输入数据的索引和所述第二运算指令的输入数据;根据所述第一运算指令和所述第二运算指令确定所述第一运算指令与所述第二运算指令的执行顺序;根据所述第一运算指令的输入数据地址从所述存储器读取所述第一运算指令的输入数据地址对应的第一运算指令的输入数据;
对所述第一运算指令的输入数据的索引的表示方式进行变换,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引;根据该第一运算指令的输入数据的索引对所述第一运算指令的输入数据进行筛选,以得到处理后的第一运算指令的输入数据;按照所述执行顺序对所述处理后的第一运算指令的输入数据和第二运算指令的输入数据分别执行所述第一运算指令和第二运算指令,以得到运算结果。
可选地,所述对所述第一运算指令的输入数据的索引的表示方式进行变换,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引,包括:
判断所述第一运算指令的输入数据的索引的表示方式是否为默认索引表示方式;
当所述第一运算指令的输入数据的索引的表示方式不为所述默认表示方式时,根据转换指令将所述第一运算指令的输入数据的索引的表示方式转换为所述默认索引表示方式,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引。
可选地,所述第一运算指令的输入数据的索引的表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、坐标列表COO表示方式、压缩稀疏行CSR表示方式、压缩稀疏列CSC表示方式、ELL表示方式和混合HYB表示方式;所述默认索引表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、COO表示方式、CSC表示方式、CSR表示方式、ELL表示方式和混合HYB表示方式。
可选地,所述第一运算指令的输入数据为稀疏数据,当所述第一运算指令的输入数据的索引表示方式为直接索引表示方式时,所述第一运算指令的输入数据的索引为由0和1组成的字符串,0表示所述第一运算指令的输入数据中元素的绝对值小于或者等于预设阈值,1表示所述第一运算指令的输入数据中的元素的绝对值大于所述预设阈值,或者;
所述第一第一运算指令的输入数据为稀疏数据,当所述输入数据的索引表示方式为步长索引表示方式时,所述第一运算指令的输入数据的索引为所述第一运算指令的输入数据中绝对值大于预设阈值的元素与上一个绝对值大于所述预设阈值的元素之间的距离值组成的字符串,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为LIL表示方式时,所述第一运算指令的输入数据的索引包括至少一个列表,所述至少一个列表中的每个列表包括至少一个记录,所述记录包括所述第一运算指令的输入数据中绝对值大于预设阈值的元素的列索引和绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为所述COO表示方式时,所述第一运算指令的输入数据的索引由至少一个元组组成,所述元组包括第一运算指令的输入数据矩阵中绝对值大于预设阈值的元素在所述第一运算指令的输入数据矩阵中的行号、列号和该绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSR表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第一数组,第二数组和第三数组,所述第一数组存储第一运算指令的输入数据矩阵中的绝对值大于预设阈值的元素的值,所述第二数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列索引,所述第三数组用于累加存储所述第一运算指令的输入数据矩阵中每一行绝对值大于所述预设阈值的元素的个数,并且所述第三数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSC表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第四数组,第五数组和第六数组,所述第四数组存储第一运算指令的输入数据矩阵中的绝对值大于预设阈值的元素的值,所述第五数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的行索引,所述第六数组用于累加存储所述第一运算指令的输入数据矩阵中每一列绝对值大于所述预设阈值的元素的个数,并且所述第六数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述ELL表示方式时,所述第一运算指令的输入数据的索引包括两个矩阵,分别为第一矩阵和第二矩阵,所述第一矩阵用于存储所述第一运算指令的输入数据矩阵中绝对值大于预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述第二矩阵存储所述绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述HYB表示方式时,所述第一运算指令的输入数据的索引包括第三矩阵、第四矩阵和至少一个元组,所述第四矩阵存储所述第一运算指令的输入数据矩阵中每一行最大相同数量的绝对值大于预设阈值的元素,所述第三矩阵存储在所述第四矩阵中存储的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述至少一个元组中的每个元组用于存储所述第一运算指令的输入数据矩阵中的任一行相对于其他行多出来元素的行号,列号和该元素的值。
可选地,所述根据所述第一运算指令和所述第二运算指令确定所述第一运算指令与所述第二运算指令的执行顺序,包括:
判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否相同,若相同,则确定所述执行顺序为正序;
判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否相同,若相同,则确定所述执行顺序为倒序;
判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否关联;若不关联,则确定所述执行顺序为无序;
判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否关联;若不关联,则确定所述执行顺序为无序。
第三方面,本发明实施例提供了一种运算装置,该运算装置包括一个或多个如第一方面所述的运算模块,用于从其他处理装置中获取待运算数据和控制信息,并执行指定的运算,将执行结果通过I/O接口传递给其他处理装置;
当所述运算装置包含多个所运算模块时,所述多个所述运算模块间可以通过特定的结构进行连接并传输数据;
其中,多个所述运算模块通过快速外部设备互连总线PCIE总线进行互联并传输数据,以支持更大规模的神经网络的运算;多个所述运算模块共享同一控制系统或拥有各自的控制系统;多个所述运算模块共享内存或者拥有各自的内存;多个所述运算模块的互联方式是任意互联拓扑。
第四方面,本发明实施例提供了一种组合处理装置,该组合处理装置包括如第三方面所述的运算装置,通用互联接口和其他处理装置;
所述运算装置与所述其他处理装置进行交互,共同完成用户指定的操作。
第五方面,本发明实施例提供了一种神经网络芯片,该神经网络芯片包括上述第一方面所述的运算模块、上述第三方面所述的运算装置或者上述第四方面所述的组合处理装置。
第六方面,本发明实施例提供了一种神经网络芯片封装结构,该神经网络芯片封装结构包括上述第五方面所述的神经网络芯片;
第七方面,本发明实施例提供了一种电子装置,该电子装置包括上述第五方面所述的神经网络芯片或者第六方面所述的神经网络芯片封装结构。
可以看出,通过本发明实施例提供的扩展指令,强化了指令的功能,用一条指令代替了原来的多条指令。这样减少了复杂向量、矩阵操作所需的指令数量,简化了向量指令的使用;与多条指令相比,不需要存储中间结果,既节约了存储空间,又避免了额外的读写开销。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a为本发明实施例提供的一种稀疏神经网络的结构示意图;
图1b为本发明实施提供的一种运算模块的结构示意图;
图2为本发明实施例提供的一种运算模块的局部结构示意图;
图3为本发明实施例提供的另一种运算模块的局部结构示意图;
图4为本发明实施例提供的一种运算模块中的运算单元流水级的示意图;
图5a为本发明实施例提供的一种运算装置的结构示意图;
图5b为本发明实施例提供的另一种运算装置的结构示意图;
图6为本发明实施例流提供的一种运算方法的流程示意图。
附图中的虚线部件表现可选。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。文中的“/”可以表示“或”。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
参见图1,图1为本发明实施例提供的一种运算模块的结构示意图。该运算模块100用于根据扩展指令进行运算。如图1所示,该运算模块100包括:存储器101、寄存器单元102(可选地)、依赖关系处理单元103(可选地)、运算单元104和控制单元105。
其中,上述扩展指令包括操作码和操作域。该操作码包括第一运算指令标识,该第一运算指令标识用于指示第一运算指令;该操作域包括上述第一运算指令的输入数据地址、该第一运算指令的输入数据的索引、上述第一运算指令的输出数据地址、第二运算指令标识、上述第二运算指令的输入数据、该第二运算指令的输入数据的类型以及该第二运算指令的输入数据的长度N。
在一种可行的实施例中,上述扩展指令的操作域还包括第三运算指令和第三运算指令的输入数据。
上述存储器101用于存储上述第一运算指令的输入数据;上述寄存器单元102用于存储上述扩展指令;上述控制单元105用于获取上述扩展指令并解析该扩展指令,以得到上述第一运算指令,上述第二运算指令、第一运算指令的输入数据地址、第一运算指令的输入数据的索引和上述第二运算指令的输入数据;上述控制单元105根据上述第一运算指令的输入数据地址从上述存储器101中读取该第一运算指令的输入数据地址对应的第一运算指令的输入数据。上述控制单元105根据上述第一运算指令和第二运算指令确定该第一运算指令和第二运算指令的执行顺序。
上述运算单元104,用于对上述第一运算指令的输入数据的索引的表示方式进行变换,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引,并根据该第一运算指令的输入数据的索引对该第一运算指令的输入数据进行筛选,以得到处理后的第一运算指令的输入数据;上述运算单元104根据上述执行顺序对上述处理后的第一运算指令的输入数据和第二运算指令的输入数据分别执行第一运算指令和第二运算指令,以得到运算结果。
具体地,如2所示,上述控制单元105包括:取指子单元1051、译码子单元1052和指令队列子单元1053。
上述取指子单元1051从上述寄存器单元102中获取上述扩展指令;上述译码子单元1052对该扩展指令进行译码得到第一运算指令和第二运算指令,并根据该第一运算指令和第二运算指令确定第一运算指令和第二运算指令的执行顺序;上述指令队列子单元根据该执行顺序存储上述第一运算指令和第二运算指令。
其中,上述运算单元104包括:向量加法电路1041、向量乘法电路1042、大小比较电路1043(可选地)、向量标量乘法电路1044、非线性运算电路1045(可选地)、转换电路1046(可选地)和索引处理单元1047。
具体地,上述索引处理单元1047判断上述第一运算指令的输入数据的索引的表示方式是否为默认索引表示方式;上述第一运算指令的输入数据的索引的表示方式不为上述默认索引表示方式时,根据转换指令将该第一运算指令的输入数据的索引的表示方式转换为默认索引表示方式,以得到以默认索引表示方式的第一运算指令的输入数据的索引;然后根据该第一运算指令的输入数据的索引对该第一运算指令的输入数据继续筛选,以得到处理后的第一运算指令的输入数据。
可选地,上述第一运算指令的输入数据的索引的表示方式可为直接索引表示方式、步长索引表示方式、列表的列表(List of List,LIL)表示方式、坐标列表(Coordinatelist,COO)表示方式、压缩稀疏行(Compressed Sparse Row,CSR)表示方式、压缩稀疏列(Compressed Sparse Column,CSC)表示方式、ELL表示方式或者混合(Hybird,HYB)表示方式。
具体地,上述第一运算指令的输入数据为稀疏数据,当该第一运算指令的输入数据的索引表示方式为直接索引表示方式时,该第一运算指令的输入数据的索引为由0和1组成的字符串,0表示该第一运算指令的输入数据中元素的绝对值小于或者等于预设阈值,1表示上述第一运算指令的输入数据中的元素的绝对值大于所述预设阈值。
举例说明,如图4所示,假设上述第一运算指令的输入数据为向量(3,0,6,4,0.1,0.9)时,预设阈值为0.5,由于向量中元素0和元素0.1的绝对值均小于上述预设阈值,则以直接索引表示方式表示的第一运算指令的输入数据的索引为101101。
具体地,上述第一运算指令的输入数据为稀疏数据,当该第一运算指令的输入数据的索引表示方式为步长索引表示方式时,该第一运算指令的输入数据的索引为该第一运算指令的输入数据中绝对值大于预设阈值的元素与上一个绝对值大于上述预设阈值的元素之间的距离值组成的字符串。
举例说明,如图5所示,假设上述第一运算指令的输入数据为向量(3,0,6,4,0.1,0.9)时,预设阈值为0.5,由于向量中元素0和元素0.1的绝对值均小于上述预设阈值,则以步长索引表示方式表示的第一运算指令的输入数据的索引为0212。
具体地,上述第一运算指令的输入数据为稀疏数据,且该第一运算指令的输入数据以矩阵形式表示的,当上述第一运算指令的输入数据的索引为LIL表示方式时,该第一运算指令的输入数据的索引包括至少一个列表,所述至少一个列表中的每个列表包括至少一个记录,所述记录包括所述第一运算指令的输入数据中绝对值大于预设阈值的元素的列索引和绝对值大于所述预设阈值的元素的值
举例说明,假设上述第一运算指令的输入数据为上述预设阈值为0.5,则以LIL表示方式表示的第一运算指令的输入数据的索引为((1,2),(2,3.5),(2,8),(1,5.8),(2,6))。
具体地,上述第一运算指令的输入数据为稀疏数据,且该第一运算指令的输入数据以矩阵形式表示的,当上述第一运算指令的输入数据的索引为COO表示方式时,该第一运算指令的输入数据的索引由至少一个元组组成,所述元组包括第一运算指令的输入数据矩阵中绝对值大于预设阈值的元素在所述第一运算指令的输入数据矩阵中的行号、列号和该绝对值大于上述预设阈值的元素的值。
举例说明,假设上述第一运算指令的输入数据为上述预设阈值为0.5,则以COO表示方式表示的第一运算指令的输入数据的索引为((1,1,2),(1,2,3.5),(2,2,8),(3,1,5.8),(3,2,6))。
具体地,上述第一运算指令的输入数据为稀疏数据,且该第一运算指令的输入数据以矩阵形式表示的,当上述第一运算指令的输入数据的索引表示方式为CSR表示方式时,该第一运算指令的输入数据的索引包括三个数组,分别为第一数组,第二数组和第三数组,该第一数组存储上述第一运算指令的输入数据矩阵中的绝对值大于预设阈值的元素的值,上述第二数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在该第一运算指令的输入数据矩阵中的列索引,上述第三数组用于累加存储上述第一运算指令的输入数据矩阵中每一行绝对值大于所述预设阈值的元素的个数,并且该第三数组中的最后一个元素存储上述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数。
采用CSR表示方式是把上述第一运算指令的输入数据矩阵的行的信息压缩存储了,只显式保留每行第一个绝对值大于上述预设阈值的元素的位置。将上述第一运算指令的输入数据的索引通过三个数组表示:
上述第一数组存储上述第一运算指令的输入数据矩阵中的所有绝对值大于上述预设阈值的元素的值,其顺序按照从左至右、从上到下的行遍历方式排列元素,该第一数组记作A。该第一数组的长度即第一运算指令的输入数据矩阵中绝对值大于上述预设阈值的元素的个数;
上述第二数组存储上述第一数组A中的每个元素分别在第一运算指令的输入数据矩阵中的列索引(即列号),因而第二数组的长度与数组A的长度相同,记此数组为JA。
上述第三数组记作IA,该数组IA的长度为第一运算指令的输入数据矩阵的行数加1。该数组IA中的元素累加存储上述第一运算指令的输入数据矩阵中每一行绝对值大于上述预设阈值的元素的个数,具体可通过如下递归方法获取,并在该数组IA中的最后一个元素中保存整个第一运算指令的输入数据矩阵中绝对值大于上述预设阈值的元素的个数
若上述三个数组的序号与第一运算指令的输入数据矩阵的序号从0开始,可以用如下的递归方法定义数组IA:
IA[0]=0
IA[i]=IA[i-1]+第一运算指令的输入数据矩阵中第i-1行的绝对值大于上述预设阈值的元素的个数(i>0)。
举例说明,假设上述第一运算指令的输入数据为上述预设阈值为0.5,则以CSR表示方式表示的第一运算指令的输入数据的索引为:由于上述第一数组A存储上述矩阵中的所有绝对值大于0.5的元素的值,其顺序按照从左到右,从上到下的行遍历方式排列元素,故该第一数组A=[5,8,3,6];第二数组JA存储上述数组A中每个元素分别在上述矩阵中的列索引(即列号),则该数组JA=[0,1,2,1]。在第三数组IA中累加存储上述矩阵中每一行的绝对值大于0.5的元素的个数,根据上述递归方式确定该数组IA=[0,0,2,3,4]。
具体地,上述第一运算指令的输入数据为稀疏数据,且上述第一运算指令的输入数据以矩阵形式表示的,当上述第一运算指令的输入数据的索引表示方式为CSC表示方式时,该第一运算指令的输入数据的索引包括三个数组,分别为第四数组,第五数组和第六数组,该第四数组存储第一运算指令的输入数据矩阵中的绝对值大于预设阈值的元素的值,上述第五数组存储所述第一运算指令的输入数据矩阵中的绝对值大于该预设阈值的元素在上述第一运算指令的输入数据矩阵中的行索引,上述第六数组用于累加存储上述第一运算指令的输入数据矩阵中每一列绝对值大于上述预设阈值的元素的个数,并且上述第六数组中的最后一个元素存储上述第一运算指令的输入数据矩阵中绝对值大于上述预设阈值的元素的个数。
采用CSC的形式是把上述第一运算指令的输入数据矩阵的列的信息压缩存储了,只显式保留每列第一个绝对值大于上述预设阈值的元素的位置。将上述第一运算指令的输入数据的索引用三个数组表示:
上述第四数组存储上述第一运算指令的输入数据矩阵中的所有绝对值大于上述预设阈值的元素的值,其顺序按照从上至下、从左到右的列遍历方式排列元素,该第四数组记作A’,其长度即上述第一运算指令的输入数据矩阵中绝对值大于上述预设阈值的元素的个数;
上述第五数组存储上述第一数组A’中的每个元素分别在第一运算指令的输入数据矩阵中的行索引(即行号),因而其长度与第一数组A’相同,记此数组为JA’。
上述第六数组记作IA’,该数组的长度为上述第一运算指令的输入数据矩阵的列数加1。该数组IA’中的元素累加存储上述第一运算指令的输入数据矩阵中每一列绝对值大于上述预设阈值的元素的个数,具体可通过如下递归方法获取,并且在该数组IA’累加整个第一运算指令的输入数据矩阵中每一列中绝对值大于上述预设阈值的元素的个数。
若上述三个数组的序号与第一运算指令的输入数据矩阵的序号从0开始,可以用如下的递归方法定义数组IA’:
IA’[0]=0
IA’[j]=IA’[j-1]+第一运算指令的输入数据矩阵中第j-1列的绝对值大于上述预设阈值的元素的个数(j>0)。
举例说明,假设上述第一运算指令的输入数据为上述预设阈值为0.5,则以CSC表示方式表示的第一运算指令的输入数据的索引为:上述预设阈值为0.5,则以CSC表示方式表示的第一运算指令的输入数据的索引为:由于上述第四数组A’存储第一运算指令的输入数据矩阵的所有绝对值大于0.5的元素,其顺序按照从上到下,从左到右的列遍历方式排列元素,故该数组A’=[4,6,1,3,5,2,7,8];上述第五数组JA’存储上述数组A’中每个元素分别在上述第一运算指令的第一运算指令的输入数据矩阵中的行索引(即行号),则该数组JA’=[0,3,1,3,2,0,2,3];根据上述递归方式确定数组IA’=[0,2,4,5,8]。
具体地,上述第一运算指令的输入数据为稀疏数据,且该第一运算指令的输入数据以矩阵形式表示的,当上述第一运算指令的输入数据的索引表示方式为上述ELL表示方式时,该第一运算指令的输入数据的索引包括两个矩阵,分别为第一矩阵和第二矩阵,该第一矩阵用于存储所述第一运算指令的输入数据矩阵中绝对值大于上述预设阈值的元素在该第一运算指令的输入数据矩阵中的列号,上述第二矩阵存储所述绝对值大于所述预设阈值的元素的值。
该方式采用两个与第一运算指令的输入数据矩阵的行数相同矩阵存储该权值矩阵中绝对值大于上述预设阈值的元素的信息。上述第一矩阵存储上述第一运算指令的输入数据矩阵中绝对值大于上述预设阈值的元素的列号,上述第二矩阵存储上述第一运算指令的输入数据矩阵中绝对值大于上述预设阈值的元素的值,行号就不存了,用自身所在的行来表示;这两个矩阵每一行都是从头开始放,如果没有元素了就用个结束标志(比如*)结束。
假设上述第一运算指令的输入数据为上述预设阈值为0.5,则以ELL表示方式表示的第一运算指令的输入数据的索引为:第二矩阵为
具体地,上述第一运算指令的输入数据为稀疏数据,且该第一运算指令的输入数据以矩阵形式表示的,当上述第一运算指令的输入数据的索引表示方式为所述HYB表示方式时,该第一运算指令的输入数据的索引包括第三矩阵、第四矩阵和至少一个元组,该第四矩阵存储上述第一运算指令的输入数据矩阵中每一行最大相同数量的绝对值大于上述预设阈值的元素,上述第三矩阵存储在上述第四矩阵中存储的绝对值大于上述预设阈值的元素在上述第一运算指令的输入数据矩阵中的列号,上述至少一个元组中的每个元组用于存储上述第一运算指令的输入数据矩阵中的任一行相对于其他行多出来元素的行号,列号和该元素的值。
该方式可以看成上述ELL和COO方式的组合。采用COO的方式存储上述第一运算指令的输入数据矩阵中某一行相对于其他行多出来的绝对值大于预设阈值的元素。采用ELL的方式存储上述第一运算指令的输入数据矩阵中每一行最大相同数量的绝对值大于预设阈值的元素。
假设上述第一运算指令的输入数据为上述预设阈值为0.5,则以ELL表示方式表示的第一运算指令的输入数据的索引为:第三矩阵为第四矩阵为上述COO形式的元组为(2,3,9)。
可选地,所述默认索引表示方式可为直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、COO表示方式、CSC表示方式、CSR表示方式、ELL表示方式和HYB表示方式。
需要说明的是,上述默认索引表示方式可以为直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、COO表示方式、CSC表示方式、CSR表示方式、ELL表示方式和HYB表示方式的具体可参见上述相关描述,在此不再叙述。
上述运算单元104在根据上述第一运算指令对其输入数据进行运算之前,该运算单元104根据转换指令将上述第一运算指令的输入数据的索引的表示方式从当前的非默认索引表示方式转换为默认索引表示方式。这里定义默认索引表示方式为步长索引表示方式。
在一种可行的实施例中,上述第一运算指令的输入数据的索引的表示方式为直接索引(Direct indexing)表示方式,上述运算单元104根据第一转化指令将以直接索引表示方式表示的第一运算指令的输入数据的索引转换成以步长索引(step indexing)表示方式表示的索引。
其中,上述第一转换指令为:DIRECT2STTP(D_TYPE,Nnz,InX,ValX,InY,ValY)。该指令中各变量的功能描述见下表1。
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和复数 |
| Nnz | 待转换数据中绝对值大于预设阈值的数据的数量 |
| InX | 待转换数据的直接索引的首地址 |
| ValX | 待转换数据中数值的首地址 |
| InY | 转换后数据的步长索引的首地址 |
| ValY | 转换后数据中数值的首地址 |
表1
在一种可行的实施例中,上述第一运算指令的输入数据的索引的表示方式为COO表示方式,上述运算单元104根据第二转化指令将以COO表示方式表示的第一运算指令的输入数据的索引转换成以步长索引表示方式表示的索引。
其中,上述第二转换指令为:COO2STTP(D_TYPE,LAYOUT,Nnz,InXi,InYi,ValX,InY,ValY)。该指令中各变量的功能描述见下表2。
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和复数 |
| LAYOUT | 表示矩阵存储格式(包括行主序或列主序) |
| Nnz | 待转换数据中绝对值大于预设阈值的数据的数量 |
| InXi | 待转换数据的行坐标的首地址 |
| InYj | 待转换数据列坐标的首地址 |
| ValX | 待转换数据中数值的首地址 |
| InY | 转换后数据的步长索引的首地址 |
| ValY | 转换后数据中数值的首地址 |
表2
在一种可行的实施例中,上述第一运算指令的输入数据的索引的表示方式为CSR表示方式,上述运算单元104根据第二转化指令将以CSR表示方式表示的第一运算指令的输入数据的索引转换成以步长索引表示方式表示的索引。
其中,上述第二转换指令为:CSR2STTP(D_TYPE,Nnz,InXr,InYc,ValX,InY,ValY)。该指令中各变量的功能描述见下表3。
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和复数 |
| Nnz | 待转换数据中绝对值大于预设阈值的数据的数量 |
| InXr | 待转换数据的行索引的首地址 |
| InYc | 待转换数据的列索引的首地址 |
| ValX | 待转换数据中数值的首地址 |
| InY | 转换后数据的步长索引的首地址 |
| ValY | 转换后数据中数值的首地址 |
表3
上述运算单元104根据上述转换指令将上述第一运算指令的输入数据的索引从非默认索引表示方式转换成默认索引表示方式。然后上述运算单元根据以默认索引表示方式表示的上述第一运算指令的输入数据的索引,对上述第一运算指令的输入数据进行筛选,以得到筛选后的第一运算指令的输入数据。
具体地,上述第一运算指令的输入数据包括第一输入数据和第二输入数据,上述运算单元104分别获取上述第一输入数据的索引和第二输入数据的索引;然后根据该第一输入数据的索引和第二输入数据的索引得到第三索引。比如,当上述第一输入数据的索引和上述第二输入数据的索引均是以直接索引表示方式表示时,上述运算单元104对上述第一输入数据的索引与上述第二输入数据的索引进行与操作,以得到第三索引,该第三索引也是以直接索引表示方式表示的;当上述第一输入数据的索引是以直接索引表示方式表示的,上述第二输入数据是以步长索引表示方式表示的;上述运算单元104将上述第二输入数据的索引从步长索引表示方式转换为直接索引表示方式,然后对上述第一输入数据的索引与上述第二输入数据的索引进行与操作,以得到第三索引,该第三索引也是以直接索引表示方式表示的;上述运算单元104根据该第三索引分别对上述第一输入数据和第二输入数据进行筛选,以得到筛选后的第一输入数据和筛选后的第二输入数据。上述运算单元104根据上述第一运算指令对筛选后的第一输入数据和筛选后的第二输入数据进行计算。
可选地,上述运算单元104执行运算指令(包括上述第一运算指令和第二运算指令)对输入数据(包括第一运算指令的输入数据和第二运算指令的输入数据)进行运算操作可以包括:直接对稀疏输入数据进行运算,或者根据稀疏输入数据的索引对另一个的待运算数据进行处理后再进行运算等。
具体地,当运算指令的输入数据包括标量和向量/矩阵,即该运算指令用于执行标量与向量/矩阵之间的运算,上述运算单元104则直接对标量和向量/矩阵进行运算;当运算指令为对至少两个向量/矩阵进行运算的指令时,且至少两个向量/矩阵中的至少一个为稀疏向量/矩阵时,则上述运算单元104根据稀疏矩阵/向量的索引对非稀疏矩阵/向量进行数据筛选后再进行运算;当稀疏向量/矩阵的索引的表示方式不是硬件运算部分对应的索引的表示方式(即稀疏向量/矩阵的索引的表示方式不是默认索引表示方式)时,上述运算单元104将以非默认索引表示方式表示的稀疏向量/矩阵的索引转换为以默认索引表示方式的索引,后续再进行相应的运算操作。
举例说明,对于一个标量和稀疏矩阵进行运算,如F=αA,其中,α为一个标量,A为稀疏矩阵,则上述运算单元104可以直接对稀疏数据A的数值进行运算。又如F=AB,其中,A为稀疏矩阵,B为稠密矩阵,则上述运算单元104根据稀疏矩阵A的索引对稠密矩阵B的元素进行筛选,以筛选出与稀疏矩阵A进行运算的元素,然后进行后续运算操作。
在一种可行的实施例中,上述存储器101为高速暂存存储器。
在一种可行的实施例中,上述运算单元104内部的电路单元可以为多流水级结构,具体的如图4所示,该运算单元104内部的电路单元可分为四个流水级。
其中,第一流水级包括但不限于索引处理单元;第二流水级包括但不限于:向量乘法电路和、向量标量乘法电路等等;第三流水级包括但不限于:大小比较电路(例如比较器)、向量加法电路等等;第四流水级包括但不限于:非线性运算电路(例如激活电路或超越函数计算电路等等)等等。
在一种可行的实施例中,上述运算单元104还包括转换单元,该转换单元可位于第二流水级、还可位于第四流水级、还可位于第二流水级和第四流水级(即在第二流水级和第四流水级均有一个转换电路)。
在一种可行的实施例中,上述运算模块100还包括:
依赖关系处理单元103,用于在上述控制单元105获取扩展指令前,判断该扩展指令与前一扩展指令是否访问相同的输入数据,若是,则等待前一扩展指令执行完毕后,将当前扩展指令的第一运算指令以及第二运算指令提供给所述运算单元104;否则,将当前扩展指令的第一运算指令以及第二运算指令提供给上述运算单元104。
依赖关系处理单元103,还用于在当前扩展指令与前一扩展指令访问相同的输入数据时,将该当前扩展指令存储在一存储队列中,待前一扩展指令执行完毕后,将存储队列中的该当前扩展指令提供给上述控制单元105。
可选的,上述执行顺序可以包括:无序、正序或倒序中的任意一种。
需要说明的是,上述执行顺序为无序,即第一运算指令与第二运算指令没有先后执行顺序的要求;上述执行顺序为正序,即先执行第一运算指令,后执行第二运算指令;执行顺序为倒序,即先执行第二运算指令,后执行第一运算指令。
上述运算模块100根据上述第一运算指令以及第二运算指令确定上述执行顺序的具体实现方式可以为:上述运算模块100判断第一运算指令的输出数据与第二运算指令的输入数据是否相同,若上述第一运算指令的输出数据与第二运算指令的输入数据相同,确定上述执行顺序为正序;上述运算模块100判断上述第一运算指令的输入数据与上述第二运算指令的输出数据是否相同,若上述第一运算指令的输入数据与第二运算指令的输出数据相同,确定上述执行顺序为倒序;上述运算模块100判断第一运算指令的输入数据与第二运算指令的输出数据是否关联,和判断上述第一运算指令的输出数据与上述第二运算指令的输入数据是否关联;若均不关联,确定上述执行顺序为无序。
具体的以一个实际的例子来说明,如F=A*B+C,其中,F,A,B和C均为矩阵,第一运算指令为矩阵乘法指令,第二运算指令为矩阵加法指令,由于第二运算指令的矩阵加法指令需要利用到第一计算指令的结果即输出数据,所以确定该上述执行顺序为正序。又如,F=OP(A)*OP(B),其中F,A和B均为矩阵,第一运算指令为矩阵乘法指令,第二运算指令为变换(例如转置或共轭),则由于第一运算指令的输入数据为第二运算指令的输出数据,所以其执行顺序为倒序。如没有相应关联,即第一计算指令的输出数据与第二计算指令的输入数据不相同且第一运算指令的输入数据与第二计算指令的输入数据也不相同,则确定不关联。
本发明提供的向量指令的扩展,强化了指令的功能,用一条指令代替了原来的多条指令。这样减少了复杂向量、矩阵操作所需的指令数量,简化了向量指令的使用;与多条指令相比,不需要存储中间结果,既节约了存储空间,又避免了额外的读写开销。
如第一运算指令为向量指令,对于向量指令中的输入数据为向量或矩阵,指令增加对输入数据进行缩放的功能即在操作域增加表示缩放系数的操作数,在读入该输入数据时首先按照缩放系数直接对其进行缩放(即第二计算指令为缩放指令)(即无需对稀疏矩阵进行变换)。如果向量指令中有多个向量或矩阵相乘的操作,则这些输入向量或矩阵对应的缩放系数可以合并成一个。
如第一运算指令为向量指令,对于向量指令中的输入数据为矩阵,指令增加对输入数据进行转置的功能(即第二运算指令为转置指令)。在指令中增加表示是否对输入数据进行转置的操作数,代表在运算前是否对该输入数据进行转置。
如第一计算指令为向量指令,对于向量指令中的输出向量或矩阵,指令增加与原始的输出向量或矩阵相加的功能(即第二计算指令为加法指令)。在指令中增加表示对原始的输出向量或矩阵进行缩放的系数(即添加第三计算指令,第三计算指令可以为缩放指令),指令表示在进行完向量或矩阵操作后,把结果与缩放后的原始输出向量或矩阵相加,作为新的输出向量或矩阵。
如第一计算指令为向量指令,对于向量指令中的输入数据为向量,该向量指令增加按照固定步长读取的功能。在该向量指令中增加表示输入数据读取步长的操作数(即第二计算指令为按固定步长读取向量指令),表示向量中相邻两个元素的地址之差。
如第一计算指令为向量指令,对于向量指令中的结果向量,该向量指令增加按照固定步长写入结果的功能(即第二计算指令按固定步长写入向量指令)。在该向量指令中增加表示结果向量读取步长的操作数,表示向量中相邻两个元素的地址之差。如果一个向量既是输入又作为结果,则该向量作为输入和作为结果时使用同一个步长。
如第一计算指令为向量指令,对于向量指令中的输入矩阵,该向量指令增加按照固定步长读取行或列向量的功能(即第二计算指令为按固定步长读取多个向量)。在该向量指令中增加表示矩阵读取步长的操作数,表示矩阵行或列向量之间的首地址之差。
如第一计算指令为向量指令,对于向量指令中的结果矩阵,该向量指令增加按照固定步长读取行或列向量的功能(即第二计算指令为按固定步长写入多个向量)。在该向量指令中增加表示矩阵读取步长的操作数,表示矩阵行或列向量之间的首地址之差。如果一个矩阵既是输入又是结果矩阵,则作为输入和作为结果使用同一个步长。
下面以一些实际的扩展指令来说明上述扩展指令的实际结构。这里采用的默认索引表示方式为步长索引表示方式。
平面旋转,进行多个点在平面内的旋转坐标变换。给定两个向量x和y,向量的每个元素按照下面的公式进行变换:
xi=c*xi+s*yi
yi=c*yi-s*xi
当上述向量x为稀疏向量时,对于平面旋转,其对应的扩展指令为:ROT(D_TYPE,I_TYPE,Nnz,ValX,InX,M,Y,INCY,A)。其中,上述ROT指令中的各变量的含义见下表4:
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和虚数 |
| I_TYPE | 稀疏向量的索引的表示方式 |
| Nnz | 稀疏向量x中元素的个数 |
| ValX | 稀疏向量x中元素的首地址 |
| InX | 稀疏向量x的索引的首地址 |
| M | 向量y的长度(即向量y中元素的个数) |
| Y | 向量y中元素的首地址 |
| INCY | 向量y中元素之间的地址间隔 |
| C | 标量 |
| S | 标量 |
表4
当上述向量x和向量y均为稀疏向量时,对于平面旋转,其对应的扩展指令为:ROT(D_TYPE,I_TYPE,Nnz,ValX,InX,Mnz,ValY,InY,C,S)。其中,上述ROT指令中的各变量的含义见下表5:
表5
上表4和表5所示的扩展指令的格式分别表示待进行运算的向量(向量x和向量y)中一个向量为稀疏数据的和两个向量均为稀疏向量的情况。其中,两个向量的长度可变,可以减少指令数量,简化指令的使用。
并且支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用,还支持多种索引的表示方式,兼容性更高。支持复数的运算,扩充了指令功能。更有助于扩大其指令的适用范围。
吉文斯(Givens)旋转:进行多个点在平面内的吉文斯旋转操作。给定两个向量x和y,向量的每个元素按照下面的公式进行变换:
其中,上述H是给定的吉文斯变换矩阵,其元素由指令参数给定。
当上述向量x为稀疏向量时,对于吉文斯(Givens)旋转,其对应的扩展指令为:ROTM(D_TYPE,I_TYPE,Nnz,ValX,InX,M,Y,INCY,FLAG,PARAM)。其中,上述ROTM指令中的各变量的含义见下表6:
表6
当上述向量x和向量y均为稀疏向量时,对于吉文斯(Givens)旋转,其对应的扩展指令为:ROTM(D_TYPE,I_TYPE,Nnz,ValX,InX,Mnz,ValY,InY,FLAG,PARAM)。其中,上述ROTM指令中的各变量的含义见下表7:
表7
上表6和表7所示的扩展指令的格式分别表示待进行运算的向量(向量x和向量y)中一个向量为稀疏数据的和两个向量均为稀疏向量的情况。其中,两个向量的长度可变,可以减少指令数量,简化指令的使用。并且支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用,还支持多种索引的表示方式,兼容性更高。支持复数的运算,扩充了指令功能。更有助于扩大其指令的适用范围。区分了吉文斯旋转的普遍形式和各类特殊形式,既保证了通用性,又方便对特殊情况进行优化.
向量交换:交换两个向量的元素。给定两个稀疏向量x和y,交换向量x和向量y中的元素。其对应的扩展指令为:SWAP(D_TYPE,I_TYPE,Nnz,ValX,InX,Mnz,ValY,InY,)。其中,上述SWAP指令中的各变量的含义见下表8:
表8
上表8所示的扩展指令的格式分别表示待进行运算的向量(向量x和向量y)中两个向量均为稀疏向量的情况。其中,两个向量的长度可变,可以减少指令数量,简化指令的使用。还支持多种索引的表示方式,兼容性更高。支持复数的运算,扩充了指令功能。更有助于扩大其指令的适用范围。
向量缩放:计算向量乘以一个标量的结果。功能描述:给定稀疏向量x和标量a,指令计算向量x乘标量a的结果。
x=a*x
对于向量缩放,其对应的扩展指令为:SCAL(D_TYPE,I_TYPE,Nnz,ValX,InX,A)。其中,上述SCAL指令中的各变量的含义见下表9:
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和虚数 |
| I_TYPE | 稀疏向量的索引的表示方式 |
| Nnz | 稀疏向量x中元素的个数 |
| ValX | 稀疏向量x中元素的首地址 |
| InX | 稀疏向量x的索引的首地址 |
| A | 标量 |
表9
上表9所示的扩展指令的格式表示待进行运算的向量x为稀疏向量的情况。其中,向量的长度可变,可以减少指令数量,简化指令的使用。还支持多种索引的表示方式,兼容性更高。支持复数的运算,扩充了指令功能。更有助于扩大其指令的适用范围。
向量复制:把一个向量复制到另外一个向量。给定两个稀疏向量x和y,将将向量x中的元素复制到向量y中。其对应的扩展指令为:COPY(D_TYPE,I_TYPE,Nnz,ValX,InX,Mnz,ValY,InY,A)。其中,上述COPY指令中的各变量的含义见下表10:
表10
上表10所示的扩展指令的格式分别表示待进行运算的向量(向量x和向量y)中两个向量均为稀疏向量的情况。其中,两个向量的长度可变,可以减少指令数量,简化指令的使用。
还支持多种索引的表示方式,兼容性更高。支持复数的运算,扩充了指令功能。更有助于扩大其指令的适用范围
向量乘加:计算向量与标量的积并把结果加到另外一个向量。功能描述:给定向量x,y和标量a,进行如下的向量-向量操作:
y:=a*x+y
当上述向量x为稀疏向量时,对于向量乘加,其对应的扩展指令为:SAXPY(D_TYPE,I_TYPE,Nnz,ValX,InX,M,Y,INCY,A)。其中,上述SAXPY指令中的各变量的含义见下表11:
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和虚数 |
| I_TYPE | 稀疏向量的索引的表示方式 |
| Nnz | 稀疏向量x中元素的个数 |
| ValX | 稀疏向量x中元素的首地址 |
| InX | 稀疏向量x的索引的首地址 |
| M | 向量y的长度(即向量y中元素的个数) |
| Y | 向量y中元素的首地址 |
| INCY | 向量y中元素之间的地址间隔 |
| A | 标量a,用于存储计算的结果 |
表11
当上述向量x和向量y均为稀疏向量时,对于向量乘加,其对应的扩展指令为:SAXPY(D_TYPE,I_TYPE,Nnz,ValX,InX,Mnz,ValY,InY,A)。其中,上述SAXPY指令中的各变量的含义见下表12:
表12
如上表11和表12所示的扩展指令的格式分别表示待进行运算的向量(向量x和向量y)中一个向量为稀疏数据的和两个向量均为稀疏向量的情况。其中,两个向量的长度可变,可以减少指令数量,简化指令的使用。
并且支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用,还支持多种索引的表示方式,兼容性更高。更有助于扩大其指令的适用范围。
向量点积:计算向量与向量的点积。功能描述:给定向量x,y和标量r,进行如下的向量-向量操作
当上述向量x为稀疏向量时,对于向量点积,其对应的扩展指令为:SDOT(D_TYPE,I_TYPE,Nnz,ValX,InX,M,Y,INCY,R)。其中,上述SDOT指令中的各变量的含义见下表13:
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和虚数 |
| I_TYPE | 稀疏向量的索引的表示方式 |
| Nnz | 稀疏向量x中元素的个数 |
| ValX | 稀疏向量x中元素的首地址 |
| InX | 稀疏向量x的索引的首地址 |
| M | 向量y的长度(即向量y中元素的个数) |
| Y | 向量y中元素的首地址 |
| INCY | 向量y中元素之间的地址间隔 |
| R | 标量r,用于存储计算的结果 |
表13
当上述向量x和向量y为稀疏向量时,对于向量乘加,其对应的扩展指令为:SDOT(D_TYPE,I_TYPE,Nnz,ValX,InX,Mnz,ValY,InY,R)。其中,上述SDOT指令中的各变量的含义见下表14:
表14
如表13和表14所示的扩展指令的格式分别表示待进行运算的向量(向量x和向量y)中一个向量为稀疏数据的和两个向量均为稀疏向量的情况。其中,两个向量的长度可变,可以减少指令数量,简化指令的使用。
并且支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用,还支持多种索引的表示方式,兼容性更高。更有助于扩大其指令的适用范围。
向量范数:计算稀疏向量的欧几里得范数。功能描述:该指令进行如下的向量规约操作:
其中,上述x为稀疏向量;r为标量,用于存储上述计算的结果。对于计算上述稀疏向量x的欧几里得范数的扩展指令为:NORM2(D_TYPE,I_TYPE,Nnz,ValX,InX,R)。其中,上述NORM2指令中的各变量的含义见下表15:
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和复数 |
| I_TYPE | 稀疏向量的索引表示方式 |
| Nnz | 稀疏向量x中元素的个数 |
| ValX | 稀疏向量x中元素的首地址 |
| InX | 稀疏向量x的索引的首地址 |
| R | 标量r,用于存储向量x的欧几里得范数结果 |
表15
如表15所示的指令格式中向量的长度可变,可以减少指令数量,简化指令的使用;并支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用,和支持多种稀疏向量的索引的表示方式,兼容性更高。更有助于扩大其指令的适用范围。
向量加和:计算稀疏向量的所有元素的相加的和。功能描述:该指令进行如下的向量规约操作:
其中,上述x为稀疏向量;r为标量,用于存储上述计算的结果。对于计算上述稀疏向量x的元素相加的和的扩展指令为:ASUM(D_TYPE,I_TYPE,Nnz,ValX,InX,R)。其中,上述NORM2指令中的各变量的含义见下表16:
表16
如表16所示的指令格式中向量的长度可变,可以减少指令数量,简化指令的使用;并支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用,和支持多种稀疏向量的索引的表示方式,兼容性更高。更有助于扩大其指令的适用范围。
向量最大值:计算稀疏向量的所有元素中最大元素的位置。功能描述:对于长度为n的稀疏向量x,该指令将向量x中最大元素的位置写入标量i中。对于向量最大值,对应的扩展指令为:AMAX(D_TYPE,I_TYPE,Nnz,ValX,InX,I)。其中,上述AMAX指令中的各变量的含义见下表17:
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和复数 |
| I_TYPE | 稀疏向量的索引表示方式 |
| Nnz | 稀疏向量x中元素的个数 |
| ValX | 稀疏向量x中元素的首地址 |
| InX | 稀疏向量x的索引的首地址 |
| I | 标量i,用于存储向量x的最大元素的位置 |
表17
如表17所示的指令格式中向量的长度可变,可以减少指令数量,简化指令的使用;并支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用,和支持多种稀疏向量的索引的表示方式,兼容性更高,更有助于扩大其指令的适用范围。
向量最小值:计算稀疏向量的所有元素中最小元素的位置。功能描述:对于长度为n的向量x,该指令将向量中最小元素的位置写入标量i中。对于向量最小值,对应的扩展指令为:AMIN(D_TYPE,I_TYPE,Nnz,ValX,InX,I)。其中,该AMIN指令中的各变量的含义见下表18:
| 变量 | 功能描述 |
| D_TYPE | 进行操作的数据类型,支持实数和复数 |
| I_TYPE | 稀疏向量的索引表示方式 |
| Nnz | 稀疏向量x中元素的个数 |
| ValX | 稀疏向量x中元素的首地址 |
| InX | 稀疏向量x的索引的首地址 |
| I | 标量i,用于存储向量x的最小元素的位置 |
表18
如表18所示的指令格式中向量的长度可变,可以减少指令数量,简化指令的使用;并支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用,和支持多种稀疏向量的索引的表示方式,兼容性更高,有利于扩大其指令的适用范围。
向量外积:计算一个或两个稀疏向量的张量积(外积)。功能描述:给定标量α,向量x和y,进行如下的矩阵向量操作:
A:=α*x*yT+A
当上述向量x为稀疏向量,对于上述向量外积,对应的扩展指令为:SGER(D_TYPE,I_TYPE,LAYOUT,M,N,ALPHA,Nnz,ValX,InX,Y,INCY,A,LDA)。其中,该SGER指令中的各变量的含义见下表19:
表19
当上述向量x和向量y为稀疏向量,对于上述向量外积,对应的扩展指令为:SGER(D_TYPE,I_TYPE,LAYOUT,M,N,ALPHA,Nnz,ValX,InX,Mnz,ValY,InY,A,LDA)。其中,该SGER指令中的各变量的含义见下表20:
表20
上表19和表20所示的指令格式中标量alpha(即α)对结果矩阵进行缩放,增加了指令的灵活性,避免了利用缩放指令进行缩放的额外开销。向量和矩阵的规模可变,可以减少指令数量,简化指令的使用。可以处理不同存储格式(行主序和列主序)的矩阵,避免了对矩阵进行变换的开销,并支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用,和支持多种稀疏向量的索引表示方式,兼容性更高。有助于扩大其指令的适用范围。
矩阵向量乘:计算矩阵与向量的乘积。给定矩阵A,向量x、向量y、标量x和标量y,进行如下的矩阵向量乘操作:
y:=α*A*x+β*y
当上述向量x为稀疏向量,对于上述矩阵向量乘,对应的扩展指令为:GEMV(D_TYPE,I_TYPE,LAYOUT,TRANS,M,N,ALPHA,Nnz,ValX,InX,BETA,Y,INCY)。其中,该GEMV指令中的各变量的含义见下表21:
表21
当上述向量x和矩阵A分别为稀疏向量和稀疏矩阵时,对于上述矩阵向量乘,对应的扩展指令为:GEMV(D_TYPE,I_TYPE,LAYOUT,TRANS,M,Nnzs,ALPHA,A,Nnz,ValX,InX,Mnz,ValY,InY,BETA,Y,INCY)。其中,该GEMV指令中的各变量的含义见下表22:
表22
上表21和表22中指令格式中标量alpha(即α)和beta(即β)可对矩阵和向量进行缩放,增加了指令的灵活性,避免了利用缩放指令进行缩放的额外开销。向量和矩阵的规模可变,可以减少指令数量,简化指令的使用。可以处理不同存储格式(行主序和列主序)的矩阵,避免了对矩阵进行变换的开销。可以实现对矩阵的转置和求共轭等变换,避免了单独进行矩阵变换所带来的额外的开销。支持按一定间隔存储的向量格式,避免了对向量格式进行变换的执行开销和存储中间结果的空间占用。支持按照一定间隔存储的矩阵格式,避免了对矩阵存储格式进行变换的执行开销和存储中间结果的空间占用。
矩阵相乘:计算矩阵相乘。该指令进行标量-矩阵-矩阵相乘并将结果与一个标量-矩阵的积相加,其操作定义如下
C:=α*OP(A)*OP(B)+β*C
其中op(A)和op(B)分别表示对A和B进行转置、求共轭等操作之后的结果。
当上述矩阵A为稀疏矩阵时,对于上述矩阵乘,对应的扩展指令为:GEMM(D_TYPE,I_TYPE,LAYOUT,TRANSA,TRANSB,M,N,K,ALPHA,NnzAs,ValAs,InAs,LDA,B,LDB,BETA,Y,INCY)。其中,该GEMM指令中的各变量的含义见下表23:
表23
当上述矩阵A和矩阵B均为稀疏矩阵时,对于上述矩阵向量乘,对应的扩展指令为:GEMM(D_TYPE,I_TYPE,LAYOUT,TRANSA,TRANSB,M,N,K,ALPHA,NnzAs,ValAs,InAs,LDA,NnzBs,ValBs,InBs,LDB,BETA,Y,INCY)。其中,该GEMM指令中的各变量的含义见下表24:
表24
上表23和表24的指令格式中标量alpha(即α)和beta(即β)对矩阵进行缩放,增加了指令的灵活性,避免了利用缩放指令进行缩放的额外开销。矩阵的规模可变,可以减少指令数量,简化指令的使用。可以实现对矩阵的转置和求共轭等变换,避免了单独进行矩阵变换所带来的额外的开销。可以处理不同存储格式(行主序和列主序)的矩阵,避免了对矩阵进行变换的开销。支持按照一定间隔存储的矩阵格式,避免了对矩阵存储格式进行变换的执行开销和存储中间结果的空间占用。支持多种稀疏向量的索引的表示方式,兼容性更高。更有助于扩大其指令的适用范围。
需要说明的是,上述任意一个表中的同一条指令中的向量或矩阵可以是不同的数据类型,包括浮点定点,位宽,复数等。指令中的变换除了转置和复数求共轭外,还可以包含其它的操作如求逆矩阵等,而且这些变换可以相互组合。对于向量操作可把运算符换成其它的操作类型,例如向量加换成乘、除等,求MAX换成求中间值等等。
对于如图1所示的运算模块,其实现扩展指令运算时计算出该扩展指令的具体结构,即通过一个扩展指令执行实现多条计算指令执行的组合,需要说明的是,对于运算模块执行该扩展指令时并未将该扩展指令拆分成多条计算指令。
需要指出的是,将上述运算模块应用到神经网络运算中,本发明实施例中所提到的矩阵或向量可以看成输入神经元和输出神经元,并且该输入神经元和输出神经元并非是指整个神经网络的输入层中的神经元和输出层中的神经元,而是对于神经网络中任意相邻的两层神经元,处于网络前馈运算下层中的神经元即为输入神经元,处于网络前馈运算上层中的神经元即为输出神经元。以卷积神经网络为例,假设一个卷积神经网络有L层,K=1,2,3…L-1,对于第K层和第K+1层来说,第K层被称为输入层,该层中的神经元为上述输入神经元,第K+1层被称为输入层,该层中的神经元为上述输出神经元,即除了顶层之外,每一层都可以作为输入层,其下一层为对应的输出层。
上述运算模块中各单元可以是硬件电路包括数字电路,模拟电路等等。硬件电路的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器等等。上述运算模块中的运算单元可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。上述存储器均可以是任何适当的磁存储介质或者磁光存储介质,比如RRAM,DRAM,SRAM,EDRAM,HBM,HMC等等。
在一种可行的实施例中,本发明实施例提供了一种运算装置,该运算装置包括一个或多个如图1b所示实施例所述的运算模块,用于从其他处理装置中获取待运算数据和控制信息,并执行指定的神经网络运算,将执行结果通过I/O接口传递给其他处理装置;
当所述运算装置包含多个所述运算模块时,所述多个所述运算模块间可以通过特定的结构进行连接并传输数据;
其中,多个所述运算模块通过PCIE总线进行互联并传输数据,以支持更大规模的运算;多个所述运算模块共享同一控制系统或拥有各自的控制系统;多个所述运算模块共享内存或者拥有各自的内存;多个所述运算模块的互联方式是任意互联拓扑。
该运算装置具有较高的兼容性,可通过pcie接口与各种类型的服务器相连接。
在一种可行的实施例中,本发明实施例提供了一种组合处理装置,该组合装置包括如上述运算装置,通用互联接口和其他处理装置。
上述运算装置与上述其他处理装置进行交互,共同完成用户指定的操作。参见图5a,图5a为本发明实施例提供的一种组合处理装置的结构示意图。如图5a所示,该组合处理装置包括上述运算装置501、通用互联接口502和其他处理装置503。
其中,上述其他处理装置503包括中央处理器(Central Processing Unit)、图形处理器(Graphics Processing Unit,GPU)、处理器等通用/专用处理器中的一种或以上的处理器类型。其他处理装置503所包括的处理器数量不做限制。其他处理装置503作为运算装置501与外部数据和控制的接口,包括数据搬运,完成对本运算装置的开启、停止等基本控制;其他处理装置503也可以和运算装置501协作共同完成运算任务。
上述通用互联接口502,用于在所述运算装置501与其他处理装置503间传输数据和控制指令。该运算装置501从其他处理装置503中获取所需的输入数据,写入运算装置501片上的存储装置;可以从其他处理装置503中获取控制指令,写入运算装置501片上的控制缓存;也可以读取运算装置501的存储模块中的数据并传输给其他处理装置503。
可选的,如图5b所示,上述组合处理装置还包括存储装置504,用于保存在本运算单元/运算装置或其他运算单元所需要的数据,尤其适用于所需要运算的数据在本运算装置501或其他处理装置503的内部存储中无法全部保存的数据。
上述组合装置可以作为手机、机器人、无人机等智能设备的片上系统,有效降低控制部分的核心面积,提高处理速度,降低整体功耗。
在一种可行的实施例中,本发明实施例提供了一种神经网络芯片,该神经网络芯片包括如图1b所示实施例所述的运算模块,或者上述运算装置或者上述组合处理装置。
在一种可行的实施例中,本发明实施例提供了一种神经网络芯片封装结构,该神经网络芯片封装结构包括上述神经网络芯片。
在一种可行的实施例中,本发明实施例提供了一种板卡,该板卡包括上述神经网络芯片封装结构。该板卡可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、智能家居、家电、多处理器系统、基于微处理器的系统、机器人、可编程的消费电子设备、网络个人计算机(personalcomputer,PC)、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
在一个实施例里,本公开公开了一个电子装置,其包括了上述板卡或神经网络芯片封装结构11。
电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
参见图6、图6为本发明实施例提供的一种运算方法的流程示意图。如图6所示,该方法包括:
S601、运算模块获取扩展指令。
其中,上述扩展指令包括操作码和操作域,所述操作码包括第一运算指令标识;所述操作域包括第一运算指令的输入数据地址、所述第一运算指令的输入数据的索引、所述第一运算指令的输出数据地址、第二计算指令标识、第二运算指令的输入数据、所述第二运算指令的输入数据的类型以及所述第二运算指令的输入数据的长度N。
S602、运算模块解析所述扩展指令,以得到第一运算指令、第二运算指令、所述第一运算指令的输入数据地址、所述第一运算指令的输出数据地址、所述第一运算指令的输入数据的索引和所述第二运算指令的输入数据;根据所述第一运算指令和所述第二运算指令确定所述第一运算指令与所述第二运算指令的执行顺序;根据所述第一运算指令的输入数据地址从所述存储器读取所述第一运算指令的输入数据地址对应的第一运算指令的输入数据。
其中,所述根据所述第一运算指令和所述第二运算指令确定所述第一运算指令与所述第二运算指令的执行顺序,包括:
判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否相同,若相同,则确定所述执行顺序为正序;
判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否相同,若相同,则确定所述执行顺序为倒序;
判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否关联;若不关联,则确定所述执行顺序为无序;
判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否关联;若不关联,则确定所述执行顺序为无序。
S603、运算模块对所述第一运算指令的输入数据的索引的表示方式进行变换,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引;根据该第一运算指令的输入数据的索引对所述第一运算指令的输入数据进行筛选,以得到处理后的第一运算指令的输入数据;按照所述执行顺序对所述处理后的第一运算指令的输入数据和第二运算指令的输入数据分别执行所述第一运算指令和第二运算指令,以得到运算结果。
其中,所述对所述第一运算指令的输入数据的索引的表示方式进行变换,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引,包括:
判断所述第一运算指令的输入数据的索引的表示方式是否为默认索引表示方式;
当所述第一运算指令的输入数据的索引的表示方式不为所述默认表示方式时,根据转换指令将所述第一运算指令的输入数据的索引的表示方式转换为所述默认索引表示方式,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引。
其中,所述第一运算指令的输入数据的索引的表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、坐标列表COO表示方式、压缩稀疏行CSR表示方式、压缩稀疏列CSC表示方式、ELL表示方式和混合HYB表示方式;所述默认索引表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、COO表示方式、CSC表示方式、CSR表示方式、ELL表示方式和混合HYB表示方式。
其中,所述第一运算指令的输入数据为稀疏数据,当所述第一运算指令的输入数据的索引表示方式为直接索引表示方式时,所述第一运算指令的输入数据的索引为由0和1组成的字符串,0表示所述第一运算指令的输入数据中元素的绝对值小于或者等于预设阈值,1表示所述第一运算指令的输入数据中的元素的绝对值大于所述预设阈值,或者;
所述第一第一运算指令的输入数据为稀疏数据,当所述输入数据的索引表示方式为步长索引表示方式时,所述第一运算指令的输入数据的索引为所述第一运算指令的输入数据中绝对值大于预设阈值的元素与上一个绝对值大于所述预设阈值的元素之间的距离值组成的字符串,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为LIL表示方式时,所述第一运算指令的输入数据的索引包括至少一个列表,所述至少一个列表中的每个列表包括至少一个记录,所述记录包括所述第一运算指令的输入数据中绝对值大于预设阈值的元素的列索引和绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为所述COO表示方式时,所述第一运算指令的输入数据的索引由至少一个元组组成,所述元组包括第一运算指令的输入数据矩阵中绝对值大于预设阈值的元素在所述第一运算指令的输入数据矩阵中的行号、列号和该绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSR表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第一数组,第二数组和第三数组,所述第一数组存储第一运算指令的输入数据矩阵中的绝对值大于预设阈值的元素的值,所述第二数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列索引,所述第三数组用于累加存储所述第一运算指令的输入数据矩阵中每一行绝对值大于所述预设阈值的元素的个数,并且所述第三数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSC表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第四数组,第五数组和第六数组,所述第四数组存储第一运算指令的输入数据矩阵中的绝对值大于预设阈值的元素的值,所述第五数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的行索引,所述第六数组用于累加存储所述第一运算指令的输入数据矩阵中每一列绝对值大于所述预设阈值的元素的个数,并且所述第六数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述ELL表示方式时,所述第一运算指令的输入数据的索引包括两个矩阵,分别为第一矩阵和第二矩阵,所述第一矩阵用于存储所述第一运算指令的输入数据矩阵中绝对值大于预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述第二矩阵存储所述绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述HYB表示方式时,所述第一运算指令的输入数据的索引包括第三矩阵、第四矩阵和至少一个元组,所述第四矩阵存储所述第一运算指令的输入数据矩阵中每一行最大相同数量的绝对值大于预设阈值的元素,所述第三矩阵存储在所述第四矩阵中存储的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述至少一个元组中的每个元组用于存储所述第一运算指令的输入数据矩阵中的任一行相对于其他行多出来元素的行号,列号和该元素的值。
需要说明的是,上述方法实施例的具体描述可参见图1所示实施例的相关描述,在此不再叙述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (18)
1.一种运算模块,用于根据扩展指令执行运算,其特征在于,所述运算模块包括:存储器、运算单元和控制单元;
所述扩展指令包括操作码和操作域,所述操作码包括:第一运算指令标识;所述操作域包括:第一运算指令的输入数据地址、所述第一运算指令的输入数据的索引、第一运算指令的输出数据地址、第二计算指令标识、第二运算指令的输入数据、所述第二运算指令的输入数据的类型以及所述第二运算指令的输入数据的长度N;
所述存储器,用于存储所述第一运算指令的输入数据;
所述控制单元,用于获取扩展指令,解析所述扩展指令,以得到第一运算指令、第二运算指令、所述第一运算指令的输入数据地址、所述第一运算指令的输出数据地址、所述第一运算指令的输入数据的索引和所述第二运算指令的输入数据;根据所述第一运算指令和所述第二运算指令确定所述第一运算指令与所述第二运算指令的执行顺序;根据所述第一运算指令的输入数据地址从所述存储器读取所述第一运算指令的输入数据地址对应的第一运算指令的输入数据;
所述运算单元,用于对所述第一运算指令的输入数据的索引的表示方式进行变换,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引;根据该第一运算指令的输入数据的索引对所述第一运算指令的输入数据进行筛选,以得到处理后的第一运算指令的输入数据;按照所述执行顺序对所述处理后的第一运算指令的输入数据和第二运算指令的输入数据分别执行所述第一运算指令和第二运算指令,以得到运算结果。
2.根据权利要求1所述的运算模块,其特征在于,所述运算单元包括:
索引处理单元,用于判断所述第一运算指令的输入数据的索引的表示方式是否为默认索引表示方式;当所述第一运算指令的输入数据的索引的表示方式不为所述默认表示方式时,根据转换指令将所述第一运算指令的输入数据的索引的表示方式转换为所述默认索引表示方式,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引;根据该第一运算指令的输入数据的索引对所述第一运算指令的输入数据进行筛选,以得到处理后的第一运算指令的输入数据。
3.根据权利要求1或2所述的运算模块,其特征在于,所述第一运算指令的输入数据的索引的表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、坐标列表COO表示方式、压缩稀疏行CSR表示方式、压缩稀疏列CSC表示方式、ELL表示方式和混合HYB表示方式;所述默认索引表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、COO表示方式、CSC表示方式、CSR表示方式、ELL表示方式和混合HYB表示方式。
4.根据权利3所述的运算模块,其特征在于,所述第一运算指令的输入数据为稀疏数据,当所述第一运算指令的输入数据的索引表示方式为直接索引表示方式时,所述第一运算指令的输入数据的索引为由0和1组成的字符串,0表示所述第一运算指令的输入数据中元素的绝对值小于或者等于预设阈值,1表示所述第一运算指令的输入数据中的元素的绝对值大于所述预设阈值,或者;
所述第一运算指令的输入数据为稀疏数据,当所述输入数据的索引表示方式为步长索引表示方式时,所述第一运算指令的输入数据的索引为所述第一运算指令的输入数据中绝对值大于所述预设阈值的元素与上一个绝对值大于所述预设阈值的元素之间的距离值组成的字符串,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为LIL表示方式时,所述第一运算指令的输入数据的索引包括至少一个列表,所述至少一个列表中的每个列表包括至少一个记录,所述记录包括所述第一运算指令的输入数据中绝对值大于所述预设阈值的元素的列索引和绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为所述COO表示方式时,所述第一运算指令的输入数据的索引由至少一个元组组成,所述元组包括第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的行号、列号和该绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSR表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第一数组,第二数组和第三数组,所述第一数组存储第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素的值,所述第二数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列索引,所述第三数组用于累加存储所述第一运算指令的输入数据矩阵中每一行绝对值大于所述预设阈值的元素的个数,并且所述第三数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSC表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第四数组,第五数组和第六数组,所述第四数组存储第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素的值,所述第五数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的行索引,所述第六数组用于累加存储所述第一运算指令的输入数据矩阵中每一列绝对值大于所述预设阈值的元素的个数,并且所述第六数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述ELL表示方式时,所述第一运算指令的输入数据的索引包括两个矩阵,分别为第一矩阵和第二矩阵,所述第一矩阵用于存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述第二矩阵存储所述绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述HYB表示方式时,所述第一运算指令的输入数据的索引包括第三矩阵、第四矩阵和至少一个元组,所述第四矩阵存储所述第一运算指令的输入数据矩阵中每一行最大相同数量的绝对值大于所述预设阈值的元素,所述第三矩阵存储在所述第四矩阵中存储的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述至少一个元组中的每个元组用于存储所述第一运算指令的输入数据矩阵中的任一行相对于其他行多出来元素的行号,列号和该元素的值。
5.根据权利要求1-4任一项所述的运算模块,其特征在于,所述运算模块还包括:
寄存器单元,用于存储所述扩展指令;
依赖关系处理单元,用于在所述控制单元获取所述扩展指令前,判断该扩展指令与前一扩展指令是否访问相同的输入数据,若是,则等待前一扩展指令执行完毕后,将当前扩展指令的第一运算指令以及第二运算指令提供给所述运算单元;否则,将当前扩展指令的第一运算指令以及第二运算指令提供给所述运算单元;
所述依赖关系处理单元,还用于在当前扩展指令与前一扩展指令访问相同的输入数据时,将该当前扩展指令存储在一存储队列中,待前一扩展指令执行完毕后,将存储队列中的该当前扩展指令提供给所述控制单元。
6.根据权利要求5所述的运算模块,其特征在于,所述控制单元包括:
取指子单元,用于从所述寄存器单元中获取所述扩展指令;
译码子单元,用于对所述扩展指令进行译码得到所述第一运算指令、所述第二运算指令以及所述执行顺序;
指令队列子单元,用于将所述第一运算指令和第二运算指令按照所述执行顺序存储。
7.根据权利要求2所述的运算模块,其特征在于,所述运算单元还包括向量加法电路、向量乘法电路、大小比较电路、非线性运算电路和向量标量乘法电路;所述运算单元为多流水级结构;
其中,所述索引处理单元处于第一流水级,所述向量乘法电路和所述向量标量乘法电路处于第二流水级,所述大小比较电路和所述向量加法电路处于第三流水级,所述非线性运算部件处于第四流水级,其中所述第一流水级的输出数据为所述第二流水级的输入数据,所述第二流水级的输出数据为所述第三流水级的输入数据,所述第三流水级的输出数据为所述第四流水级的输入数据。
8.根据权利要求7所述的运算模块,其特征在于,所述运算单元还包括转换电路,所述转换电路位于第二流水级和第四流水级,或所述转换电路位于第二流水级,或所述转换电路位于第四流水级。
9.根据权利要求1所述的运算模块,其特征在于,所述控制单元具体用于:
判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否相同,若相同,则确定所述执行顺序为正序;判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否相同,若相同,则确定所述执行顺序为倒序;判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否关联;若不关联,则确定所述执行顺序为无序;判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否关联;若不关联,则确定所述执行顺序为无序。
10.一种运算装置,其特征在于,所述运算装置包括一个或多个如权利要求1-9任一项所述的运算模块,用于从其他处理装置中获取待运算数据和控制信息,并执行指定的运算,将执行结果通过I/O接口传递给其他处理装置;
当所述运算装置包含多个所运算模块时,所述多个所述运算模块间可以通过特定的结构进行连接并传输数据;
其中,多个所述运算模块通过快速外部设备互连总线PCIE总线进行互联并传输数据,以支持更大规模的神经网络的运算;多个所述运算模块共享同一控制系统或拥有各自的控制系统;多个所述运算模块共享内存或者拥有各自的内存;多个所述运算模块的互联方式是任意互联拓扑。
11.一种组合处理装置,其特征在于,所述组合处理装置包括如权利要求22所述的运算装置,通用互联接口和其他处理装置;
所述运算装置与所述其他处理装置进行交互,共同完成用户指定的操作。
12.一种神经网络芯片,其特征在于,所述神经网络芯片包括如权利要求10所述的运算装置或如权利要求11所述的组合处理装置。
13.一种电子装置,其特征在于,所述电子装置包括如权利要求12所述的神经网络芯片。
14.一种运算方法,其特征在于,包括
获取扩展指令,所述扩展指令包括操作码和操作域,所述操作码包括第一运算指令标识;所述操作域包括第一运算指令的输入数据地址、所述第一运算指令的输入数据的索引、所述第一运算指令的输出数据地址、第二计算指令标识、第二运算指令的输入数据、所述第二运算指令的输入数据的类型以及所述第二运算指令的输入数据的长度N;
解析所述扩展指令,以得到第一运算指令、第二运算指令、所述第一运算指令的输入数据地址、所述第一运算指令的输出数据地址、所述第一运算指令的输入数据的索引和所述第二运算指令的输入数据;根据所述第一运算指令和所述第二运算指令确定所述第一运算指令与所述第二运算指令的执行顺序;根据所述第一运算指令的输入数据地址从所述存储器读取所述第一运算指令的输入数据地址对应的第一运算指令的输入数据;
对所述第一运算指令的输入数据的索引的表示方式进行变换,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引;根据该第一运算指令的输入数据的索引对所述第一运算指令的输入数据进行筛选,以得到处理后的第一运算指令的输入数据;按照所述执行顺序对所述处理后的第一运算指令的输入数据和第二运算指令的输入数据分别执行所述第一运算指令和第二运算指令,以得到运算结果。
15.根据权利要14所述的方法,其特征在于,所述对所述第一运算指令的输入数据的索引的表示方式进行变换,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引,包括:
判断所述第一运算指令的输入数据的索引的表示方式是否为默认索引表示方式;
当所述第一运算指令的输入数据的索引的表示方式不为所述默认表示方式时,根据转换指令将所述第一运算指令的输入数据的索引的表示方式转换为所述默认索引表示方式,以得到以默认索引表示方式表示的第一运算指令的输入数据的索引。
16.根据权利要求14或15所述的方法,其特征在于,所述第一运算指令的输入数据的索引的表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、坐标列表COO表示方式、压缩稀疏行CSR表示方式、压缩稀疏列CSC表示方式、ELL表示方式和混合HYB表示方式;所述默认索引表示方式包括直接索引表示方式、步长索引表示方式、列表的列表LIL表示方式、COO表示方式、CSC表示方式、CSR表示方式、ELL表示方式和混合HYB表示方式。
17.根据权利要求16所述的方法,其特征在于,所述第一运算指令的输入数据为稀疏数据,当所述第一运算指令的输入数据的索引表示方式为直接索引表示方式时,所述第一运算指令的输入数据的索引为由0和1组成的字符串,0表示所述第一运算指令的输入数据中元素的绝对值小于或者等于预设阈值,1表示所述第一运算指令的输入数据中的元素的绝对值大于所述预设阈值,或者;
所述第一第一运算指令的输入数据为稀疏数据,当所述输入数据的索引表示方式为步长索引表示方式时,所述第一运算指令的输入数据的索引为所述第一运算指令的输入数据中绝对值大于预设阈值的元素与上一个绝对值大于所述预设阈值的元素之间的距离值组成的字符串,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为LIL表示方式时,所述第一运算指令的输入数据的索引包括至少一个列表,所述至少一个列表中的每个列表包括至少一个记录,所述记录包括所述第一运算指令的输入数据中绝对值大于预设阈值的元素的列索引和绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引为所述COO表示方式时,所述第一运算指令的输入数据的索引由至少一个元组组成,所述元组包括第一运算指令的输入数据矩阵中绝对值大于预设阈值的元素在所述第一运算指令的输入数据矩阵中的行号、列号和该绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSR表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第一数组,第二数组和第三数组,所述第一数组存储第一运算指令的输入数据矩阵中的绝对值大于预设阈值的元素的值,所述第二数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列索引,所述第三数组用于累加存储所述第一运算指令的输入数据矩阵中每一行绝对值大于所述预设阈值的元素的个数,并且所述第三数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述CSC表示方式时,所述第一运算指令的输入数据的索引包括三个数组,分别为第四数组,第五数组和第六数组,所述第四数组存储第一运算指令的输入数据矩阵中的绝对值大于预设阈值的元素的值,所述第五数组存储所述第一运算指令的输入数据矩阵中的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的行索引,所述第六数组用于累加存储所述第一运算指令的输入数据矩阵中每一列绝对值大于所述预设阈值的元素的个数,并且所述第六数组中的最后一个元素存储所述第一运算指令的输入数据矩阵中绝对值大于所述预设阈值的元素的个数,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述ELL表示方式时,所述第一运算指令的输入数据的索引包括两个矩阵,分别为第一矩阵和第二矩阵,所述第一矩阵用于存储所述第一运算指令的输入数据矩阵中绝对值大于预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述第二矩阵存储所述绝对值大于所述预设阈值的元素的值,或者;
所述第一运算指令的输入数据为稀疏数据,且所述第一运算指令的输入数据以矩阵形式表示的,当所述第一运算指令的输入数据的索引表示方式为所述HYB表示方式时,所述第一运算指令的输入数据的索引包括第三矩阵、第四矩阵和至少一个元组,所述第四矩阵存储所述第一运算指令的输入数据矩阵中每一行最大相同数量的绝对值大于预设阈值的元素,所述第三矩阵存储在所述第四矩阵中存储的绝对值大于所述预设阈值的元素在所述第一运算指令的输入数据矩阵中的列号,所述至少一个元组中的每个元组用于存储所述第一运算指令的输入数据矩阵中的任一行相对于其他行多出来元素的行号,列号和该元素的值。
18.根据权利要求14-17任一项所述的方法,其特征在于,所述根据所述第一运算指令和所述第二运算指令确定所述第一运算指令与所述第二运算指令的执行顺序,包括:
判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否相同,若相同,则确定所述执行顺序为正序;
判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否相同,若相同,则确定所述执行顺序为倒序;
判断所述第一运算指令的输入数据与所述第二运算指令的输出数据是否关联;若不关联,则确定所述执行顺序为无序;
判断所述第一运算指令的输出数据与所述第二运算指令的输入数据是否关联;若不关联,则确定所述执行顺序为无序。
Priority Applications (16)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201810110875.5A CN108388446A (zh) | 2018-02-05 | 2018-02-05 | 运算模块以及方法 |
| US16/075,836 US11836497B2 (en) | 2018-02-05 | 2018-07-23 | Operation module and method thereof |
| PCT/CN2018/096710 WO2019148781A1 (zh) | 2018-02-05 | 2018-07-23 | 运算模块以及方法 |
| CN201810914600.7A CN109165732B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量乘加指令的方法 |
| CN201810914419.6A CN109117186B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量外积指令的方法 |
| CN201810914420.9A CN109101273B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量最大值指令的方法 |
| CN201810899812.2A CN109062609A (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行运算指令的方法 |
| CN201810914598.3A CN109165041B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量范数指令的方法 |
| CN201810912901.6A CN109189473A (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量交换指令的方法 |
| CN201810914596.4A CN109189474B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量加和指令的方法 |
| CN201810912879.5A CN109101272A (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行矩阵相乘指令的方法 |
| CN201810914647.3A CN109062611B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量缩放指令的方法 |
| CN201810912880.8A CN109032669B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量最小值指令的方法 |
| CN201810914648.8A CN109062612B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行平面旋转指令的方法 |
| CN201810912904.XA CN109062610B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行吉文斯旋转指令的方法 |
| CN201810914599.8A CN109086076B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量点积指令的方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201810110875.5A CN108388446A (zh) | 2018-02-05 | 2018-02-05 | 运算模块以及方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN108388446A true CN108388446A (zh) | 2018-08-10 |
Family
ID=63075199
Family Applications (14)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201810110875.5A Pending CN108388446A (zh) | 2018-02-05 | 2018-02-05 | 运算模块以及方法 |
| CN201810914596.4A Active CN109189474B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量加和指令的方法 |
| CN201810914420.9A Active CN109101273B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量最大值指令的方法 |
| CN201810899812.2A Pending CN109062609A (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行运算指令的方法 |
| CN201810912901.6A Pending CN109189473A (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量交换指令的方法 |
| CN201810914598.3A Active CN109165041B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量范数指令的方法 |
| CN201810912904.XA Active CN109062610B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行吉文斯旋转指令的方法 |
| CN201810914648.8A Active CN109062612B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行平面旋转指令的方法 |
| CN201810914600.7A Active CN109165732B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量乘加指令的方法 |
| CN201810914599.8A Active CN109086076B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量点积指令的方法 |
| CN201810912880.8A Active CN109032669B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量最小值指令的方法 |
| CN201810914647.3A Active CN109062611B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量缩放指令的方法 |
| CN201810912879.5A Pending CN109101272A (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行矩阵相乘指令的方法 |
| CN201810914419.6A Active CN109117186B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量外积指令的方法 |
Family Applications After (13)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201810914596.4A Active CN109189474B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量加和指令的方法 |
| CN201810914420.9A Active CN109101273B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量最大值指令的方法 |
| CN201810899812.2A Pending CN109062609A (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行运算指令的方法 |
| CN201810912901.6A Pending CN109189473A (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量交换指令的方法 |
| CN201810914598.3A Active CN109165041B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量范数指令的方法 |
| CN201810912904.XA Active CN109062610B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行吉文斯旋转指令的方法 |
| CN201810914648.8A Active CN109062612B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行平面旋转指令的方法 |
| CN201810914600.7A Active CN109165732B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量乘加指令的方法 |
| CN201810914599.8A Active CN109086076B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量点积指令的方法 |
| CN201810912880.8A Active CN109032669B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量最小值指令的方法 |
| CN201810914647.3A Active CN109062611B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量缩放指令的方法 |
| CN201810912879.5A Pending CN109101272A (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行矩阵相乘指令的方法 |
| CN201810914419.6A Active CN109117186B (zh) | 2018-02-05 | 2018-08-08 | 神经网络处理装置及其执行向量外积指令的方法 |
Country Status (3)
| Country | Link |
|---|---|
| US (1) | US11836497B2 (zh) |
| CN (14) | CN108388446A (zh) |
| WO (1) | WO2019148781A1 (zh) |
Cited By (31)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN110096310A (zh) * | 2018-11-14 | 2019-08-06 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| CN110598175A (zh) * | 2019-09-17 | 2019-12-20 | 西安邮电大学 | 一种基于图计算加速器的稀疏矩阵列向量比较装置 |
| CN110647234A (zh) * | 2019-09-27 | 2020-01-03 | 联想(北京)有限公司 | 一种指令处理方法及电子设备 |
| CN110968285A (zh) * | 2018-09-28 | 2020-04-07 | 上海寒武纪信息科技有限公司 | 信号处理装置及相关产品 |
| CN111026440A (zh) * | 2018-10-09 | 2020-04-17 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| CN111047027A (zh) * | 2018-10-12 | 2020-04-21 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111079907A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、装置及相关产品 |
| WO2020108471A1 (zh) * | 2018-11-30 | 2020-06-04 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111258644A (zh) * | 2018-11-30 | 2020-06-09 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
| CN111353595A (zh) * | 2018-12-20 | 2020-06-30 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111382851A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111381873A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111381871A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111382850A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111381872A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111399905A (zh) * | 2019-01-02 | 2020-07-10 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111401536A (zh) * | 2018-12-28 | 2020-07-10 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111400341A (zh) * | 2019-01-02 | 2020-07-10 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813448A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813376A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813449A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813537A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813450A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN112259071A (zh) * | 2020-09-22 | 2021-01-22 | 北京百度网讯科技有限公司 | 语音处理系统、语音处理方法、电子设备和可读存储介质 |
| CN112835552A (zh) * | 2021-01-26 | 2021-05-25 | 算筹信息科技有限公司 | 一种外积累加求解稀疏矩阵与稠密矩阵内积的方法 |
| CN112947908A (zh) * | 2021-02-26 | 2021-06-11 | 上海商汤智能科技有限公司 | 代码生成方法、装置、设备及存储介质 |
| CN114638351A (zh) * | 2022-03-21 | 2022-06-17 | Oppo广东移动通信有限公司 | 一种处理方法、npu及电子设备 |
| CN114692847A (zh) * | 2020-12-25 | 2022-07-01 | 中科寒武纪科技股份有限公司 | 数据处理电路、数据处理方法及相关产品 |
| CN115248701A (zh) * | 2022-09-21 | 2022-10-28 | 进迭时空(杭州)科技有限公司 | 一种处理器寄存器堆之间的零拷贝数据传输装置及方法 |
| CN115576895A (zh) * | 2022-11-18 | 2023-01-06 | 摩尔线程智能科技(北京)有限责任公司 | 计算装置、计算方法及计算机可读存储介质 |
| US11703939B2 (en) | 2018-09-28 | 2023-07-18 | Shanghai Cambricon Information Technology Co., Ltd | Signal processing device and related products |
Families Citing this family (32)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN111353125B (zh) * | 2018-12-20 | 2022-04-22 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| CN111353124A (zh) * | 2018-12-20 | 2020-06-30 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| CN111382390B (zh) * | 2018-12-28 | 2022-08-12 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN109919311B (zh) * | 2019-03-13 | 2020-04-10 | 北京地平线机器人技术研发有限公司 | 生成指令序列的方法、执行神经网络运算的方法和装置 |
| WO2020190807A1 (en) * | 2019-03-15 | 2020-09-24 | Intel Corporation | Systolic disaggregation within a matrix accelerator architecture |
| CN111723919A (zh) * | 2019-03-21 | 2020-09-29 | 中科寒武纪科技股份有限公司 | 数据处理方法、装置及相关产品 |
| CN111723916A (zh) * | 2019-03-21 | 2020-09-29 | 中科寒武纪科技股份有限公司 | 数据处理方法、装置及相关产品 |
| CN111723920B (zh) * | 2019-03-22 | 2024-05-17 | 中科寒武纪科技股份有限公司 | 人工智能计算装置及相关产品 |
| CN111767995B (zh) * | 2019-04-02 | 2023-12-05 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN112395008A (zh) * | 2019-08-13 | 2021-02-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| CN111949318B (zh) * | 2019-05-17 | 2024-07-23 | 上海寒武纪信息科技有限公司 | 指令处理方法、装置及相关产品 |
| CN111966398B (zh) * | 2019-05-20 | 2024-06-07 | 上海寒武纪信息科技有限公司 | 指令处理方法、装置及相关产品 |
| CN112394995A (zh) * | 2019-08-13 | 2021-02-23 | 上海寒武纪信息科技有限公司 | 半精度浮点转短整形指令处理装置、方法及相关产品 |
| CN112394988A (zh) * | 2019-08-13 | 2021-02-23 | 上海寒武纪信息科技有限公司 | 无符号转半精度浮点指令处理装置、方法及相关产品 |
| CN112394997A (zh) * | 2019-08-13 | 2021-02-23 | 上海寒武纪信息科技有限公司 | 八位整形转半精度浮点指令处理装置、方法及相关产品 |
| CN112394902A (zh) * | 2019-08-13 | 2021-02-23 | 上海寒武纪信息科技有限公司 | 半精度浮点转浮点指令处理装置、方法及相关产品 |
| CN112765541B (zh) * | 2019-11-01 | 2024-02-23 | 中科寒武纪科技股份有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
| CN112784207B (zh) * | 2019-11-01 | 2024-02-02 | 中科寒武纪科技股份有限公司 | 运算方法及相关产品 |
| US11416580B2 (en) * | 2019-11-13 | 2022-08-16 | Intel Corporation | Dot product multiplier mechanism |
| CN111124500B (zh) * | 2019-12-12 | 2022-03-08 | 浪潮(北京)电子信息产业有限公司 | 一种指令执行方法、装置、设备及存储介质 |
| CN111027018B (zh) * | 2019-12-20 | 2023-03-31 | 支付宝(杭州)信息技术有限公司 | 加速计算设备建模的方法、装置、计算设备及介质 |
| CN113537476B (zh) * | 2020-04-16 | 2024-09-06 | 中科寒武纪科技股份有限公司 | 运算装置以及相关产品 |
| CN111783954B (zh) * | 2020-06-30 | 2023-05-02 | 安徽寒武纪信息科技有限公司 | 一种用于确定神经网络的性能的方法、电子设备和存储介质 |
| CN113867797A (zh) | 2020-06-30 | 2021-12-31 | 上海寒武纪信息科技有限公司 | 计算装置、集成电路芯片、板卡、电子设备和计算方法 |
| CN114692838B (zh) * | 2020-12-25 | 2025-09-26 | 中科寒武纪科技股份有限公司 | 数据处理装置、数据处理方法及相关产品 |
| CN113076083B (zh) * | 2021-06-04 | 2021-08-31 | 南京后摩智能科技有限公司 | 数据乘加运算电路 |
| CN119397155B (zh) * | 2021-08-20 | 2026-04-17 | 华为技术有限公司 | 一种计算装置、方法、系统、电路、芯片及设备 |
| CN115437602B (zh) * | 2021-10-20 | 2025-12-30 | 中科寒武纪科技股份有限公司 | 任意精度计算加速器、集成电路装置、板卡及方法 |
| CN114064125B (zh) * | 2022-01-18 | 2022-06-24 | 北京大学 | 指令解析方法、装置及电子设备 |
| CN119278433A (zh) * | 2022-05-26 | 2025-01-07 | 谷歌有限责任公司 | 用于矩阵操作的指令集架构 |
| CN117931131B (zh) * | 2024-03-22 | 2024-07-26 | 中国人民解放军国防科技大学 | 一种稀疏矩阵乘指令实现方法及系统 |
| US20260072890A1 (en) * | 2024-09-09 | 2026-03-12 | Oracle International Corporation | Generating and managing sparse vectors in a database system |
Family Cites Families (55)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| NL283190A (zh) | 1961-09-13 | |||
| JPH0623977B2 (ja) * | 1984-10-17 | 1994-03-30 | 株式会社日立製作所 | ベクトル処理装置 |
| DE69132495T2 (de) | 1990-03-16 | 2001-06-13 | Texas Instruments Inc., Dallas | Verteilter Verarbeitungsspeicher |
| US5206822A (en) * | 1991-11-15 | 1993-04-27 | Regents Of The University Of California | Method and apparatus for optimized processing of sparse matrices |
| US5721892A (en) | 1995-08-31 | 1998-02-24 | Intel Corporation | Method and apparatus for performing multiply-subtract operations on packed data |
| US6115812A (en) | 1998-04-01 | 2000-09-05 | Intel Corporation | Method and apparatus for efficient vertical SIMD computations |
| EP2309383B1 (en) | 1998-08-24 | 2012-05-09 | MicroUnity Systems Engineering, Inc. | A processor for and method of executing a single wide switch instruction using a wide operand |
| CN101299185B (zh) | 2003-08-18 | 2010-10-06 | 上海海尔集成电路有限公司 | 一种基于cisc结构的微处理器结构 |
| WO2006120470A2 (en) * | 2005-05-12 | 2006-11-16 | Cambridge Consultants Limited | Processor and interface |
| US7676647B2 (en) | 2006-08-18 | 2010-03-09 | Qualcomm Incorporated | System and method of processing data using scalar/vector instructions |
| JP4755129B2 (ja) | 2007-03-16 | 2011-08-24 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
| US8281109B2 (en) * | 2007-12-27 | 2012-10-02 | Intel Corporation | Compressed instruction format |
| CN101217304B (zh) | 2008-01-10 | 2013-01-30 | 北京邮电大学 | 一种多子信道的多输入多输出预编码处理方法 |
| CN102012802B (zh) | 2010-11-25 | 2013-01-16 | 中国人民解放军国防科学技术大学 | 面向向量处理器数据交换的方法及装置 |
| EP2695054B1 (en) * | 2011-04-01 | 2018-08-15 | Intel Corporation | Vector friendly instruction format and execution thereof |
| US8515964B2 (en) * | 2011-07-25 | 2013-08-20 | Yahoo! Inc. | Method and system for fast similarity computation in high dimensional space |
| CN102360344B (zh) * | 2011-10-10 | 2014-03-12 | 西安交通大学 | 矩阵处理器及其指令集和嵌入式系统 |
| US8892851B2 (en) * | 2011-11-02 | 2014-11-18 | International Business Machines Corporation | Changing opcode of subsequent instruction when same destination address is not used as source address by intervening instructions |
| US8898516B2 (en) | 2011-12-09 | 2014-11-25 | Toyota Jidosha Kabushiki Kaisha | Fault-tolerant computer system |
| JP5834997B2 (ja) * | 2012-02-23 | 2015-12-24 | 株式会社ソシオネクスト | ベクトルプロセッサ、ベクトルプロセッサの処理方法 |
| CN102750127B (zh) * | 2012-06-12 | 2015-06-24 | 清华大学 | 一种协处理器 |
| GB2513105A (en) | 2013-03-15 | 2014-10-22 | Deepmind Technologies Ltd | Signal processing systems |
| US9384168B2 (en) | 2013-06-11 | 2016-07-05 | Analog Devices Global | Vector matrix product accelerator for microprocessor integration |
| US20150067273A1 (en) | 2013-08-30 | 2015-03-05 | Microsoft Corporation | Computation hardware with high-bandwidth memory interface |
| US9367519B2 (en) | 2013-08-30 | 2016-06-14 | Microsoft Technology Licensing, Llc | Sparse matrix data structure |
| US9552205B2 (en) * | 2013-09-27 | 2017-01-24 | Intel Corporation | Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions |
| US9471377B2 (en) * | 2013-11-13 | 2016-10-18 | Reservoir Labs, Inc. | Systems and methods for parallelizing and optimizing sparse tensor computations |
| CN103678257B (zh) * | 2013-12-20 | 2016-09-28 | 上海交通大学 | 基于fpga的正定矩阵浮点求逆器及其求逆方法 |
| CN105468335B (zh) * | 2015-11-24 | 2017-04-12 | 中国科学院计算技术研究所 | 流水级运算装置、数据处理方法及片上网络芯片 |
| US20170177360A1 (en) * | 2015-12-21 | 2017-06-22 | Intel Corporation | Instructions and Logic for Load-Indices-and-Scatter Operations |
| CN111580865B (zh) | 2016-01-20 | 2024-02-27 | 中科寒武纪科技股份有限公司 | 一种向量运算装置及运算方法 |
| CN106991077A (zh) | 2016-01-20 | 2017-07-28 | 南京艾溪信息科技有限公司 | 一种矩阵计算装置 |
| CN111090467B (zh) | 2016-04-26 | 2025-05-27 | 中科寒武纪科技股份有限公司 | 一种用于执行矩阵乘运算的装置和方法 |
| CN107315718B (zh) * | 2016-04-26 | 2020-08-21 | 中科寒武纪科技股份有限公司 | 一种用于执行向量内积运算的装置和方法 |
| CN107315564B (zh) | 2016-04-26 | 2020-07-17 | 中科寒武纪科技股份有限公司 | 一种用于执行向量超越函数运算的装置和方法 |
| CN111651204B (zh) * | 2016-04-26 | 2024-04-05 | 中科寒武纪科技股份有限公司 | 一种用于执行向量最大值最小值运算的装置和方法 |
| CN107315716B (zh) * | 2016-04-26 | 2020-08-07 | 中科寒武纪科技股份有限公司 | 一种用于执行向量外积运算的装置和方法 |
| CN107329936A (zh) | 2016-04-29 | 2017-11-07 | 北京中科寒武纪科技有限公司 | 一种用于执行神经网络运算以及矩阵/向量运算的装置和方法 |
| CN111310904B (zh) * | 2016-04-29 | 2024-03-08 | 中科寒武纪科技股份有限公司 | 一种用于执行卷积神经网络训练的装置和方法 |
| US20180074824A1 (en) | 2016-09-13 | 2018-03-15 | Apple Inc. | Outer Product Engine |
| WO2018058427A1 (zh) * | 2016-09-29 | 2018-04-05 | 北京中科寒武纪科技有限公司 | 神经网络运算装置及方法 |
| CN107239824A (zh) | 2016-12-05 | 2017-10-10 | 北京深鉴智能科技有限公司 | 用于实现稀疏卷积神经网络加速器的装置和方法 |
| CN110073329B (zh) * | 2016-12-16 | 2021-06-22 | 华为技术有限公司 | 访存设备、计算设备和应用于卷积神经网络运算的设备 |
| US10489063B2 (en) | 2016-12-19 | 2019-11-26 | Intel Corporation | Memory-to-memory instructions to accelerate sparse-matrix by dense-vector and sparse-vector by dense-vector multiplication |
| WO2018121472A1 (zh) | 2016-12-28 | 2018-07-05 | 上海寒武纪信息科技有限公司 | 一种运算方法 |
| US10474458B2 (en) * | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
| US10776699B2 (en) * | 2017-05-05 | 2020-09-15 | Intel Corporation | Optimized compute hardware for machine learning operations |
| CN107729989B (zh) | 2017-07-20 | 2020-12-29 | 安徽寒武纪信息科技有限公司 | 一种用于执行人工神经网络正向运算的装置及方法 |
| CN107832843B (zh) | 2017-10-30 | 2021-09-21 | 上海寒武纪信息科技有限公司 | 一种信息处理方法及相关产品 |
| CN107861757B (zh) | 2017-11-30 | 2020-08-25 | 上海寒武纪信息科技有限公司 | 运算装置以及相关产品 |
| CN107943756B (zh) * | 2017-12-15 | 2021-03-23 | 中科寒武纪科技股份有限公司 | 一种计算方法及相关产品 |
| CN108009126B (zh) | 2017-12-15 | 2021-02-09 | 安徽寒武纪信息科技有限公司 | 一种计算方法及相关产品 |
| CN107957975B (zh) * | 2017-12-15 | 2021-01-05 | 安徽寒武纪信息科技有限公司 | 一种计算方法及相关产品 |
| CN108197705A (zh) * | 2017-12-29 | 2018-06-22 | 国民技术股份有限公司 | 卷积神经网络硬件加速装置及卷积计算方法及存储介质 |
| US10459866B1 (en) * | 2018-06-30 | 2019-10-29 | Intel Corporation | Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator |
-
2018
- 2018-02-05 CN CN201810110875.5A patent/CN108388446A/zh active Pending
- 2018-07-23 US US16/075,836 patent/US11836497B2/en active Active
- 2018-07-23 WO PCT/CN2018/096710 patent/WO2019148781A1/zh not_active Ceased
- 2018-08-08 CN CN201810914596.4A patent/CN109189474B/zh active Active
- 2018-08-08 CN CN201810914420.9A patent/CN109101273B/zh active Active
- 2018-08-08 CN CN201810899812.2A patent/CN109062609A/zh active Pending
- 2018-08-08 CN CN201810912901.6A patent/CN109189473A/zh active Pending
- 2018-08-08 CN CN201810914598.3A patent/CN109165041B/zh active Active
- 2018-08-08 CN CN201810912904.XA patent/CN109062610B/zh active Active
- 2018-08-08 CN CN201810914648.8A patent/CN109062612B/zh active Active
- 2018-08-08 CN CN201810914600.7A patent/CN109165732B/zh active Active
- 2018-08-08 CN CN201810914599.8A patent/CN109086076B/zh active Active
- 2018-08-08 CN CN201810912880.8A patent/CN109032669B/zh active Active
- 2018-08-08 CN CN201810914647.3A patent/CN109062611B/zh active Active
- 2018-08-08 CN CN201810912879.5A patent/CN109101272A/zh active Pending
- 2018-08-08 CN CN201810914419.6A patent/CN109117186B/zh active Active
Cited By (37)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US11703939B2 (en) | 2018-09-28 | 2023-07-18 | Shanghai Cambricon Information Technology Co., Ltd | Signal processing device and related products |
| CN110968285A (zh) * | 2018-09-28 | 2020-04-07 | 上海寒武纪信息科技有限公司 | 信号处理装置及相关产品 |
| CN111026440A (zh) * | 2018-10-09 | 2020-04-17 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| CN111026440B (zh) * | 2018-10-09 | 2022-03-29 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| CN111047027A (zh) * | 2018-10-12 | 2020-04-21 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111079907A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、装置及相关产品 |
| CN110096310B (zh) * | 2018-11-14 | 2021-09-03 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| CN110096310A (zh) * | 2018-11-14 | 2019-08-06 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
| CN111258644B (zh) * | 2018-11-30 | 2022-08-09 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
| WO2020108471A1 (zh) * | 2018-11-30 | 2020-06-04 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111258644A (zh) * | 2018-11-30 | 2020-06-09 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
| CN111353595A (zh) * | 2018-12-20 | 2020-06-30 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111381871A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111382850A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111381872A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111401536A (zh) * | 2018-12-28 | 2020-07-10 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111382851A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111381873A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111399905A (zh) * | 2019-01-02 | 2020-07-10 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111400341A (zh) * | 2019-01-02 | 2020-07-10 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813449A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813537A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813450A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813376A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111813448A (zh) * | 2019-04-12 | 2020-10-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN110598175A (zh) * | 2019-09-17 | 2019-12-20 | 西安邮电大学 | 一种基于图计算加速器的稀疏矩阵列向量比较装置 |
| CN110647234A (zh) * | 2019-09-27 | 2020-01-03 | 联想(北京)有限公司 | 一种指令处理方法及电子设备 |
| CN110647234B (zh) * | 2019-09-27 | 2021-08-17 | 联想(北京)有限公司 | 一种指令处理方法及电子设备 |
| CN112259071A (zh) * | 2020-09-22 | 2021-01-22 | 北京百度网讯科技有限公司 | 语音处理系统、语音处理方法、电子设备和可读存储介质 |
| CN114692847A (zh) * | 2020-12-25 | 2022-07-01 | 中科寒武纪科技股份有限公司 | 数据处理电路、数据处理方法及相关产品 |
| CN114692847B (zh) * | 2020-12-25 | 2024-01-09 | 中科寒武纪科技股份有限公司 | 数据处理电路、数据处理方法及相关产品 |
| CN112835552A (zh) * | 2021-01-26 | 2021-05-25 | 算筹信息科技有限公司 | 一种外积累加求解稀疏矩阵与稠密矩阵内积的方法 |
| CN112947908A (zh) * | 2021-02-26 | 2021-06-11 | 上海商汤智能科技有限公司 | 代码生成方法、装置、设备及存储介质 |
| CN112947908B (zh) * | 2021-02-26 | 2024-09-13 | 上海商汤智能科技有限公司 | 代码生成方法、装置、设备及存储介质 |
| CN114638351A (zh) * | 2022-03-21 | 2022-06-17 | Oppo广东移动通信有限公司 | 一种处理方法、npu及电子设备 |
| CN115248701A (zh) * | 2022-09-21 | 2022-10-28 | 进迭时空(杭州)科技有限公司 | 一种处理器寄存器堆之间的零拷贝数据传输装置及方法 |
| CN115576895A (zh) * | 2022-11-18 | 2023-01-06 | 摩尔线程智能科技(北京)有限责任公司 | 计算装置、计算方法及计算机可读存储介质 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN109165732A (zh) | 2019-01-08 |
| CN109165041B (zh) | 2023-06-30 |
| CN109032669B (zh) | 2023-08-29 |
| CN109101272A (zh) | 2018-12-28 |
| CN109165041A (zh) | 2019-01-08 |
| CN109189474A (zh) | 2019-01-11 |
| CN109086076A (zh) | 2018-12-25 |
| CN109062610B (zh) | 2023-05-26 |
| CN109032669A (zh) | 2018-12-18 |
| CN109101273B (zh) | 2023-08-25 |
| CN109062610A (zh) | 2018-12-21 |
| CN109062612A (zh) | 2018-12-21 |
| CN109117186A (zh) | 2019-01-01 |
| CN109062611B (zh) | 2023-05-23 |
| CN109062612B (zh) | 2023-06-27 |
| CN109086076B (zh) | 2023-08-25 |
| WO2019148781A1 (zh) | 2019-08-08 |
| CN109117186B (zh) | 2024-09-13 |
| US11836497B2 (en) | 2023-12-05 |
| CN109062609A (zh) | 2018-12-21 |
| CN109189473A (zh) | 2019-01-11 |
| CN109101273A (zh) | 2018-12-28 |
| CN109189474B (zh) | 2023-08-29 |
| US20220091849A1 (en) | 2022-03-24 |
| CN109062611A (zh) | 2018-12-21 |
| CN109165732B (zh) | 2022-05-31 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN108388446A (zh) | 运算模块以及方法 | |
| CN109032670B (zh) | 神经网络处理装置及其执行向量复制指令的方法 | |
| CN109284823B (zh) | 一种运算装置及相关产品 | |
| CN110163362B (zh) | 一种计算装置及方法 | |
| CN110825434B (zh) | 计算装置及计算方法 | |
| TW202321999A (zh) | 一種計算裝置及方法 | |
| WO2018113597A1 (zh) | 矩阵乘加运算装置、神经网络运算装置和方法 | |
| CN110163350A (zh) | 一种计算装置及方法 | |
| CN111353591A (zh) | 一种计算装置及相关产品 | |
| CN110276447A (zh) | 一种计算装置及方法 | |
| WO2021082747A1 (zh) | 运算装置及相关产品 | |
| WO2021082746A1 (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 | ||
| WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180810 |
|
| WD01 | Invention patent application deemed withdrawn after publication |