CN112328227A - 编译方法、装置、计算设备和介质 - Google Patents
编译方法、装置、计算设备和介质 Download PDFInfo
- Publication number
- CN112328227A CN112328227A CN202011209731.9A CN202011209731A CN112328227A CN 112328227 A CN112328227 A CN 112328227A CN 202011209731 A CN202011209731 A CN 202011209731A CN 112328227 A CN112328227 A CN 112328227A
- Authority
- CN
- China
- Prior art keywords
- intermediate representation
- computer device
- algorithm
- compiled
- operator
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 73
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 96
- 238000004364 calculation method Methods 0.000 claims abstract description 47
- 238000013507 mapping Methods 0.000 claims abstract description 25
- 239000013598 vector Substances 0.000 claims description 66
- 230000015654 memory Effects 0.000 claims description 59
- 239000011159 matrix material Substances 0.000 claims description 55
- 238000010586 diagram Methods 0.000 claims description 29
- 238000013528 artificial neural network Methods 0.000 claims description 28
- 238000004590 computer program Methods 0.000 claims description 17
- 238000006243 chemical reaction Methods 0.000 claims description 13
- 230000000694 effects Effects 0.000 abstract description 5
- 238000012545 processing Methods 0.000 description 26
- 230000006870 function Effects 0.000 description 23
- 238000013135 deep learning Methods 0.000 description 14
- 238000011176 pooling Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 230000004913 activation Effects 0.000 description 5
- 238000003491 array Methods 0.000 description 5
- 238000005457 optimization Methods 0.000 description 5
- 238000013527 convolutional neural network Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000003062 neural network model Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 238000005265 energy consumption Methods 0.000 description 2
- 230000010365 information processing Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000005284 excitation Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003446 memory effect Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 238000007634 remodeling Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/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
- G06N3/065—Analogue means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Neurology (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种适用于存算一体计算机装置的编译方法、编译装置、计算设备和存储介质。该编译方法包括:获取待编译算法的运算信息;根据运算信息,将待编译算法转换为第一中间表示,第一中间表示包括存算一体计算机装置执行的算子操作;将第一中间表示映射为第二中间表示,第二中间表示包括存算一体计算机装置的硬件信息与算子操作的对应关系;以及根据硬件信息,将待编译算法编译为存算一体计算机装置识别的指令信息,以由存算一体计算机装置执行指令信息。该编译方法能够将运算信息编译为存算一体计算机装置可直接执行的指令,从而可以实现利用存算一体计算机装置对各种算法进行加速运算的效果。
Description
技术领域
本公开的实施例涉及一种适用于存算一体计算机装置的编译方法、装置、计算设备和介质。
背景技术
存算一体计算系统可以利用存储阵列高效地实现部分运算操作,存算一体计算系统具有并行处理能力强,能耗低,算力高等特点,成为了目前最有效加速运算的方式之一。
传统的编译器架构难以将算法模型编译到存算一体计算系统中,导致无法利用存算一体计算系统对算法模型进行加速运算。
发明内容
本公开至少一实施例提供一种适用于存算一体计算机装置的编译方法,包括:获取待编译算法的运算信息;根据所述运算信息,将所述待编译算法转换为第一中间表示,所述第一中间表示包括所述存算一体计算机装置执行的算子操作;将所述第一中间表示映射为第二中间表示,第二中间表示包括所述存算一体计算机装置的硬件信息与所述算子操作的对应关系;以及根据所述对应关系,将所述待编译算法编译为所述存算一体计算机装置识别的指令信息,以由所述存算一体计算机装置执行所述指令信息。
例如,在本公开一实施例提供的方法中,存算一体计算机装置包括存算一体存储器构成的交叉阵列,所述算子操作包括矩阵-矢量乘法运算。
例如,在本公开一实施例提供的方法中,根据所述运算信息,将所述待编译运算转换为第一中间表示,包括:对所述待编译算法进行解析,并且根据所述解析的解析结果生成第三中间表示,其中,所述第三中间表示包括所述待编译算法的计算图表示形式;根据所述计算图表示形式,将所述待编译算法分解为所述存算一体计算机装置包括的算子操作;以及根据所述算子操作,将所述第三中间表示转换为包含所述算子操作的所述第一中间表示。
例如,本公开一实施例提供的方法中,待编译算法包括神经网络算法。
例如,本公开一实施例提供的方法中,神经网络算法基于多种不同深度学习框架中任一开发且被转化为所述计算图表示形式。
例如,在本公开一实施例提供的方法中,计算图表示形式包括开放神经网络交换格式。
例如,本公开一实施例提供的方法中,该方法还包括:获取所述存算一体计算机装置执行的算子操作的定义信息,其中,所述定义信息用于对所述算子操作进行描述,其中,根据所述计算图表示形式,将所述待编译算法分解为所述存算一体计算机装置包括的算子操作,包括:根据所述定义信息,确定与所述计算图表示形式中包括的运算操作相对应的算子操作。
例如,在本公开一实施例提供的方法中,运算操作包括卷积操作,所述算子操作包括矩阵-矢量乘法运算,其中,根据所述定义信息,确定与所述计算图表示形式中包括的运算操作相对应的算子操作,包括:根据所述运算信息,确定所述卷积操作的至少一个卷积核和待卷积数据;根据矩阵-矢量乘法运算的定义信息,确定与所述卷积操作相关联的算子操作包括重塑操作,其中,所述重塑操作配置为将所述至少一个卷积核重塑为矩阵,并且将所述待卷积数据重塑为多个向量,其中,所述矩阵中的每一列表示一个卷积核。
例如,在本公开一实施例提供的方法中,存算一体计算机装置包括存储器阵列,其中,将所述第一中间表示映射为第二中间表示,包括:将所述第一中间表示中所述矩阵的元素映射为所述存储器阵列中存储器的电导值;以及将所述待卷积数据重塑为的多个向量分别映射为电压向量,其中,所述电压向量作为所述存储器阵列中每一行的输入,使得所述存储器阵列根据所述电导值矩阵和所述电压向量进行矩阵和向量的乘运算。
例如,在本公开一实施例提供的方法中,算子操作还包括激活函数。
本公开至少一实施例还提供一种适用于存算一体计算机装置的编译装置,包括:获取单元,配置为获取待编译算法的运算信息;转换单元,配置为根据所述运算信息,将所述待编译算法转换为第一中间表示,其中,所述第一中间表示包括存算一体计算机装置执行的算子操作;映射单元,配置为将所述第一中间表示映射为第二中间表示,其中,第二中间表示包括所述存算一体计算机装置的硬件信息与所述算子操作的对应关系;以及编译单元,配置为根据所述对应关系,将所述待编译算法编译为所述存算一体计算机装置识别的指令信息,以由所述存算一体计算机装置根据所述指令信息执行所述运算操作。
例如,在本公开一实施例提供的编译装置中,所述转换单元包括:计算图生成单元,配置为对所述待编译算法进行解析,并且根据解析结果生成第三中间表示,其中,所述第三中间表示包括所述神经网络算法的计算图表示形式;计算图转换单元,配置为根据所述计算图表示形式,将所述待编译算法分解为所述存算一体计算机装置包括的算子操作,以及根据所述算子操作,将所述第三中间表示转换为包含所述算子操作的生成所述第一中间表示。
例如,在本公开一实施例提供的编译装置中,计算图转换单元包括:算子扩展定义单元,配置为对所述存算一体计算机装置执行的算子操作进行定义,以确定所述算子操作的定义信息;算子转化单元,配置为根据所述定义信息,确定与所述计算图中包括的复杂运算相对应的算子操作,计算图优化单元,配置为根据所述算子操作,将所述第三中间表示转换为包含所述算子操作的生成所述第一中间表示。
本公开至少一实施例还提供一种适用于存算一体计算机装置的编译装置,包括:处理器;存储器,包括一个或多个计算机程序模块;其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于实现本公开任一实施例提供的编译方法的指令。
本公开至少一实施例还提供一种计算设备,包括:根据本公开任一实施例提供的编译装置;以及所述存算一体计算机装置,所述存算一体计算机装置配置为根据所述编译装置编译的指令信息执行所述运算操作。
例如,在本公开一实施例提供的计算设备中,所述存算一体计算机装置包括交叉阵列,交叉阵列包括存算一体存储器,所述算子操作包括矩阵-矢量乘法运算。
例如,在本公开一实施例提供的计算设备中,所述存算一体计算机装置还包括:缓冲器,配置为存储所述第二中间表示包括的中间数据;以及转换器,配置为将所述中间数据转换为所述交叉阵列的输入数据。
例如,在本公开一实施例提供的计算设备中,所述存算一体计算机装置还包括:功能单元,配置为将所述输入数据分配到所述多个交叉阵列中。
本公开至少一实施例还提供一种存储介质,非暂时性地存储计算机可读指令,当所述计算机可读指令由计算机执行时可以执行本公开任一实施例提供所述的编译方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为本公开至少一实施例提供的适用于存算一体计算机装置的编译方法的流程图;
图2A示出了本公开至少一实施例提供的图1所示的编译方法中步骤S20的流程图;
图2B示出了一种神经网络算法模型的示意图;
图3A示出了本公开一实施例提供的根据定义信息确定与计算图表示形式中包括的运算操作相对应的算子操作的方法流程图;
图3B示出了本公开至少一实施例提供的将三维的卷积核重塑为二维矩阵的示意图;
图3C示出了本公开至少一实施例提供的将图像数据重塑为多个向量的示意图;
图4A示出了本公开至少一实施例提供的存算一体计算机装置实现矩阵-矢量乘法运算的实施例的示意图;
图4B示出了传统方式实现的卷积操作和第一中间表示的卷积操作的示意图;
图5示出了本公开至少一实施例提供的另一适用于存算一体计算机装置的编译方法的流程图;
图6示出了本公开至少一实施例提供的适用于存算一体计算机装置的编译装置示意性框图;
图7A示出了本公开至少一实施例提供的存算一体计算机装置的架构图;
图7B示出了本公开至少一实施例提供的第一处理单元的结构示意图;
图7C示出了本公开一些实施例提供了适用于存算一体计算机装置的编译器架构示意图;
图8为本公开一些实施例提供的一种适用于存算一体计算机装置的编译装置的框图;
图9为本公开一些实施例提供的电子设备的示意框图;以及
图10为本公开一些实施例提供的一种计算机可读存储介质的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
存算一体计算机装置例如可以是指由能实现存算一体计算模式的器件构成的装置,可以由一颗或者多颗存算一体芯片构成。这种具有存算一体计算模式的器件例如可以包括阻变存储器、相变存储器(Phase Change Memory,PCM)、磁存储器(Magnetic RandomAccess Memory,MRAM)、忆阻器等新型存储器,以及静态随机存取存储器(Static RandomAccess Memory,SRAM)、闪存(Flash Memory)等传统存储器。
存算一体计算机装置可以利用如上文所述的新型存储器或者传统存储器实现计算和存储一体化,数据并行处理能力强,能耗低,算力高,可以高效执行许多算法模型的运算操作,成为了目前最有效加速运算的方式之一。相关技术中算法模型往往是通过C++、python等语言编写的,存算一体计算机装置无法直接对这些算法模型进行识别并运算,因此需要将运算操作编译为存算一体计算机装置可以执行的指令,以供存算一体计算机装置执行。然而,在相关技术中还不存在将算法模型编译为存算一体计算机装置可以执行的指令的编译方法,导致利用存算一体计算机装置对算法进行加速运算的适用性低。
本公开至少一实施例提供了一种适用于存算一体计算机装置的编译方法,包括:获取待编译算法的运算信息;根据所述运算信息,将所述待编译算法转换为第一中间表示,其中,所述第一中间表示包括所述存算一体计算机装置执行的算子操作;将所述第一中间表示映射为第二中间表示,其中,第二中间表示包括所述存算一体计算机装置的硬件信息与所述算子操作的对应关系;以及根据所述对应关系,将所述待编译算法编译为所述存算一体计算机装置识别的指令信息,以由所述存算一体计算机装置执行所述指令信息。
本公开一些实施例还提供对应于上述编译方法的编译装置、计算设备和存储介质。
本公开实施例提供的编译方法可以将运算信息分解为存算一体计算机装置特有的算子操作,能够结合存算一体计算机装置的硬件特性生成高效且准确的存算一体计算机装置可以执行的指令信息,从而可以利用存算一体计算机装置对各种算法进行加速运算,提高了存算一体计算机装置的适用性。同时,使用形式不同的多层中间表示(例如,第一中间表示和第二中间表示)对算法模型进行转化和描述可以较好地实现编译过程的扩展和改进。
下面结合图1对本公开的实施例及其示例提供的适用于存算一体计算机装置的编译方法的进行说明。
图1为本公开至少一实施例提供的适用于存算一体计算机装置的编译方法的流程图。
如图1所示,该编译方法可以包括步骤S10~S40。
步骤S10:获取待编译算法的运算信息。
步骤S20:根据运算信息,将待编译算法转换为第一中间表示。
步骤S30:将第一中间表示映射为第二中间表示。
步骤S40:根据对应关系,将待编译算法编译为存算一体计算机装置识别的指令信息,以由存算一体计算机装置执行指令信息。对于步骤S10,运算信息例如可以是通过软件语言(例如,C++、python等语言)开发的待编译算法的脚本。例如,待编译算法可以是利用多种不同深度学习框架中任一开发的神经网络算法。
例如可以利用Caffe、PyTorch以及TensorFlow等深度学习框架对神经网络算法进行开发。神经网络算法,例如可以包括但不限于LeNet,AlexNet,VGGNet,ResNet、CNN以及RNN等。对于不同的神经网络模型可使用不同的深度学习框架进行训练,从而获得训练好的模型参数并且例如可以以某种格式将神经网络的模型参数存储到预设文件中。需要理解的是,待编译算法不限于神经网络算法,也可以是其他的算法。下面以待编译算法为神经网络算法为例进行说明,本公开的实施例对此不作限制。
例如,可以通过读取预设文件来获取待编译算法的运算信息,或者访问文件路径来获取待编译算法的运算信息等。
对于步骤S20,例如,第一中间表示包括存算一体计算机装置执行的算子操作。第一中间表示包括但不限于以扩展开放神经网络交换格式(Open Neural NetworkExchange,ONNX)表示,并以计算图的形式给出。
在步骤S20中,将运算信息中的复杂运算转化为存算一体计算机系统特有的算子操作。例如可以将运算信息中的复杂运算进行分解,并且转换为存算一体计算机系统特有算子操作的组合。例如待编译算法为卷积操作,步骤S20可以例如可以将卷积操作转化为存算一体计算机装置能高效执行的矩阵-矢量乘法运算。
对于步骤S30,例如,第二中间表示包括存算一体计算机装置的硬件信息与算子操作的对应关系。例如,将每一个算子操作映射到实际的硬件上,从而实现算法到硬件的转换,得到算子操作与硬件之间的依赖关系。第二中间表示是一种同时包含算子操作以及硬件信息,并且算子操作与硬件一一对应的格式文件,包括但不限于使用JSON(PythonScriptObject Notation)的格式表示,同时也可用可视化的计算图的方式给出。
例如,存算一体计算机装置包括存算一体存储器构成的交叉阵列,算子操作包括矩阵-矢量乘法运算。在将卷积操作转化为矩阵-矢量乘法运算的例子中,若存算一体存储器为忆阻器,则硬件信息可以包括执行矩阵-矢量乘法运算的忆阻器阵列、向忆阻器阵列输入的电压信号以及忆阻器阵列的电导值等。
对于步骤S40,指令信息例如可以是二进制的机器码或者也可以是硬件描述语言编写的指令,本公开对指令信息的形式不作限定。
例如,可以结合存算一体系统的硬件特性对第三中间表达式计算图进行综合优化处理,同时生成在存算一体系统上执行的指令码。
例如,可以针对存算一体硬件平台进行指令的调度优化,结合硬件平台优化算法模型的映射方式,从而确定执行指令之间的关系以及针对第三中间表示的分块执行方案。指令生成模块主要依据第三中间表示的依赖关系来生成对应的指令码。
图2A示出了本公开至少一实施例提供的图1所示的编译方法中步骤S20的流程图。例如,如图2A所示,在一些实施例中步骤S20可以包括步骤S21~S23。
步骤S21:对待编译算法进行解析,并且根据解析的解析结果生成第三中间表示。
例如,第三中间表示包括待编译算法的计算图表示形式。
在本公开的一些实施例中,例如可以基于神经网络算法所适用的深度学习框架,对神经网络算法对应地进行解析以生成第三中间表示。
例如,利用Caffe解析器解析经由Caffe深度学习框架获取的待编译算法的运算信息,利用TensorFlow解析器解析经由TensorFlow深度学习框架获取的待编译算法的运算信息。例如,在根据本公开实施例提供的适用于存算一体计算机装置的编译装置中可以包括不同深度学习框架的解析器,以对不同深度学习框架下开发的神经网络算法进行解析生成第三中间表示。
通过利用各种深度学习框架的解析器将待编译算法解析为计算图表示形式,使得在后续的应用中,若需要增加针对新的深度学习框架的支持,则只需要增加针对该新的深度学习框架的模型的解析器即可,由此提升了本公开实施例的编译方法的可扩展性和兼容性。
步骤S21可以将在不同深度学习框架上开发的神经网络模型解析为与深度学习框架无关的第三中间表示。由此,实现了深度学习框架和编译方法的解耦,将各类深度学习框架的神经网络算法统一转化为本发明中的计算图形式。例如可以利用python脚本语言的特性,实现神经网络算法解析的解析结果与第三中间表示的转化。
在本公开的一些实施例中,计算图表示形式包括但不限于开放神经网络交换格式。例如,TensorFlow等框架可以以图的形式表示神经网络,而Caffe未使用图的形式给出但给出了各个计算操作和网络数据的依赖关系,由此可见,不同的深度学习框架和算法模型,将其编译为存算一体计算系统所能执行的指令需要不同的编译方式。为了能对不同的学习框架和算法模型进行兼容,本公开的实施例提出将它们都转化为通用的第三中间表示并以计算图形式给出,同时也便于对其面向存算一体计算系统进行后续优化。由于ONNX对Caffe2,PyTorch,TensorFlow等主流框架有着不同程度的支持,所以第三中间表示可以但不限于使用ONNX格式给出。应当指出,所有能转换为ONNX格式的深度学习框架和算法模型都应包含本实施例所支持的算法内。
步骤S22:根据计算图表示形式,将待编译算法分解为存算一体计算机装置包括的算子操作。
例如,可以将计算图表示形式中的运算操作逐一地分解为存算一体计算机装置包括的算子操作。
图2B示出了一种神经网络算法模型的示意图。以图2B所示的神经网络算法模型为例来说明将待编译算法分解为存算一体计算机装置包括算子操作的实施方式。
如图2B所示,该神经网络算法可以是用于对手写数字进行识别。该神经网络算法例如可以是LeNet-5网络。LeNet-5是一个应用于图像分类问题的卷积神经网络,其目标是从一系列的手写数字的灰度图像中识别和区分0-9。
如图2B所示,卷积神经网络可以由一系列有序的计算层构成,例如可以包括卷积层、池化层和全连接层等。不同的计算层有不同的计算任务,通过不同的计算层之后,即可提取出图像的特征得到正确的输出。在这些计算层中,其中运算量最大以及最重要的运算操作是卷积层的卷积操作,对于这种神经网络算法的加速,例如可以是对卷积操作的加速。输入的图像数据经过卷积层与卷积核进行卷积运算从而得到输出的特征图。卷积操作之后通常都会连接非线性函数激励层,把输出结果进行非线性映射,通过添加非线性因素可以用来弥补线性模型的不足。之后经过池化操作,对输入的特征图进行压缩,简化计算复杂度以及提取图像的主要特征。多次进行卷积和池化操作后,即可提取到图像的特征,最后经过全连接层,将输出的信息传递给分类器进行分类,从而完成识别和分类的任务。
对于图2B所示的神经网络算法对应的第三中间表示的计算图表示形式中的运算操作例如可以包括卷积操作、池化操作、卷积操作、池化操作和全连接层的分类操作。
例如可以逐一地将卷积操作、池化操作、卷积操作、池化操作和全连接层的分类操作分解为存算一体计算机装置可以执行的算子操作。例如卷积操作可以分解为重塑操作和矩阵-矢量乘法运算等算子操作。本领域技术人员例如可以在存算一体计算机装置中定义池化操作、全连接层的分类操作相对应的算子操作,以将池化操作、全连接层的分类操作分解为存算一体计算机装置可以执行的算子操作。
在本公开的一些实施例中,存算一体计算机装置包括的算子操作中一些算子操作可以是由硬件资源实现的,另一些算子操作可以是由软件资源实现的。例如,重塑操作可以是控制器中的软件资源实现的,而矩阵-矢量乘法运算可以是由硬件资源实现的。
在本公开的一些实施例中,例如可以预先指定运算操作和算子操作之间的映射关系,以根据映射关系确定与运算操作相对应的算子操作。例如预先指定卷积操作映射为阵-矢量乘法运算,那么响应于计算图表示形式中包括卷积操作,将卷积操作分解为重塑操作和矩阵-矢量乘法运算。
步骤S23:根据算子操作,将第三中间表示转换为包含算子操作的第一中间表示。
例如,可以使用算子操作来替换第三中间表示中的运算操作,从而生成可以在存算一体计算机装置中进行运算的第一中间表示。第一中间表示例如也可以是具有计算图表示形式,包括但是不限于ONNX格式。
在本公开的一些实施例中,步骤S20在包括步骤S21~S23的基础上还可以进一步地包括对第三中间表示进行优化,从而可以根据优化后的第三中间表示生成第一中间表示。该步骤例如可以在操作S22之后,并且在步骤S23之前执行。对第三中间表示进行优化,例如可以包括去除第三中间表示中对计算结果没有影响的操作,以及对计算操作融合以减少指令码在硬件平台和存储之间的交互次数。例如,可以去除第三中间表示中涉及到的与维度变化相关的操作,与维度变化相关的操作例如可以由存算一体计算机装置中的控制单元实现,而不需要硬件资源实现。
在本公开的一些实施例中,图1所描述的编译方法在包括操作S10~S40的基础上,还可以进一步包括获取所述存算一体计算机装置执行的算子操作的定义信息。例如,该定义信息用于对所述算子操作进行描述。在该实施例中,步骤S22可以包括:根据定义信息,确定与计算图表示形式中包括的运算操作相对应的算子操作。
定义信息例如可以包括算子操作的输入数据、输出数据、功能描述等。例如矩阵-矢量乘法运算的定义信息可以包括输入数据为电压向量以及矩阵,输出数据为电流,实现的功能为矩阵和向量的乘法运算。
例如响应于计算图表示形式中的运算操作包括卷积操作,确定功能描述为矩阵-矢量乘法的算子操作为与卷积操作相对应的算子操作。
在本公开的一些实施例中,本领域技术人员可以定义存算一体计算机装置能独特实现的算子,存算一体计算机装置能独特实现的算子例如可以是ONNX中未定义但是存算一体计算机装置能高效执行的运算。例如,矩阵-矢量乘法运算便是ONNX中未定义但是存算一体计算机装置能高效执行的运算。例如,本领域技术人员可以定义矩阵-矢量乘法运算、激活函数等算子操作。
本公开提供的编译方法使得本领域技术人员可以自行定义算子操作的定义信息,使得在后续的应用中,若需要增加存算一体计算机系统执行的操作,则只需要定义新的算子操作即可,由此进一步提升了本公开实施例的编译方法的可扩展性。
下文以运算操作为卷积操作,算子操作为矩阵-矢量乘法运算为例来进一步说明步骤S22。
图3A示出了本公开一实施例提供的根据定义信息确定与计算图表示形式中包括的运算操作相对应的算子操作的方法流程图。
如图3A所示,该方法流程图可以包括步骤S221~S222。
在步骤S221,根据运算信息,确定卷积操作的至少一个卷积核和待卷积数据。
例如,在本公开的一些实施例中,待卷积数据例如可以是一副图像的图像数据。图像数据的张量例如为C×H×W,C表示通道的数量,对于灰度图像C=1,对于彩色图像C=3,H表示图像的高度,W表示图像的宽度。卷积核可以包括多个,以通过多个卷积核提取该图像的多个图像特征。卷积核的张量例如为M×C/Groups×KH×KW,M代表提取的特征的数量(即,卷积核的数量),Groups代表对卷积核分组的数量,C代表通道(channel)的数量,KH是卷积核的高度,KW代表卷积核的宽度,一般情况下KH和KW相等。对于每一个通道的卷积核而言,它是一个M×KH×KW的张量。
步骤S222:根据矩阵-矢量乘法运算的定义信息,确定与卷积操作相关联的算子操作包括重塑操作。
例如,重塑操作配置为将至少一个卷积核重塑为矩阵,并且将待卷积数据重塑为多个向量。例如,矩阵中的每一列表示一个卷积核。下面的实施例说明了重塑操作的原理,在实际应用中,例如可以直接调用预先定义的重塑操作的算子来使存算一体计算机装置执行下面所描述的方法。
例如,根据矩阵-矢量乘法运算的定义信息可以确定矩阵-矢量乘法运算的输入数据为二维矩阵和一维向量。由于卷积神经网络具有权值共享的特性,所以同一个卷积核会多次参与运算过程,可以直接将卷积核的信息映射到存算一体计算机系统的阵列中去。
如上所述,卷积核的张量例如为M×C/Groups×KH×KW,其中,C/Groups通常取值为1,则卷积核是一个三维的张量,因此需要对三维的张量进行降维,以将卷积核重塑为二维矩阵而得到卷积核的矩阵。图3B示出了本公开至少一实施例提供的将三维的卷积核重塑为二维矩阵的示意图。
如图3B所示,M个卷积核组成了一个三维的张量,每个卷积核为一个二维矩阵,并且二维矩阵的大小为KH×KW。将每个KH×KW的二维矩阵按照逐行的顺序写成N×1的列向量,N=KH×KW。然后,将M个二维矩阵变化后形成的N×1列向量逐列排布成N×M的二维矩阵,从而将三维的卷积核重塑为二维矩阵。
待卷积数据例如为图像数据,可以按照卷积核的大小,将图像数据重塑为多个向量。图像数据的张量例如为C×H×W,C表示通道的数量,对于灰度图像C=1,对于彩色图像C=3。对于彩色图像,可以先选择一个通道来进行卷积运算,则图像数据的张量变成H×W。
图3C示出了本公开至少一实施例提供的将图像数据重塑为多个向量的示意图。
如图3C所示,图像数据例如可以用矩阵A,矩阵A重塑后的多个向量组成的矩阵例如为矩阵B。
由于卷积核包括N行,因此,将矩阵A重塑为包括N列的矩阵B。根据卷积操作原理,可以选取宽度为KW并且高度为KH的窗口沿着矩阵A从左到右,从上到下滑动。滑动的步长S例如可以等于1。S表示卷积操作滑动的步长(Stride),例如S=1表示卷积核每次在输入图像上滑动的步长为1个单位长度。如图3C所示,将第一个窗口中的数据作为矩阵B第一行,第二个窗口中的数据作为矩阵B的第二行,依次类推直至最后一个窗口。由此可以得到(H-KH+1)×(W-KW+1)个向量。
需要注意的是,在对图像数据进行重塑之前需要考虑是否需要对图像数据进行像素填充操作(Padding)以及步长选取,像素填充操作可以避免图像角落数据丢失以及特征图像被压缩的问题,例如可以在图像数据周围进行补零。
假设图像数据的矩阵A中的元素记为x(a,b),变化之后的矩阵B中的元素记为x(i,j),矩阵A和矩阵B中第一个元素都记为x(1,1)。
在不存在Padding的情形中,矩阵A和矩阵B中的元素满足以下等式。
其中,fix(x1,x2)表示x1除以x2的商,mod(x1,x2)表示x1除以x2的余数。
在存在Padding的情形中,矩阵A和矩阵B中的元素满足以下等式。
其中,fix(x1,x2)表示x1除以x2的商,mod(x1,x2)表示x1除以x2的余数。
因此,可以通过等式(1)、等式(2)或者等式(3)、等式(4)来确定矩阵B中的每一个元素,从而矩阵B中的每一行表示图像数据重塑得到的一个向量。
在图3A~图3C所描述的实施例中,存算一体计算机装置包括存储器阵列,在操作S30将第一中间表示映射为第二中间表示包括:将第一中间表示中矩阵的元素映射为存储器阵列中存储器的电导值;以及将待卷积数据重塑为的多个向量分别映射为电压向量。电压向量作为存储器阵列中每一行的输入,使得存储器阵列根据电导值矩阵和电压向量进行矩阵和向量的乘运算。
图4A示出了本公开至少一实施例提供的存算一体计算机装置实现矩阵-矢量乘法运算的实施例的示意图。
如图4A所示,存储器阵列例如可以是多个忆阻器410构成的阵列。每一行忆阻器410的同一端电极短接,每一列忆阻器410的另一端电极短接形成十字交叉阵列。矩阵中的每一个元素映射为交叉阵列中忆阻器410的电导值gij。例如上文中描述的卷积核排布成的N×M二维矩阵中的每一个元素可以映射为交叉阵列中忆阻器410的电导值。
矢量可以映射为施加在每一行忆阻器410一端的电压值时Vi,通过欧姆定律和基尔霍夫电流定律可以容易得出第j列的输出电流值为 Ij即为图像数据在每一个卷积核下输出的电流值。之后再将得到的电流值通过跨阻放大器或者其他电路进行输出。因此电压值构成的矢量与电导值构成的矩阵通过这种存储器阵列即可一步完成矩阵-矢量乘法运算。由于忆阻器410本身具有对电导值的记忆作用,因此在这个过程中不需要额外的存储器件来存储电导值的大小。相比于传统计算机系统而言,存算一体计算系统减少了存储资源的占用以及访存过程中的功耗,极大地提高了运算效率。
对于彩色图像而言,可以在按照上述的方法对每个通道分别进行重塑操作和矩阵-矢量乘法运算,进而得到每个通道下的输出结果(1×M的行向量),之后将所有通道的输出结果的对应元素相加即可得出包含所有通道信息的结果。
4B示出了传统方式实现的卷积操作和第一中间表示的卷积操作的示意图。
如图4B所示,传统方式实现的卷积操作为获取输入张量1和输入张量2,然后对输入张量1和输入张量2进行复杂,运算量很大的卷积操作而得到输出张量。
第一中间表示的卷积操作包括获取输入张量1和输入张量2。输入张量1例如可以是卷积核张量,输入张量2例如可以是图像数据。
对于卷积核张量的重塑操作而言,例如可以包括对卷积核进行填充,然后将卷积核张量进行切片,最后重塑。对卷积核进行填充,例如可以是在卷积核的周围补0。对卷积核张量进行切片,可以是对卷积核张量中的数据分段提取,例如M个卷积核组成的一个三维的张量,每个卷积核为一个二维矩阵,可以提取每个大小为KH×KW的二维矩阵。最后,将切片得到的数据进行重塑,例如将每个KH×KW的二维矩阵按照逐行的顺序写成N×1的列向量,N=KH×KW。
对于图像数据的张量的重塑操作而言,例如可以包括切片、重塑和转置。切片,例如可以是选取宽度为KW并且高度为KH的窗口沿着矩阵A从左到右,从上到下滑动而得到多个切片结果。重塑可以是将第一个窗口中的数据作为矩阵B第一行,第二个窗口中的数据作为矩阵B的第二行,依次类推直至最后一个窗口。由此可以得到(H-KH+1)×(W-KW+1)个行向量。然后对(H-KH+1)×(W-KW+1)中的每个行向量进行转置,将其转置为列向量。
然后,将图像数据重塑得到的多个列向量映射为电压值,将卷积核张量的重塑操作得到的二维矩阵映射为交叉阵列中每个忆阻器的电导值,从而进行矩阵-矢量乘法运算。
在本公开的实施例中,经过存算一体计算机装置特有的矩阵-向量乘运算操作之后,可以将每一个结果构建一个张量序列(SequenceConstruct),之后将序列按顺序进行组合形成一个新的张量(ConcatFromSequence)M×K,其中K=[(W-KW+2P)/S+1]*[(H-KH+2P)/S+1],P表示补零的位置宽度,例如P=1表示在图像周围补一圈零,以次类推;S表示卷积操作滑动的步长(Stride),例如S=1表示卷积核每次在输入图像上滑动的步长为1个单位长度。之后将得到的新张量N×K经过同一组张量的级联(Concat),重新塑造(Reshape)以及同一批张量的级联(Concat)之后可以得到1*M*[(W-KW+2P)/S+1]*[(H-KH+2P)/S+1]的输出张量,这个张量经过池化(Pooling)之后又可作为下一个卷积的输入量。
图5示出了本公开至少一实施例提供的另一适用于存算一体计算机装置的编译方法的流程图。
如图5所示,该编译方法可以包括步骤S510~S540。
步骤S510:基于深度学习框架,将运算信息转化为具有计算图表示形式的第三中间表示。
例如可以执行上文参考图2A描述的步骤S21,在此不再赘述。
步骤S520:结合存算一体计算机装置定义的算子操作将第三中间表示转化为第一中间表示。
例如可以执行上文参考图2A描述的步骤S22和S23,在此不再赘述。
步骤S530:将第一中间表示中的算子操作与硬件资源对应起来得到第二中间表示。
例如,可以执行上文参考图1描述的步骤S30,在此不再赘述。
步骤S540:将第二中间表示编译为可以在存算一体计算机装置中执行的指令信息,同时对指令调度进行优化。
例如可以执行上文参考图1描述的步骤S40,在此不再赘述。
需要说明的是,在本公开的实施例中,本公开上述各个实施例提供的编译方法的流程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行。虽然上文描述的编译方法的流程包括特定顺序出现的多个操作,但是应该清楚地了解,多个操作的顺序并不受限制。上文描述的编译方法可以执行一次,也可以按照预定条件执行多次。
本公开的另一方面提供了一种适用于存算一体计算机装置的编译装置。该适用于存算一体计算机装置的编译装置可以将基于C++、python编写的算法编译为存算一体计算机装置可以执行的指令信息。
图6示出了本公开至少一实施例提供的适用于存算一体计算机装置的编译装置600示意性框图。
如图6所示,适用于存算一体计算机装置的编译装置600可以包括获取单元610、转换单元620、映射单元630和编译单元640。
获取单元610,配置为获取待编译算法的运算信息。例如,获取单元610可以实现图1描述的步骤S10,其具体实现方法可以参考步骤S10的相关描述,在此不再赘述。
转换单元620,配置为根据所述运算信息,将所述待编译算法转换为第一中间表示。例如,第一中间表示包括存算一体计算机装置执行的算子操作。例如,转换单元620可以实现图1描述的步骤S20,其具体实现方法可以参考步骤S20的相关描述,在此不再赘述。
映射单元630,配置为将第一中间表示映射为第二中间表示,例如,第二中间表示包括存算一体计算机装置的硬件信息与所述算子操作的对应关系。例如,映射单元630可以实现图1描述的步骤S30,其具体实现方法可以参考步骤S30的相关描述,在此不再赘述。
编译单元640,配置为根据硬件信息,将待编译算法编译为存算一体计算机装置识别的指令信息,以由存算一体计算机装置根据指令信息执行所述运算操作。例如,编译单元640可以实现图1描述的步骤S40,其具体实现方法可以参考步骤S40的相关描述,在此不再赘述。
在本公开的一个实施例中,转换单元620包括:计算图生成单元,配置为对待编译算法进行解析,并且根据解析结果生成第三中间表示。第三中间表示包括神经网络算法的计算图表示形式;计算图转换单元,配置为根据计算图表示形式,将待编译算法分解为存算一体计算机装置包括的算子操作,以及根据算子操作,将第三中间表示转换为包含算子操作的生成第一中间表示。
计算图生成单元例如可以包括模型解析单元和计算图构建单元。模型解析单元包括对各种类型的待编译算法进行解析的子单元以及每个解析子单元用于解析对应类型的模型文件。例如可以包括Caffe解析器、TensorFlow解析器等各种深度学习框架的解析器,以根据各种神经学习框架开发的神经网络模型进行解析。计算图构建单元,将解析之后的结果可以生成但不限于ONNX格式的第一中间表示,并以计算图的形式给出。
在本公开的一个实施例中,计算图转换单元包括:算子扩展定义单元,配置为对存算一体计算机装置执行的算子操作进行定义,以确定算子操作的定义信息;算子转化单元,配置为根据定义信息,确定与计算图中包括的复杂运算相对应的算子操作,计算图优化单元,配置为根据算子操作,将第三中间表示转换为包含算子操作的生成第一中间表示。
本公开的另一方面提供了一种计算设备,该计算设备包括本公开实施例提供的任一实施例的编译装置,以及存算一体计算机装置,存算一体计算机装置配置为根据编译装置编译的指令信息执行所述运算操作。
图7A示出了本公开至少一实施例提供的存算一体计算机装置的架构图。
如图7A所示,存算一体计算机装置可以包括多个第一处理单元710和多个第二处理单元720。
多个第一处理单元710例如可以分别用于对输入信号进行处理。多个第二处理单元720例如可以分别对第一处理单元710处理输入信号得到的中间数据再次进行处理。例如两个第二处理单元720之间进行中间数据的交换等。
多个第一处理单元710例如可以构成阵列,每个第一处理单元710可以包括存算一体计算模式的器件。每个第一处理单元710的结构例如可以是相同的,或者也可以是不相同的,本公开对此不作限定。
图7B示出了本公开至少一实施例提供的第一处理单元110的结构示意图。
如图7B所示,第一处理单元710可以包括缓冲器711、XB模块712、特殊功能单元713和控制器714。
XB模块712例如可以包括存算一体计算模式的存储器件构成的存算阵列7121。
在本公开的一个实施例中,存算阵列7121例如可以包括交叉阵列,交叉阵列例如可以包括存算一体存储器。例如,存算阵列1721可以是由存算一体存储器构成的交叉阵列。存算一体存储器例如可以是忆阻器、阻变存储器等。
在本公开的一个实施例中,XB模块712例如还可以包括驱动单元7124和转换器。转换器例如可以包括DAC 7122模块以及多路复用和ADC模块7123。
缓冲器711例如可以用于缓存数据,并且可以向XB模块712发送缓存数据,以便XB模块712用于对来自缓冲器711的缓存数据进行处理。例如可以对缓存数据进行乘加计算。在本公开的一个实施例中,缓冲器711例如可以存储第二中间表示包括的中间数据。
转换器配置为将中间数据转换为交叉阵列的输入数据。DAC模块7122例如可以将来自缓冲器711的数字信号转换为模拟信号,并且向存储阵列7121中输入该模拟信号。多路复用和ADC模块7123中的多路复用器可以作为选择开关,多路复用和ADC模块7123中的ADC配置为将交叉阵列的输出结果转换为数字信号。
在本公开的一个实施例中,例如可以通过驱动单元7124来改变存储阵列中存储器的电导值。
在本公开的一个实施例中,存算一体计算机装置还可以包括功能单元713。
功能单元713例如可以在缓存数据较大的情况下,将缓存数据分配到多个存算阵列中,然后将多个阵列的运算结果进行求和。另外,功能单元713例如可以用于实现Sigmoid或者ReLU等激活函数的功能。
本领域技术人员可以在存算一体计算机装置中设置所需的功能单元713,以实现特殊的功能,本公开对功能单元713的功能不作限定。
控制器714例如可以对缓冲器711、XB模块712中的开关电路以及功能单元113进行控制,并且控制器还可以执行一些软件实现的算子操作,例如重塑操作等。
如图7A和7B所示的存算一体计算机装置例如可以进行矩阵-矢量乘法运算、激活函数运算等。
例如,对于卷积操作而言,缓冲器可以重复利用输入的特征图,同时存储一部分中间数据。XB模块712可以利用写入和驱动电路对阵列中的存储器件的阻值进行改变,从而实现卷积核的更新。从缓冲器输入的数据经过数模转换器转化为施加到阵列一侧的电压值,经过阵列后转化为计算后的电流值,通过模数转换器进行量化操作后转化为输出的数字信息。功能单元主要有两个作用,第一是当卷积层或全连接层比阵列大时,权重的会被分解到多个阵列中去,然后将多个阵列的运算结果进行求和。第二是可以作为激活函数,能实现Sigmoid或者ReLU等激活函数的功能。
图7C示出了本公开一些实施例提供了适用于存算一体计算机装置的编译器架构示意图。
如图7C所示,该编译器架构可以包括通用计算图生成单元210、计算图转换单元220、硬件映射单元230和指令生成单元240。
通用计算图生成单元210例如可以对将各种不同深度学习框架下开发的神经网络算法转换成第三中间表示。例如通用计算图生成单元可以实现图2A描述的步骤S21,其具体实现方法可以参考步骤S30的相关描述,在此不再赘述。
计算图转换单元220例如可以将第三中间表示转换成第一中间表示。例如计算图转换单元可以实现图2A描述的步骤S22和S23,其具体实现方法可以参考步骤S30的相关描述,在此不再赘述。
硬件映射单元230例如可以将第一中间表示转换为第二中间表示。例如硬件映射单元可以执行上文参考图1描述的步骤S30,在此不再赘述。
指令生成单元240例如可以根据第二中间表示生成存算一体计算机装置可以执行的指令信息,以供存算一体计算机装置执行指令信息。例如指令生成单元可以执行上文参考图1描述的步骤S40,在此不再赘述。
本公开的至少一个实施例还提供了另一种适用于存算一体计算机装置的编译装置,该编译装置包括处理器和存储器,存储器包括一个或多个计算机程序模块。一个或多个计算机程序模块被存储在存储器中并被配置为由处理器执行,一个或多个计算机程序模块包括用于实现上述的编译方法的指令。该编译装置可以将运算信息编译为存算一体计算机装置可直接执行的指令,从而可以实现利用存算一体计算机装置对各种算法进行加速运算的效果。
图8为本公开一些实施例提供的一种适用于存算一体计算机装置的编译装置的框图。如图8所示,该编译装置800包括处理器810和存储器820。存储器820用于存储非暂时性计算机可读指令(例如一个或多个计算机程序模块)。处理器810用于运行非暂时性计算机可读指令,非暂时性计算机可读指令被处理器810运行时可以执行上文所述的编译方法中的一个或多个步骤。存储器820和处理器810可以通过总线系统和/或其它形式的连接机构(未示出)互连。
例如,处理器810可以是中央处理单元(CPU)、图形处理单元(GPU)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元。例如,中央处理单元(CPU)可以为X86或ARM架构等。处理器810可以为通用处理器或专用处理器,可以控制编译装置800中的其它组件以执行期望的功能。
例如,存储器820可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块,处理器810可以运行一个或多个计算机程序模块,以实现编译装置800的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。
需要说明的是,本公开的实施例中,编译装置700的具体功能和技术效果可以参考上文中关于编译方法的描述,此处不再赘述。
图9为本公开一些实施例提供的电子设备的示意框图。该电子设备900例如适于用来实施本公开实施例提供的编译方法。电子设备900可以是终端设备等。需要注意的是,图9示出的电子设备900仅仅是一个示例,其不会对本公开实施例的功能和使用范围带来任何限制。
如图9所示,电子设备900可以包括处理装置(例如中央处理器、图形处理器等)910,其可以根据存储在只读存储器(ROM)920中的程序或者从存储装置990加载到随机访问存储器(RAM)930中的程序而执行各种适当的动作和处理。在RAM 930中,还存储有电子设备900操作所需的各种程序和数据。处理装置910、ROM 920以及RAM 930通过总线940彼此相连。输入/输出(I/O)接口950也连接至总线940。
通常,以下装置可以连接至I/O接口950:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置960;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置970;包括例如磁带、硬盘等的存储装置990;以及通信装置990。通信装置990可以允许电子设备900与其他电子设备进行无线或有线通信以交换数据。虽然图9示出了具有各种装置的电子设备900,但应理解的是,并不要求实施或具备所有示出的装置,电子设备900可以替代地实施或具备更多或更少的装置。
例如,根据本公开的实施例,上述编译方法可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包括用于执行上述息处理方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置990从网络上被下载和安装,或者从存储装置990安装,或者从ROM 920安装。在该计算机程序被处理装置910执行时,可以实现本公开实施例提供的息处理方法中限定的功能。
本公开的至少一个实施例还提供了一种计算机可读存储介质,该计算机可读存储介质用于存储非暂时性计算机可读指令,当非暂时性计算机可读指令由计算机执行时可以实现上述的编译方法。利用该计算机可读存储介质,可以将运算信息编译为存算一体计算机装置可直接执行的指令,从而可以实现利用存算一体计算机装置对各种算法进行加速运算的效果。
图10为本公开一些实施例提供的一种计算机可读存储介质的示意图。如图10所示,计算机可读存储介质1000用于存储非暂时性计算机可读指令1010。例如,当非暂时性计算机可读指令1010由计算机执行时可以执行根据上文所述的器件布局方法中的一个或多个步骤。
例如,该计算机可读存储介质1000可以应用于上述编译装置800中。例如,计算机可读存储介质1000可以为图8所示的编译装置800中的存储器820。例如,关于计算机可读存储介质1000的相关说明可以参考图8所示的编译装置800中的存储器820的相应描述,此处不再赘述。
有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种适用于存算一体计算机装置的编译方法,包括:
获取待编译算法的运算信息;
根据所述运算信息,将所述待编译算法转换为第一中间表示,其中,所述第一中间表示包括所述存算一体计算机装置执行的算子操作;
将所述第一中间表示映射为第二中间表示,其中,第二中间表示包括所述存算一体计算机装置的硬件信息与所述算子操作的对应关系;以及
根据所述对应关系,将所述待编译算法编译为所述存算一体计算机装置识别的指令信息,以由所述存算一体计算机装置执行所述指令信息。
2.根据权利要求1所述的方法,其中,根据所述运算信息,将所述待编译运算转换为第一中间表示,包括:
对所述待编译算法进行解析,并且根据所述解析的解析结果生成第三中间表示,其中,所述第三中间表示包括所述待编译算法的计算图表示形式;
根据所述计算图表示形式,将所述待编译算法分解为所述存算一体计算机装置包括的算子操作;以及
根据所述算子操作,将所述第三中间表示转换为包含所述算子操作的所述第一中间表示。
3.根据权利要求2所述的方法,其中,所述待编译算法包括神经网络算法。
4.根据权利要求2所述的方法,还包括:
获取所述存算一体计算机装置执行的算子操作的定义信息,其中,所述定义信息用于对所述算子操作进行描述,
其中,根据所述计算图表示形式,将所述待编译算法分解为所述存算一体计算机装置包括的算子操作,包括:
根据所述定义信息,确定与所述计算图表示形式中包括的运算操作相对应的算子操作。
5.根据权利要求4所述的方法,其中,所述运算操作包括卷积操作,所述算子操作包括矩阵-矢量乘法运算,
其中,根据所述定义信息,确定与所述计算图表示形式中包括的运算操作相对应的算子操作,包括:
根据所述运算信息,确定所述卷积操作的至少一个卷积核和待卷积数据;
根据矩阵-矢量乘法运算的定义信息,确定与所述卷积操作相关联的算子操作包括重塑操作,其中,所述重塑操作配置为将所述至少一个卷积核重塑为矩阵,并且将所述待卷积数据重塑为多个向量,其中,所述矩阵中的每一列表示一个卷积核。
6.根据权利要求5所述的方法,其中,所述存算一体计算机装置包括存储器阵列,
其中,将所述第一中间表示映射为第二中间表示,包括:
将所述第一中间表示中所述矩阵的元素映射为所述存储器阵列中存储器的电导值;以及
将所述待卷积数据重塑为的多个向量分别映射为电压向量,
其中,所述电压向量作为所述存储器阵列中每一行的输入,使得所述存储器阵列根据所述电导值矩阵和所述电压向量进行矩阵和向量的乘运算。
7.一种适用于存算一体计算机装置的编译装置,包括:
获取单元,配置为获取待编译算法的运算信息;
转换单元,配置为根据所述运算信息,将所述待编译算法转换为第一中间表示,其中,所述第一中间表示包括存算一体计算机装置执行的算子操作;
映射单元,配置为将所述第一中间表示映射为第二中间表示,其中,第二中间表示包括所述存算一体计算机装置的硬件信息与所述算子操作的对应关系;以及
编译单元,配置为根据所述对应关系,将所述待编译算法编译为所述存算一体计算机装置识别的指令信息,以由所述存算一体计算机装置根据所述指令信息执行所述运算操作。
8.一种适用于存算一体计算机装置的编译装置,包括:
处理器;
存储器,包括一个或多个计算机程序模块;
其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于实现权利要求1-6任一项所述的编译方法的指令。
9.一种计算设备,包括:
根据权利要求7所述的编译装置;以及
所述存算一体计算机装置;
其中,所述存算一体计算机装置配置为根据所述编译装置编译的指令信息执行所述运算操作。
10.一种存储介质,非暂时性地存储计算机可读指令,当所述计算机可读指令由计算机执行时可以执行权利要求1-6任一项所述的编译方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011209731.9A CN112328227B (zh) | 2020-11-03 | 2020-11-03 | 编译方法、装置、计算设备和介质 |
US17/517,096 US11803360B2 (en) | 2020-11-03 | 2021-11-02 | Compilation method, apparatus, computing device and medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011209731.9A CN112328227B (zh) | 2020-11-03 | 2020-11-03 | 编译方法、装置、计算设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112328227A true CN112328227A (zh) | 2021-02-05 |
CN112328227B CN112328227B (zh) | 2022-02-25 |
Family
ID=74323036
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011209731.9A Active CN112328227B (zh) | 2020-11-03 | 2020-11-03 | 编译方法、装置、计算设备和介质 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11803360B2 (zh) |
CN (1) | CN112328227B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113220306A (zh) * | 2021-05-31 | 2021-08-06 | 支付宝(杭州)信息技术有限公司 | 操作执行方法、装置和电子设备 |
WO2022253075A1 (zh) * | 2021-06-02 | 2022-12-08 | 华为技术有限公司 | 一种编译方法及相关装置 |
WO2024244856A1 (zh) * | 2023-05-31 | 2024-12-05 | 华为技术有限公司 | 一种算子编译方法以及装置 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024102416A1 (en) * | 2022-11-10 | 2024-05-16 | Rain Neuromorphics Inc. | Error tolerant ai accelerators |
CN116339746A (zh) * | 2023-04-03 | 2023-06-27 | 上海安亭地平线智能交通技术有限公司 | 人工智能加速器的指令生成方法和装置、电子设备 |
CN116542325A (zh) * | 2023-05-24 | 2023-08-04 | 北京地平线信息技术有限公司 | 神经网络模型的编译方法、推理方法、装置、设备和介质 |
CN116560666B (zh) * | 2023-07-10 | 2023-09-22 | 上海燧原科技有限公司 | 基于多层级代码生成的ai前端统一计算方法、装置及介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130198494A1 (en) * | 2012-01-30 | 2013-08-01 | Vinod Grover | Method for compiling a parallel thread execution program for general execution |
WO2015183804A1 (en) * | 2014-05-30 | 2015-12-03 | Apple Inc. | Unified intermediate representation |
CN110377288A (zh) * | 2018-04-13 | 2019-10-25 | 赛灵思公司 | 神经网络压缩编译器及其编译压缩方法 |
CN110766147A (zh) * | 2018-07-25 | 2020-02-07 | 赛灵思公司 | 神经网络编译器架构及编译方法 |
CN110908667A (zh) * | 2019-11-18 | 2020-03-24 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
CN111047005A (zh) * | 2018-10-11 | 2020-04-21 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
CN111160551A (zh) * | 2019-12-04 | 2020-05-15 | 上海寒武纪信息科技有限公司 | 计算图执行方法、计算机设备及存储介质 |
CN111723935A (zh) * | 2020-06-24 | 2020-09-29 | 湖北亿咖通科技有限公司 | 神经网络计算图的处理方法、计算机存储介质及电子设备 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070266366A1 (en) * | 2006-05-12 | 2007-11-15 | Iosemantics, Llc | Generating and utilizing finite input output models, comparison of semantic models and software quality assurance |
US9659005B2 (en) * | 2014-05-16 | 2017-05-23 | Semantix Technologies Corporation | System for semantic interpretation |
US9747089B2 (en) * | 2014-10-21 | 2017-08-29 | International Business Machines Corporation | Automatic conversion of sequential array-based programs to parallel map-reduce programs |
US10901955B2 (en) * | 2018-07-29 | 2021-01-26 | International Business Machines Corporation | Smart contract input mapping |
CN110717584A (zh) | 2019-09-30 | 2020-01-21 | 上海寒武纪信息科技有限公司 | 神经网络编译方法、编译器、计算机设备及可读存储介质 |
US20210365253A1 (en) * | 2020-05-22 | 2021-11-25 | Alibaba Group Holding Limited | Heterogeneity-agnostic and topology-agnostic data plane programming |
CN112529175B (zh) | 2020-11-05 | 2022-03-18 | 上海交通大学 | 神经网络的编译方法、系统、计算机存储介质及编译设备 |
CN112465108B (zh) | 2020-11-11 | 2022-07-22 | 上海交通大学 | 一种面向存算一体平台的神经网络编译方法 |
CN112598121A (zh) | 2020-12-21 | 2021-04-02 | 北京时代民芯科技有限公司 | 一种面向深度学习编译器的高效算子优化方法 |
-
2020
- 2020-11-03 CN CN202011209731.9A patent/CN112328227B/zh active Active
-
2021
- 2021-11-02 US US17/517,096 patent/US11803360B2/en active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130198494A1 (en) * | 2012-01-30 | 2013-08-01 | Vinod Grover | Method for compiling a parallel thread execution program for general execution |
WO2015183804A1 (en) * | 2014-05-30 | 2015-12-03 | Apple Inc. | Unified intermediate representation |
CN110377288A (zh) * | 2018-04-13 | 2019-10-25 | 赛灵思公司 | 神经网络压缩编译器及其编译压缩方法 |
CN110766147A (zh) * | 2018-07-25 | 2020-02-07 | 赛灵思公司 | 神经网络编译器架构及编译方法 |
CN111047005A (zh) * | 2018-10-11 | 2020-04-21 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
CN110908667A (zh) * | 2019-11-18 | 2020-03-24 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
CN111160551A (zh) * | 2019-12-04 | 2020-05-15 | 上海寒武纪信息科技有限公司 | 计算图执行方法、计算机设备及存储介质 |
CN111723935A (zh) * | 2020-06-24 | 2020-09-29 | 湖北亿咖通科技有限公司 | 神经网络计算图的处理方法、计算机存储介质及电子设备 |
Non-Patent Citations (1)
Title |
---|
肖宇等: "可重构计算最优编译器并行计算程序编译方法", 《探测与控制学报》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113220306A (zh) * | 2021-05-31 | 2021-08-06 | 支付宝(杭州)信息技术有限公司 | 操作执行方法、装置和电子设备 |
WO2022253075A1 (zh) * | 2021-06-02 | 2022-12-08 | 华为技术有限公司 | 一种编译方法及相关装置 |
WO2024244856A1 (zh) * | 2023-05-31 | 2024-12-05 | 华为技术有限公司 | 一种算子编译方法以及装置 |
Also Published As
Publication number | Publication date |
---|---|
US11803360B2 (en) | 2023-10-31 |
US20220137941A1 (en) | 2022-05-05 |
CN112328227B (zh) | 2022-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112328227A (zh) | 编译方法、装置、计算设备和介质 | |
KR101298393B1 (ko) | 그래픽 처리 유닛 상에서 콘볼루션 신경망을 트레이닝하는방법 | |
CN108351984B (zh) | 硬件高效的深度卷积神经网络 | |
US20210158132A1 (en) | Efficient utilization of processing element array | |
Rybalkin et al. | Hardware architecture of bidirectional long short-term memory neural network for optical character recognition | |
CN112068798B (zh) | 一种实现网络节点重要性排序的方法及装置 | |
CN110826719A (zh) | 一种量子程序的处理方法、装置、存储介质和电子装置 | |
CN109684901B (zh) | 图像处理装置和图像处理方法 | |
KR20220088943A (ko) | 멤리스터 기반 신경망 병렬 가속 방법, 프로세서 및 장치 | |
KR20160034814A (ko) | 뉴럴 네트워크를 수반한 클라이언트 장치 및 그것을 포함하는 시스템 | |
KR20190099931A (ko) | 시스톨릭 배열(Systolic Array)을 이용하여 딥 러닝(Deep Learning) 연산을 수행하는 방법 및 장치 | |
CN111914213B (zh) | 一种稀疏矩阵向量乘运算时间预测方法及系统 | |
US11481994B2 (en) | Method and apparatus for extracting image data in parallel from multiple convolution windows, device, and computer-readable storage medium | |
CN113994347A (zh) | 用于负值和正值的非对称缩放因子支持的系统和方法 | |
KR20180103671A (ko) | 언어 모델을 압축하기 위한 전자 장치, 추천 워드를 제공하기 위한 전자 장치 및 그 동작 방법들 | |
US12125124B1 (en) | Matrix transpose hardware acceleration | |
US20240427848A1 (en) | Data processing method and apparatus, electronic device, and storage medium | |
US20190114542A1 (en) | Electronic apparatus and control method thereof | |
CN115545145A (zh) | 优化神经网络模型的方法及执行该方法的神经网络模型处理系统 | |
US11748100B2 (en) | Processing in memory methods for convolutional operations | |
CN113490955B (zh) | 用于产生金字塔层的架构的系统和方法 | |
CN113010687B (zh) | 一种习题标签预测方法、装置、存储介质以及计算机设备 | |
CN111340182B (zh) | 一种输入特征逼近的低复杂度cnn训练方法与装置 | |
US12159218B1 (en) | Dropout layer in a neural network processor | |
CN111814368B (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 |