CN111831405B - 一种数据处理方法、逻辑芯片及其设备 - Google Patents
一种数据处理方法、逻辑芯片及其设备 Download PDFInfo
- Publication number
- CN111831405B CN111831405B CN201910312392.8A CN201910312392A CN111831405B CN 111831405 B CN111831405 B CN 111831405B CN 201910312392 A CN201910312392 A CN 201910312392A CN 111831405 B CN111831405 B CN 111831405B
- Authority
- CN
- China
- Prior art keywords
- thread controller
- data set
- storage
- sub
- loading
- 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
- 238000003672 processing method Methods 0.000 title abstract description 18
- 238000000034 method Methods 0.000 claims abstract description 94
- 238000012545 processing Methods 0.000 claims abstract description 39
- 230000008569 process Effects 0.000 claims description 50
- 238000004364 calculation method Methods 0.000 claims description 34
- 238000010586 diagram Methods 0.000 description 19
- 230000006870 function Effects 0.000 description 19
- 238000013527 convolutional neural network Methods 0.000 description 10
- 239000011159 matrix material Substances 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 230000003287 optical effect Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 210000002569 neuron Anatomy 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/483—Multiproc
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种数据处理方法、逻辑芯片及其设备,该方法包括:主线程控制器将输入数据集合的存储位置通知给加载线程控制器;所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;存储线程控制器从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;计算线程控制器从所述存储线程控制器的第二存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合。通过本申请的技术方案,节约处理时间,提升处理效率和计算效率。
Description
技术领域
本申请涉及互联网领域,尤其是一种数据处理方法、逻辑芯片及其设备。
背景技术
在机器学习技术中,CNN(Convolutional Neural Network,卷积神经网络)是一种前馈神经网络,CNN的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理具有出色表现。CNN是一个多层的神经网络,每层由多个二维平面组成,每个平面由多个独立的神经元组成。一般地,CNN可以由卷积层和池化层组成,卷积层的作用是提取图像的各种特征,池化层的作用是对原始特征进行两次特征提取,以减小特征分辨率,大幅度减少训练参数,并减轻模型过拟合的程度。此外,CNN以其局部权值共享的特殊结构,降低网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点,避免了特征提取和分类过程中数据重建的复杂度,因而,CNN得到了广泛的应用。
在CNN的相关运算中,涉及卷积运算过程,卷积运算过程可以抽象为图像矩阵和预配置矩阵的乘法运算。具体的,从外部存储介质读取输入图像,即依次读取输入图像的每行数据,这个过程也可以称为加载过程。然后,将输入图像的每行数据存储到缓冲区(buffer)中,这个过程也可以称为存储过程。然后,从缓冲区中读取输入图像的每行数据,根据读取的数据获取图像矩阵,并基于图像矩阵和预配置矩阵进行卷积运算,这个过程也可以称为计算过程。
综上所述,为了进行卷积运算,涉及加载过程、存储过程和计算过程,加载过程、存储过程和计算过程是串行实现的,总执行时间是加载过程的执行时间、存储过程的执行时间、计算过程的执行时间之和,从而消耗大量处理时间,处理效率很低。例如,先执行加载过程,即读取输入图像的每行数据。在加载过程完成后,才执行存储过程,即将输入图像的每行数据存储到缓冲区。在存储过程完成后,才执行计算过程,即基于图像矩阵和预配置矩阵进行卷积运算。
发明内容
本申请提供一种数据处理方法,所述方法包括:
主线程控制器将输入数据集合的存储位置通知给加载线程控制器;
所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
存储线程控制器从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;
计算线程控制器从所述存储线程控制器的第二存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合。
本申请提供一种数据处理方法,所述方法包括:
加载操作步骤:根据输入数据集合的存储位置,获取所述输入数据集合的子数据集合;其中,所述子数据集合包括一行多列的子数据集合;
存储操作步骤:将加载操作得到的所述子数据集合存储到缓冲区;
计算操作步骤:从所述缓冲区中获取所述子数据集合,并根据所述子数据集合获取输出数据集合;
所述加载操作步骤、所述存储操作步骤和所述计算操作步骤是并行执行。
本申请提供一种数据处理方法,所述方法包括:
加载线程控制器通过运行所述加载线程控制器存储的加载指令集合,以进行如下加载操作步骤:根据输入数据集合的存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
存储线程控制器通过运行所述存储线程控制器存储的存储指令集合,以进行如下存储操作步骤:从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;
计算线程控制器通过运行所述计算线程控制器存储的计算指令集合,以进行如下计算操作步骤:从所述存储线程控制器的第二存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合。
本申请提供一种数据处理方法,所述方法包括:
主线程控制器将输入数据集合的存储位置通知给加载线程控制器;
所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
计算线程控制器从所述加载线程控制器的第一存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合。
本申请提供一种数据处理方法,所述方法包括:
主线程控制器将输入数据集合的存储位置通知给加载线程控制器;
所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
存储线程控制器从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域。
本申请提供一种数据处理方法,所述方法包括:
主线程控制器将输入数据集合的存储位置通知给加载线程控制器;
所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
在所述加载线程控制器将多个子数据集合存储到所述第一存储区域后,存储线程控制器从所述加载线程控制器的第一存储区域获取子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;
计算线程控制器从所述存储线程控制器的第二存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合。
本申请提供一种逻辑芯片,所述逻辑芯片包括:
主线程控制器,用于将输入数据集合的存储位置通知给加载线程控制器;
加载线程控制器,用于根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
存储线程控制器,用于从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;
计算线程控制器,用于从所述存储线程控制器的第二存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合。
本申请提供一种数据处理设备,所述数据处理设备包括:
逻辑芯片和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述逻辑芯片执行所述计算机指令时实现上述的方法步骤。
基于上述技术方案,本申请实施例中,通过对输入数据集合的子数据集合进行加载操作、存储操作和计算操作,而不对输入数据集合本身进行加载操作、存储操作和计算操作,使得加载操作、存储操作和计算操作并行执行。也就是说,在加载操作的执行过程中,可以进行存储操作和计算操作。在存储操作的执行过程中,可以进行加载操作和计算操作。在计算操作的执行过程中,可以进行加载操作和存储操作。显然,由于加载操作、存储操作和计算操作并行执行,因此,总执行时间小于加载操作的执行时间、存储操作的执行时间、计算操作的执行时间之和,从而节约处理时间,提升处理效率和计算效率。
附图说明
为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其它的附图。
图1是本申请一种实施方式中的数据处理方法的流程图;
图2A是本申请一种实施方式中的输入数据集合的示意图;
图2B是本申请一种实施方式中的输出数据集合的示意图;
图3A是本申请一种实施方式中的逻辑芯片的示意图;
图3B是本申请一种实施方式中的指令集合的示意图;
图3C是本申请一种实施方式中的线程控制器的硬件结构图;
图4是本申请一种实施方式中的逻辑芯片的结构图;
图5是本申请一种实施方式中的数据处理设备的结构图。
具体实施方式
在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本申请实施例提出一种数据处理方法,可以应用于任意设备(如数据处理设备等),参见图1所示,为该方法的流程示意图,该方法可以包括:
步骤101,主线程控制器将输入数据集合的存储位置(例如,该输入数据集合在外部存储介质中的存储位置)通知给加载线程控制器。
步骤102,加载线程控制器根据该存储位置获取输入数据集合的子数据集合,并将该子数据集合存储到加载线程控制器的第一存储区域。
步骤103,存储线程控制器从加载线程控制器的第一存储区域获取该子数据集合,并将该子数据集合存储到存储线程控制器的第二存储区域。
步骤104,计算线程控制器从存储线程控制器的第二存储区域获取该子数据集合,并利用该子数据集合获取输出数据集合。
可选的,主线程控制器可以向加载线程控制器发送第一启动命令,以使加载线程控制器根据第一启动命令运行加载线程控制器存储的加载指令集合;其中,该加载指令集合用于使加载线程控制器执行输入数据集合的加载操作,也就是说,加载线程控制器在运行加载指令集合后,可以执行上述步骤102。
可选的,主线程控制器可以向存储线程控制器发送第二启动命令,以使存储线程控制器根据第二启动命令运行存储线程控制器存储的存储指令集合;其中,该存储指令集合用于使存储线程控制器执行输入数据集合的存储操作,也就是说,存储线程控制器在运行存储指令集合后,可以执行上述步骤103。
可选的,主线程控制器可以向计算线程控制器发送第三启动命令,以使计算线程控制器根据第三启动命令运行计算线程控制器存储的计算指令集合;其中,该计算指令集合用于使计算线程控制器执行输入数据集合的计算操作,也就是说,计算线程控制器在运行计算指令集合后,可以执行上述步骤104。
在一个例子中,主线程控制器还可以向加载线程控制器发送第一参数调整命令,以使加载线程控制器根据第一参数调整命令确定加载操作的第一运行参数,并根据该第一运行参数执行输入数据集合的加载操作。例如,第一运行参数可以为加载操作的运行次数,加载线程控制器可以根据该运行次数循环执行输入数据集合的加载操作,也就是说,可以根据该运行次数循环执行步骤102。假设加载操作的运行次数为10次,则可以将步骤102循环执行10次。
在一个例子中,主线程控制器还可以向存储线程控制器发送第二参数调整命令,以使存储线程控制器根据第二参数调整命令确定存储操作的第二运行参数,并根据该第二运行参数执行输入数据集合的存储操作。例如,第二运行参数可以为存储操作的运行次数,存储线程控制器可以根据该运行次数循环执行输入数据集合的存储操作,也就是说,可以根据该运行次数循环执行步骤103。假设存储操作的运行次数为10次,则可以将步骤103循环执行10次。
在一个例子中,主线程控制器还可以向计算线程控制器发送第三参数调整命令,以使计算线程控制器根据第三参数调整命令确定计算操作的第三运行参数,并根据该第三运行参数执行输入数据集合的计算操作。例如,第三运行参数可以为计算操作的运行次数,计算线程控制器可以根据该运行次数循环执行输入数据集合的计算操作,也就是说,可以根据该运行次数循环执行步骤104。假设计算操作的运行次数为10次,则可以将步骤104循环执行10次。
在一个例子中,加载线程控制器将子数据集合存储到加载线程控制器的第一存储区域之后,还可以包括:判断是否允许启动下一个子数据集合的加载操作;如果是,则返回执行根据存储位置获取输入数据集合的下一个子数据集合的步骤;如果否,则停止获取输入数据集合的下一个子数据集合。
其中,加载线程控制器判断是否允许启动下一个子数据集合的加载操作,可以包括:加载线程控制器获取存储线程控制器的第一状态信息,并根据该第一状态信息判断是否允许启动下一个子数据集合的加载操作。
在一个例子中,存储线程控制器将子数据集合存储到存储线程控制器的第二存储区域之后,还可以包括:判断是否允许启动下一个子数据集合的存储操作;如果是,则返回执行从加载线程控制器的第一存储区域获取下一个子数据集合的步骤;如果否,则停止从第一存储区域获取下一个子数据集合。
其中,存储线程控制器判断是否允许启动下一个子数据集合的存储操作,可以包括:存储线程控制器获取计算线程控制器的第二状态信息,并根据该第二状态信息判断是否允许启动下一个子数据集合的存储操作。
在一个例子中,计算线程控制器从存储线程控制器的第二存储区域获取子数据集合之后,还可以包括:判断是否允许启动下一个子数据集合的计算操作;如果是,则返回执行从存储线程控制器的第二存储区域获取下一个子数据集合的步骤;如果否,则停止从第二存储区域获取下一个子数据集合。
在上述实施例中,输入数据集合可以包括多行多列的输入数据集合;子数据集合可以包括一行多列的子数据集合。主线程控制器、加载线程控制器、存储线程控制器和计算线程控制器,均可以部署在逻辑芯片。该逻辑芯片可以包括但不限于:FPGA(FieldProgrammable Gate Array,现场可编程逻辑门阵列)、CPLD(Complex Programmable LogicDevice,复杂可编程逻辑器件)、ASIC(Application Specific Integrated Circuit,专用集成电路)等,对此不做限制。
在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
基于上述技术方案,本申请实施例中,通过对输入数据集合的子数据集合进行加载操作、存储操作和计算操作,而不对输入数据集合本身进行加载操作、存储操作和计算操作,使得加载操作、存储操作和计算操作并行执行。也就是说,在加载操作的执行过程中,可以进行存储操作和计算操作。在存储操作的执行过程中,可以进行加载操作和计算操作。在计算操作的执行过程中,可以进行加载操作和存储操作。显然,由于加载操作、存储操作和计算操作并行执行,因此,总执行时间小于加载操作的执行时间、存储操作的执行时间、计算操作的执行时间之和,从而节约处理时间,提升处理效率和计算效率。
基于与上述方法同样的申请构思,本申请实施例中还提出另一种数据处理方法,该方法可以包括:加载操作步骤:根据输入数据集合的存储位置,获取输入数据集合的子数据集合;该子数据集合包括一行多列的子数据集合。存储操作步骤:将加载操作得到的子数据集合存储到缓冲区。计算操作步骤:从缓冲区中获取子数据集合,并根据该子数据集合获取输出数据集合。
其中,加载操作步骤、存储操作步骤和计算操作步骤是并行执行。
参见上述实施例,加载操作步骤可以由加载线程控制器实现,也就是说,上述实施例中由加载线程控制器实现的过程,可以是加载操作步骤。存储操作步骤可以由存储线程控制器实现,也就是说,上述实施例中由存储线程控制器实现的过程,可以是存储操作步骤。计算操作步骤可以由计算线程控制器实现,也就是说,上述实施例中由计算线程控制器实现的过程,可以是计算操作步骤。
基于与上述方法同样的申请构思,本申请实施例中还提出另一种数据处理方法,该方法可以包括:加载线程控制器通过运行加载线程控制器存储的加载指令集合,以进行如下加载操作步骤:根据输入数据集合的存储位置获取输入数据集合的子数据集合,并将子数据集合存储到加载线程控制器的第一存储区域。存储线程控制器通过运行存储线程控制器存储的存储指令集合,以进行如下存储操作步骤:从加载线程控制器的第一存储区域获取子数据集合,并将子数据集合存储到存储线程控制器的第二存储区域。计算线程控制器通过运行计算线程控制器存储的计算指令集合,以进行如下计算操作步骤:从存储线程控制器的第二存储区域获取子数据集合,并利用子数据集合获取输出数据集合。
其中,加载线程控制器的具体实现过程、存储线程控制器的具体实现过程和计算线程控制器的具体实现过程,可以参见上述实施例,在此不再重复赘述。
基于与上述方法同样的申请构思,本申请实施例中还提出另一种数据处理方法,该方法可以包括:主线程控制器将输入数据集合的存储位置通知给加载线程控制器。加载线程控制器可以根据该存储位置获取输入数据集合的子数据集合(即输入数据集合的每个子数据集合),并将该子数据集合存储到加载线程控制器的第一存储区域;计算线程控制器可以从加载线程控制器的第一存储区域获取该子数据集合,并利用该子数据集合获取输出数据集合。
其中,与上述实施例相比,本实施例中,加载线程控制器和存储线程控制器合并为一个线程控制器,以加载线程控制器为例进行说明,也就是说,由加载线程控制器实现加载和存储,不需要存储线程控制器实现存储过程。加载线程控制器获取输入数据集合的子数据集合,将子数据集合存储到加载线程控制器的第一存储区域后,计算线程控制器可以从第一存储区域获取该子数据集合。
其中,加载线程控制器的具体实现过程、计算线程控制器的具体实现过程,可以参见上述实施例,在此不再重复赘述,只是不需要存储线程控制器。
基于与上述方法同样的申请构思,本申请实施例中还提出另一种数据处理方法,该方法可以包括:主线程控制器将输入数据集合的存储位置通知给加载线程控制器。加载线程控制器根据该存储位置获取输入数据集合的子数据集合(即输入数据集合的每个子数据集合),并将该子数据集合存储到加载线程控制器的第一存储区域。存储线程控制器从加载线程控制器的第一存储区域获取该子数据集合,并将该子数据集合存储到存储线程控制器的第二存储区域。
综上所述,加载线程控制器依次获取输入数据集合的每个子数据集合,并将获取的每个子数据集合存储到加载线程控制器的第一存储区域,而存储线程控制器从加载线程控制器的第一存储区域依次获取每个子数据集合,并将获取的每个子数据集合存储到存储线程控制器的第二存储区域。显然,加载线程控制器和存储线程控制器是并行执行的,加载线程控制器的具体实现过程、存储线程控制器的具体实现过程,可以参见上述实施例,在此不再重复赘述。
可选地,在一个例子中,在存储线程控制器将多个子数据集合(如输入数据集合的所有子数据集合)存储到存储线程控制器的第二存储区域后,计算线程控制器才从存储线程控制器的第二存储区域中获取输入数据集合的每个子数据集合,并利用获取的每个子数据集合获取输出数据集合。综上所述,存储线程控制器在完成所有子数据集合的存储后,计算线程控制器才开始获取每个子数据集合,即存储线程控制器和计算线程控制器是串行执行的。
可选地,在另一个例子中,在存储线程控制器将每个子数据集合存储到存储线程控制器的第二存储区域后,计算线程控制器可以从存储线程控制器的第二存储区域中获取输入数据集合的每个子数据集合,并利用获取的每个子数据集合获取输出数据集合。综上所述,存储线程控制器在完成一个子数据集合的存储后,计算线程控制器就可以获取该子数据集合,即存储线程控制器和计算线程控制器是并行执行的,计算线程控制器的实现过程可以参见上述实施例。
基于与上述方法同样的申请构思,本申请实施例中还提出另一种数据处理方法,该方法可以包括:主线程控制器将输入数据集合的存储位置通知给加载线程控制器。加载线程控制器根据该存储位置获取输入数据集合的子数据集合(即输入数据集合的每个子数据集合),并将该子数据集合存储到加载线程控制器的第一存储区域。在加载线程控制器将多个子数据集合(如输入数据集合的所有子数据集合或者部分子数据集合)存储到第一存储区域后,存储线程控制器从加载线程控制器的第一存储区域获取子数据集合,并将该子数据集合存储到存储线程控制器的第二存储区域。计算线程控制器从存储线程控制器的第二存储区域获取该子数据集合,并利用该子数据集合获取输出数据集合。
综上所述,存储线程控制器依次获取输入数据集合的每个子数据集合,并将获取的每个子数据集合存储到存储线程控制器的第二存储区域,而计算线程控制器从存储线程控制器的第二存储区域依次获取每个子数据集合,并利用获取的每个子数据集合获取输出数据集合。显然,存储线程控制器和计算线程控制器可以是并行执行的,而存储线程控制器的具体实现过程、计算线程控制器的具体实现过程,可以参见上述实施例,在此不再重复赘述。
加载线程控制器将多个子数据集合(如输入数据集合的所有子数据集合)存储到第一存储区域后,存储线程控制器才从加载线程控制器的第一存储区域获取每个子数据集合,即加载线程控制器和存储线程控制器是串行执行的。
在上述各实施例中,存储区域可以为缓存区域,即第一存储区域可以为第一缓存区域,第二存储区域可以为第二缓存区域。当然,第一存储区域和第二存储区域也可以为其它类型的存储区域,对此不做限制。
以下结合具体应用场景,对本申请实施例的数据处理方法进行说明。本应用场景中,输入数据集合是具有多行多列的数据集合,参见图2A所示,为输入数据集合的示例。A1表示第1行第1列的数据,A2表示第1行第2列的数据,以此类推,B1表示第2行第1列的数据,以此类推。针对输入数据集合中的每个数据,可以是输入图像的每个像素点的像素值,例如,A1是输入图像的第1行第1列的像素点的像素值,A2是输入图像的第1行第2列的像素点的像素值,以此类推。当然,上述只是输入数据集合的示例,对此输入数据集合不做限制,只要输入数据集合包括多行多列的数据即可,后续以图2A为例进行说明。
输出数据集合是具有多行多列的数据集合,输出数据集合是输入数据集合的子区域,如输入数据集合中大小为M*N的子区域。为了进行后续运算,输出数据集合的大小为已知,即M和N的大小为已知。例如,M为3,N为4,表示输出数据集合为3*4的子区域,参见图2B所示,为输出数据集合的示例。
参见图3A所示,逻辑芯片(如FPGA、CPLD、ASIC,后续以FPGA为例)包括主线程控制器(如main控制器)、加载线程控制器(如thread0控制器)、存储线程控制器(如thread1控制器)和计算线程控制器(如thread2控制器)。
第一,主线程控制器,以下介绍主线程控制器的相关功能。
主线程控制器用于获取输入数据集合的存储位置,即输入数据集合在外部存储介质的存储位置。例如,输入数据集合通常存储在外部存储介质,即不是存储在FPGA的存储介质,如输入数据集合存储在外部DDR(Double Data Rate Synchronous Dynamic RandomAccess Memory,双倍数据率同步动态随机存取存储器)中。主线程控制器能够获取输入数据集合的存储位置,对此不做限制。
在需要利用输入数据集合进行处理时,例如,利用输入数据集合进行卷积运算,则需要启动加载线程控制器、存储线程控制器和计算线程控制器。
为了启动加载线程控制器,则主线程控制器可以向加载线程控制器发送第一启动命令(如call命令),以使加载线程控制器根据第一启动命令运行加载指令集合,继而启动加载线程控制器,使得加载线程控制器开始工作。
主线程控制器向加载线程控制器发送第一启动命令时,第一启动命令还可以包括输入数据集合的存储位置,即输入数据集合在外部存储介质的存储位置。
为了启动存储线程控制器,则主线程控制器可以向存储线程控制器发送第二启动命令(如call命令),以使存储线程控制器根据第二启动命令运行存储指令集合,继而启动存储线程控制器,使得存储线程控制器开始工作。
为了启动计算线程控制器,则主线程控制器可以向计算线程控制器发送第三启动命令(如call命令),以使计算线程控制器根据第三启动命令运行计算指令集合,继而启动计算线程控制器,使得计算线程控制器开始工作。
参见图3B所示,主线程控制器通过向加载线程控制器、存储线程控制器和计算线程控制器发送call命令,可以触发这些线程控制器开始工作。
在一个例子中,参见图3B所示,主线程控制器在向加载线程控制器、存储线程控制器和计算线程控制器发送启动命令后,还可以执行wait(等待)命令,即等待加载线程控制器、存储线程控制器和计算线程控制器返回处理结果。
在一个例子中,加载线程控制器的处理过程结束后,可以向主线程控制器发送Return(返回)命令,表示加载线程控制器的处理过程已经完成。存储线程控制器的处理过程结束后,可以向主线程控制器发送Return命令,表示存储线程控制器的处理过程已经完成。计算线程控制器的处理过程结束后,可以向主线程控制器发送Return命令,表示计算线程控制器的处理过程已经完成。
进一步的,加载线程控制器向主线程控制器发送Return命令后,进入idle状态,即加载线程控制器停止工作。存储线程控制器向主线程控制器发送Return命令后,进入idle状态,即存储线程控制器停止工作。计算线程控制器向主线程控制器发送Return命令后,进入idle状态,即计算线程控制器停止工作。
在处理下一个输入数据集合时,主线程控制器重复上述过程,重新向加载线程控制器、存储线程控制器和计算线程控制器发送启动命令,在此不再赘述。
为了控制加载线程控制器的运行参数,则主线程控制器可以向加载线程控制器发送第一参数调整命令(如set命令),该第一参数调整命令可以包括第一运行参数,以使加载线程控制器根据第一参数调整命令确定加载操作的第一运行参数。例如,第一运行参数可以为加载操作的运行次数,如输入数据集合为10行时,则第一运行参数可以为10次。当然,上述只是第一运行参数的示例,对此不做限制,用于控制加载线程控制器的参数均在本申请保护范围之内。
为了控制存储线程控制器的运行参数,则主线程控制器可以向存储线程控制器发送第二参数调整命令(如set命令),该第二参数调整命令可以包括第二运行参数,以使存储线程控制器根据第二参数调整命令确定存储操作的第二运行参数。例如,第二运行参数可以为存储操作的运行次数,如输入数据集合为10行时,则第二运行参数可以为10次。当然,上述只是第二运行参数的示例,对此不做限制,用于控制存储线程控制器的参数均在本申请保护范围之内。
为了控制计算线程控制器的运行参数,则主线程控制器可以向计算线程控制器发送第三参数调整命令(如set命令),该第三参数调整命令可以包括第三运行参数,以使计算线程控制器根据第三参数调整命令确定计算操作的第三运行参数。例如,第三运行参数可以为计算操作的运行次数,如输入数据集合为10行时,则第三运行参数可以为10次。当然,上述只是第三运行参数的示例,对此不做限制,用于控制计算线程控制器的参数均在本申请保护范围之内。
参见图3B所示,主线程控制器通过向加载线程控制器、存储线程控制器和计算线程控制器发送set命令,可以触发这些线程控制器确定运行参数。
二,加载线程控制器,以下介绍加载线程控制器的相关功能。
加载线程控制器能够存储与加载操作有关的多个指令,为了区分方便,可以将这些指令组成的集合称为加载指令集合,加载线程控制器通过运行加载指令集合,以进行如下加载操作步骤:根据输入数据集合的存储位置获取输入数据集合的子数据集合,该子数据集合包括一行多列的子数据集合,并将子数据集合存储到加载线程控制器的第一存储区域,如图3A所示的行缓存1。
加载线程控制器将子数据集合存储到加载线程控制器的第一存储区域之后,加载线程控制器可以判断是否允许启动下一个子数据集合的加载操作;如果是,则可以返回执行根据存储位置获取输入数据集合的下一个子数据集合的步骤;如果否,则可以停止获取输入数据集合的下一个子数据集合。
在一个例子中,主线程控制器可以向加载线程控制器发送第一启动命令,加载线程控制器在接收到第一启动命令后,可以运行加载指令集合,即启动加载线程控制器。加载线程控制器在启动后,通过运行加载指令集合,以进行上述加载操作步骤,加载操作步骤的实现参见上述实施例,在此不再赘述。
在一个例子中,主线程控制器可以向加载线程控制器发送第一参数调整命令,加载线程控制器在接收到该第一参数调整命令后,可以确定加载操作的第一运行参数(例如,第一运行参数可以为加载操作的运行次数),并在加载指令集合中添加该第一运行参数,这样,加载线程控制器在运行所述加载指令集合时,就可以根据该第一运行参数进行上述的加载操作步骤。
参见图3B所示,加载指令集合可以包括但不限于以下一种或者多种:
Loop(cnt)指令,加载指令集合的入口,用于实现循环计数器的功能,即可以称为循环计数器指令,cnt表示次数,初始值为加载操作的运行次数,如10。
Wait(sync)指令,用于实现条件判断的功能,即可以称为条件判断指令,通过运行Wait(sync)指令,加载线程控制器判断是否允许启动下一行操作。
Load()指令,用于实现加载操作的功能,即可以称为加载操作指令,通过运行Load()指令,加载线程控制器可以加载输入数据集合的一行数据。
Set()指令,用于修正指令参数,如修正循环计数器指令中cnt的值,也就是说,在当前cnt值的基础上减去1,表示已经完成一次循环,循环次数减1。
Goto()指令,用于实现跳转,可以称为跳转指令。若修正后的cnt值大于0,跳转到Wait(sync)指令,从循环开始重新执行;若cnt值为0,执行Break指令。
Break指令,表示加载过程已经结束,向主线程控制器发送Return命令。
当然,上述只是加载指令集合的一个示例,对此加载指令集合不做限制。
基于上述加载指令集合,则加载线程控制器的一个实现流程可以包括:
在接收到第一启动命令后,加载线程控制器开始工作。
在接收到第一参数调整命令后,将加载操作的运行次数设置为10。
判断是否允许启动下一行操作。由于运行次数为10,因此启动下一行操作。
根据输入数据集合的存储位置,获取输入数据集合的第一行数据(即子数据集合),并将输入数据集合的第一行数据存储到行缓存1。
将加载操作的运行次数更新为9(即10-1=9)。
由于运行次数9大于0,因此,返回执行判断是否允许启动下一行操作。
进一步的,由于运行次数为9,因此,启动下一行操作。
根据输入数据集合的存储位置,获取输入数据集合的第二行数据(即子数据集合),并将输入数据集合的第二行数据存储到行缓存1。
将加载操作的运行次数更新为8(即9-1=8)。
以此类推,不断循环上述操作,一直到获取输入数据集合的第十行数据(即子数据集合),并将输入数据集合的第十行数据存储到行缓存1。
将加载操作的运行次数更新为0。由于运行次数0等于0,因此,加载过程已经结束,至此,加载线程控制器成功加载输入数据集合的所有数据。
在上述实施例中,加载线程控制器判断是否允许启动下一个子数据集合的加载操作(即是否允许启动下一行操作),是基于运行次数确定的,也就是说,当运行次数大于0时,则加载线程控制器允许启动下一个子数据集合的加载操作,当运行次数等于0时,则不允许启动下一个子数据集合的加载操作。
在另一个例子中,加载线程控制器还可以获取存储线程控制器的第一状态信息,并根据该第一状态信息判断是否允许启动下一个子数据集合的加载操作。
例如,当存储线程控制器的第一状态信息为存储线程控制器异常时,则不允许启动下一个子数据集合的加载操作。当存储线程控制器的第一状态信息为存储线程控制器正常时,则允许启动下一个子数据集合的加载操作。
又例如,当存储线程控制器的第一状态信息为存储线程控制器未从行缓存1中读取最新的子数据集合时,则不允许启动下一个子数据集合的加载操作。当存储线程控制器的第一状态信息为存储线程控制器已经从行缓存1中读取最新的子数据集合时,则允许启动下一个子数据集合的加载操作。
又例如,当存储线程控制器的第一状态信息为行缓存1中未被读取的子数据集合的数量,达到阈值(如3)时,则不允许启动下一个子数据集合的加载操作。当存储线程控制器的第一状态信息为行缓存1中未被读取的子数据集合的数量,未达到阈值时,则允许启动下一个子数据集合的加载操作。
当然,上述只是“根据第一状态信息判断是否允许启动下一个子数据集合的加载操作”的几个示例,还可以采用其它方式实现,对此不做限制。
在一个例子中,存储线程控制器可以获取第一状态信息,并将第一状态信息同步给加载线程控制器,使得加载线程控制器获取该第一状态信息。
参见图3C所示,为存储线程控制器的硬件结构图,存储线程控制器可以包括指令队列、指令地址发生器和指令译码器。指令队列用于存储与加载操作有关的指令(即加载指令集合),加载指令集合用于实现加载操作的流程控制。
指令地址发生器,用于触发指令队列输出指令给指令译码器。在接收到启动指令(即外部触发信号)后,重置指令队列的程序指针(PC count,作为指令队列的指针,指向下一个指令),即触发指令队列输出第一个指令给指令译码器。若接收到指令译码器返回的跳转指令,则重置指令队列的程序指针,触发指令队列输出跳转指令对应的指令给指令译码器。若接收到指令译码器返回的非跳转指令,则将程序指针+1,触发指令队列输出对应指令给指令译码器。
指令译码器,用于在接收到指令队列输出的指令后,将指令翻译成硬件单元能够执行的命令,并将硬件单元能够执行的命令输出给硬件单元,由硬件单元执行。在指令处理完成后,向指令地址发生器发送跳转指令或非跳转指令。
三,存储线程控制器,以下介绍存储线程控制器的相关功能。
存储线程控制器能够存储与存储操作有关的多个指令,为了区分方便,可以将这些指令组成的集合称为存储指令集合,存储线程控制器通过运行存储指令集合,以进行如下存储操作步骤:从加载线程控制器的第一存储区域获取子数据集合,该子数据集合包括一行多列的子数据集合,并将该子数据集合存储到存储线程控制器的第二存储区域。例如,第二存储区域可以为图3A所示的行缓存2,或者,图3A所示的缓冲区(如buffer),或者,图3A所示的行缓存2和缓冲区。行缓存2是本申请中新增加的存储区域,是存储线程控制器、计算线程控制器、加载线程控制器均能够访问的存储区域。缓冲区(如buffer)是传统意义的存储区域,用于存储输入数据集合的每行数据,对此不做限制。
存储线程控制器将子数据集合存储到存储线程控制器的第二存储区域之后,存储线程控制器可以判断是否允许启动下一个子数据集合的存储操作;如果是,则可以返回执行从加载线程控制器的第一存储区域获取下一个子数据集合的步骤;如果否,则可以停止从第一存储区域获取下一个子数据集合。
在一个例子中,主线程控制器可以向存储线程控制器发送第二启动命令,存储线程控制器在接收到第二启动命令后,可以运行存储指令集合,即启动存储线程控制器。存储线程控制器在启动后,通过运行存储指令集合,以进行上述存储操作步骤,存储操作步骤的实现参见上述实施例,在此不再赘述。
在一个例子中,主线程控制器可以向存储线程控制器发送第二参数调整命令,存储线程控制器在接收到该第二参数调整命令后,可以确定存储操作的第二运行参数(例如,第二运行参数可以为存储操作的运行次数),并在存储指令集合中添加该第二运行参数,这样,存储线程控制器在运行所述存储指令集合时,就可以根据该第二运行参数进行上述的存储操作步骤。
参见图3B所示,存储指令集合可以包括但不限于以下一种或者多种:
Loop(cnt)指令,存储指令集合的入口,用于实现循环计数器的功能,即可以称为循环计数器指令,cnt表示次数,初始值为存储操作的运行次数,如10。
Wait(sync)指令,用于实现条件判断的功能,即可以称为条件判断指令,通过运行Wait(sync)指令,存储线程控制器判断是否允许启动下一行操作。
Store()指令,用于实现存储操作的功能,即可以称为存储操作指令,通过运行Store()指令,存储线程控制器可以存储输入数据集合的一行数据。
Set()指令,用于修正指令参数,如修正循环计数器指令中cnt的值,也就是说,在当前cnt值的基础上减去1,表示已经完成一次循环,循环次数减1。
Goto()指令,用于实现跳转,可以称为跳转指令。若修正后的cnt值大于0,跳转到Wait(sync)指令,从循环开始重新执行;若cnt值为0,执行Break指令。
Break指令,表示存储过程已经结束,向主线程控制器发送Return命令。
当然,上述只是存储指令集合的一个示例,对此存储指令集合不做限制。
基于上述存储指令集合,则存储线程控制器的一个实现流程可以包括:
在接收到第二启动命令后,存储线程控制器开始工作。
在接收到第二参数调整命令后,将存储操作的运行次数设置为10。
判断是否允许启动下一行操作。由于运行次数为10,因此启动下一行操作。
从行缓存1获取输入数据集合的第一行数据(即子数据集合),并将输入数据集合的第一行数据存储到行缓存2和缓冲区(如buffer)中。
将存储操作的运行次数更新为9(即10-1=9)。
由于运行次数9大于0,因此,返回执行判断是否允许启动下一行操作。
进一步的,由于运行次数为9,因此,启动下一行操作。
从行缓存1获取输入数据集合的第二行数据(即子数据集合),并将输入数据集合的第二行数据存储到行缓存2和缓冲区(如buffer)中。
将存储操作的运行次数更新为8(即9-1=8)。
以此类推,不断循环上述操作,一直到获取输入数据集合的第十行数据,并将输入数据集合的第十行数据存储到行缓存2和缓冲区(如buffer)中。
将存储操作的运行次数更新为0。由于运行次数0等于0,因此,存储过程已经结束,至此,存储线程控制器成功存储输入数据集合的所有数据。
在上述实施例中,存储线程控制器判断是否允许启动下一个子数据集合的存储操作(即是否允许启动下一行操作),是基于运行次数确定的,也就是说,当运行次数大于0时,则存储线程控制器允许启动下一个子数据集合的存储操作,当运行次数等于0时,则不允许启动下一个子数据集合的存储操作。
在另一个例子中,存储线程控制器还可以获取计算线程控制器的第二状态信息,并根据该第二状态信息判断是否允许启动下一个子数据集合的存储操作。
例如,当计算线程控制器的第二状态信息为计算线程控制器异常时,则不允许启动下一个子数据集合的存储操作。当计算线程控制器的第二状态信息为计算线程控制器正常时,则允许启动下一个子数据集合的存储操作。
又例如,当计算线程控制器的第二状态信息为计算线程控制器未从行缓存2中读取最新的子数据集合时,则不允许启动下一个子数据集合的存储操作。当计算线程控制器的第二状态信息为计算线程控制器已经从行缓存2中读取最新的子数据集合时,则允许启动下一个子数据集合的存储操作。
又例如,当计算线程控制器的第二状态信息为行缓存2中未被读取的子数据集合的数量,达到阈值(如3)时,则不允许启动下一个子数据集合的存储操作。当计算线程控制器的第二状态信息为行缓存2中未被读取的子数据集合的数量,未达到阈值时,则允许启动下一个子数据集合的存储操作。
当然,上述只是“根据第二状态信息判断是否允许启动下一个子数据集合的存储操作”的几个示例,还可以采用其它方式实现,对此不做限制。
在一个例子中,计算线程控制器可以获取第二状态信息,并将第二状态信息同步给存储线程控制器,使得存储线程控制器获取该第二状态信息。
参见图3C所示,为存储线程控制器的硬件结构图,存储线程控制器可以包括指令队列、指令地址发生器和指令译码器。指令队列用于存储与存储操作有关的指令(即存储指令集合),存储指令集合用于实现存储操作的流程控制。
指令地址发生器,用于触发指令队列输出指令给指令译码器。在接收到启动指令(即外部触发信号)后,重置指令队列的程序指针(PC count,作为指令队列的指针,指向下一个指令),即触发指令队列输出第一个指令给指令译码器。若接收到指令译码器返回的跳转指令,则重置指令队列的程序指针,触发指令队列输出跳转指令对应的指令给指令译码器。若接收到指令译码器返回的非跳转指令,则将程序指针+1,触发指令队列输出对应指令给指令译码器。
指令译码器,用于在接收到指令队列输出的指令后,将指令翻译成硬件单元能够执行的命令,并将硬件单元能够执行的命令输出给硬件单元,由硬件单元执行。在指令处理完成后,向指令地址发生器发送跳转指令或非跳转指令。
四,计算线程控制器,以下介绍计算线程控制器的相关功能。
计算线程控制器能够存储与计算操作有关的多个指令,为了区分方便,可以将这些指令组成的集合称为计算指令集合,计算线程控制器通过运行计算指令集合,以进行如下计算操作步骤:从存储线程控制器的第二存储区域(如行缓存2或者缓冲区(如buffer),后续以行缓存2为例)获取子数据集合,该子数据集合包括一行多列的子数据集合,并利用子数据集合获取输出数据集合。
例如,若输出数据集合是输入数据集合中大小为M*N的子区域,则计算线程控制器从行缓存2获取M次子数据集合,即获取到输入数据集合中的M行数据,这样,就可以利用M行数据构造大小为M*N的输出数据集合。
然后,可以利用输出数据集合进行CNN的卷积运算,例如,可以将输出数据集合与预配置矩阵进行卷积运算,对此卷积运算过程不做限制。
在一个例子中,计算线程控制器还可以对应一个行缓存3,在将输出数据集合与预配置矩阵进行卷积运算后,还可以将卷积运算结果存储到行缓存3中,这样,其它应用可以从行缓存3中读取卷积运算结果,对此不做限制。
计算线程控制器从存储线程控制器的第二存储区域获取子数据集合之后,计算线程控制器还可以判断是否允许启动下一个子数据集合的计算操作;如果是,则可以返回执行从存储线程控制器的第二存储区域获取下一个子数据集合的步骤;如果否,则可以停止从第二存储区域获取下一个子数据集合。
在一个例子中,主线程控制器可以向计算线程控制器发送第三启动命令,计算线程控制器在接收到第三启动命令后,可以运行计算指令集合,即启动计算线程控制器。计算线程控制器在启动后,通过运行计算指令集合,以进行上述计算操作步骤,计算操作步骤的实现参见上述实施例,在此不再赘述。
在一个例子中,主线程控制器可以向计算线程控制器发送第三参数调整命令,计算线程控制器在接收到该第三参数调整命令后,可以确定计算操作的第三运行参数(例如,第三运行参数可以为计算操作的运行次数),并在计算指令集合中添加该第三运行参数,这样,计算线程控制器在运行所述计算指令集合时,就可以根据该第三运行参数进行上述的计算操作步骤。
参见图3B所示,计算指令集合可以包括但不限于以下一种或者多种:
Loop(cnt)指令,计算指令集合的入口,用于实现循环计数器的功能,即可以称为循环计数器指令,cnt表示次数,初始值为计算操作的运行次数,如10。
Wait(sync)指令,用于实现条件判断的功能,即可以称为条件判断指令,通过运行Wait(sync)指令,计算线程控制器判断是否允许启动下一行操作。
Cal()指令,用于实现计算操作的功能,即可以称为计算操作指令,通过运行Cal()指令,计算线程控制器可以利用输入数据集合的一行数据进行计算。
Set()指令,用于修正指令参数,如修正循环计数器指令中cnt的值,也就是说,在当前cnt值的基础上减去1,表示已经完成一次循环,循环次数减1。
Goto()指令,用于实现跳转,可以称为跳转指令。若修正后的cnt值大于0,跳转到Wait(sync)指令,从循环开始重新执行;若cnt值为0,执行Break指令。
Break指令,表示计算过程已经结束,向主线程控制器发送Return命令。
当然,上述只是计算指令集合的一个示例,对此计算指令集合不做限制。
基于上述计算指令集合,则计算线程控制器的一个实现流程可以包括:
在接收到第三启动命令后,计算线程控制器开始工作。
在接收到第三参数调整命令后,将计算操作的运行次数设置为10。
判断是否允许启动下一行操作。由于运行次数为10,因此启动下一行操作。
从行缓存2获取输入数据集合的第一行数据(即子数据集合),并利用输入数据集合的第一行数据构造输出数据集合。假设输出数据集合为2行4列,则利用输入数据集合的第一行数据构造输出数据集合的第一行数据。
将计算操作的运行次数更新为9(即10-1=9)。
由于运行次数9大于0,因此,返回执行判断是否允许启动下一行操作。
进一步的,由于运行次数为9,因此,启动下一行操作。
从行缓存2获取输入数据集合的第二行数据(即子数据集合),并利用输入数据集合的第二行数据构造输出数据集合的第二行数据。由于输出数据集合为2行4列,因此,在构造输出数据集合的第二行数据后,可以得到完整的输出数据集合,并利用完整的输出数据集合进行卷积运算,对此不做限制。
将计算操作的运行次数更新为8(即9-1=8)。以此类推,不断循环上述操作,一直到获取输入数据集合的第十行数据,并利用输入数据集合的所有数据构造多个输出数据集合(如第一行数据和第二行数据构造的输出数据集合、第二行数据和第三行数据构造的输出数据集合、第三行数据和第四行数据构造的输出数据集合,以此类推),并利用这些输出数据集合进行卷积运算。
将计算操作的运行次数更新为0。由于运行次数0等于0,因此,计算过程已经结束,至此,计算线程控制器成功完成输出数据集合的卷积运算。
在上述实施例中,计算线程控制器判断是否允许启动下一个子数据集合的计算操作(即是否允许启动下一行操作),是基于运行次数确定的,也就是说,当运行次数大于0时,则计算线程控制器允许启动下一个子数据集合的计算操作,当运行次数等于0时,则不允许启动下一个子数据集合的计算操作。
参见图3C所示,为计算线程控制器的硬件结构图,计算线程控制器可以包括指令队列、指令地址发生器和指令译码器。指令队列用于存储与计算操作有关的指令(即计算指令集合),计算指令集合用于实现计算操作的流程控制。
指令地址发生器,用于触发指令队列输出指令给指令译码器。在接收到启动指令(即外部触发信号)后,重置指令队列的程序指针(PC count,作为指令队列的指针,指向下一个指令),即触发指令队列输出第一个指令给指令译码器。若接收到指令译码器返回的跳转指令,则重置指令队列的程序指针,触发指令队列输出跳转指令对应的指令给指令译码器。若接收到指令译码器返回的非跳转指令,则将程序指针+1,触发指令队列输出对应指令给指令译码器。
指令译码器,用于在接收到指令队列输出的指令后,将指令翻译成硬件单元能够执行的命令,并将硬件单元能够执行的命令输出给硬件单元,由硬件单元执行。在指令处理完成后,向指令地址发生器发送跳转指令或非跳转指令。
在上述实施例中,加载线程控制器、存储线程控制器和计算线程控制器,可以是并行执行,也就是说,加载线程控制器执行的加载操作步骤、存储线程控制器执行的存储操作步骤、计算线程控制器执行的计算操作步骤是并行执行。
基于上述技术方案,本申请实施例中,通过对输入数据集合的子数据集合进行加载操作、存储操作和计算操作,而不对输入数据集合本身进行加载操作、存储操作和计算操作,使得加载操作、存储操作和计算操作并行执行。也就是说,在加载操作的执行过程中,可以进行存储操作和计算操作。在存储操作的执行过程中,可以进行加载操作和计算操作。在计算操作的执行过程中,可以进行加载操作和存储操作。显然,由于加载操作、存储操作和计算操作并行执行,因此,总执行时间小于加载操作的执行时间、存储操作的执行时间、计算操作的执行时间之和,从而节约处理时间,提升处理效率和计算效率。
而且,输入数据集合可以被切分成很多行,加载操作、存储操作和计算操作均可以按照1行数据为单位进行操作,因此,可以得到流水线处理的方案。通过在FPGA实现4个不同的指令队列的协同工作,实现加载操作、存储操作和计算操作的行式流水操作,提升计算效率到90%以上。指令队列的实现代价非常小,在计算密集的处理场景,流程控制只需要轻量级的核以及简易的核间通信机制,非常适合在FPGA实现不同硬件加速单元的任务流水控制。
基于与上述方法同样的申请构思,本申请实施例还提供一种逻辑芯片,如图4所示,为所述逻辑芯片的结构图,所述逻辑芯片包括:
主线程控制器41,用于将输入数据集合的存储位置通知给加载线程控制器;
加载线程控制器42,用于根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
存储线程控制器43,用于从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;
计算线程控制器44,用于从所述存储线程控制器的第二存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合。
所述主线程控制器41,还用于向所述加载线程控制器发送第一启动命令,以使所述加载线程控制器根据所述第一启动命令运行加载指令集合;其中,所述加载指令集合用于使所述加载线程控制器执行输入数据集合的加载操作;
所述主线程控制器41,还用于向所述存储线程控制器发送第二启动命令,以使所述存储线程控制器根据所述第二启动命令运行存储指令集合;其中,所述存储指令集合用于使所述存储线程控制器执行输入数据集合的存储操作;
所述主线程控制器41,还用于向所述计算线程控制器发送第三启动命令,以使所述计算线程控制器根据所述第三启动命令运行计算指令集合;其中,所述计算指令集合用于使所述计算线程控制器执行输入数据集合的计算操作。
所述主线程控制器41,还用于向所述加载线程控制器发送第一参数调整命令,以使所述加载线程控制器根据所述第一参数调整命令确定加载操作的第一运行参数,并根据所述第一运行参数执行输入数据集合的加载操作;
所述主线程控制器41,还用于向所述存储线程控制器发送第二参数调整命令,以使所述存储线程控制器根据所述第二参数调整命令确定存储操作的第二运行参数,并根据所述第二运行参数执行输入数据集合的存储操作;
所述主线程控制器41,还用于向所述计算线程控制器发送第三参数调整命令,以使所述计算线程控制器根据所述第三参数调整命令确定计算操作的第三运行参数,并根据所述第三运行参数执行输入数据集合的计算操作。
基于与上述方法同样的申请构思,本申请实施例还提供一种数据处理设备,包括:逻辑芯片和机器可读存储介质;其中,所述机器可读存储介质上存储有若干计算机指令,所述逻辑芯片执行所述计算机指令时实现上述方法步骤。
本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被执行时实现上述方法步骤。
参见图5所示,为本申请实施例中提出的数据处理设备的结构图,所述数据处理设备50可以包括:逻辑芯片51,网络接口52,总线53,存储器54。
存储器54可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据等等。例如,存储器54可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等)。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (16)
1.一种数据处理方法,其特征在于,所述方法包括:
主线程控制器将输入数据集合的存储位置通知给加载线程控制器;
加载操作步骤:所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
存储操作步骤:存储线程控制器从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;
计算操作步骤:计算线程控制器从所述存储线程控制器的第二存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合;
所述加载操作步骤、所述存储操作步骤和所述计算操作步骤是并行执行。
2.根据权利要求1所述的方法,其特征在于,在所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合之前,还包括:
所述主线程控制器向所述加载线程控制器发送第一启动命令,以使所述加载线程控制器根据所述第一启动命令运行加载指令集合;其中,所述加载指令集合用于使所述加载线程控制器执行输入数据集合的加载操作;
所述主线程控制器向所述存储线程控制器发送第二启动命令,以使所述存储线程控制器根据所述第二启动命令运行存储指令集合;其中,所述存储指令集合用于使所述存储线程控制器执行输入数据集合的存储操作;
所述主线程控制器向所述计算线程控制器发送第三启动命令,以使所述计算线程控制器根据所述第三启动命令运行计算指令集合;其中,所述计算指令集合用于使所述计算线程控制器执行输入数据集合的计算操作。
3.根据权利要求1所述的方法,其特征在于,所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合之前,还包括:
所述主线程控制器向所述加载线程控制器发送第一参数调整命令,以使所述加载线程控制器根据所述第一参数调整命令确定加载操作的第一运行参数,并根据所述第一运行参数执行输入数据集合的加载操作;
所述主线程控制器向所述存储线程控制器发送第二参数调整命令,以使所述存储线程控制器根据所述第二参数调整命令确定存储操作的第二运行参数,并根据所述第二运行参数执行输入数据集合的存储操作;
所述主线程控制器向所述计算线程控制器发送第三参数调整命令,以使所述计算线程控制器根据所述第三参数调整命令确定计算操作的第三运行参数,并根据所述第三运行参数执行输入数据集合的计算操作。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述加载线程控制器将所述子数据集合存储到所述加载线程控制器的第一存储区域之后,还包括:
所述加载线程控制器判断是否允许启动下一个子数据集合的加载操作;
如果是,返回执行根据所述存储位置获取所述输入数据集合的下一个子数据集合的步骤;如果否,则停止获取所述输入数据集合的下一个子数据集合。
5.根据权利要求4所述的方法,其特征在于,所述加载线程控制器判断是否允许启动下一个子数据集合的加载操作,具体包括:
所述加载线程控制器获取所述存储线程控制器的第一状态信息,并根据所述第一状态信息判断是否允许启动下一个子数据集合的加载操作。
6.根据权利要求1-3任一项所述的方法,其特征在于,所述存储线程控制器将所述子数据集合存储到所述存储线程控制器的第二存储区域之后,还包括:
所述存储线程控制器判断是否允许启动下一个子数据集合的存储操作;
如果是,返回执行从所述加载线程控制器的第一存储区域获取下一个子数据集合的步骤;如果否,则停止从第一存储区域获取下一个子数据集合。
7.根据权利要求6所述的方法,其特征在于,所述存储线程控制器判断是否允许启动下一个子数据集合的存储操作,具体包括:
所述存储线程控制器获取所述计算线程控制器的第二状态信息,并根据所述第二状态信息判断是否允许启动下一个子数据集合的存储操作。
8.根据权利要求1-3任一项所述的方法,其特征在于,所述计算线程控制器从所述存储线程控制器的第二存储区域获取所述子数据集合之后,还包括:
所述计算线程控制器判断是否允许启动下一个子数据集合的计算操作;
如果是,则返回执行从所述存储线程控制器的第二存储区域获取下一个子数据集合的步骤;如果否,则停止从第二存储区域获取下一个子数据集合。
9.一种数据处理方法,其特征在于,所述方法包括:
加载操作步骤:根据输入数据集合的存储位置,获取所述输入数据集合的子数据集合;其中,所述子数据集合包括一行多列的子数据集合;
存储操作步骤:将加载操作得到的所述子数据集合存储到缓冲区;
计算操作步骤:从所述缓冲区中获取所述子数据集合,并根据所述子数据集合获取输出数据集合;
所述加载操作步骤、所述存储操作步骤和所述计算操作步骤是并行执行。
10.一种数据处理方法,其特征在于,所述方法包括:
加载线程控制器通过运行所述加载线程控制器存储的加载指令集合,以进行如下加载操作步骤:根据输入数据集合的存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
存储线程控制器通过运行所述存储线程控制器存储的存储指令集合,以进行如下存储操作步骤:从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;
计算线程控制器通过运行所述计算线程控制器存储的计算指令集合,以进行如下计算操作步骤:从所述存储线程控制器的第二存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合;
所述加载操作步骤、所述存储操作步骤和所述计算操作步骤是并行执行。
11.一种数据处理方法,其特征在于,所述方法包括:
主线程控制器将输入数据集合的存储位置通知给加载线程控制器;
加载操作步骤:所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
计算操作步骤:计算线程控制器从所述加载线程控制器的第一存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合;
所述加载操作步骤和所述计算操作步骤是并行执行。
12.一种数据处理方法,其特征在于,所述方法包括:
主线程控制器将输入数据集合的存储位置通知给加载线程控制器;
加载操作步骤:所述加载线程控制器根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
存储操作步骤:存储线程控制器从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;
所述加载操作步骤和所述存储操作步骤是并行执行。
13.一种逻辑芯片,其特征在于,所述逻辑芯片包括:
主线程控制器,用于将输入数据集合的存储位置通知给加载线程控制器;
加载线程控制器,用于根据所述存储位置获取所述输入数据集合的子数据集合,并将所述子数据集合存储到所述加载线程控制器的第一存储区域;
存储线程控制器,用于从所述加载线程控制器的第一存储区域获取所述子数据集合,并将所述子数据集合存储到所述存储线程控制器的第二存储区域;
计算线程控制器,用于从所述存储线程控制器的第二存储区域获取所述子数据集合,并利用所述子数据集合获取输出数据集合;
其中,所述加载线程控制器的操作过程、所述存储线程控制器的操作过程和所述计算线程控制器的操作过程是并行执行。
14.根据权利要求13所述的逻辑芯片,其特征在于,
所述主线程控制器,还用于向所述加载线程控制器发送第一启动命令,以使所述加载线程控制器根据所述第一启动命令运行加载指令集合;其中,所述加载指令集合用于使所述加载线程控制器执行输入数据集合的加载操作;
所述主线程控制器,还用于向所述存储线程控制器发送第二启动命令,以使所述存储线程控制器根据所述第二启动命令运行存储指令集合;其中,所述存储指令集合用于使所述存储线程控制器执行输入数据集合的存储操作;
所述主线程控制器,还用于向所述计算线程控制器发送第三启动命令,以使所述计算线程控制器根据所述第三启动命令运行计算指令集合;其中,所述计算指令集合用于使所述计算线程控制器执行输入数据集合的计算操作。
15.根据权利要求13所述的逻辑芯片,其特征在于,
所述主线程控制器,还用于向所述加载线程控制器发送第一参数调整命令,以使所述加载线程控制器根据所述第一参数调整命令确定加载操作的第一运行参数,并根据所述第一运行参数执行输入数据集合的加载操作;
所述主线程控制器,还用于向所述存储线程控制器发送第二参数调整命令,以使所述存储线程控制器根据所述第二参数调整命令确定存储操作的第二运行参数,并根据所述第二运行参数执行输入数据集合的存储操作;
所述主线程控制器,还用于向所述计算线程控制器发送第三参数调整命令,以使所述计算线程控制器根据所述第三参数调整命令确定计算操作的第三运行参数,并根据所述第三运行参数执行输入数据集合的计算操作。
16.一种数据处理设备,其特征在于,所述数据处理设备包括:
逻辑芯片和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述逻辑芯片执行所述计算机指令时实现权利要求1-8的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910312392.8A CN111831405B (zh) | 2019-04-18 | 2019-04-18 | 一种数据处理方法、逻辑芯片及其设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910312392.8A CN111831405B (zh) | 2019-04-18 | 2019-04-18 | 一种数据处理方法、逻辑芯片及其设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111831405A CN111831405A (zh) | 2020-10-27 |
CN111831405B true CN111831405B (zh) | 2024-05-14 |
Family
ID=72914792
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910312392.8A Active CN111831405B (zh) | 2019-04-18 | 2019-04-18 | 一种数据处理方法、逻辑芯片及其设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831405B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006039183A2 (en) * | 2004-09-30 | 2006-04-13 | Intel Corporation | Expansion of compute engine code space by sharing adjacent control stores using interleaved program addresses |
CN104239181A (zh) * | 2013-06-24 | 2014-12-24 | 国际商业机器公司 | 累计用于电子系统的硬件计数的方法和电子系统 |
CN104571957A (zh) * | 2014-12-29 | 2015-04-29 | 成都致云科技有限公司 | 一种数据读取方法及组装装置 |
JP2017173921A (ja) * | 2016-03-18 | 2017-09-28 | 大同信号株式会社 | 多重系電子計算機および多重系電子計算機用プログラム |
CN108132811A (zh) * | 2017-12-15 | 2018-06-08 | 杭州迪普科技股份有限公司 | 一种fpga程序数据的加载方法及装置 |
-
2019
- 2019-04-18 CN CN201910312392.8A patent/CN111831405B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006039183A2 (en) * | 2004-09-30 | 2006-04-13 | Intel Corporation | Expansion of compute engine code space by sharing adjacent control stores using interleaved program addresses |
CN104239181A (zh) * | 2013-06-24 | 2014-12-24 | 国际商业机器公司 | 累计用于电子系统的硬件计数的方法和电子系统 |
CN104571957A (zh) * | 2014-12-29 | 2015-04-29 | 成都致云科技有限公司 | 一种数据读取方法及组装装置 |
JP2017173921A (ja) * | 2016-03-18 | 2017-09-28 | 大同信号株式会社 | 多重系電子計算機および多重系電子計算機用プログラム |
CN108132811A (zh) * | 2017-12-15 | 2018-06-08 | 杭州迪普科技股份有限公司 | 一种fpga程序数据的加载方法及装置 |
Non-Patent Citations (1)
Title |
---|
基于CPLD的并行多路数据采集控制器;高振斌, 苏彦莽;河北大学学报(自然科学版);20050730(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111831405A (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11080049B2 (en) | Apparatus and methods for matrix multiplication | |
US11321423B2 (en) | Operation accelerator | |
US11640316B2 (en) | Compiling and scheduling transactions in neural network processor | |
US11593594B2 (en) | Data processing method and apparatus for convolutional neural network | |
US10534841B2 (en) | Appartus and methods for submatrix operations | |
JP7098753B2 (ja) | ニューラルネットワークプロセッサにおいてタスクを割り当てるためのシステム及び方法 | |
CN110574045B (zh) | 用于优化后的深度网络处理的图形匹配 | |
CN110678847A (zh) | 用于gpu任务调度的连续分析任务 | |
CN109416636B (zh) | 共享的机器学习数据结构 | |
US20200327078A1 (en) | Data processing method and device, dma controller, and computer readable storage medium | |
CN108073687B (zh) | 随机游走、基于集群的随机游走方法、装置以及设备 | |
CN108681773B (zh) | 数据运算的加速方法、装置、终端及可读存储介质 | |
CN112074847A (zh) | 拆分用于在神经网络处理器中处理的输入数据 | |
US9513923B2 (en) | System and method for context migration across CPU threads | |
WO2016208260A1 (ja) | 画像認識装置および画像認識方法 | |
CN111133457A (zh) | 电子设备及其控制方法 | |
CN111831405B (zh) | 一种数据处理方法、逻辑芯片及其设备 | |
US20210304010A1 (en) | Neural network training under memory restraint | |
CN112970037A (zh) | 用于实施神经网络应用的多芯片系统、适用于多芯片系统的数据处理方法、和非暂时性计算机可读介质 | |
US20200225877A1 (en) | Information processing apparatus and memory control method | |
CN111027682A (zh) | 神经网络处理器、电子设备及数据处理方法 | |
CN111831207A (zh) | 一种数据处理方法、装置及其设备 | |
CN110795903B (zh) | 指令处理方法、装置及相关产品 | |
CN111798363B (zh) | 图形处理器 | |
US20240095541A1 (en) | Compiling of tasks for streaming operations at neural processor |
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 |