计算系统及其控制器的制作方法

文档序号:13760164阅读:200来源:国知局
计算系统及其控制器的制作方法

本公开涉及控制领域,特别是涉及一种计算系统及其控制器。



背景技术:

随着信息技术的持续发展,计算系统的应用也日益广泛。

例如,在图像处理领域,广泛地应用了卷积神经网络计算系统。

在计算系统中,一般地,由例如上位机依次下发若干指令。然后若干功能模块,例如数据输入模块、计算模块,数据输出模块,根据这些指令依次执行相应的功能。

诸如卷积神经网络计算系统这样的计算系统较为复杂,指令的调度、硬件模块的使用策略等都会影响计算系统的效率和性能。

如果根据上位机所发送的程序指令逐条地控制各硬件模块执行指令的操作,那么当一个功能模块针对一条指令执行操作时,后续指令不能执行,其它功能模块可能处于闲置状态,多个功能模块难以实现并行运算。

而另一方面,如果让多个功能模块分别同时执行多条指令的操作,则有可能违背指令执行的逻辑性。例如,计算模块执行一条计算指令的计算操作时,需要到缓存器的指定位置读取数据,而该数据应当是数据输入模块根据一条数据输入指令输入到缓存器的该指定位置处的。那么,就需要控制计算模块在数据输入模块完成这一条数据输入指令的输入操作之后,才能执行这一条计算指令的计算操作,否则,计算模块可能读取到不恰当的数值。

由此,期望计算系统的多个功能模块在并行执行多条指令的同时,还能确保满足多条指令之间的逻辑关系。



技术实现要素:

本公开主要解决的技术问题是提供一种计算系统及其控制器,其能够使多个功能模块在确保满足多条指令之间的逻辑关系的情况下并行执行多条指令,从而提高计算效率。

根据本公开的一个方面,提供了一种计算系统,包括:多个功能模块,每个功能模块响应于针对该功能模块的指令执行各自的功能;控制器,用于根据多个指令之间的依赖关系,确定是否将指令发送给其所对应的功能模块。

优选地,控制器可以包括:多个指令队列缓存,分别对应于多个功能模块,每个指令队列缓存用于存储针对其所对应的功能模块的指令队列,以便向功能模块依次提供将要执行的指令;指令调度模块,用于确定在后指令所依赖的在先指令的操作是否已完成,并且在确定在先指令的操作已完成的情况下,将在后指令存入其所对应的指令队列缓存的指令队列队尾。

优选地,指令调度模块可以从多个功能模块获取工作状态信号,以确定在先指令的操作是否已完成。

优选地,指令调度模块可以是由逻辑电路实现的。

优选地,指令调度模块可以从多个功能模块分别获取多个功能模块正在执行的当前执行指令的序号。指令调度模块可以包括:多个比较器,分别用于对多个功能模块正在执行的当前执行指令的序号与指令调度模块当前处理的当前指令所依赖的在先指令的序号进行比较;以及逻辑门,在多个比较器的比较结果都表明当前执行指令的序号大于在先指令的序号的情况下,发出完成信号,以表明该在先指令的操作已完成。

优选地,控制器还可以包括:控制信号生成模块,用于依次基于指令队列缓存中的指令,生成相应的控制信号,并将控制信号发送给该指令队列缓存所对应的功能模块。

优选地,指令可以分为多种类型,分别对应于多个功能模块,指令包括指令类型字段和依赖指令字段,指令类型字段用于指示指令的类型,依赖指令字段用于指示指令所依赖的在先指令,控制器还可以包括:指令译码模块,用于从指令指令类型字段和依赖指令字段分别识别指令的类型和其所依赖的在先指令。

优选地,依赖指令字段可以是基于指令的序号与其所依赖的在先指令的序号之差设置的。该指令调度模块还可以包括:减法器,用于基于当前指令的序号和依赖指令字段的数据,确定当前指令所依赖的在先指令的序号。

优选地,多个功能模块可以包括第一功能模块和第二功能模块,分别对应于第一类型指令和第二类型指令,第一功能模块和第二功能模块之间设置有缓存,第一功能模块将其操作结果写入到缓存上由第一类型指令的指令参数指定的指定位置处,第二功能模块从缓存上由第二类型指令的指令参数指定的指定位置处读取数据,第一类型指令依赖于从其指定位置读取数据的在先第二类型指令,第二类型指令依赖于向其指定位置写入操作结果的在先第一类型指令。

优选地,多个功能模块可以包括数据输入模块、计算模块以及数据输出模块,分别执行数据输入指令、计算指令以及数据输出指令;数据输入模块和计算模块之间设置有输入缓存,数据输出模块和计算模块之间设置有输出缓存,数据输入模块从外部存储器读取数据写入输入缓存,计算模块从输入缓存读取数据,进行计算,并将计算结果写入输出缓存,数据输出模块读取输出缓存中的数据,并写入外部存储器,数据输入指令依赖于从其指定位置读取数据的在先计算指令,计算指令依赖于向其指定位置写入数据的在先数据输入指令,数据输出指令依赖于向其指定位置写入计算结果的在先计算指令。

优选地,该计算系统可以是用于卷积神经网络计算的计算系统,数据输入模块输入多个输入通道的输入数据,计算模块对多个输入通道的输入数据进行卷积神经网络计算,得到多个输出通道的输出数据,数据输出模块输出多个输出通道的输出数据。

优选地,该计算系统还可以包括:上位机,用于向控制器发送指令。

根据本公开的另一方面,还提供了一种计算系统的指令进行调度的控制器,该计算系统包括多个功能模块,每个功能模块响应于针对该功能模块的指令执行各自的功能,该控制器包括:多个指令队列缓存,分别对应于多个功能模块,每个指令队列缓存用于存储针对其所对应的功能模块的指令队列,以便向功能模块依次提供将要执行的指令;指令调度模块,用于确定在后指令所依赖的在先指令的操作是否已完成,并且在确定在先指令的操作已完成的情况下,将在后指令存入其所对应的指令队列缓存的指令队列队尾。

优选地,指令调度模块可以从多个功能模块获取工作状态信号,以确定在先指令的操作是否已完成。

优选地,指令调度模块可以是由逻辑电路实现的。

优选地,指令调度模块可以从多个功能模块分别获取多个功能模块正在执行的当前执行指令的序号。指令调度模块可以包括:多个比较器,分别用于对多个功能模块正在执行的当前执行指令的序号与指令调度模块当前处理的当前指令所依赖的在先指令的序号进行比较;以及逻辑门,在多个比较器的比较结果都表明当前执行指令的序号大于在先指令的序号的情况下,发出完成信号,以表明该在先指令的操作已完成。

优选地,该控制器还可以包括:控制信号生成模块,用于依次基于指令队列缓存中的指令,生成相应的控制信号,并将控制信号发送给该指令队列缓存所对应的功能模块。

优选地,指令分为多种类型,分别对应于多个功能模块,指令包括指令类型字段和依赖指令字段,指令类型字段用于指示指令的类型,依赖指令字段用于指示指令所依赖的在先指令,控制器还可以包括:指令译码模块,用于从指令的指令类型字段和依赖指令字段分别识别指令的类型和其所依赖的在先指令。

优选地,依赖指令字段可以是基于指令的序号与其所依赖的在先指令的序号之差设置的。该指令调度模块还可以包括:减法器,用于基于当前指令的序号和依赖指令字段的数据,确定当前指令所依赖的在先指令的序号。

优选地,多个功能模块包括第一功能模块和第二功能模块,分别对应于第一类型指令和第二类型指令,第一功能模块和第二功能模块之间设置有缓存,第一功能模块将其操作结果写入到缓存上由第一类型指令的指令参数指定的指定位置处,第二功能模块从缓存上由第二类型指令的指令参数指定的指定位置处读取数据,第一类型指令依赖于从其指定位置读取数据的在先第二类型指令,第二类型指令依赖于向其指定位置写入操作结果的在先第一类型指令。

优选地,多个功能模块包括数据输入模块、计算模块以及数据输出模块,分别执行数据输入指令、计算指令以及数据输出指令;数据输入模块和计算模块之间设置有输入缓存,数据输出模块和计算模块之间设置有输出缓存,数据输入模块从外部存储器读取数据写入输入缓存,计算模块从输入缓存读取数据,进行计算,并将计算结果写入输出缓存,数据输出模块读取输出缓存中的数据,并写入外部存储器,数据输入指令依赖于从其指定位置读取数据的在先计算指令,计算指令依赖于向其指定位置写入数据的在先数据输入指令,数据输出指令依赖于向其指定位置写入计算结果的在先计算指令。

本公开通过利用指令之间的依赖关系,来处理不同功能模块的执行过程,使得多个功能模块可以并行地执行相关功能,从而可以提高计算系统的计算效率。

附图说明

通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。

图1示出了根据本公开一实施例的计算系统的结构的示意性方框图。

图2是用于解释两个功能模块所执行的指令之间的逻辑关系的示意图。

图3是用于解释根据一个实施例的多个功能模块所执行的指令之间逻辑关系的示意图。

图4示出了一种指令格式的示意图。

图5示出了根据本公开一实施例的控制器的结构的示意性方框图。

图6示意性地示出了指令调度模块11可以具有的一种可能逻辑模组,其可以用于判断当前指令所依赖的在先指令是否已被执行。

图7示出了利用本公开的计算系统搭建的图像处理系统的示意性方框图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

图1示出了根据本公开一实施例的计算系统的结构的示意性方框图。

参见图1,本公开实施例的计算系统包括控制器1、上位机3以及多个功能模块(参见图中第一功能模块2-1、第二功能模块2-2……第N功能模块2-N,N是大于或等于2的自然数)。

其中,图1示出的是本公开的一种可选实施方式,应该知道,本公开的计算系统也可以不包括上位机3,而只包括控制器1和多个功能模块2-1、2-2、……、2-N。换言之,上位机3可以在本公开的计算系统之外实现。

多个功能模块可以是基于硬件结构划分的,也可以是基于功能进行划分的。优选地,可以按照硬件结构划分,这样可以有利于实现多个功能模块的并行化操作。

例如,功能模块可以包括数据输入模块、计算模块以及数据输出模块。或者,功能模块可以包括数据输入模块、多个并行运算的计算模块以及数据输出模块。

上位机3可以向控制器1发送指令。其中,上位机3所发送的指令可以分为多种类型,分别对应于多个功能模块。这里,按执行指令的功能模块对指令进行分类,功能模块和指令类型一一对应。每条指令的执行只涉及一个功能模块,有利于多个功能模块并行执行多条指令的操作。

例如,在功能模块包括数据输入模块、计算模块以及数据输出模块的情况下,指令可以分为数据数据指令、计算指令以及数据输出指令。而在功能模块包括数据输入模块、多个并行运算的计算模块以及数据输出模块的情况下,指令可以分为数据数据指令、分别针对不同计算模块的计算指令以及数据输出指令。分别针对不同计算模块的计算指令可以视为不同类型的指令。

上位机3所发送的多个指令之间可以具有一定的依赖关系。例如,对于两个指令来说,根据时间顺序,可以分别称为“在先指令”和“在后指令”。当在后指令的执行以在先指令的完成为条件时,这两个指令间就存在一定的依赖关系,换言之,该在后指令依赖于该在先指令。

下面参考图2和图3进一步举例说明指令之间的依赖关系以及基于该依赖关系对指令的调度。

多个功能模块在执行相应的操作时,多个功能模块对应的指令之间可以具有一定的依赖关系。例如,某个功能模块执行的指令需要其所依赖的另一个功能模块在先执行的的指令的操作结果数据,来执行相关操作。

作为示例,图2是用于解释两个功能模块所执行的指令之间逻辑关系的示意图。

如图2所示,以第一功能模块2-1和第二功能模块2-2为例,第一功能模块2-1和第二功能模块2-2可以分别对应于第一类型指令和第二类型指令。例如,第一功能模块2-1和第二功能模块2-2之间可以设置有缓存21。

第一功能模块2-1可以将其操作结果写入到缓存21上由第一类型指令的指令参数指定的指定位置处,第二功能模块2-2可以从缓存21上由第二类型指令的指令参数指定的指定位置处读取数据。

这样,第一类型指令可以依赖于从其指定位置读取数据的在先第二类型指令。这里,这两条指令指定同一个位置。只有该在先第二类型指令已经从指定位置读取了数据的情况下,该在后第一类型指令才可以执行。否则,在后第一类型指令的操作结果将覆盖缓存21中在先第二类型指令尚未读取的数据。

另一方面,第二类型指令也可以依赖于向其指定位置写入操作结果(数据)的在先第一类型指令。该第二类型指令使用该第一类型指令写入缓存中指定位置的数据。这里,这两条指令也指定同一个位置。只有该在先第一类型指令已经向指定位置写入了数据的情况下,该在后第二类型指令才可以执行。否则,在后第二类型指令不能正确读取该在先第一类型指令尚未写入的数据,即,可能会读取错误的数据。

也就是说,第一类型指令和第二类型指令有可能属于互相依赖。

具体来说,第二功能模块2-2执行相关操作而从缓存21上读取的数据是由第一功能模块2-1写入的。因此,在第一功能模块2-1执行在先的一个第一类型指令而在缓存21上的指定位置写入操作结果数据后,第二功能模块2-2才可以执行在后的第二类型指令而从缓存21上的指定位置读取数据并执行相关的操作。由此,该第二类型指令依赖于向其指定位置写入操作结果的在先第一类型指令。

相应地,第一功能模块2-1在执行第一类型指令而将操作结果写入缓存21上的指定位置时,会将根据上一个第一类型指令而写入的操作结果覆盖,因此,需要保证第二功能模块2-2已经从缓存21上的指定位置读取了之前的操作结果。由此,该第一类型指令依赖于从其指定位置读取数据的在先第二类型指令。

图3是用于解释根据一个实施例的多个功能模块所执行的指令之间逻辑关系的示意图。

参见图3,例如,当该计算系统应用于卷积神经网络计算时,该多个功能模块可以包括数据输入模块31、计算模块32以及数据输出模块33。数据输入模块31、计算模块32以及数据输出模块33可以分别执行数据输入指令、计算指令以及数据输出指令。

其中,数据输入模块31和计算模块32之间可以设置有输入缓存22。数据输出模块33和计算模块32之间可以设置有输出缓存23。

数据输入模块31可以从外部存储器(图中未示出)读取数据写入输入缓存22。

计算模块32可以从输入缓存22读取数据,进行计算,并将计算结果写入输出缓存23。

数据输出模块33可以读取输出缓存23中的数据,并写入外部存储器(图中未示出)。

数据输入指令可以依赖于从其指定位置读取数据的在先计算指令。

计算指令可以依赖于向其指定位置写入数据的在先数据输入指令。

数据输出指令可以依赖于向其指定位置写入计算结果的在先计算指令。

具体来说,计算模块32为执行相关计算而从输入缓存22上读取的数据是由数据输入模块31写入的。因此,在数据输入模块31执行在先的输入指令而在输入缓存22上的指定位置处写入数据后,计算模块32才可以从该指定位置读取数据以执行计算指令所对应的操作。由此,计算指令可以依赖于向其指定位置写入数据的在先数据输入指令。

相应地,数据输入模块31在执行数据输入指令而将数据写入输入缓存22上的位置时,会将根据上一个输入指令而写入的数据覆盖,因此,需要保证计算模块31已经从输入缓存22上读取了之前的数据。由此,数据输入指令可以依赖于从其指定位置读取数据的在先计算指令。

数据输出模块33执行数据输出指令而读取输出缓存23上的数据是由计算模块32输入的。因此,在计算模块32响应于在先的计算指令而在输出缓存23上的指定位置处写入数据后,数据输出模块33才可以从该指定位置读取数据以执行输出操作。由此,数据输出指令可以依赖于向其指定位置写入计算结果的在先计算指令。

另外,相对于计算模块32而言,数据输出模块33的数据输出操作执行过程比较短。因此,可以假定计算模块32要向输出缓存23的指定位置处写入计算结果时,数据输出模块23已经将该指定位置处的数据输出。这样,计算模块32向输出缓存23写入计算结果的操作可以不用考虑数据输出模块33是否执行完上一次的输出操作。即计算指令数据可以不依赖于向其指定位置读取计算结果的在先输出指令依赖于。

由此,可以按照输入、计算和输出,将多个功能模块分为数据输入模块31、计算模块32以及数据输出模块33,通过控制器的调度,可以实现数据输入模块31、计算模块32以及数据输出模块33的并行处理。

例如可以将多个功能模块划分成图3所示的功能模块。其中,数据输入模块31可以用于输入多个输入通道的输入数据。计算模块32可以对多个输入通道的输入数据进行卷积神经网络计算,以得到多个输出通道的输出数据。数据输出模块33可以输出多个输出通道的输出数据。

控制器1在接收到多个指令后,就可以根据多个指令之间的依赖关系,确定是否将指令发送给其所对应的功能模块。

具体来说,控制器1在接收到多个指令之后,对于其中一个指令,在该指令所依赖的在先指令已经完成的情况下,可以将该指令发送给对应的功能模块,以使得对应的功能模块可以执行与该指令对应的操作。

另一方面,在该指令所依赖的在先指令尚未完成的情况下,暂不向其对应的功能模块发送该指令。

其中,为了便于控制器1识别其所接收到的指令之间的依赖关系,本文述及的指令可以具有一定的格式。例如本文述及的指令可以是图4所示的格式的指令。

图4示出了根据本公开的技术方案可以使用的一种指令格式的示意图。

参见图4,指令可以包括指令类型字段和依赖指令字段。

指令类型字段可以指示指令的类型,即指令所对应的功能模块。

依赖指令字段可以指示该指令所依赖的在先指令,即可以指示指令之间的依赖关系。

依赖指令字段可以基于该指令和其所依赖的在先指令之间的相对位置来表示。在一个实施例中,可以基于该指令的序号和其所依赖的在先指令的序号之间的差值来表示。或者说,基于该在先指令是该指令之前的第几个指令来表示。例如,依赖指令字段包括4个位的情况下,可以用“0000”表示该指令依赖于与该指令紧接的前一条指令,用“1111”表示该指令依赖于从该指令开始向前数(不包括该指令)第16条指令。

图4示出指令类型字段和指令依赖字段位于指令的头部(head)。然而,本领域技术人员应当明白,指令类型字段和指令依赖字段还可以在指令的任何其它指定位置。

另外,指令还可以包括指令参数字段,其中指令参数字段可以指示与相应的功能模块所执行的操作相关的指令参数。

这里,图4所示的指令参数字段可以表示计算处理(例如卷积神经网络计算)中所涉及的相关参数,例如,对于输入数据指令和输出数据指令,指令参数字段可以包括所需搬运的数据的输入通道数量、每个输入通道的大小、在外部存储中的地址以及在本地存储中的地址等参数。再例如,对于计算指令,指令参数字段可以包括数据在本地存储中的地址、所用数据的输入通道数量、每个输入通道的大小以及该计算过程所用的卷积核、池化以及非线性操作等参数。

由此,在将该计算系统用于卷积神经网络计算的情况下,指令参数可以包含了绝大部分卷积神经网络计算中可能变化的参数,从而可以广泛地支持各类卷积神经网络的计算。

图5示出了根据本公开一实施例的控制器的结构的示意性方框图。

如图5所示,控制器1可以包括多个指令队列缓存(参见图中第一指令队列缓存2-1、第二指令队列缓存2-2……第N指令队列缓存2-N,N是大于或等于2的自然数)和指令调度模块11。

每个指令队列缓存可以对应于一个功能模块,每个指令队列缓存用于存储针对其所对应的功能模块的指令队列,以便向其所对应的功能模块依次提供将要执行的指令。

在如上所述,在按照执行指令的功能模块将指令分类的情况下,每个指令队列缓存中的指令都是对应于相应功能模块的指令。其中,指令队列是多个对应于同一个功能模块的指令的集合。

指令调度模块11可以确定在后指令所依赖的在先指令的操作是否已完成,并且在确定在先指令的操作已完成的情况下,将在后指令存入其所对应的指令队列缓存的指令队列队尾。

事实上,由于已存入任何指令队列中的任何指令之间不存在依赖关系,新指令也可以存入指令队列的除队尾以外其它位置处,例如队首或队中任意位置。

但是,由于先来的指令可能会为后续指令中较早的指令所依赖,所以在指令队列中按同一类型的指令被下发的顺序排队将是有利的。

另一方面,控制器1可以为其所接收到的指令按接收顺序依次分配序号。即,为后下发的指令分配较大的序号。也可以由上位机3为指令指定序号,或者指令也可以自带序号。

将同一类型的指令按下发顺序排队可以保证同一类型的指令按序号从小到大的顺序依次执行。这样也便于对后续指令进行分析和调度处理时,判断其所依赖的在先指令的操作是否已经完成。

指令调度模块11可以从多个功能模块分别获取工作状态信号,以确定在先指令的操作是否完成。

在一个实施例中,指令调度模块11从该多个功能模块分别获取各功能模块正在执行的指令的序号。在保证了同一类型的指令依次进入指令队列,从而被依次执行的情况下,只要比较当前分析和调度处理的指令所依赖的在先指令的序号是否小于所有功能模块正在执行的指令的序号。如果所依赖的在先指令的序号小于所有功能模块正在执行的指令的序号,则可以表明该在先指令必然已经被执行。

如果指令调度模块11不能判定在先指令的操作已完成,则指令调度模块11暂不将该在后指令存入指令队列。

这样,进入指令队列中的指令所依赖的在先指令均已执行完毕,只需排队等待由其所对应的功能模块执行即可。当多个指令队列中均有多条指令时,即可实现多个功能模块的并行操作,而不会引起指令执行顺序上的逻辑错误。

另一方面,如果指令队列缓存已满,则指令调度模块11也暂不将该在后指令存入指令队列。另外,指令调度模块11也可以被设置为,仅在一个类型的指令所对应的指令队列未满的情况下,才对这一类型的指令进行上述分析和调度处理。

另一方面,在一条指令包括多个段的情况下,也可以将指令逐段地(或者逐字段地)存入缓存。这种情况下,只需要在每存入指令的一段(或一个字段)后,判断指令队列是否已满。如果未满,则继续存入下一段(或下一个字段)。如果已满,则等待指令队列腾出空间后继续存入下一段。

在指令调度模块11暂不将一条指令存入其所对应的指令队列的情况下,指令调度模块11可以暂停对后续所有指令的分析和调度处理,直到该指令被存入其所对应的指令队列。

这样,可以保证同一类型的指令中,先进入相应指令队列,从而先被相应的功能模块执行的指令具有较小的序号,便于针对后续指令判断其所依赖的指令的操作是否已完成。

或者,指令调度模块11也可以跳过该指令,而对后续指令进行分析和调度处理,在满足条件,即该后续指令所依赖的在先指令已完成,并且该后续指令所对应的指令队列未满的情况下,将该后续指令存入其所对应的指令队列的队尾。

此时,如果只对后续指令中与该指令不同类型的指令进行分析和调度处理,同类型的指令继续在该指令后面等待,则同样可以保证同一类型的指令按序号从小到大的顺序被执行。而如果对后续指令中同一类型的指令也提前进行分析和调度处理,则可以通过其它方式判断后续指令所依赖的在先指令是否已经完成。例如,用所依赖的在先指令的序号与所有队列中的所有指令和各功能模块正在执行的指令的序号进行比对。如果有匹配的,则说明其所依赖的在先指令尚未完成。如果没有匹配的,则说明其所依赖的在先指令已完成。当队列中指令较多时,这种方式需要大量的比对操作。

这里,指令调度模块11可以是由逻辑电路实现的,也可以是由程序代码实现。优选地,指令调度模块11由逻辑电路实现,这样可以提高指令调度模块11的处理速度。

图6示意性地示出了指令调度模块11可以具有的一种可能逻辑模组,其可以用于判断当前指令所依赖的在先指令是否已被执行。

指令调度模块11可以从多个功能模块2-1、2-2、……、2-N分别获取多个功能模块正在执行的当前执行指令的序号。

如图6所示,指令调度模块11可以包括多个比较器112-1、112-2、……、112-N和逻辑门114。

比较器112-1、112-2、……、112-N分别用于对这些功能模块正在执行的当前执行指令的序号与指令调度模块11当前处理的当前指令所依赖的在先指令的序号进行比较。

逻辑门114综合比较器112-1、112-2、……、112-N的比较结果,以确定该在线指令的操作是否已完成,从而给出“通过”或“不通过”的判断结果。

在多个比较器的比较结果都表明当前执行指令的序号大于在先指令的序号的情况下,逻辑门114发出完成信号,以表明该在先指令的操作已完成。

例如,当比较器112-1、112-2、……、112-N以逻辑“真”(“TRUE”)表示当前执行指令的序号大于在先指令的序号的情况下,逻辑门114可以是与门。

如上所述,依赖指令字段可以是基于指令的序号与其所依赖的在先指令的序号之差(相对位置)设置的。

这种情况下,该指令调度模块11还可以包括减法器110。

减法器110可以基于当前指令的序号和依赖指令字段的数据,确定当前指令所依赖的在先指令的序号。

当依赖指令字段中的数据就是指令的序号与其所依赖的在先指令的序号之差时,可以直接从当前指令的序号中减去依赖指令字段的数据得到当前指令所依赖的在先指令的序号。

当依赖指令字段中的数据例如是在上述差值的基础上加上或减去预定数值得到的时,例如如上所述,以“0000”表示序号相差1时,可以在从当前指令的序号中减去依赖指令字段的数据,后在减去或加上所述预定数值,从而得到当前指令所依赖的在先指令的序号。

返回参见图5,优选地,控制器1还可以包括控制信号生成模块12。控制信号生成模块12可以依次基于指令队列缓存中的指令,生成相应的控制信号,并将控制信号发送给该指令队列缓存所对应的功能模块。

控制信号生成模块12也可以包含于各个功能模块之中。控制器只需将指令队列中的指令依次发送给相应的功能模块,功能模块可以根据指令自行产生控制信号,以便执行相应的功能。

因此,控制信号生成模块12可以依次将指令队列缓存中的指令生成相应的控制信号,并将控制信号发送给对应的功能模块,以使得对应的功能模块可以响应于接收到的控制信号执行相应的操作。

另外,参见图5,控制器1还可以包括指令译码模块13。在控制器1接收到的指令的格式为图4所示格式的指令时,指令译码模块13可以从指令的指令类型字段和依赖指令字段分别识别指令的类型和其所依赖的在先指令。

控制器1也可以不包括指令译码模块13。这种情况下,可以在控制器1的外部设置指令译码单元,也可以由控制器1本身从指令中指定位置处(例如头部)获取指令类型和其所依赖的在先指令。如上所述,根据输入指令的依赖指令和当前各个模块的工作状态信号,可以决定是否将当前指令添加到对应类型的指令队列缓存中。工作状态信号例如可以包括各个模块当前正在执行的指令的序号。

进一步地,通过在指令中设置依赖指令字段,控制器可以通过硬件处理指令之间的数据依赖关系,从而保证指令执行的逻辑正确性。使得指令下发者将指令下发给控制器即可,其间不需要再反复查看各个功能模块状态信号来决定下发的时间。

另外,通过控制器对不同功能模块的指令进行独立维护,可以实现不同功能模块的并行操作,提供计算效率。

图7示出了利用本公开的计算系统搭建的图像处理系统的示意性方框图。

如图7所示,该图像处理系统是在包含CPU和FPGA(现场可编程门阵列)的片上系统平台上搭建的。

其中,外部存储750、摄像头710以及显示器720是片上系统之外的部分。数据输入模块770、计算模块780、数据输出模块775、控制器760以及显示模块730可以在FPGA上实现,ARM处理器740为CPU。

数据输入模块770、计算模块780以及数据输出模块775相当于上文所公开的计算系统中述及的多个功能模块,控制器760相当于上文所公开的计算系统中述及的控制器。根据需要,计算模块780也可以划分为多个子计算模块,分别处理一种类型的计算指令。显示模块730可以是HDMI(高清晰度多媒体接口)输出的硬件驱动。ARM处理器740相当于上文所公开的计算系统中述及的上位机。

该图像处理系统可以应用于人脸检测,可以通过卷积神经网络的计算来标定人脸上的特征点。其中,ARM处理器740负责控制人脸检测算法的主要流程,FPGA部分中的控制器760可以作为卷积神经网络计算的加速器,可以用于控制算法中的卷积神经网络的计算部分。计算模块780则用于执行卷积神经网络计算。

具体说来,在人脸检测的流程中,可以首先由ARM处理器740从摄像头710读取数据并将其存入外部存储750中。然后ARM处理器740可以进行数据预处理以及寻找人脸的工作,将备选的人脸图像存储在外部存储750中。之后,ARM处理器740就可以触发控制器760从外部存储750读取指令,开始卷积神经网络部分的计算。指令可以包括数据输入指令、计算指令以及数据输出指令。数据输入指令指示数据输入模块770从外部存储750读取数据。计算指令指示计算模块780执行计算。数据输出指令指示数据输出模块775将数据输出到外部存储750。

其中,卷积神经网络部分的计算主要由控制器760、数据输入模块770、计算模块780以及数据输出模块775实现。其中,控制器760对数据输入模块770、计算模块780以及数据输出模块775的控制,特别是对分别针对各模块的指令的分析和调度处理,如上文所述。

通过卷积神经网络的计算可以得到人脸上的各个特征点的位置,从而给出精确的定位。FPGA中的数据输出模块775可以将计算结果存回外部存储750,然后可以由ARM处理器740读取结果,转化为可以在屏幕上显示的结果,通过显示模块730可以输出到显示器720。

其中,在人脸检测算法中需要用到的卷积神经网络对应的指令序列可以由软件事先生成好,存放在外部存储750中CPU和FPGA共享的特定位置。系统运行过程中,CPU在需要计算卷积神经网络时,可以控制数据搬运模块将该指令序列顺序送入控制器760,而无需根据具体的指令执行情况安排指令的输入。控制器760将根据本公开的方案对指令进行分析和调度处理,实现数据输入指令、计算指令、数据输出指令的并行有序执行。

另外,根据人脸检测对精度的需求的不同,本实施例中采用的卷积神经网络的结构可能会发生变化。根据神经网络的不同,可生成不同的指令序列来完成对不同卷积神经网络的支持。

上文中已经参考附图详细描述了根据本公开的计算系统及控制器。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1