CN111506384B - 模拟运算方法和模拟器 - Google Patents
模拟运算方法和模拟器 Download PDFInfo
- Publication number
- CN111506384B CN111506384B CN201910097439.3A CN201910097439A CN111506384B CN 111506384 B CN111506384 B CN 111506384B CN 201910097439 A CN201910097439 A CN 201910097439A CN 111506384 B CN111506384 B CN 111506384B
- Authority
- CN
- China
- Prior art keywords
- event
- instruction
- neural network
- determining
- sub
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本公开涉及一种模拟运算方法和模拟器,所述方法用于模拟执行神经网络运算,其包括:接收并存储运算数据,所述运算数据包括神经网络运算指令以及用于执行神经网络运算指令的数据;从所述神经网络运算指令中解析出多个运算子指令,并确定用于执行该多个运算子指令的多个事件过程,每个所述事件过程包括:加载事件、运算事件、存储事件和同步事件中的至少一种。基于确定的各事件过程,获得完成所述神经网络运算指令的运算时间和运算结果中的至少一种。本公开能够快速对神经网络运算进行模拟运行。
Description
技术领域
本公开涉及机器学习领域,特别涉及一种模拟运算方法、模拟器、机器学习芯片和电子设备。
背景技术
计算机模拟是指利用计算机软件开发的模拟器对真实世界过程或者***进行模拟的行为。如今,计算机***模拟器已经成为了计算机***结构领域研究中不可或缺的工具。研究人员通过使用模拟器能够用较低的成本和开销,高效地完成对软硬件的配置和观察,进而为硬软件的设计和优化提供指导。
神经网络(neural network)已经获得了非常成功的应用,神经网络加速器(neural network accelerators)被广泛应用于处理神经网络应用。在神经网络加速器被正式应用之前,开发人员需要对加速器进行性能评估。研究者一般采用周期精确模拟器进行硬件的性能模拟。周期精确模拟器需要模拟硬件的每一个模块在每一个时钟周期执行操作的各个细节,包括状态机跳转,寄存器更改,流水级操作等,以保持模拟器与硬件之间的一致性。这种精确模拟会导致巨大的资源,能源和时间开销,进而导致周期精确的模拟器无法满足实际的需求。因此如何加快模拟器的运行速度成为一个亟待解决的问题。。
发明内容
本公开实施例提供了一种能够方便的提高模拟运行速度的模拟运算方法、模拟器、机器学习芯片、电子设备和存储介质。
根据本公开的第一方面,提供了一种模拟运算方法,其用于模拟执行神经网络运算,包括:
接收并存储运算数据,所述运算数据包括神经网络运算指令以及用于执行神经网络运算指令的数据;
从所述神经网络运算指令中解析出多个运算子指令,并确定用于执行该多个运算子指令的多个事件过程,每个所述事件过程包括:加载事件、运算事件、存储事件和同步事件中的至少一种。
基于确定的各事件过程,获得完成所述神经网络运算指令的运算时间和运算结果中的至少一种。
在一些可能的实施方式中,所述从所述神经网络运算指令中解析出多个运算子指令,包括:
对接收的所述神经网络运算指令执行解码操作,得到所述多个运算子指令。
在一些可能的实施方式中,所述确定用于完成该多个运算子指令的多个事件过程,包括下述至少一种:
根据所述运算子指令的数量,确定所述事件过程的数量;
根据各所述运算子指令的执行顺序,确定各所述事件过程以及各所述事件过程的执行顺序。
在一些可能的实施方式中,所述根据所述运算子指令的数量,确定所述事件过程的数量,包括:
在从所述神经网络运算指令划中解析出N个运算子指令时,确定所述事件过程的数量为N+2,其中,N为大于或者等于1的正整数。
在一些可能的实施方式中,所述根据各所述运算子指令的执行顺序,确定各所述事件过程以及各所述事件过程的执行顺序,包括:
确定第一个事件过程,所述第一个事件过程包括第一加载事件;
确定第二个事件过程,所述第二个事件过程包括第二加载事件和第一运算事件;
确定第三个事件过程,所述第三个事件过程包括第三加载事件、第二运算事件和第一存储事件;
确定第i个事件过程,所述第i个事件过程包括第i加载事件、第i-1运算事件和第i-2存储事件;
确定第N+1个事件过程,所述第N+1个事件过程包括第N运算事件和第N-1存储事件;
确定第N+2个事件过程,所述第N+2个事件过程包括第N存储事件,其中,i为大于3且小于或者等于N的整数,N为运算子指令的数量,并为大于或等于1的正整数;
其中,第j加载事件用于加载第j运算子指令的运算数据,第j存储事件用于存储第j运算子指令的运算结果,第j运算事件用于执行第j运算子指令的运算操作,j为大于0小于或等于N的正整数。
在一些可能的实施方式中,所述根据各所述运算子指令的执行顺序,确定各所述事件过程以及各所述事件过程的执行顺序,包括:
每个所述事件过程还包括同步事件,根据每个事件过程中的各事件的执行时间确定各事件过程的同步事件的同步时间。
在一些可能的实施方式中,所述基于确定的各事件过程,获得完成所述神经网络运算指令的运算时间和运算结果中的至少一种,包括:
根据各所述事件过程中各事件的执行时间,确定每个事件过程的执行时间;
根据每个事件过程的执行时间,获得完成所述神经网络运算指令的运算时间。
在一些可能的实施方式中,所述基于确定的各事件过程,获得完成所述神经网络运算指令的运算时间和运算结果中的至少一种,包括:
执行确定的各所述事件过程;
根据各事件过程的运算结果得到所述神经网络运算的运算结果。
在一些可能的实施方式中,所述方法还包括:
在执行各所述事件过程时,根据所述事件过程中的运算事件对应的运算子指令的运算类型确定执行该运算事件的运算程序;
根据确定的运算程序执行对应的所述运算事件。
在一些可能的实施方式中,所述根据所述事件过程中的运算事件的运算类型确定执行该运算事件的运算程序,包括:
在所述运算事件对应的运算子指令为第一类运算时,利用第一运算程序执行该运算事件;
在所述运算事件对应的运算子指令为第二类运算时,利用第一运算程序执行该运算事件;
所述第一类运算包括向量运算、标量运算和非线性运算中的至少一种,所述第二类运算包括矩阵标量运算。
根据本公开的第二方面,提供了一种模拟器,其包括:
处理器,其用于执行第一方面中任意一项所述的方法。
根据本公开的第三方面,提供了一种机器学习芯片,所述机器学习芯片用于执行如第一方面中任意一项所述的方法。
根据本公开的第四方面,提供了一种电子设备,所述电子设备包括如第三方面所述的芯片。
根据本公开的第五方面,提供了一种计算机可读存储介质,所述存储介质中存储有计算机程序指令,所述计算机程序指令被处理器执行时实现第一方面任意一项所述的方法。
根据本公开上述实施例,可以获知,本公开实施例能够根据待执行的神经网络运算形成匹配的多个事件过程,按照事件过程的顺序执行各事件,从而有序的模拟执行各运算,而且可以基于事件触发的形式执行运算过程,能够快速对神经网络运算进行性能模拟。其中以事件为单位进行模拟,事件通常为用户自定义事件,每一个事件会触发一次模拟操作,能够有效的执行神经网络运算过程并且能够得到各个过程的结果,方便对模拟执行过程进行分析。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。
图1示出根据本公开实施例的一种模拟运算方法的流程图;
图2示出本公开实施例执行神经网络运算的装置的结构框图;
图3示出根据本公开实施例的运算模块的框图;
图4示出根据本公开实施例中模拟运算方法中步骤S300的流程图;
图5示出根据本公开实施例中模拟运算方法中步骤S300的流程图;
图6示出根据本公开实施例的模拟运算方法过程示意图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
另外,为了更好地说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
可以理解,本公开提及的上述各个方法实施例,在不违背原理逻辑的情况下,均可以彼此相互结合形成结合后的实施例,限于篇幅,本公开不再赘述。
本公开实施例可以模拟执行机器学习算法相关的模拟运算,例如可以用于模拟估计神经网络运算的运算时间、模拟执行神经网络运算的得到相应的运算结果,从而可以通过执行相应的机器学习运算获得运算结果、运算时间、运算速度等信息,实现对机器学习算法的分析。本公开实施例提供通过对接收的神经网络运算指令进行分析,确定执行该神经网络运算指令的多个事件过程,该多个事件过程可以按照顺序依次执行,可以降低对神经网络算法分析的时间,提高模拟器的运行速度。
图1示出根据本公开实施例的一种模拟运算方法的流程图。如图1所示,本公开实施例的模拟运算方法可以包括
S100:接收并存储运算数据,所述运算数据包括神经网络运算指令以及用于执行神经网络运算指令的数据;
S200:从所述神经网络运算指令中解析出多个运算子指令,并确定用于执行该多个运算子指令的多个事件过程,每个所述事件过程包括:加载事件、运算事件、存储事件和同步事件中的至少一种。
S300:基于确定的各事件过程,获得完成所述神经网络运算指令的运算时间和运算结果中的至少一种。
本公开实施例的模拟运算方法可以应用在模拟器中,该模拟器可以通过模拟数据存储、数据运算等过程执行神经网络运算的分析,例如可以用于分析神经网络运算的运算时间或者运算结果等。其中,模拟器可以包括性能模拟器,但本公开对此不进行具体限定。
步骤S100中,可以首先接收待执行模拟运算的运算数据,该运算数据中可以包括神经网络运算指令以及执行该指令所需的数据,或者也可以包括执行神经网络运算指令的各数据的存储地址、数据量等信息。
在接收到运算数据后,本公开实施例可以模拟执行运算数据的存储,例如可以模拟执行将运算数据存储至存储区的存储操作。在实际应用中,执行神经网络运算时,可以包括存储模块、运算模块以及存储模块。本公开实施例的模拟器可以模拟将运算数据存储至存储模块的预设存储空间内,以便后续运算对运算数据的读取和调用。
在获得并存储运算数据后,模拟器可以通过步骤S200模拟执行对该运算数据的分析,确定用于执行神经网络运算的各个事件过程。例如,可以模拟控制模块对神经网络运算指令的分析过程,以及对应的事件过程的确定和控制过程。即本公开实施例的模拟器可以模拟控制模块从接收的神经网络运算指令中解析出多个运算子指令,从而可以分别模拟分析该多个运算子指令的运算。
在一些可能的实施例中,所述从所述神经网络运算指令中解析出多个运算子指令,可以包括:对接收的所述神经网络运算指令执行解码操作,得到所述多个运算子指令。即,本公开实施例中,为了提高数据的安全性,以及减小数据容量,本公开实施例中接收的神经网络运算指令可以为经过编码处理的指令,在接收到该神经网络运算指令后,可以执行指令的解码操作,从该神经网络运算指令中解析出多个运算子指令。其中,对于神经网络运算指令的编码和解码的方式本公开不作具体限定,本领域技术人员可以选择适当的方式执行编码和解码操作。
另外,在得到神经网络运算指令对应的多个运算子指令之后,即可以确定用于完成该多个运算子指令的事件过程,其中,每个事件过程中可以至少包括一个事件,并且事件的类型可以为加载事件、运算事件、存储事件和同步事件中的至少一种。
其中,本公开实施例可以根据接收的神经网络运算指令对应的多个运算子指令,确定多个事件过程,该多个事件过程中的每个事件过程可以包括至少一个事件,并且每个事件过程中包括的事件之间不存在依赖关系。具体的,本公开实施例步骤S200中,确定用于完成该多个运算子指令的多个事件过程,可以包括下述至少一种:
a)根据所述运算子指令的数量,确定所述事件过程的数量;
本公开实施例中,在从所述神经网络运算指令划中解析出N个运算子指令时,确定所述事件过程的数量为N+2,其中,N为大于或者等于1的正整数。
本公开实施例中为了各运算子指令能够被有序的执行,并且能够被快速的模拟运行和分析,确定了多个事件过程。该多个事件过程之间需要满足的关系为:每个事件过程中的各事件是没有依赖关系的事件,其中,所述各事件不存在依赖关系包括:各事件的运算所应用的数据不存在重叠关系。例如,加载Load/存储Store事件与运算Compute事件之间没有依赖关系;Load事件与Store事件之间没有依赖关系;矩阵运算Matrix Compute事件、向量运算Vector Compute事件和标量运算Scalar Compute事件之间没有依赖关系。没有依赖关系的事件可以同时执行,本公开实施例可以利用Synchronize事件来同步没有依赖关系的事件。
b)根据各所述运算子指令的执行顺序,确定各所述事件过程以及各所述事件过程的执行顺序。
如上所述,本公开实施例的事件过程之间存在的关系为:在前一个事件中加载后一个事件所需的数据,并且在一个事件中的运算子指令被完成后,在一个事件过程中执行相应的运算结果的存储,并且每个事件过程之间利用同步时间同步,即在上一个事件过程的事件全部完成后,才可以通过同步事件启动下一个事件过程。具体的,本公开实施例确定各事件过程的顺序可以包括:
确定第一个事件过程,所述第一个事件过程包括第一加载事件;
确定第二个事件过程,所述第二个事件过程包括第二加载事件和第一运算事件;
确定第三个事件过程,所述第三个事件过程包括第三加载事件、第二运算事件和第一存储事件;
确定第i个事件过程,所述第i个事件过程包括第i加载事件、第i-1运算事件和第i-2存储事件;
确定第N+1个事件过程,所述第N+1个事件过程包括第N运算事件和第N-1存储事件;
确定第N+2个事件过程,所述第N+2个事件过程包括第N存储事件,其中,i为大于3且小于或者等于N的整数,N为运算子指令的数量,并为大于1的正整数;
其中,第j加载事件用于加载第j运算子指令的运算数据,第j存储事件用于存储第j运算子指令的运算结果,第j运算事件用于执行第j运算子指令的运算操作,j为大于0小于或等于N的正整数。
通过上述方式,即可以确定出与运算子指令对应的多个事件过程,并且可以根据各所述运算子指令的执行顺序,确定各所述事件过程以及各所述事件过程的执行顺序。
在分析出上述事件过程之后,即可以模拟控制模块控制运算模块和存储模块执行相应的操作。
图2示出本公开实施例执行神经网络运算的装置的结构框图。在实际应用中,运算神经网络运算的装置可以包括控制模块300、存储模块200和存储模块100。
其中,运算模块100用于完成接收到的神经网络运算,并得到运算结果。其中,运算模块100可以根据控制模块300确定的各事件过程完成各事件过程对应的操作,例如从存储模块200加载对应数据,完成相应的运算,对运算结果进行存储等等。本公开实施例中的运算模块100可以执行神经网络运算中的向量运算、标量运算、非线性运算以及矩阵向量运算等。并且运算模块100内还可以包括缓存器,用于缓存运算过程中生成的中间结果以及运算过程中所应用的数据。
根据上述结构,模拟器可以模拟控制模块300对存储模块200和运算模块的控制操作、存储模块200的读写操作,以及运算模块100的运算操作。
图3示出根据本公开实施例的运算模块的框图,其中本公开实施例的运算模块100可以包括主运算单元101和至少一个从运算单元102。
其中,主运算单元101可以用于根据控制模块300的控制从所述存储模块加载对应的数据,以及执行所述运算事件对应的运算子指令中的第一类运算,并对第一类运算的运算结果进行缓存;本公开实施例可以利用第一程序模拟执行主运算单元的运算过程。
从运算单元102可以用于根据所述控制模块300的控制从所述存储模块和/或所述主运算模块加载对应的数据,以及执行所述运算事件对应的运算子指令中的第二类运算,并对第二类运算的运算结果进行缓存。本公开实施例可以利用第二程序执行从运算单元102的运算过程。
其中,所述第一类运算包括向量运算、标量运算和非线性运算中的至少一种,所述第二类运算包括矩阵标量运算。
其中,主运算单元101可以作为主要数据通路使用,同时完成一部分向量运算和标量运算。主运算单元101可以根据控制模块的控制从存储模块缓存对应的数据,并利用缓存的数据完成运算主运算单元101可以用于完成向量运算、标量运算和非线性运算。其中向量运算包括逐元素相加、逐元素相乘等运算,标量运算包括标量四则运算,非线性运算主要包括指数、双曲函数等超越函数,用来支持激活函数运算。主运算单元101中主要完成Pooling(池化)层,BN(批正则化)层,ROI Pooling层和激活层的运算。
从运算单元302可以作为主要是核心运算模块,主要完成神经网络算法中的矩阵向量运算。神经网络中的卷积层、全连接层和LSTM层的运算都在从运算单元302完成。
主运算单元301和从运算单元302可以均包括缓存器,用于缓存各子运算所需的数据,并且可以缓存运算的结果。本公开实施例的存储事件中,对于运算结果的存储可以是将对应的运算子指令的结果缓存在缓存器中,也可以是存储至存储模块中。
如上所述,存储模块200可以用于存储神经网络运算的数据,例如该数据可以包括神经网络的拓扑结构、输入参数、权值、输出部分和等数据,对于不同的机器学习运算,可以包括不同类型的数据,本公开实施例不进行具体限定。由于运算模块100上缓存器的缓存容量有限,因此可以通过存储模块和运算模块的缓存器的数据交换执行数据的存储、读取和写入等操作。
本公开实施例中,模拟器可以模拟主运算单元101与从运算单元102之间的双向的数据通路,从主运算单元301到从运算单元302方向的通路用来传输输入神经元,从从运算单元102到主运算单元101方向的通路用于传输输出神经元部分和。以及模拟器还可以模拟主运算单元101与存储模块200之间的双向数据通路,其中从存储模块200到主运算单元101方向的通路用来加载输入神经元,输入神经元索引,输出神经元部分和和权值索引,从主运算单元101到存储模块200方向的通路用来存储输出神经元部分和。以及模拟器还可以模拟从运算单元102与存储模块200之间的单向的数据通路,用于从存储模块200到从运算单元102方向的通路用来加载权值。
具体的,本公开实施例的控制模块300可以接收待执行的神经网络运算指令,该指令可以包括神经网络所需要执行的运算指令以及运算涉及的数据在存储模块200中的存储地址,控制模块300可以将接收的神经网络运算指令解析成多个运算子指令,例如可以通过指令解码的方式得到多个运算子指令,并对应的确定每个运算子指令所需要的数据的存储地址。
本公开实施例中的模拟器可以根据确定的多个运算子指令以及各运算子指令的执行顺序确定多个事件过程,该多个事件过程用于完成神经网络运算所涉及的多个运算子指令。其中,本公开实施例的事件过程中可以包括至少一个事件,且事件的类型可以为加载事件、运算事件、存储事件以及同步事件。
并且,每个事件都可以具有相应的描述符,描述符可以包括:类型、数据、时刻和时间等参数,其中类型描述符用于描述事件需要完成的操作,包括控制(如分支跳转)、访存(如Load/Store片外DDR或者Read/Write片上缓存)、运算(如矩阵、向量、标量、逻辑运算等),数据描述符用于描述事件涉及到的数据,包括数据地址、数据大小、数据类型等信息;时刻描述符用于描述事件出触发的时间点,时间描述符描述事件的执行时间,该执行时间可以通过性能分析(Profiling)或者建模(Modeling)的方式完成。
如上所述,事件可以包括加载事件、运算事件、存储事件和同步事件,下面依次简写为Load事件、Compute事件、Store事件和Synchronize事件。
Load事件是将涉及的数据从存储模块200加载到运算模块的缓存器中,数据可以包括输入神经元、输入神经元索引、输出部分和、权值和权值索引等。
Compute事件是通过运算模块完成神经网络的相应运算,神经网络运算包括矩阵运算、向量运算和标量运算。其中矩阵运算主要包括矩阵向量运算,这部分是神经网络的核心运算,卷积层、全连接层、LSTM(长短期记忆网络)层中大部分运算都是矩阵向量运算。向量运算包括向量内积、量逐元素相乘、向量逐元素相乘,神经网络中的池化层、BN(批归一化)层、LSTM层和LRN(局部响应归一化)层等都是涉及到向量运算。标量运算主要包括标量的四则运算。因此,Compute事件还能进一步划分矩阵运算事件(Matrix Compute)、向量运算事件(Vector Compute)和标量运算事件(Scalar Compute)。
Store事件是将运算模块100缓存的数据存储到存储模块200中。
Synchronize事件是一个同步事件。当出现Synchronize事件时,必须要保证Synchronize事件之前其他所有事件完成之后才能执行Synchronize事件之后的其他事件,也就是说Synchronize事件相当与一个同步信号,用来同步Synchronize事件之前的其他事件。
对于同步事件,本公开实施例可以根据各事件过程中所包括的各事件的执行时间来确定同步事件的时间。
结合上述过程,下面对本公开实施例的步骤S300进行详细说明,图4示出根据本公开实施例中模拟运算方法中步骤S300的流程图,其中,所述获得完成所述神经网络运算指令的运算时间包括:
S301:根据各所述事件过程中各事件的执行时间,确定每个事件过程的执行时间;
S302:根据每个事件过程的执行时间,获得完成所述神经网络运算指令的运算时间。
下面对模拟器各事件的执行时间的确定方式进行说明。
Load事件的执行时间跟数据量和存储模块的带宽有关,具体可以用如下方式进行计算tLoad=tstart+DataLoad/BandwidthLoad。其中tLoad是Load事件执行时间,tstart是存储模块的启动时间,DataLoad是Load事件涉及到的数据量(包括所有输入神经元,输入神经元索引,输出部分和,权值和权值索引),BandwidthLoad是Off-Chip Memory的Load带宽。
Compute事件的执行时间与运算量和运算单元数量有关,具体可以用如下方式进行计算tCompute=DataCompute/(FU*u%)。其中tCompute是Compute事件执行时间,DataCompute是Compute事件涉及的运算量,FU是运算模块中的运算单元的数量,u%是运算单元的利用率。神经网络的神经元稀疏度,权值稀疏度,网络拓扑结构(如卷积层的规模,全连接层的规模),数据阻塞等因素都会影响运算单元的利用率,因此运算单元的利用率是一个实时的值。我们采用建模的方法计算运算单元的利用率进行预测,例如对于神经网络的卷积运算,我们会实测多组不同网络规模配置和稀疏度配置下运算单元利用率,然后根据这些数据对运算单元利用率进行建模,最终获得运算单元利用率与网络配置和稀疏度的定量关系。值得注意的是Matrix Compute事件、Vector Compute事件和Scalar事件的执行时间都可以用上述公式进行计算。
Store事件的执行时间计算方法与Load时间类似,执行时间跟数据量和Off-ChipMemory带宽有关,具体可以用如下方式进行计算tStore=tstart+DataStore/BandwidthStore。其中tStore是Store事件执行事件,tstart是Off-chip Memory的启动时间,DataStore是事件涉及到的数据量(输出部分和),BandwidthStore是Off-Chip Memory的Store带宽。
如上述实施例,本公开实施例可以根据每个事件过程中包括的各事件,确定每个运行每个事件所需的时间,例如可以根据存储的数据的数据量得到存储事件的时间,或者根据运算的数据以及运算的类型得到运算事件的时间,根据每个事件过程中各事件中最大的执行时间,确定成该事件过程的执行时间。并进一步将每个事件过程的执行时间之和确定为完成神经网络运算指令的运算时间。
同时,在确定了每个事件过程中各事件的执行时间后,即可以将每个事件过程中执行时间最长的事件的执行时间作为该事件过程的同步时间,从而可以保证每个事件都完成后才执行下一个事件过程。
另外,本公开实施例中每个事件过程中的各事件是没有依赖关系的事件,其中,所述各事件不存在依赖关系包括:各事件的运算所应用的存储模块中的数据不存在重叠关系。例如,Load/Store事件与Compute事件之间没有依赖关系;Load事件与Store事件之间没有依赖关系;Matrix Compute事件、Vector Compute事件和Scalar事件之间没有依赖关系。没有依赖关系的事件可以同时执行,本公开实施例可以利用Synchronize事件来同步没有依赖关系的事件。
下面对本公开实施例的模拟器模拟运算模块和存储模块执行各事件过程的过程进行说明。图5示出根据本公开实施例中模拟运算方法中步骤S300的流程图,其中,所述获得完成所述神经网络运算指令的运算结果包括:
S3001:执行确定的各所述事件过程;
S3002:根据各事件过程的运算结果得到所述神经网络运算的运算结果。
本公开实施例可以根据确定的事件过程的顺序执行各事件过程,同时可以存储各运算子指令对应的运算结果,从而获得神经网络运算指令对应的运算结果。
图6示出根据本公开实施例的模拟运算方法过程示意图。本公开实施例可以利用循环分块的策略将神经网络运算分割成为多个子运算操作,即可以对应的解析出多个运算子指令,并且每一个子运算对应的数据能够被完整加载到运算模块的缓存器中进行缓存中。其中,神经网络某一层的运算被切分成为N个子运算,同时N个子运算对应N个数据块。如图6示出了模拟执行的过程,并同时统计运行时间的过程。神经网络的执行过程被分成为N+2个Step(事件过程),每两个Step之间用Synchronize事件进行分割,最终神经网络的执行时间是这N+2个Step(事件过程)的执行时间的总和。
其中,本公开实施例根据运算子指令确定的N+2个事件过程中的第一个事件过程包括第一加载事件和第一同步事件,第二个事件过程包括第二加载事件、第一运算事件和第二同步事件,第三个事件过程包括第三加载事件、第二运算事件、第一存储事件和第三同步时间,以及第i事件过程包括第i加载事件、第i-1运算事件、第i-2存储事件以及第i同步事件,第N+1个事件过程包括第N运算事件、第N-1存储事件以及第N+1同步事件,第N+2个事件过程包括第N存储事件和第N+2同步事件,i为大于3且小于或者等于N的整数,
其中,第j加载事件用于从所述存储模块加载第j运算子指令的运算数据到运算模块,第j存储事件用于缓存所述运算模块得到的第j运算子指令的运算结果,并将第N运算子指令的运算结果存储至所述存储模块,第j运算事件用于执行第j运算子指令的运算操作,以及第k同步事件用于对第k个事件过程中的各事件进行同步,其中,j为大于或者等于1且小于或者等于N的整数,k为大于或者等于1且小于或者等于N+2的正整数。
下面结合图6对本公开实施例的运算过程进行说明。
Step 1:模拟控制模块300控制触发Load 1事件。即控制运算模块从存储模块200中读取第一个子运算对应的数据,发送的控制指令中包括第一个子运算对应的数据存储地址,运算模块根据接收的执行从相应的存储地址中缓存数据,其中确定该第一个事件过程中同步事件的时间为第一加载事件的执行时间。即Load 1事件将第一个子运算对应的数据从存储模块加载到主运算单元101和从运算单元的SRAM(缓存器)中。此时由于运算模块100的缓存器中没有数据,主运算单元101和从运算单元102无法进行计算。在第一个事件过程中使用第一同步事件进行同步。Step 1的执行时间就是Load 1事件执行时间。
Step 2:模拟控制模块触发Load 2事件和Compute 1事件。即控制运算模块从存储模块200中读取第二个子运算对应的数据,发送的控制指令中包括第二个子运算对应的数据存储地址,运算模块根据接收的指令执行从相应的存储地址中缓存数据,并且,运算第一运算子指令对应的运算,其中确定该第二个事件过程中同步事件的时间为第二加载事件的执行时间和第一运算事件的时间中较长的一个。其中Load 2事件是将第二个子运算对应的数据从存储模块加载到主运算模和从运算模块的SRAM中。此时由于主运算模块和子运算模块的片上缓存已经存储了第一个子运算对应的数据(经过Step 1的Load 1事件),所以触发运算模块执行Compute 1事件,此时主运算模块和从运算模块可以完成第一个子运算。值得注意的是,Compute 1事件包括Matrix Compute1事件,Vector Compute 1事件和ScalarCompute 1事件这三个没有依赖关系的事件。最终Step 2的执行时间取决于Load 1,MatrixCompute 1,Vector Compute1和Scalar Compute 1这四个事件的执行时间的最大值。在图的示例中,Step2的执行事件取决于执行最慢的Matrix Compute1事件。为了表示方便,我们将Compute i事件执行时间定义为Matrix Compute i,Vector Compute i和ScalarCompute i这三个事件中执行时间的最大值。
Step 3:模拟控制模块触发Load 3事件、Compute 2事件和Store 1事件。即控制运算模块从存储模块200中读取第三个子运算对应的数据,发送的控制指令中包括第三个子运算对应的数据存储地址,运算模块根据接收的指令执行从相应的存储地址中缓存数据,并且,运算第二运算子指令对应的运算以及将第一运算子指令的执行结果缓存到缓存器中或者传输至存储模块进行存储,其中确定该第三个事件过程中同步事件的时间为第三加载事件的执行时间、第二运算事件的时间以及第一存储事件的执行时间中较长的一个。其中Load 3事件将第三个子运算对应的数据从存储模块加载到主运算单元和从运算单元的SRAM中。Compute 2事件为通过主运算模块和从运算模块执行第二个子运算。此时,由于主运算模块和从运算模块中存储了第一个子运算对应的结果(经过Step 2的Compute 1事件),此时还可以触发Store 1事件,将第一个子运算的运算结果存储到存储模块中。最终Step 3的执行时间是Load 3,Compute2和Store 1这三个事件执行时间的最大值。
以此类推,Step i+1:模拟控制模块可以触发Load i+1事件、Compute i事件和Store i-1事件,控制模块300可以控制运算模块从存储模块加载第i+1子运算所需的数据,并运算第i子运算以及将第i-1子运算的运算结果存储至存储模块中。即分别将第i+1个子运算对应的数据从存储模块加载到片上缓存,计算第i个子运算,将第i-1个数据块从片上缓存存储到存储模块中。Step i+1的同步事件的同步时间是Load i+1、Compute i和Storei-1这三个事件执行时间的最大值。
Step N:模拟控制模块触发Load N事件、compute N-1事件和Store N-2事件。控制模块300可以控制运算模块从存储模块加载第N子运算所需的数据,并运算第N-1子运算以及将第N-2子运算的运算结果存储至存储模块中。即分别将第N个子运算对应的数据从存储模块加载到片上缓存,计算第N-1个子运算,将第N-2个数据块从片上缓存存储到Off-chipMemory中。从Step1到Step N,可以完成将神经网络的N个子运算涉及的数据加载到片上缓存。第N同步事件的同步时间为Load N事件、compute N-1事件和Store N-2事件中执行时间较长的一个。
Step N+1:模拟控制模块触发Compute N事件和Store N-1事件。控制模块300可以控制运算模块运算第N子运算以及将第N-1子运算的运算结果存储至存储模块中。即分别计算第N个子运算,将第N-1个数据块从片上缓存存储到存储模块。从Step2到Step N+1完成了神经网络的N个子运算的计算任务。第N+1同步事件的同步时间为Compute N事件和StoreN-1事件中执行时间较长的一个。
Step N+2:模拟控制模块触发Store N事件将第N个子运算的计算结果从片上缓存存储到存储模块。即控制模块300可以控制运算模块将第N子运算的运算结果存储至存储模块中。其中,从Step 3到N+2可以将神经网络N个子运算的计算结果存储到存储模块。至此完成了神经网络的所有运算。第N+2同步事件的同步时间为Store N事件的执行时间。
通过上述配置,本公开实施例可以基于事件触发的形式实现神经网络的运算的模拟过程,能够快速对神经网络运算进行模拟运行。
综上所述,本公开实施例能够根据待执行的神经网络运算形成匹配的多个事件过程,按照事件过程的顺序执行各事件,从而有序的执行各运算,而且可以基于事件触发的形式执行运算过程,能够快速对神经网络运算进行性能模拟。其中以事件为单位进行模拟,事件通常为用户自定义事件,每一个事件会触发一次模拟操作,能够有效的执行神经网络运算过程并且能够得到各个过程的结果,方便对模拟执行过程进行分析。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
此外,本公开还提供了模拟器、电子设备、机器学习芯片以及计算机可读存储介质、程序,上述均可用来实现本公开提供的任一种模拟运算方法,相应技术方案和描述和参见方法部分的相应记载,不再赘述。
本公开实施例提供了一种模拟器,其包括:处理器,其用于执行如第一方面中任意一项所述的方法。
本公开实施例还提供了一种机器学习芯片,所述机器学习芯片包括用于执行如第一方面中任意一项所述的方法。
在一些可能的实施方式中,本公开实施例还提供了一种芯片封装结构,其包括了上述芯片。
在一些可能的实施方式中,本公开实施例还提供了一种板卡,其包括了上述芯片封装结构板卡除了包括上述芯片以外,还可以包括其他的配套部件,该配套部件包括但不限于:存储器件、接口装置和控制器件。
所述存储器件与所述芯片封装结构内的芯片通过总线连接,用于存储数据。所述存储器件可以包括多组存储单元。每一组所述存储单元与所述芯片通过总线连接。可以理解,每一组所述存储单元可以是DDR SDRAM(英文:Double Data Rate SDRAM,双倍速率同步动态随机存储器)。
DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,所述存储装置可以包括4组所述存储单元。每一组所述存储单元可以包括多个DDR4颗粒(芯片)。在一个实施例中,所述芯片内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。可以理解,当每一组所述存储单元中采用DDR4-3200颗粒时,数据传输的理论带宽可达到25600MB/s。
在一个实施例中,每一组所述存储单元包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在所述芯片中设置控制DDR的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。
所述接口装置与所述芯片封装结构内的芯片电连接。所述接口装置用于实现所述芯片与外部设备(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置可以为标准PCIE接口。比如,待处理的数据由服务器通过标准PCIE接口传递至所述芯片,实现数据转移。优选的,当采用PCIE 3.0X 16接口传输时,理论带宽可达到16000MB/s。在另一个实施例中,所述接口装置还可以是其他的接口,本申请并不限制上述其他的接口的具体表现形式,所述接口单元能够实现转接功能即可。另外,所述芯片的计算结果仍由所述接口装置传送回外部设备(例如服务器)。
所述控制器件与所述芯片电连接。所述控制器件用于对所述芯片的状态进行监控。具体的,所述芯片与所述控制器件可以通过SPI接口电连接。所述控制器件可以包括单片机(Micro Controller Unit,MCU)。如所述芯片可以包括多个处理芯片、多个处理核或多个处理电路,可以带动多个负载。因此,所述芯片可以处于多负载和轻负载等不同的工作状态。通过所述控制装置可以实现对所述芯片中多个处理芯片、多个处理和或多个处理电路的工作状态的调控。
在一些实施例里,还提供了一种电子设备,其包括了上述板卡。
电子设备包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
在一些实施例里,还提供了一种计算机可读存储介质,所述存储介质中存储有计算机程序指令,所述计算机程序指令被处理器执行时实现如第一方面中任意一项所述的方法。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (11)
1.一种模拟运算方法,其用于模拟执行神经网络运算,其特征在于,包括:
接收并存储运算数据,所述运算数据包括神经网络运算指令以及用于执行神经网络运算指令的数据;
从所述神经网络运算指令中解析出多个运算子指令,并确定用于执行该多个运算子指令的多个事件过程,每个所述事件过程包括:加载事件、运算事件、存储事件和同步事件中的至少一种,每个所述事件过程中包括的事件之间不存在依赖关系;
基于确定的各事件过程,获得完成所述神经网络运算指令的运算时间和运算结果中的至少一种;
所述确定用于完成该多个运算子指令的多个事件过程,包括下述至少一种:
根据所述运算子指令的数量,确定所述事件过程的数量;
根据各所述运算子指令的执行顺序,确定各所述事件过程以及各所述事件过程的执行顺序;
所述根据所述运算子指令的数量,确定所述事件过程的数量,包括:
在从所述神经网络运算指令划中解析出N个运算子指令时,确定所述事件过程的数量为N+2,其中,N为大于1的正整数;
所述根据各所述运算子指令的执行顺序,确定各所述事件过程以及各所述事件过程的执行顺序,包括:
确定第一个事件过程,所述第一个事件过程包括第一加载事件;
确定第二个事件过程,所述第二个事件过程包括第二加载事件和第一运算事件;
确定第三个事件过程,所述第三个事件过程包括第三加载事件、第二运算事件和第一存储事件;
确定第i个事件过程,所述第i个事件过程包括第i加载事件、第i-1运算事件和第i-2存储事件;
确定第N+1个事件过程,所述第N+1个事件过程包括第N运算事件和第N-1存储事件;
确定第N+2个事件过程,所述第N+2个事件过程包括第N存储事件,其中,i为大于3且小于或者等于N的整数,N为运算子指令的数量,并为大于1的正整数;
其中,第j加载事件用于加载第j运算子指令的运算数据,第j存储事件用于存储第j运算子指令的运算结果,第j运算事件用于执行第j运算子指令的运算操作,j为大于0小于或等于N的正整数。
2.根据权利要求1所述的方法,其特征在于,所述从所述神经网络运算指令中解析出多个运算子指令,包括:
对接收的所述神经网络运算指令执行解码操作,得到所述多个运算子指令。
3.根据权利要求1所述的方法,其特征在于,所述根据各所述运算子指令的执行顺序,确定各所述事件过程以及各所述事件过程的执行顺序,包括:
每个所述事件过程还包括同步事件,根据每个事件过程中的各事件的执行时间确定各事件过程的同步事件的同步时间。
4.根据权利要求1所述的方法,其特征在于,所述基于确定的各事件过程,获得完成所述神经网络运算指令的运算时间和运算结果中的至少一种,包括:
根据各所述事件过程中各事件的执行时间,确定每个事件过程的执行时间;
根据每个事件过程的执行时间,获得完成所述神经网络运算指令的运算时间。
5.根据权利要求1所述的方法,其特征在于,所述基于确定的各事件过程,获得完成所述神经网络运算指令的运算时间和运算结果中的至少一种,包括:
执行确定的各所述事件过程;
根据各事件过程的运算结果得到所述神经网络运算的运算结果。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在执行各所述事件过程时,根据所述事件过程中的运算事件对应的运算子指令的运算类型确定执行该运算事件的运算程序;
根据确定的运算程序执行对应的所述运算事件。
7.根据权利要求6所述的方法,其特征在于,所述根据所述事件过程中的运算事件的运算类型确定执行该运算事件的运算程序,包括:
在所述运算事件对应的运算子指令为第一类运算时,利用第一运算程序执行该运算事件;
在所述运算事件对应的运算子指令为第二类运算时,利用第一运算程序执行该运算事件;
所述第一类运算包括向量运算、标量运算和非线性运算中的至少一种,所述第二类运算包括矩阵标量运算。
8.一种模拟器,其特征在于,包括:
处理器,其用于执行如权利要求1-7中任意一项所述的方法。
9.一种机器学习芯片,其特征在于,所述机器学习芯片用于执行如权利要求1-7中任意一项所述的方法。
10.一种电子设备,其特征在于,所述电子设备包括如所述权利要求9所述的芯片。
11.一种计算机可读存储介质,所述存储介质中存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现权利要求1至7中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910097439.3A CN111506384B (zh) | 2019-01-31 | 2019-01-31 | 模拟运算方法和模拟器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910097439.3A CN111506384B (zh) | 2019-01-31 | 2019-01-31 | 模拟运算方法和模拟器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111506384A CN111506384A (zh) | 2020-08-07 |
CN111506384B true CN111506384B (zh) | 2022-12-09 |
Family
ID=71875632
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910097439.3A Active CN111506384B (zh) | 2019-01-31 | 2019-01-31 | 模拟运算方法和模拟器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111506384B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104205064A (zh) * | 2012-03-16 | 2014-12-10 | 国际商业机器公司 | 将程序事件记录事件向运行时间检测事件的变换 |
CN104335232A (zh) * | 2012-05-30 | 2015-02-04 | 高通股份有限公司 | 连续时间尖峰神经网络基于事件的模拟 |
CN108369660A (zh) * | 2015-07-13 | 2018-08-03 | 索邦大学 | 用事件间的时间间隔来表示数值的数据处理装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10956821B2 (en) * | 2016-11-29 | 2021-03-23 | International Business Machines Corporation | Accurate temporal event predictive modeling |
-
2019
- 2019-01-31 CN CN201910097439.3A patent/CN111506384B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104205064A (zh) * | 2012-03-16 | 2014-12-10 | 国际商业机器公司 | 将程序事件记录事件向运行时间检测事件的变换 |
CN104335232A (zh) * | 2012-05-30 | 2015-02-04 | 高通股份有限公司 | 连续时间尖峰神经网络基于事件的模拟 |
CN108369660A (zh) * | 2015-07-13 | 2018-08-03 | 索邦大学 | 用事件间的时间间隔来表示数值的数据处理装置 |
Non-Patent Citations (2)
Title |
---|
支持线程级猜测的存储体系结构设计;赖鑫等;《计算机工程》;20121220(第24期);全文 * |
数据并行计算机体系结构建模;师小丽等;《计算机工程》;20090620(第12期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111506384A (zh) | 2020-08-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104915322B (zh) | 一种卷积神经网络硬件加速方法 | |
JP7078758B2 (ja) | 機械学習モデルを改良して局所性を改善させること | |
CN109284825B (zh) | 用于执行lstm运算的装置和方法 | |
US20100198574A1 (en) | Programmer View Timing Model For Performance Modeling And Virtual Prototyping | |
CN111105023B (zh) | 数据流重构方法及可重构数据流处理器 | |
JP2023506343A (ja) | 共有スクラッチパッドメモリを用いたベクトル縮小 | |
US8711160B1 (en) | System and method for efficient resource management of a signal flow programmed digital signal processor code | |
US20210350230A1 (en) | Data dividing method and processor for convolution operation | |
CN114626516A (zh) | 一种基于对数块浮点量化的神经网络加速*** | |
Cho et al. | FARNN: FPGA-GPU hybrid acceleration platform for recurrent neural networks | |
Galicia et al. | Neurovp: A system-level virtual platform for integration of neuromorphic accelerators | |
US7110934B2 (en) | Analysis of the performance of a portion of a data processing system | |
TW202131235A (zh) | 適用於神經網路運算的處理器 | |
CN111506384B (zh) | 模拟运算方法和模拟器 | |
Diamantopoulos et al. | A system-level transprecision FPGA accelerator for BLSTM using on-chip memory reshaping | |
Hoefer et al. | SiFI-AI: A Fast and Flexible RTL Fault Simulation Framework Tailored for AI Models and Accelerators | |
Ventre et al. | Extended Petri Net Processor and Threads Quantity Determination Algorithm for Embedded Systems | |
CN111143208B (zh) | 基于处理器技术辅助fpga实现ai算法的验证方法 | |
Misra et al. | Efficient HW and SW Interface Design for Convolutional Neural Networks Using High-Level Synthesis and TensorFlow | |
CN108846248B (zh) | 一种应用建模及性能预测方法 | |
CN111950219B (zh) | 用于实现模拟器的方法、装置、设备以及介质 | |
CN114021733A (zh) | 模型训练优化方法、装置、计算机设备及存储介质 | |
Yi et al. | Hardware-software codesign of a CNN accelerator | |
Bahnsen et al. | Effect analysis of low-level hardware faults on neural networks using emulated inference | |
CN111832714A (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 |