发明内容
本发明实施例提供一种数据流操作方法、处理器和计算机存储介质,能有效挖掘和利用硬件的并行性,提升数据流的操作性能。
第一方面,本发明实施例提供了一种数据流操作方法,所述方法应用于处理器,所述处理器包括第一功能单元、第二功能单元及中央控制单元,所述方法包括:
所述中央控制单元发送第一数据流指令给所述第一功能单元,并发送第二数据流指令给所述第二功能单元;
所述第一功能单元根据接收到的所述第一数据流指令执行第一数据流操作,所述第二功能单元根据接收到的所述第二数据流指令执行第二数据流操作;
当所述第二数据流指令包括用于指示所述第二功能单元执行所述第二数据流操作至第一预设位置,需要接收所述第一功能单元在执行所述第一数据流操作中产生的第一输出数据的指令时,所述第一功能单元与所述第二功能单元建立依赖关系并达成同步协议;
所述第一功能单元在所述第二功能单元执行所述第二数据流操作至所述第一预设位置时,输出所述第一输出数据给所述第二功能单元;以及
所述第二功能单元对所述第一输出数据进行所述第二数据流操作。
在一种实现方式中,所述处理器还包括第三功能单元,所述方法还包括:
所述中央控制单元发送第三数据流指令给所述第三功能单元;
所述第三功能单元根据接收到的所述第三数据流指令执行第三数据流操作;以及
当所述第二数据流指令包括用于指示所述第二功能单元执行所述第二数据流操作至第二预设位置,需要接收所述第三功能单元在执行所述第三数据流操作中产生的第三输出数据的指令时,所述第二功能单元与所述第三功能单元建立依赖关系并达成同步协议;
所述第三功能单元在所述第二功能单元执行所述第二数据流操作至所述第二预设位置时,输出所述第三输出数据给所述第二功能单元;以及
所述第二功能单元对所述第三输出数据进行所述第二数据流操作。
在一种实现方式中,所述建立依赖关系包括:
判断所述第一功能单元是否将执行所述第一数据流操作中产生的第一输出数据输出给所述第二功能单元执行所述第二数据流操作,以及所述第二功能单元是否将执行所述第二数据流操作中产生的第二输出数据输出给所述第一功能单元执行所述第一数据流操作;
当所述第一功能单元将执行所述第一数据流操作中产生的第一输出数据输出给所述第二功能单元执行所述第二数据流操作时,建立所述第一功能单元与所述第二功能单元的第一依赖关系,且所述第一功能单元为所述第二功能单元的上游功能单元;以及
当所述第二功能单元将执行所述第二数据流操作中产生的第二输出数据输出给所述第一功能单元执行所述第一数据流操作时,建立所述第一功能单元与所述第二功能单元的第二依赖关系,且所述第一功能单元为所述第二功能单元的下游功能单元。
在一种实现方式中,所述达成同步协议包括:
所述第一功能单元与所述第二功能单元通过硬件握手或软件握手达成同步协议;
当所述第二功能单元相对于所述第二功能单元的上游功能单元运行速度过快时,所述第二功能单元将暂停;以及
当所述第二功能单元相对于所述第二功能单元的下游功能单元运行速度过慢时,所述第二功能单元的下游功能单元将暂停。
在一种实现方式中,所述方法还包括:
当所述第二功能单元接收到所述第一输出数据时,解除所述第一功能单元与所述第二功能单元的依赖关系以及同步协议。
在一种实现方式中,所述方法还包括:
所述中央控制单元通过动态地修改所述第一数据流指令与所述第二数据流指令来改变所述第一功能单元与所述第二功能单元的依赖关系。
在一种实现方式中,所述处理器还包括第一存储单元、第四功能单元、第二存储单元和第五功能单元,所述方法还包括:
所述第一存储单元存储从所述第一功能单元外输入的第一输入参数;
所述第四功能单元将所述第一输入参数从所述第一存储单元写入所述第一功能单元的输入参数缓冲器;
所述第二存储单元存储从所述第一功能单元外输入的第一输入数据;
所述第五功能单元将所述第一输入数据从所述第二存储单元写入所述第一功能单元的输入数据缓冲器;
所述第一功能单元根据接收到的所述第一数据流指令执行第一数据流操作,包括:
所述第一功能单元根据接收到的所述第一数据流指令在所述输入参数缓冲器中获取所述第一输入参数,并在所述输入数据缓冲器中获取所述第一输入数据;
所述第一功能单元对所述第一输入参数和所述第一输入数据进行所述第一数据流操作。
在一种实现方式中,所述处理器还包括第六功能单元、第七功能单元、第八功能单元和第九功能单元,所述方法还包括:
所述第六功能单元从外部存储单元将所述第一输入数据发送至所述第二存储单元;
所述第七功能单元从外部存储单元将所述第一输入参数发送至所述第一存储单元;
所述第八功能单元将所述第一功能单元输出的数据发送至所述第二存储单元;
所述第九功能单元将所述第一功能单元输出的数据从所述第二存储单元输出至外部存储单元。
第二方面,本发明实施例还提供了一种处理器,该处理器包括用于执行第一方面所述的数据流操作方法的单元。
在一种实现方式中,处理器包括第一功能单元、第二功能单元以及中央控制单元;
所述中央控制单元,用于发送第一数据流指令给所述第一功能单元,并发送第二数据流指令给所述第二功能单元;
所述第一功能单元,用于根据接收到的所述第一数据流指令执行第一数据流操作;
所述第二功能单元,用于根据接收到的所述第二数据流指令执行第二数据流操作;
所述第一功能单元,还用于当所述第二数据流指令包括用于指示所述第二功能单元执行所述第二数据流操作至第一预设位置,需要接收所述第一功能单元在执行所述第一数据流操作中产生的第一输出数据的指令时,与所述第二功能单元建立依赖关系并达成同步协议;
所述第一功能单元,还用于在所述第二功能单元执行所述第二数据流操作至所述第一预设位置时,输出所述第一输出数据给所述第二功能单元;以及
所述第二功能单元,还用于对所述第一输出数据进行所述第二数据流操作。
在一种实现方式中,在所述处理器还包括第三功能单元的条件下,所述中央控制单元,还用于发送第三数据流指令给所述第三功能单元;
所述第三功能单元,用于根据接收到的所述第三数据流指令执行第三数据流操作;以及
所述第二功能单元,还用于当所述第二数据流指令包括用于指示所述第二功能单元执行所述第二数据流操作至第二预设位置,需要接收所述第三功能单元在执行所述第三数据流操作中产生的第三输出数据的指令时,与所述第三功能单元建立依赖关系并达成同步协议;
所述第三功能单元,还用于在所述第二功能单元执行所述第二数据流操作至所述第二预设位置时,输出所述第三输出数据给所述第二功能单元;以及
所述第二功能单元,还用于对所述第三输出数据进行所述第二数据流操作。
在一种实现方式中,所述第一功能单元与所述第二功能单元建立依赖关系,包括:
处理器判断所述第一功能单元是否将执行所述第一数据流操作中产生的第一输出数据输出给所述第二功能单元执行所述第二数据流操作,以及所述第二功能单元是否将执行所述第二数据流操作中产生的第二输出数据输出给所述第一功能单元执行所述第一数据流操作;
当所述第一功能单元将执行所述第一数据流操作中产生的第一输出数据输出给所述第二功能单元执行所述第二数据流操作时,处理器建立所述第一功能单元与所述第二功能单元的第一依赖关系,且所述第一功能单元为所述第二功能单元的上游功能单元;以及
当所述第二功能单元将执行所述第二数据流操作中产生的第二输出数据输出给所述第一功能单元执行所述第一数据流操作时,处理器建立所述第一功能单元与所述第二功能单元的第二依赖关系,且所述第一功能单元为所述第二功能单元的下游功能单元。
在一种实现方式中,所述第一功能单元与所述第二功能单元达成同步协议,包括:
所述第一功能单元与所述第二功能单元通过硬件握手或软件握手达成同步协议;
当所述第二功能单元相对于所述第二功能单元的上游功能单元运行速度过快时,所述第二功能单元将暂停;以及
当所述第二功能单元相对于所述第二功能单元的下游功能单元运行速度过慢时,所述第二功能单元的下游功能单元将暂停。
在一种实现方式中,当所述第二功能单元接收到所述第一输出数据时,处理器解除所述第一功能单元与所述第二功能单元的依赖关系以及同步协议。
在一种实现方式中,所述中央控制单元,还用于通过动态地修改所述第一数据流指令与所述第二数据流指令来改变所述第一功能单元与所述第二功能单元的依赖关系。
在一种实现方式中,在所述处理器还包括第一存储单元、第四功能单元、第二存储单元和第五功能单元的条件下,所述第一存储单元,用于存储从所述第一功能单元外输入的第一输入参数;
所述第四功能单元,用于将所述第一输入参数从所述第一存储单元写入所述第一功能单元的输入参数缓冲器;
所述第二存储单元,用于存储从所述第一功能单元外输入的第一输入数据;
所述第五功能单元,用于将所述第一输入数据从所述第二存储单元写入所述第一功能单元的输入数据缓冲器;
所述第一功能单元根据接收到的所述第一数据流指令执行第一数据流操作,包括:
所述第一功能单元根据接收到的所述第一数据流指令在所述输入参数缓冲器中获取所述第一输入参数,并在所述输入数据缓冲器中获取所述第一输入数据;
所述第一功能单元对所述第一输入参数和所述第一输入数据进行所述第一数据流操作。
在一种实现方式中,在所述处理器还包括第六功能单元、第七功能单元、第八功能单元和第九功能单元的条件下,所述第六功能单元,用于从外部存储单元将所述第一输入数据发送至所述第二存储单元;
所述第七功能单元,用于从外部存储单元将所述第一输入参数发送至所述第一存储单元;
所述第八功能单元,用于将所述第一功能单元输出的数据发送至所述第二存储单元;
所述第九功能单元,用于将所述第一功能单元输出的数据从所述第二存储单元输出至外部存储单元。
第三方面,本发明实施例还提供了一种计算机存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行第一方面所述的数据流操作方法。
实施本发明实施例,具有如下有益效果:
在本发明实施例中,所述中央控制单元发送第一数据流指令给所述第一功能单元,并发送第二数据流指令给所述第二功能单元;所述第一功能单元根据接收到的所述第一数据流指令执行第一数据流操作,所述第二功能单元根据接收到的所述第二数据流指令执行第二数据流操作;当第二数据流指令包括用于指示第二功能单元执行第二数据流操作至第一预设位置,需要接收第一功能单元在执行第一数据流操作中产生的第一输出数据的指令时,第一功能单元与第二功能单元建立依赖关系并达成同步协议,第一功能单元在第二功能单元执行第二数据流操作至第一预设位置时,输出第一输出数据给第二功能单元;第二功能单元对第一输出数据进行第二数据流操作。由此可见,第一功能单元与第二功能单元在并行处理数据流指令的同时,可以根据数据流指令建立依赖关系,因此,可有效挖掘和利用硬件的并行性,并提高数据流的操作性能。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参见图1,图1示出了本实施例提供的处理器的示意图。所述处理器包括多个功能单元(Functional Unit,FU)和中央控制单元(Control Unit,CU)。多个FU之间松耦合,相互协作,且各个FU可编程。另外,CU可编程。在一个实施例中,所述处理器为松耦数据流功能(Loosely-coupled Data-Streaming Functional,LSF)架构的处理器,所述多个FU包括多个处理元件(Processing Element,PE)200,例如PE0~PEn,其中n为正整数。在其它实施例中,所述处理器可以为其它架构的处理器,所述多个FU还可以包括其它元件,例如直接存储器访问(Direct Memory Access,DMA)单元等。
多个FU之间松耦合指的是:多个FU可以分别执行存在依赖关系的数据流。不同数据流操作之间可能会存在相互依赖的关系,也就是说,一个数据流操作可能需要或依赖来自于另一个数据流操作的数据,当一个FU的数据流操作需要另一FU的数据流操作时,我们把这两个FU称为“相依赖FU”。两个FU之间的相依赖关系是个动态的关系,这个关系是针对某个数据流操作而言,例如,FU A有两个可能的下游FU:FU B和FU C,在某个数据流操作里,FU A和FU B存在着依赖关系,等这个数据流流操作结束,下一个数据流操作启动时,FU A只和FU C有依赖关系,而和FU B不再有任何依赖关系。下游FU也可以称为消费者FU,即该FU的数据流操作需要或依赖来自于另一个数据流操作的数据。上游FU也可以称为生产者FU,即通过该FU的数据流操作提供给下游FU的数据流操作所需或所依赖的数据。
传统的数据流操作方法为:在第一FU为上游FU,第二FU为下游FU的情况下,先通过第一FU对第一数据流处理并生成第一输出数据,第一FU将第一输出数据发送给第二FU之后,第二FU才开始对第二数据流进行操作,由于,在第一FU对第一数据流处理时,第二FU一直处于停止状态,因此,无法最大限度地挖掘和利用硬件可并行性,导致数据流操作的性能较低。
针对现有技术中存在的上述问题,本实施例提供了一种数据流操作方法,CU发送第一数据流指令给所述第一FU,并发送第二数据流指令给所述第二FU;所述第一FU根据接收到的所述第一数据流指令执行第一数据流操作,所述第二FU根据接收到的所述第二数据流指令执行第二数据流操作;当第二数据流指令包括用于指示第二FU执行第二数据流操作至第一预设位置,需要接收第一FU在执行第一数据流操作中产生的第一输出数据的指令时,第一FU与第二FU建立依赖关系并达成同步协议,第一FU在第二FU执行第二数据流操作至第一预设位置时,输出第一输出数据给第二FU;第二FU对第一输出数据进行第二数据流操作。由此可见,第一FU与第二FU在并行处理数据流指令的同时,可以根据数据流指令建立依赖关系,因此,可有效挖掘和利用硬件的并行性,并提高数据流的操作性能。
可选的,各个FU还可以实现计算操作,例如整点计算、浮点计算或者定点计算等。
可选的,两个相依赖FU在进行数据流操作之前,可以采用预先配置的握手机制或者握手协议。其中,握手机制可以包括硬件机制或者软件机制。握手协议可以包括硬件协议或者软件协议。
可选的,各个FU的程序可以集中存储在一个中央程序内存中,CU可以从中央程序内存中获取各个FU的程序,将各个FU的程序广播或者分发给相应的FU去执行。
可选的,CU可以选择性地动态生成或修改一个或者多个FU的指令或者程序,并将这些修改后的指令或者程序发送给相应的FU执行。其中,这种基于动态环境来修改FU程序的功能,可以大大缩减FU程序的存储空间。因为FU程序不同版本之间的差别很小,CU可以按照动态参数对FU的程序做些小修改。
此外,每个FU有自己的指令缓冲器IQ,指令解码和控制逻辑等。每个FU可以执行一个独立的卷积神经网络(Convolutional Neural Network,CNN)计算。或者,多个FU也可以组合在一起以共同执行一个CNN计算。
可选的,在某些应用场景,FU可以被设置为专门进行数据流操作。在这种场景下,FU程序大多是由数据流指令组成。每一个数据流指令可以激活大量数据传输操作。例如在CNN加速应用场景里,一个数据流指令可以激活数百万个数据传输操作。
与通用中央处理器(Central Processing Unit/Processor,CPU)或数字信号处理器(Digital Signal Processing,DSP)相比,本实施例中的处理器可以大大缩减程序存储空间,以及与指令提取和指令解码有关操作的功耗。
从而,本实施例中的处理器是通过具有多个松散耦合、协作式以及可编程的FU并行执行多个相依赖数据流和计算操作来实现的,即CU发送第一数据流指令给所述第一FU,并发送第二数据流指令给所述第二FU;所述第一FU根据接收到的所述第一数据流指令执行第一数据流操作,所述第二FU根据接收到的所述第二数据流指令执行第二数据流操作;当第二数据流指令包括用于指示第二FU执行第二数据流操作至第一预设位置,需要接收第一FU在执行第一数据流操作中产生的第一输出数据的指令时,第一FU与第二FU建立依赖关系并达成同步协议,第一FU在第二FU执行第二数据流操作至第一预设位置时,输出第一输出数据给第二FU;第二FU对第一输出数据进行第二数据流操作。由此可见,第一FU与第二FU在并行处理数据流指令的同时,可以根据数据流指令建立依赖关系,因此,可有效挖掘和利用硬件的并行性,并提高数据流的操作性能。
以图2所示的PE的示意图为例,PE包括:获取单元(11),被配置为从该PE外获取输入数据和输入参数;第一缓冲器(12),被配置为存储所述输入数据和输入参数;操作单元(13),被配置为基于所述输入数据和所示输入参数执行数据流操作,并生成输出数据。
进一步地,所述PE还包括:输出单元(14),被配置为将所述输出数据发送给第二存储器。
进一步地,所述获取单元(11)获取数据之前,还包括:所述操作单元(13)与上游功能单元进行协议协商,在协商成功时,触发所述获取单元(11)从所述上游功能单元中获取所述数据。
进一步地,第一缓冲器12包括用于存储输入数据的输入数据缓冲器121和用于存储输入参数的输入参数缓冲器(122),其中该处理器还包括:第一存储器(即参数存储器WM)201,被配置为存储从外部存储器输入的输入参数;第二存储器(即数据存储器DM)202,被配置为存储从外部存储器输入的输入数据;第一直接存储器访问(Direct Memory Access,DMA)单元(即EWDMA)203,被配置为将输入参数从第一存储器201写入第一缓冲器12的输入参数缓冲器122;以及第二DMA单元(即,EIDMA或EODMA)204,被配置为将输入数据从第二存储器202写入第一缓冲器11的输入数据缓冲器121。
其中,第二存储器202和第一存储器201为处理器内部的SRAM存储器,第一DMA单元和第二DMA单元为可编程的数据流功能单元(Functional Unit,FU)。需要说明的是,“外部存储器”是指本实施例所述的处理器外部的一些存储器,可以为片上SRAM或者片下DDR存储器。
进一步地,参考图1所示,处理器还包括:第三DMA单元205(外部输入数据DMA,即EIDMA),被配置为从外部存储器将所述输入数据发送至所述第二存储器202;第四DMA单元206(外部参数DMA,即EWDMA),被配置为从外部存储器将所述参数发送至所述第一存储器201;第五DMA单元208(输出DMA,即ODMA),被配置为将所述多个PE的输出单元中的输出数据发送至所述第二存储器202;以及第六DMA单元207(外部输出数据DMA,即EODMA),被配置为将所述输出数据从所述第二存储器输出至外部存储器。其中第二存储器202还进一步配置为存储所述第六DMA单元发送的输出数据。
其中第三DMA单元205、第四DMA单元206、第五DMA单元208和第六DMA单元207为可编程的功能单元(FU)。
具体地,参见图3所示,在一个实施例中,所述多个FU包括六个DMA(EWDMA,EIDMA,EODMA,WDMA,IDMA和ODMA)和三十二个PE,所述处理器还包括一个CU、一个DM、一个WM、一个PM。其中,CU用于协调和控制整个处理器的运行。DM用于存储输入数据,WM用于存储输入参数,PM用于存储程序,DM,WM和PM都是处理器内部的SRAM存储器。示例性的,通过处理器可以实现CNN加速处理。
具体的数据流操作的示例序列,参见图4所示。此外,下面所述的表1中示出了处理器中各个FU的功能:
表1
此外,参见图4所示,可选地,处理器还包括第三存储器209。其中,第三存储器209存储与处理器的操作相关的程序;中央控制单元210与第一DMA单元203、第二DMA单元204、第三DMA单元205、第四DMA单元206、第五DMA单元208以及第六DMA单元207连接,并且配置为执行以下操作:从第三存储器209接收指令;执行与中央控制单元210的操作相关的指令;以及将与第一DMA单元203、第二DMA单元204、第三DMA单元205、第四DMA单元206、第五DMA单元208和/或第六DMA单元207的操作相关的指令转发至第一DMA单元203、第二DMA单元204、第三DMA单元205、第四DMA单元206、第五DMA单元208和/或第六DMA单元207。
此外,图4示出了中央控制单元210的指令存储和发送方案的流程示意图,参考图4所示,在本实施例中,所有可编程的FU程序和可编程的CU程序都集中存储在第三存储器209中。这些程序包括发往中央控制单元210、32个PE和6个DMA单元(即:第一DMA单元203、第二DMA单元204、第三DMA单元205、第四DMA单元206、第五DMA单元208和第六DMA单元207)的指令。总共有八种指令类型。中央控制单元210指令存储和发送方案的具体流程如下:
首先,中央控制单元210从第三存储器209中读取这些指令并仅执行控制单元指令,然后在cu_ibus总线上广播所有其他指令;
其次,每个可编程FU都有一个指令队列(Instruction Queue,IQ)。所有可编程的FU不断监视cu_ibus,并且只将属于自己的指令加载到它们各自的IQ里;
最后,这些FU从它们的IQ中获取指令并按顺序执行。
从而,多个可编程FU的程序可以共同组成一个完整、协调、一致的程序,进而在本实施例所述处理器中实现CNN加速。
此外,图5示出了本公开实施例所述的处理器中的六个数据流走向的示意图。参考图5所示,在本实施例所述的处理器中有六个预定义的数据和参数流。在本实施例所述的处理器的工作中,所有数据和参数都是通过这六个预定义的流通过处理器。
在这六个数据流中,四个是数据流(用实线表示),另外两个是参数流,用虚线表示。
(a)四个数据流
i)第一数据流3,存储在外部存储器中的输入数据是通过第三DMA单元205(EIDMA)流入第二存储器202(DM);
ii)第二数据流4,存储在第二存储器202(DM)中的输入数据是通过第二DMA单元204(IDMA)传输到所有PE中,这是种一对多的广播,即:从第二DMA单元204(IDMA)广播到所有需要它的PE中;
iii)第三数据流5,存储在各个PE的第二缓冲器131(OBUF)中的数据是通过第五DMA单元208(ODMA)传输到第二存储器202中,这是种同步传输操作,也就是说,所有PE以锁步方式将自己的输出数据同步写回第二存储器202,且在每个周期中最多可以将224个数据写回第二存储器202;
iv)第四数据流6,存储在第二存储器202(DM)中的输出数据通过第六DMA单元207(EODMA)传输到外部存储器。
需要说明的是,存储在第二存储器202(DM)中的数据可以来自两个可能的来源:(1)第五DMA单元208将输出数据从PE传输到第二存储器202;(2)第三DMA单元205将外部存储器的数据传输到第二存储器202。
并且,存储在DM中的数据有两个可能的目的地:(1)第六DMA单元207可将它们写回到外部存储器,作为下一层的输入数据;(2)第二DMA单元204可以将它们读回多个PE里,作为下一层的输入数据。
(a)两个参数流
i)第一参数流1,存储在外部存储器中的参数是通过第四DMA单元(EWDMA)流入第一存储器201(WM)。
ii)第二参数流2,存储在第一存储器201(WM)中的参数是通过第一DMA单元203(WDMA)流入PE中的第一缓冲器11的参数数据缓冲器111(WBUF)。
此外,需要说明的是:当FU将数据(或参数)传送给另一FU时,前者称为生产者FU或上游FU,后者称为消费者FU或下游FU。这两个FU被称为相关FU,或通信FU。在两个通信FU之间,它们之间将会放置一个存储缓冲器。例如,
i)第一存储器201是第四DMA单元206(生产者FU)和第一DMA单元203(消费者FU)之间的存储缓冲器;
ii)第二存储器202同时是以下相关FU之间的存储缓冲器
(1)第三DMA单元205(生产者FU)和第二DMA单元204(消费者FU),
(2)第五DMA单元208(生产者FU)和第六DMA单元207(消费者FU),
(3)第五DMA单元208(生产者FU)和第二DMA单元204(消费者FU)。
iii)在每个PE中,
(1)输入数据缓冲器112是第二存储器202(生产者FU)和PE的计算硬件(消费者FU)之间的存储缓冲器;
(2)第二缓冲器131是PE计算硬件(生产者FU)和第五DMA单元208(消费者FU)之间的存储缓冲器;
(3)参数数据缓冲器111是第一DMA203(生产者FU)和PE的计算硬件(消费者FU)之间的存储缓冲器。
表2提供了六个数据/参数流的详细信息:它们的起源地、目的地、负责该流的FU、可能的通信FU对以及这些FU对中所采用的同步协议的类型。
表2.六个数据/参数流的流向信息
下面进一步说明表2中所述的握手协议的具体规定。FU通常同时与其上游FU和其下游FU进行握手同步:
a)当FU相对于下游的FU运行速度过快时,它将停止。
b)当FU相对于其上游FU运行过慢时,它将会导致其上游FU停止。
例如,如果第二DMA单元204(IDMA)运行速度过快时,它将停止。同样,当第二DMA单元204(IDMA)相对于第三DMA单元205(EIDMA)运行速度过慢时,会导致EIDMA停止(假设IDMA依赖于EIDMA)。
又如,以FU为PE为例,相对于32个PE中的任何一个PE,如果该PE相对该PE的上游PE运行速度过快时,该PE将停止。同样,当该PE相对该PE的下游PE运行速度过慢时,该PE的下游PE将停止。
此外,两个通信的FU可以使用以下两个同步协议之一来确保在它们之间传输的数据(或参数)的完整性:
a)硬件握手
在这个握手协议中,两个通信FU使用放置在它们之间的缓冲器的状态来执行握手。这些状态包括“缓冲器空”或“缓冲器满”等。这是为了防止生产者将任何数据写入已经满了的缓冲器,并防止消费者从已经空了的缓冲器读取数据等。
b)软件握手
在这个握手协议中,两个通信FU执行一对匹配的同步指令,即每个FU各执行一个同步指令。当生产者FU执行同步指令时,它为消费者FU建立一个同步屏障。当消费FU执行同步指令时,它必须确保其生产者FU已经执行了相应的同步指令。否则,消费者FU将停止,直到生产者FU已经到达同步点(即,生产者FU已经执行了相应的同步指令)。
FU可以使用两个不同的同步协议(硬件或软件握手)与其上游FU和其下游FU握手。通常,如果FU只具有单一的,明确的上游FU(或下游FU),它将使用硬件握手协议来与其上游FU(或下游FU)同步。相反,如果FU具有多个可能的上游FU(或下游FU),则硬件需要软件的协助来正确的与其上游FU(或下游FU)进行数据流交互。例如,第二DMA单元204(IDMA)有两个可能的上游FU(第五DMA单元208和第三DMA单元205),但只有一个唯一下游FU(PE)。因此,IDMA使用软件协议与第五DMA单元208和第三DMA单元205进行同步,但使用硬件协议来与所有PE进行同步。
再请参见图6A,是本发明实施例的一种指令生成的示意图,本发明实施例中CU可根据运行环境动态生成各个FU的指令和程序,将各个FU的指令和程序存储在PM中。在需要获取指令和程序时,CU可以从PM中获取各个FU的指令和程序,再把各个FU的指令和程序广播到cu_ibus总线上。每个FU都有一个IQ),各个FU不断监视cu_ibus,只将那些属于自己的指令加载到它们各自的IQ里。然后,这些FU会从他们的IQ中提取指令,并按顺序执行。
在本发明实施例中,合并类似的FU程序版本,以实现动态生成FU程序,可以减少FU程序的存储空间。
再请参见图6B,是本发明实施例的一种指令修改的示意图,本发明实施例中CU可从PM中获取指定FU的指令和程序,根据运行环境动态修改该指定FU的指令和程序,将修改后的FU的指令和程序发送给该指定FU,指定FU将修改后的指令加载到指定FU的IQ里。然后,指定FU会从指定FU的IQ中提取修改后的指令,并按顺序执行。
在本发明实施例中,根据实际运行环境,CU修改并重新生成FU程序,以实现动态修改FU程序,可以减少FU程序的存储空间。
示例性的,如果运行环境为:将第二数据流操作依赖第一输出数据修改为依赖第三输出数据,其中第一输出数据为第一FU进行第一数据流操作所产生的输出数据,第三输出数据为第三FU进行第三数据流操作所产生的输出数据。指令的格式可以为<地址,控制域>,第二FU接收到的原始指令可以为<第一FU,上游FU>,修改后的指令可以为<第三FU,上游FU>,则第二FU接收到修改后的指令,可以确定第二FU的上游FU由第一FU更新为第三FU。
图7示出了本发明实施例的数据流操作方法的流程示意图。参考图7所示,该方法包括:
S701:中央控制单元发送第一数据流指令给所述第一功能单元;
S702:中央控制单元发送第二数据流指令给所述第二功能单元;
S703:第一功能单元根据接收到的所述第一数据流指令执行第一数据流操作;
S704:第二功能单元根据接收到的所述第二数据流指令执行第二数据流操作;
S705:当所述第二数据流指令包括用于指示所述第二功能单元执行所述第二数据流操作至第一预设位置,需要接收所述第一功能单元在执行所述第一数据流操作中产生的第一输出数据的指令时,所述第一功能单元与所述第二功能单元建立依赖关系并达成同步协议;
S706:第一功能单元在所述第二功能单元执行所述第二数据流操作至所述第一预设位置时,输出所述第一输出数据给所述第二功能单元;
S707:第二功能单元对所述第一输出数据进行所述第二数据流操作。
需要说明的是,本申请实施例并不限定S701和S702的执行顺序,例如CU可以在发送第一数据流指令给所述第一功能单元之后,发送第二数据流指令给所述第二功能单元。又如CU可以在发送第二数据流指令给所述第二功能单元之后,发送第一数据流指令给所述第一功能单元。又如CU可以同时发送第一数据流指令给所述第一功能单元,并发送第二数据流指令给所述第二功能单元。
需要说明的是,本申请实施例并不限定S703和S704的执行顺序,例如第一功能单元根据接收到的所述第一数据流指令执行第一数据流操作的同时,第二功能单元根据接收到的所述第二数据流指令执行第二数据流操作。又如第一功能单元根据接收到的所述第一数据流指令执行第一数据流操作经过预设时间段之后,第二功能单元根据接收到的所述第二数据流指令执行第二数据流操作。又如第二功能单元根据接收到的所述第二数据流指令执行第二数据流操作经过预设时间段之后,第一功能单元根据接收到的所述第一数据流指令执行第一数据流操作。
在一种可能的实现方式中,在处理器还包括第三功能单元的条件下,CU还可以发送第三数据流指令给所述第三功能单元;
所述第三功能单元根据接收到的所述第三数据流指令执行第三数据流操作;以及
当所述第二数据流指令包括用于指示所述第二功能单元执行所述第二数据流操作至第二预设位置,需要接收所述第三功能单元在执行所述第三数据流操作中产生的第三输出数据的指令时,所述第二功能单元与所述第三功能单元建立依赖关系并达成同步协议;
所述第三功能单元在所述第二功能单元执行所述第二数据流操作至所述第二预设位置时,输出所述第三输出数据给所述第二功能单元;以及
所述第二功能单元对所述第三输出数据进行所述第二数据流操作。
在一种可能的实现方式中,建立依赖关系包括:
判断所述第一功能单元是否将执行所述第一数据流操作中产生的第一输出数据输出给所述第二功能单元执行所述第二数据流操作,以及所述第二功能单元是否将执行所述第二数据流操作中产生的第二输出数据输出给所述第一功能单元执行所述第一数据流操作;
当所述第一功能单元将执行所述第一数据流操作中产生的第一输出数据输出给所述第二功能单元执行所述第二数据流操作时,建立所述第一功能单元与所述第二功能单元的第一依赖关系,且所述第一功能单元为所述第二功能单元的上游功能单元;以及
当所述第二功能单元将执行所述第二数据流操作中产生的第二输出数据输出给所述第一功能单元执行所述第一数据流操作时,建立所述第一功能单元与所述第二功能单元的第二依赖关系,且所述第一功能单元为所述第二功能单元的下游功能单元。
在一种可能的实现方式中,达成同步协议包括:
所述第一功能单元与所述第二功能单元通过硬件握手或软件握手达成同步协议;
当所述第二功能单元相对于所述第二功能单元的上游功能单元运行速度过快时,所述第二功能单元将暂停;以及
当所述第二功能单元相对于所述第二功能单元的下游功能单元运行速度过慢时,所述第二功能单元的下游功能单元将暂停。
具体实现中,可以通过第一FU使用硬件协议与第二FU之间进行协议协商。例如,第一FU将输出数据存储至缓冲器之前,确定缓冲器的当前数据量小于缓冲器的数据容量;第二FU从缓冲器中获取输出数据之前,确定缓冲器的当前数据量大于零。缓冲器可以包括DM、WM或者PM等。
具体实现中,可以通过第一FU使用软件协议与第二FU之间进行协议协商。例如,通过第一FU执行第一FU的同步指令时,向第二FU建立同步屏障,确定第一FU的同步指令成功执行之后,通过第二FU执行第二FU的同步指令,第一FU的同步指令与第二FU的同步指令相匹配。
在一种可能的实现方式中,在第一FU仅与另外一个FU进行交互,或者第二FU仅与另外一个FU进行交互时,可以通过第一FU使用硬件协议与第二FU之间进行协议协商。另外,在第一FU仅与多个FU进行交互时,可以通过第一FU分别使用硬件协议和软件协议与多个FU之间进行协议协商。在第二FU仅与多个FU进行交互时,可以通过第二FU分别使用硬件协议和软件协议与多个FU之间进行协议协商。
在一种可能的实现方式中,当所述第二功能单元接收到所述第一输出数据时,可以解除所述第一功能单元与所述第二功能单元的依赖关系以及同步协议。
在一种可能的实现方式中,CU可以通过动态地修改所述第一数据流指令与所述第二数据流指令来改变所述第一功能单元与所述第二功能单元的依赖关系。
在一种可能的实现方式中,所述处理器还包括第一存储单元、第四功能单元、第二存储单元和第五功能单元,所述方法还包括:
所述第一存储单元存储从所述第一功能单元外输入的第一输入参数;
所述第四功能单元将所述第一输入参数从所述第一存储单元写入所述第一功能单元的输入参数缓冲器;
所述第二存储单元存储从所述第一功能单元外输入的第一输入数据;
所述第五功能单元将所述第一输入数据从所述第二存储单元写入所述第一功能单元的输入数据缓冲器;
所述第一功能单元根据接收到的所述第一数据流指令执行第一数据流操作,包括:
所述第一功能单元根据接收到的所述第一数据流指令在所述输入参数缓冲器中获取所述第一输入参数,并在所述输入数据缓冲器中获取所述第一输入数据;
所述第一功能单元对所述第一输入参数和所述第一输入数据进行所述第一数据流操作。
在一种可能的实现方式中,所述处理器还包括第六功能单元、第七功能单元、第八功能单元和第九功能单元,所述方法还包括:
所述第六功能单元从外部存储单元将所述第一输入数据发送至所述第二存储单元;
所述第七功能单元从外部存储单元将所述第一输入参数发送至所述第一存储单元;
所述第八功能单元将所述第一功能单元输出的数据发送至所述第二存储单元;
所述第九功能单元将所述第一功能单元输出的数据从所述第二存储单元输出至外部存储单元。
示例性的,本申请实施例中的第一功能单元、第二功能单元以及第三功能单元可以为上述实施例中的PE,第一存储单元可以为上述实施例中的第一存储器201,第二存储单元可以为上述实施例中的第二存储器202,第四功能单元可以为上述实施例中的第一DMA单元203,第五功能单元可以为上述实施例中的第二DMA单元204,第六功能单元可以为上述实施例中的第三DMA单元205,第七功能单元可以为上述实施例中的第四DMA单元206,第八功能单元可以为上述实施例中的第五DMA单元208,第九功能单元可以为上述实施例中的第六DMA单元207。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。