CN118210598A - 用于执行任务的方法及其相关产品 - Google Patents
用于执行任务的方法及其相关产品 Download PDFInfo
- Publication number
- CN118210598A CN118210598A CN202211617284.XA CN202211617284A CN118210598A CN 118210598 A CN118210598 A CN 118210598A CN 202211617284 A CN202211617284 A CN 202211617284A CN 118210598 A CN118210598 A CN 118210598A
- Authority
- CN
- China
- Prior art keywords
- task
- issued
- current
- tasks
- actual
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 118
- 238000012545 processing Methods 0.000 claims abstract description 308
- 238000013473 artificial intelligence Methods 0.000 claims abstract description 26
- 238000003860 storage Methods 0.000 claims abstract description 24
- 230000004044 response Effects 0.000 claims description 50
- 230000008569 process Effects 0.000 claims description 43
- 238000013519 translation Methods 0.000 claims description 12
- 230000014616 translation Effects 0.000 claims description 12
- 239000000872 buffer Substances 0.000 claims description 5
- 230000003139 buffering effect Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 18
- 238000004891 communication Methods 0.000 description 17
- 238000010801 machine learning Methods 0.000 description 9
- 238000013135 deep learning Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 238000012546 transfer Methods 0.000 description 8
- PSYGHMBJXWRQFD-UHFFFAOYSA-N 2-(2-sulfanylacetyl)oxyethyl 2-sulfanylacetate Chemical compound SCC(=O)OCCOC(=O)CS PSYGHMBJXWRQFD-UHFFFAOYSA-N 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 239000011159 matrix material Substances 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 210000004027 cell Anatomy 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000007418 data mining Methods 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000005111 flow chemistry technique Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 238000005481 NMR spectroscopy Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 238000005406 washing Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本公开涉及一种用于执行任务调度的方法及其相关产品,其中该相关产品包括任务调度器、人工智能处理器、设备、板卡和计算机可读存储介质。该设备可以包括在组合处理装置的计算处理装置中,该计算处理装置可以包括一个或多个数据处理装置。前述的组合处理装置还可以包括接口装置和其他处理装置。所述计算处理装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与设备和其他处理装置连接,用于存储该设备和其他处理装置的数据。通过本公开的方案,可以优化调度操作并且实现多任务情况下的任务并行处理。
Description
技术领域
本公开一般地涉及计算机领域。更具体地,本公开涉及一种用于执行任务的方法、用于执行前述方法的任务调度器、人工智能处理器、板卡、设备和计算机可读存储介质。
背景技术
随着AI技术的发展,对软硬件处理性能的要求越来越高,处理性能分为吞吐和延迟,对于任务连续下发的场景,尽可能提高吞吐是所有执行组件(软件和硬件)的共同追求。
AI任务的通用编程模式为创建一个任务流(Stream),接着向任务流(Stream)中连续下发任务(如,拷贝任务+执行任务+拷贝任务),最后调用同步接口(Sync)等待这些任务完成。其中,基于任务流(Stream)的编程模型需要保证任务会严格按照下发(进入流)的顺序执行;并且,任务下发到硬件执行时,也会按照任务流(Stream)的约束进行调度,即硬件会按照下发顺序取出任务并依次执行。
在AI任务流的实际执行过程中,由于连续任务的处理量大,且任务间往往存在依赖关系,需要顺序执行,因此,任务流中连续任务的处理效率较低。鉴于此,亟需一种在任务流中高效处理连续任务的方案。
发明内容
为了至少解决如上所提到的一个或多个技术问题,本公开在多个方面中提出了处理任务流中连续任务的方案,利用本公开的方案,可以实现处理效率较高的任务并行处理架构。
在第一方面中,本公开提供了一种任务调度器,设置于人工智能处理器中,所述人工智能处理器还包括用于处理任务的N个任务处理电路,所述任务调度器包括:任务划分电路,其用于将第一任务流中N种任务类型的任务分别划分到N个第二任务流中,以使得N个任务处理电路分别对应处理N个第二任务流中的任务,其中,同一个第二任务流中所有任务的任务类型相同,所述N为大于一的整数;第一发送电路,其用于在任一所述任务处理电路执行已发任务的实际部分期间,向当前任务对应的任务处理电路发送所述当前任务的预取部分,以使得任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分;其中,所述当前任务为当前正在执行下发的任务,一个任务包括彼此关联的预取部分和实际部分。
在第二方面中,本公开提供了一种人工智能处理器,包括:如第一方面所述的任务调度器,其配置成将多个任务调度至相应的任务处理电路中进行处理;N个任务处理电路,其配置成处理所述任务调度器下发的任务,所述N为大于一的整数。
在第三方面中,本公开提供了一种板卡,包括根据第二方面中所述的人工智能处理器。
在第四方面中,本公开提供了一种用于执行任务的方法,包括:将第一任务流中N种任务类型的任务分别划分到N个第二任务流中,以使得N个任务处理电路分别对应处理N个第二任务流中的任务;其中,同一个第二任务流中所有任务的任务类型相同,所述N为大于一的整数;在任一任务处理电路处理已发任务的实际部分期间,向所述任一任务处理电路发送当前任务的预取部分,以使得任务处理电路能够并行处理所述已发任务的实际部分以及所述当前任务的预取部分;其中,所述当前任务为当前正在执行下发的任务,一个任务包括彼此关联的预取部分和实际部分。
在第五方面中,本公开提供了一种用于执行任务的设备,包括:处理器;以及存储器,其存储有用于执行任务的程序指令,当所述程序指令由所述处理器执行时,执行上文所述及其下文将讨论到的多个实施例。
在第六方面中,本公开提供了一种计算机可读存储介质,其存储有用于执行任务的计算机程序指令,当所述计算机程序指令由处理器执行时,使得实现上文的方法及其下文将讨论到的多个实施例。
通过本公开如上多个方面中所提供的方案,可以实现处理效率较高的并行处理架构的任务调度。具体地,本公开通过对初始任务流进行同类划分,使得同一种任务类型的任务划分至同一个新任务流中,同类任务由对应的任务处理电路进行处理;并且,将任务划分成预取部分和实际部分,以使得任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分,由此提高了任务处理的效率。进一步,处理器通过同时支持预取部分和执行任务的并行执行,从而可以减小线程切换的开销、实现双线程的任务调度并且获得稳定的性能增益。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1是示意性示出根据本公开实施例的人工智能处理器的简化框图;
图2是示意性示出根据本公开实施例的任务调度器的详细结构框图;
图3是示意性示出根据本公开实施例的任务流划分后添加依赖关系的示意图;
图4是示意性示出根据本公开用于执行任务调度的方法的简化流程图;
图5是示意性示出根据本公开实施例的用于执行任务的方法细节的流程图;
图6是示意性示出根据本公开实施例的任务流处理时间的比对示意图;
图7是示出根据本公开实施例的数据流编程的软硬件架构的结构示意图;
图8是示出根据本公开实施例的板卡的结构图;
图9是示出根据本公开实施例的组合处理装置的结构图;
图10是示出根据本公开实施例的计算装置的内部结构示意图;
图11是示出根据本公开实施例的处理器核的内部结构示意图;以及
图12是示出根据本公开实施例的不同集群的处理器核间的数据写入过程示意图。
具体实施方式
应当理解,本公开的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本公开的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本公开说明书中所使用的术语仅仅是出于描述特定实施方式的目的,而并不意在限定本公开。如在本公开说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本公开说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
如前文提到的,为了实现高效的任务调度和执行,本公开的方案提出一种任务流分类机制以及任务并行处理机制。具体来说,本公开通过对初始任务流进行同类划分,使得同一种任务类型的任务划分至同一个新任务流中,同类任务由对应的任务处理电路进行处理;并且,通过将处理器运行的任务抽象地划分为预取部分(“prefetch task”)和实际部分(“real task”),以使得任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分,由此提高了任务处理的效率。进一步,处理器通过同时支持预取部分和执行任务的并行执行,从而可以减小线程切换的开销、实现双线程的任务调度。
下面结合附图来详细描述本公开的具体实施方式。
图1是示意性示出根据本公开实施例的人工智能(“AI”)处理器100的简化框图。可以理解的是,这里的人工智能处理器可以是下文结合图7将要描述的AI处理器701或图9中所示出的计算装置901,并且具有一个或多个处理器核,以便可以并行地执行多个任务。
如图1中所示,人工智能处理器100可以包括任务调度器102和任务处理电路202。这里,任务调度器可以接收来自于计算平台上层的一个或多个任务,并且将该一个或多个任务下发至任务处理电路202处进行执行。在一些场景中,来自于不同用户的任务流(其每个可以包括一个或多个任务)可以被任务调度器进行下发执行。根据本公开的上下文,这里的任务处理电路202可以是人工智能处理器中的运算器(或称计算核),并且其可以与任务调度器配合,以实现对下发任务的执行。图1中仅示的任务处理电路202的数量至少等于任务类型的数量N(N为大于一的整数)。
在一个场景中,本公开的任务调度器可以包括任务划分电路104和第一发送电路106。具体地,任务划分电路104用于将第一任务流中N种任务类型的任务分别划分到N个第二任务流中,以使得N个任务处理电路分别对应处理N个第二任务流中的任务,其中,同一个第二任务流中所有任务的任务类型相同,N为大于一的整数。在本公开实施例中,由于任务处理电路的任务处理类型与第二任务流中任务类型是相匹配的,因此,相对应的任务处理电路能够获知位于同一个第二任务流中在先任务的执行情况,进而为并行处理同一个第二任务流中的后续任务提供条件。
相应地,第一发送电路106用于在任一任务处理电路202执行已发任务的实际部分期间,向当前任务对应的任务处理电路发送当前任务的预取部分,以使得任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分;其中,当前任务为当前正在执行下发的任务,一个任务包括彼此关联的预取部分和实际部分。在实际应用中,依据不同的应用场景,当前任务可以为一个或多个。
在本公开实施例中,下发任务指的是由任务调度器发送到任务处理电路的任务。在一种实施方式中,任务调度器可以生成并维护一个下发任务次序,当前的下发任务根据下发任务次序确定。其中,一个任务的预取部分和实际部分在下发任务次序作为同一个任务的两部分分开排序。
在本公开的上下文中,第一任务流指的是同类任务划分前的任务流,第二任务流指的是同类任务划分后的任务流。具体的,第一任务流为外部输入至任务调度器的任务流,而第二任务流为任务调度器根据第一任务流中各个任务的任务类型创建的内部任务流。任务调度器需要对第一任务流中的多个任务(“第一任务流中的多个任务”等于“N个第二任务流中任务的总和”)进行调度处理,该多个任务的调度根据下发任务次序进行顺序处理。该下发任务次序由任务调度器生成,并在执行调度和任务处理的过程中实时更新。下发任务次序的初始化状态可以有多种实施方式,在一种实施方式中,可以是各个任务的预取部分和实际部分相间排列的形式,如:“01(预)、01(实)、02(预)、02(实)、03(预)、03(实)、04(预)、04(实)…”。在另一种实施方式中,可以是初始部分同时一个任务的预取部分和实际部分,其后顺序排列每个任务的预取部分,当收到一个任务实际部分的预完成指示时,再根据依赖关系插入下一个任务的实际部分,如:“01(预)、01(实)、02(预)、03(预)、04(预)…”。其中,“01”和“02”这类字符编码表示任务的任务标识(Task ID),“(预)”表示该任务的预取部分,“(实)”表示该任务的实际部分。
在本公开的实施例中,由于第一任务流的多个任务间存在依赖关系(如,在后任务的执行需要依赖已发任务的处理结果),因此,各个任务的实际部分需要顺序执行。需要说明的是,任务的实际部分执行完后才会得到处理结果,而任务的预取部分则不受任务间的依赖关系约束,因此,为了提高执行效率,任务的预取部分可以提前处理。而由于软硬件环境的不同,各类型任务的实际处理时间难以准确预测,且需要兼顾任务间的实际部分的依赖关系,因此,需要根据执行调度和任务处理的进度实时更新下发任务次序。
为了便于描述,在本公开的上下文中,将下发任务次序中当前在执行下发的任务称为当前任务。将下发任务次序中下发次序在该当前任务之前,且在任务处理电路中未完成处理的已下发任务称为已发任务。在本公开实施例的实际处理过程中,可以采用“任务的实际部分与任务的预取部分”的双线并行机制,在一个或多个任务处理电路中,可能存在两个或多个正在执行的任务。在当前任务下发之后,已发任务和当前任务可以都在相应的任务处理电路中处于正在执行的状态。正在任务处理电路中处理的已发任务可以为任务的预取部分或实际部分,同理,正在任务处理电路中处理的当前任务也可以为任务的预取部分或实际部分(但是,由于存在依赖关系,已发任务和当前任务两者不可以同时为任务的实际部分)。需要说明的是,本申请实施例中所提到的“已发任务”、“当前任务”和“待发首任务”都会同时带有任务标识以及区分预取或实际部分的标识。如,已发任务为“01(预)”,指的是任务标识为01的预取部分已经完成下发,但与“任务标识为01的实际部分是否下发”没有直接关系。
需要说明的是,已发任务和当前任务的名称仅表示任务在任务调度器中的先后下发状态,而在实际应用中,“已发”和“当前”并不表示任务在任务处理电路中的状态。已发任务和当前任务两者在任务处理电路中谁先处理完成是不确定的(具体取决于任务类型),若两者任一先完成处理,剩下的一个未完成任务则更新为新的已发任务,而任务调度器则会下发新的当前任务至相应的任务处理电路,同时,任务处理电路所维护的下发任务次序也会更新的待发首任务。即,已发任务、当前任务和待发首任务三者随任务调度和处理的进度动态更新。
如前,为了实现双线程任务调度机制,本公开将任务处理电路执行的任务抽象成两类任务,一种是真正运行的任务(“real task”),而另一种是为真正运行的任务服务的任务(“prefetch task”)。对于前者,本公开称之为实际部分,而对于后者,本公开称之预取部分。由此,本公开将任务处理电路执行的一项任务划分成两个部分,即预取部分和实际部分。
关于预取部分和实际部分,其作为一项任务中的两个部分可以通过不同的方式来划分。作为示例,可以通过程序指令来将一项任务拆分成彼此关联的预取部分和实际部分,该预取部分和实际部分可以设置成具有相同的标识位,以指示二者之间的关联性。替代地,本公开的任务调度器可以布置有专门于对任务进行划分的功能模块或电路,以实现将任务划分成预取部分和实际部分。在一个实施场景中,预取部分和实际部分可以具有共同的任务标识符,以指示二者具有关联性并且构成一个完整的任务。
在一些场景中,当一项任务包括取指、查询地址转换后援缓冲器(TranslationLookaside Buffer,“TLB”)、虚拟地址至物理地址转换(例如查询页表来找到地址映射关系)和执行等执行步骤时,则本公开将其中的取指、查询TLB和查询页表(包括参数载入等)归为预取部分所要执行的步骤,而将执行步骤归为实际部分。在一些场景中,当可以利用存储在片上如静态随机存储器(“SRAM”)的TLB来完成地址转换,则可以不执行查询如片外动态随机存储器(“DRAM”)上页表的操作。通过在执行实际部分之前先调度执行其对应的预取部分,可以在执行实际部分时省略如取指和查询等操作,从而可以提高任务执行的速度,并实现两类任务的并行执行。
图2是示意性示出本公开实施例的任务调度器的详细结构框图。应当理解的是图2所示任务调度器可以视为图1所示任务调度器的一种实施方式,因此关于图1所作描述同样适用于图2。
如图2中所示,本公开的任务调度器102包括任务划分电路104和第一发送电路106。关于该两个发送电路的主要功能,前面已经结合图1进行了描述,此处不再赘述。
在一个实施例中,任务调度器102还包括依赖添加电路108,其用于基于第一任务流中的执行次序对N个第二任务流中的任务添加依赖关系,以使得N个任务处理电路依据依赖关系中的次序顺序处理各个任务中的实际部分。需要说明的是,第一任务流中的多个任务有初始的执行次序,该执行次序体现多个任务间的依赖关系(即,在后任务需要依赖在先任务的执行结果)。与上述下发任务次序不同的是,该执行次序约束的是一个完整任务的次序,如“01、02、03…”,没有区分预取部分和实际部分。
图3是示意性示出本公开实施例中任务流划分后添加依赖关系的示意图300。如图3所示,第一任务流中包含A类任务(图中的黑球)和B类任务(图中的白球),经过任务调度器102中任务划分电路104进行同类任何划分,得到A类第二任务流和B类第二任务流,分别由任务处理电路A和任务处理电路B相应类型的任务。并且,通过依赖添加电路108添加A类第二任务流和B类第二任务流间各个任务的依赖关系,如图中A类第二任务流和B类第二任务流间(即,黑球和白球间)的箭头指向,使得各个任务的实际部分能够如图中黑球和白球间箭头指向的顺序依次执行。
在一个实施场景中,任务调度器102还包括第二发送电路110、第一接收电路112和第二接收电路114。为了实现任务的连续执行,第二发送电路用于在已发任务的实际部分执行完成前的预定时刻,向依赖关系中已发任务的下一个任务对应的任务处理电路,发送下一个任务的实际部分。在实际应用中,可以通过第一接收电路112和第二接收电路114及时地获知已发任务和/或当前任务在任务处理电路中的执行进度,具体地,第一接收电路112用于接收来自于任务处理电路针对已发任务的实际部分的第一预完成指示,第二接收电路114用于接收来自于任务处理电路针对当前任务的预取部分的第二预完成指示。
进一步地,通过任务调度器102中第一发送电路106、第二发送电路110、第一接收电路112以及第二接收电路114,可以及时获知任务调度和处理的进度,进而更新和管理下发任务次序。
在一种实施方式中,当已发任务的实际部分还未完成处理,而当前任务的预取部分已经完成处理,可以继续发送下发任务次序中下一个任务的预取部分,具体地,任务调度器102还包括次序更新电路116,用于根据任务调度器中任务的下发情况以及任务处理电路中任务的处理状态,更新任务调度器中存储的下发任务次序,使得任务调度器能够根据所述下发任务次序执行任务的下发。具体地,次序更新电路116响应于完成当前任务预取部分的发送,且未收到已发任务实际部分的第一预完成指示,将当前下发任务次序中首个待发的预取部分对应的任务更新为下发任务次序的待发首任务。若第一接收电路接收到已发任务的实际部分的第一预完成指示,次序更新电路116响应于第一预完成指示,将依赖关系中已发任务的下一个任务的实际部分更新为下发任务次序的待发首任务。若接收到当前任务的预取部分的第二预完成指示,第二发送电路响应于第二预完成指示,向当前任务对应的任务处理电路发送当前任务的实际部分。次序更新电路响应于第二发送电路发送当前任务的实际部分,将当前下发任务次序中首个待发的预取部分对应的任务更新为下发任务次序的待发首任务。
作为示例,以下以具体的实例对如何根据任务调度和处理的进度更新下发任务次序进行说明:假设第一任务流为“01(预)、01(实)、02(预)、02(实)、03(预)、03(实)、04(预)、04(实)、05(预)、05(实)、06(预)、06(实)”,下发任务次序的初始化状态与第一任务流的任务次序一致,依赖关系为:“01(实)、02(实)、03(实)、04(实)、05(实)、06(实)”其中,假设奇数的任务标识皆为A类任务,偶数的任务标识皆为B类任务。
由任务划分电路104将第一任务流划分为两个第二任务流。
A类第二任务流01(预)、01(实)、03(预)、03(实)、05(预)、05(实);
B类第二任务流02(预)、02(实)、04(预)、04(实)、06(预)、06(实);
由第一发送电路106先下发任务01(预)至任务处理电路A中,待任务01(预)执行完成,第二接收电路114接收来自于任务处理电路A发送的任务01(预)的第二预完成指示,响应于该第二预完成指示,第二发送电路110将任务01(实)发送至任务处理电路A中进行处理。
此时,任务01(实)为已发任务,任务02(预)为当前任务。第一发送电路106向任务处理电路B发送任务02(预),由于存在依赖关系,若任务02(预)发送完成且第一接收电路112未收到任务01(实)的第一预完成指示,则次序更新电路116将下发任务次序中的待发首任务更新为任务03(预)。
若任务02(预)下发后,第一接收电路112收到任务01(实)的第一预完成指示,根据依赖关系任务01(实)的下一个任务为任务02(实),则次序更新电路116将下发任务次序中的待发首任务更新为任务02(实)。此时,任务01(实)为已发任务,任务02(预)为当前任务。紧接着,若第二接收电路114收到任务02(预)的第二预完成指示,则第二发送电路110发送任务02(实)至任务处理电路B。
在发送任务02(实)后,会有两种情况:
一、假设为任务03(预)还未发送,将当前任务更新为任务02(实),次序更新电路116将下发任务次序中的待发首任务更新为任务03(预)。此时,已发任务为任务02(实),因为依赖关系的约束,仅有一个任务02(实)任务处理电路中执行。
二、假设为任务03(预)已发送,任务04(预)未发送,将当前任务更新为任务02(实),次序更新电路116将下发任务次序中的待发首任务更新为任务04(预)。此时,已发任务为任务03(预),当前任务为任务02(实)。
在另一种实施方式中,由于异构环境下硬件结构的约束,仅能并行处理属于一个第二任务流中任务的实际部分和当前任务的预取部分。具体地,次序更新电路116还用于响应于第一接收电路接收到第一预完成指示,将依赖关系中已发任务的下一个任务的预取部分更新为下发任务次序的待发首任务。
仍然以上述示例进行说明,下发任务次序的初始化状态“01(预)、01(实)、02(预)、02(实)、03(预)、03(实)、04(预)、04(实)、05(预)、05(实)、06(预)、06(实)”。
由第一发送电路106先下发任务01(预)至任务处理电路A中,待任务01(预)执行完成,第二接收电路114接收来自于任务处理电路A发送的任务01(预)的第二预完成指示,响应于该第二预完成指示,第二发送电路110将任务01(实)发送至任务处理电路A中进行处理。此时,由于本实施方式仅并行处理属于一个第二任务流中任务的实际部分和当前任务的预取部分,因此,任务01(实)为已发任务,任务03(预)为当前任务。
由于存在依赖关系,当任务03(预)发送完后,挂起暂不继续下发,等待直至收到任务01(实)的第一预完成指示,此时,次序更新电路116将下发任务次序中待发首任务更新为任务02(预),再由第一发送电路106将任务02(预)下发至任务处理电路B,待第二接收电路114接收来自于任务处理电路B发送的任务02(预)的第二预完成指示,第二发送电路110将任务02(实)发送至任务处理电路B中进行处理。在任务02(实)处理的同时,第一发送电路104还可以将任务04(预)发送至任务处理电路B中并行处理。
为了实现对实际部分的执行进行监测,任务调度器还可以包括计时器(或称计时电路)118其用于对任务处理电路处理已发任务的实际部分进行计时。在一个场景中,响应于计时器计时超过预定阈值并且未从已发任务对应任务处理电路接收到任何指示,第一发送电路向处理已发任务的任务处理电路或另一任务处理电路发送当前任务的预取部分。
在另一种实施方式中,可以不依赖下发任务次序来保证任务的执行满足上述依赖关系的要求。具体地,当前任务包括有多个;第一发送电路或第二发送电路在向当前任务对应的任务处理电路发送当前任务的预取部分或实际部分的同时,携带当前任务中每个任务的依赖关系,以使得相应任务处理电路在完成其当前所处理任务的实际部分前的预定时刻,向依赖关系中下一个任务对应的任务处理电路发送第一预完成指示。还是以上述的任务流次序以及任务类型为例:任务处理电路同时接到“02(预)、02(实)、04(预)、04(实)”等4个任务,由于任务的实际部分的执行需要受到依赖关系的约束,因此,在未收到01(实)的预完成指示前,只能先执行预取部分的任务,其他未执行任务先在本地挂起。如02(预)和04(预);其中,02(预)和04(预)可以先后执行,或同时执行,具体视任务处理器的处理能力而定。当任务处理电路接收到01(实)的预完成指示时,则释放部分的处理资源,准备执行02(实);当任务处理电路完成02(实)时,向03(实)对应的任务处理电路发送02(实)的预完成指示。
在一种应用场景中,任务调度器102在下发任务时,会通过识别任务的任务流标识(Stream ID)和任务标识(Task ID)决定是否下发任务以及将任务发送至哪个任务处理电路202中。具体地,任务调度器102还包括:标识比对电路120,其用于比对下发任务次序中已发任务和当前任务的任务流标识;若任务流标识相同,则比对已发任务和当前任务的任务标识;若任务标识不同,说明两者属于同一任务流的不同任务,且已发任务执行的是实际部分,满足并行处理的条件。响应于任务标识不同,第一发送电路向任务流标识对应的任务处理电路发送当前任务的预取部分。若任务标识相同,说明两者属于同一任务流的相同任务,顺序处理该相同任务的预取部分和实际部分即可,因此,响应于任务标识相同,第二发送电路向任务流标识对应的任务处理电路发送当前任务的实际部分。若已发任务和当前任务的任务流标识不相同,且执行任务处理方法的硬件条件支持并行处理不同第二任务流中的任务,则响应于任务流标识不同,第一发送电路向当前任务的任务流标识对应的任务处理电路发送当前任务的预取部分;或者,若已发任务和当前任务的任务流标识不相同,且执行任务处理方法的硬件条件不支持并行处理不同第二任务流中的任务,第一接收电路响应于任务流标识不同,等待接收来自于任务处理电路针对已发任务的实际部分的第一预完成指示。通过上述任务流标识(Stream ID)和任务标识(Task ID)的识别机制,可以使得任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分,提供任务流的处理效率。
以上结合图2对本公开实施例中的任务调度器的组成细节进行了描述。基于上述的描述,本领域技术人员可以理解的是本公开的任务调度器具有多种实现方式而不局限于图2中所示出的多个电路。进一步,尽管图2中以电路模块的方式示出本公开任务调度器的各个组成部分,但本公开任务调度器的实施并不局限于图2所示形式。基于本公开的教导,本领域技术人员也可以想到本公开的任务调度器也可以具有其他的实现形式,例如通过软件或软件和硬件的组合方式。当由软件实施时,图2中所示出的各个电路相应地也可以由各种程序模块或单元来替换。利用本公开的任务调度器,可以实现简化的双线程任务调度,从而可以实现线程间的并行性。
图4是示意性示出根据本公开用于执行任务调度的方法400的简化流程图。基于前述结合图1和图2描述,本领域技术人员可以理解的是方法400可以由本公开的任务调度器来执行,从而以最小的线程切换代价来实现任务执行的并行性。
在步骤S402中,将第一任务流中N种任务类型的任务分别划分到N个第二任务流中,以使得N个任务处理电路分别对应处理N个第二任务流中的任务;其中,同一个第二任务流中所有任务的任务类型相同,N为大于一的整数。在本公开实施例中,由于任务处理电路的任务处理类型与第二任务流中任务类型是相匹配的,因此,相对应的任务处理电路能够获知位于同一个第二任务流中在先任务的执行情况,进而为并行处理同一个第二任务流中的后续任务提供条件。
在步骤S404中,在任一任务处理电路处理已发任务的实际部分期间,向任一任务处理电路发送当前任务的预取部分,以使得任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分;其中,当前任务为下发任务次序中当前正在执行下发的任务,一个任务包括彼此关联的预取部分和实际部分。
关于预取部分和实际部分,其作为一项任务中的两个部分可以通过不同的方式来划分。作为示例,可以通过程序指令来将一项任务拆分成彼此关联的预取部分和实际部分,该预取部分和实际部分可以设置成具有相同的标识位,以指示二者之间的关联性。替代地,本公开的任务调度器可以布置有专门用于对任务进行划分的功能模块或电路,以实现将任务划分成预取部分和实际部分。在一个实施场景中,预取部分和实际部分可以具有共同的任务标识符,以指示二者具有关联性并且构成一个完整的任务。
可以看出,借助于执行图4所示出的方法步骤,本公开的任务调度器任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分,从而创新性地实现双线程的任务调度和高度的任务并行化处理。
图5是示意性示出根据本公开实施例的用于执行任务调度的方法500细节的流程图。可以理解的是,方法500示出了方法400的更多实施步骤和细节,因此关于方法400的描述也同样适用于图5的方法步骤。另外,由于方法500也同样可以由任务调度器来执行,因此前述结合图1-4对任务调度器的描述也同样适用于下文结合图5的描述,并且相同的内容将不再展开赘述。
在步骤S502中,将第一任务流中N种任务类型的任务分别划分到N个第二任务流中,以使得N个任务处理电路分别对应处理N个第二任务流中的任务。
在步骤S504中,基于第一任务流中的执行次序对N个第二任务流中的任务添加依赖关系,以使得N个任务处理电路依据依赖关系中的次序顺序处理各个任务中的实际部分。
在本公开的实施例中,由于第一任务流的多个任务间存在依赖关系,如,在后任务的执行需要依赖已发任务的处理结果,因此,各个任务的实际部分需要顺序执行。任务的实际部分执行完后才会得到处理结果,而任务的预取部分则不受任务间的依赖关系约束,因此,为了提高执行效率,任务的预取部分可以提前处理。
在步骤S506中,在任一任务处理电路处理已发任务的实际部分期间,向任一任务处理电路发送当前任务的预取部分,以使得任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分。
如前,为了实现双线程任务调度机制,本公开将任务处理电路执行的任务抽象成两类任务,一种是真正运行的任务,而另一种是为真正运行的任务服务的任务。对于前者,本公开称之为实际部分,而对于后者,本公开称之预取部分。这里的任务可以是任务处理电路执行的任意任务,例如基于张量的计算任务,包括例如卷积运算任务。如前,这里的任务可以是一个或多个任务流中的众多任务之一。
如前,正在任务处理电路中处理的已发任务可以为任务的预取部分或实际部分,同理,正在任务处理电路中处理的当前任务也可以为任务的预取部分或实际部分。但是,由于存在依赖关系,已发任务和当前任务两者不可以同时为任务的实际部分。并且,已发任务和当前任务两者在任务处理电路中谁先处理完成是不确定的,若两者任一先完成处理,剩下的一个未完成任务则更新为新的已发任务,而任务调度器则会下发新的当前任务至相应的任务处理电路,同时,任务处理电路所维护的下发任务次序也会更新的待发首任务。
在步骤S508中,接收来自于任务处理电路发送的第一预完成指示,和/或第二预完成指示。
在本公开实施例中,第一预完成指示指的是任务处理电路针对任务的实际部分提取发出的预完成指示,而第二预完成指示指的是任务处理电路针对任务的预取部分提取发出的预完成指示。考虑到任务调度器在执行调度分配需要时间,且信息传输过程中会有时延,在完成某一任务之前的一段预定时刻,任务处理电路会提取发出的预完成指示,以使得任务执行间的衔接能够更加紧密,从而缩短任务流的执行时间。
在步骤S510中,响应于接收到第一预完成指示,将依赖关系中已发任务的下一个任务的实际部分更新为下发任务次序的待发首任务。
如前所述,任务的实际部分执行完后才会得到处理结果,而任务的预取部分则不受任务间的依赖关系约束,因此,为了提高执行效率,任务的预取部分可以提前处理。而由于软硬件环境的不同,各类型任务的实际处理时间难以准确预测,且需要兼顾任务间的实际部分的依赖关系,因此,需要根据执行调度和任务处理的进度实时更新下发任务次序。
在本公开实施例中,接收到第一预完成指示意味着受依赖关系约束的任务实际部分即将处理完成,可以在下发任务次序“插入”依赖关系中下一个任务的实际部分,作为当前下发任务次序的待发首任务。
在任务调度器根据下发任务次序执行任务下发时,可以通过比对已发任务和当前任务的任务流标识和任务标识来执行下发操作。具体地,比对所述下发任务次序中已发任务和当前任务的任务流标识;若任务流标识相同,则比对所述已发任务和所述当前任务的任务标识;响应于所述任务标识不同,向所述任务流标识对应的任务处理电路发送所述当前任务的预取部分;响应于所述任务标识相同,向所述任务流标识对应的任务处理电路发送所述当前任务的实际部分。响应于所述任务流标识不同,向当前任务的任务流标识对应的任务处理电路发送所述当前任务的预取部分;或响应于所述任务流标识不同,等待接收来自于任务处理电路针对已发任务的实际部分的第一预完成指示。
在步骤S512中,待满足下发条件,根据当前下发任务次序向相应的任务处理器发送任务的实际部分。
在本公开实施例中,下发条件可以包括:
1、时间满足第一预完成指示的上一个任务的实际部分执行完成的预定时刻;
2、下发任务次序中在待发首任务之前的当前任务发送完毕,待发首任务顺序更新为当前任务;
3、接收到第二预完成指示。假设当前下发任务次序的待发首任务为任务03(实),则在任务03(实)发送之前,必须收到任务03(预)对应的第二预完成指示。
作为可选的步骤,在步骤S514中,可以对任务处理电路执行当前任务的实际部分进行计时,例如可以使用图2中所示出的计时器进行计时,并且对计时确定一个预定阈值。响应于计时超过预定阈值,可以从任务处理电路接收用于指示未完成实际部分执行的未完成指示。
相应的,在步骤S516中,响应于所述计时超过预定阈值,向处理所述已发任务的任务处理电路发送所述当前任务的预取部分。
当确认已发任务的实际部分执行超时,且未从所述已发任务对应任务处理电路接收到任何指示,在满足依赖关系的情况下,可以向处理所述已发任务的任务处理电路或另一任务处理电路发送所述当前任务的预取部分。并且,任务调度器可以重新向相应的任务处理电路发送已发任务的实际部分。
以上结合图5对本公开方案的一种实施方案及其场景进行了描述,但本公开方案的实施形式和场景并不受此限制。例如,当任务处理电路在计时器计时的预定阈值内完成已发任务的实际部分时,则此时任务调度器可以直接向任务处理电路发送当前任务的实际部分。换句话说,此时的任务处理电路已经完成当前任务的实际部分,其已经暂时处于空闲态并且可以执行下一任务的实际部分。
为了说明本公开方案的节省任务流处理时间的效果,图6示出本公开一实施例中任务流处理时间的比对示意图。其中,T1a对应的线段表示A类任务的预取部分执行所用时间,T2a对应的线段表示A类任务的实际部分执行所用时间。T1a+T2a表示A类任务的单位用时。T1b对应的线段表示B类任务的预取部分执行所用时间,T2b对应的线段表示B类任务的实际部分执行所用时间。T1b+T2b表示B类任务的单位用时。
如图6所示,现有技术方案顺序执行任务流“01(预)、01(实)、02(预)、02(实)、03(预)、03(实)、04(预)、04(实)、05(预)、05(实)、06(预)、06(实)”。需要说明的是,为了便于直接展示任务处理时间,本公开实施例假设任务流中各个任务的处理时间都是相等的,且预取部分的处理时间小于实际部分的处理时间。并且,图6中任务流的依赖关系与上述图3所述的实施例的依赖关系一致,依赖关系为:“01(实)、02(实)、03(实)、04(实)、05(实)、06(实)”。
通过图6中的时间线段可以得到,现有技术方案总用时为:
T=3·(T1a+T2a)+3·(T1b+T2b)
经过本公开实施例中的任务调度器进行调度处理后可以得到,本方案总用时为:
T=T1a+3·T2a+3·T2b
可以节省总时长为:
ΔT=2·T1a+3·T1b
结合图6以及上述计算得到ΔT可知,使用本公开实施例中的执行任务方案可以有效地节省任务流的处理时间,提升处理器的数据吞吐量。
图7示出本公开一实施例中数据流编程的软硬件架构的结构示意图。从图中所示可以看出,此实施例中的软硬件架构可以包括AI处理器701、驱动及操作系统702、编译器及编程语言703、库704、框架层705和应用层706。可以理解的是,这里的软硬件架构可以应用于本申请的人工智能计算系统或计算平台中。
具体来说,AI处理器701(其例如可以包括在下文结合附图所描述的板卡中)在硬件设计上同时考虑运算优化和数据搬运优化。为此,其采用定制化的运算单元来加速运算,并且使用片上存储来加速数据搬运,从而获得极高的性能和能效比。另外,为了支持各种算法优化,AI处理器701可以具有定制化的运算单元和指令集,其中指令集可以提供不同粒度的运算指令(标量、向量和/或矩阵)。进一步,当考虑算法访存特征、硬件成本、验证难度等多方面的因素,则可以采用片上存储的方式,并且优化数据搬运。在实际操作中,本公开的AI处理器可以实现超出主流GPU(图形处理单元)几十倍以上的速度。
驱动及操作系统702主要负责实现任务在AI处理器701上的调度。该调度操作例如可以实现根据任务优先级进行调度、多设备之间的通信及同步等。对于编译后的程序,其可以通过操作系统和驱动实现待实施的任务在特定处理器上的调度执行,包括但不限于如下的操作:分配、释放设备内存、实现设备之间数据传输、维护任务队列,以及根据优先级调度任务,实现多设备间的同步和协作。
编译器及编程语言703可以是针对AI处理器701的指令集研发的一套汇编语言。在应用中,其可以将面向AI处理器701开发的深度学习算子翻译成处理器指令组合,以便于调用AI处理器701,从而高效地使用该AI处理器701。在一些应用场景中,可以利用编译器执行编译的中间表达阶段来优化编译。
库704可以包括运行时库714和机器学习库724。在一个实施场景中,前述库704可以使用AI处理器701的指令集并根据AI处理器701的指令集进行部分优化,以提高算子的运行速度。运行时库714可以是针对AI处理器701专门开发的一套高性能算子库,并且其可以用于完成通用处理器和人工智能处理器之间的交互。进一步,该运行时库714还可以提供一套面向人工智能处理器的接口。对于机器学习库724,其可以用于在人工智能处理器上加速各种机器学习或者深度学习算法。具体地,该机器学习库724可以提供一套高效、通用、灵活且可扩展的编程接口,其上层的机器学习应用可以直接采用各种编程框架(例如pytorch、TensorFlow、Caffe、MXNet等)的编程接口,也可以使用机器学习库724提供的接口来直接编程。另外,本公开的机器学习库724可以方便硬件平台的调用,而运行时库714可以实现一些基础的常用算子,如卷积、池化等各种操作。
框架层705可以增加对面向AI处理器开发的算子的封装,并且主要是对运行时库714的算子的封装。除此之外,框架层705还可以修改相关的任务调度或内存管理等部分。在一个应用场景中,框架层705可以采用TensorFlow等框架的架构。
本公开实施例中的设备侧可以是人工智能芯片或板卡等。图8示出本披露实施例的一种板卡800的结构示意图。如图8所示,板卡800包括芯片(或称“处理芯片”)801,其是一种系统级芯片(System on Chip,SoC),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡800适用在云端智能应用,具有庞大的片外存储、片上存储和大量的计算能力。
芯片801通过对外接口装置802与外部设备803相连接。外部设备803例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或WIFI接口等。待处理的数据可以由外部设备803通过对外接口装置802传递至芯片801。芯片801的计算结果可以经由对外接口装置802传送回外部设备803。根据不同的应用场景,对外接口装置802可以具有不同的接口形式,例如PCIe接口等。
板卡800还包括用于存储数据的存储器件804,其包括一个或多个存储单元805。存储器件804通过总线与控制器件806和芯片801进行连接和数据传输。板卡800中的控制器件806配置用于对芯片801的状态进行调控。为此,在一个应用场景中,控制器件806可以包括单片机(Micro Controller Unit,MCU)。在本公开调度方案的应用场景中,控制器件中可以运行驱动程序并且其包括任务调度器,当前述的驱动程序由控制器件控制运行时,使得任务调度器执行前述结合图1-图6所述的操作流程,从而将任务下发至处理芯片或处理器核来执行。
图9是示出此实施例的芯片801中的组合处理装置900的结构图。如图9中所示,组合处理装置900包括计算装置901、接口装置902、处理装置903和DRAM 904。
计算装置901配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置902与处理装置903进行交互,以共同完成用户指定的操作。
接口装置902用于在计算装置901与处理装置903间传输数据和控制指令。例如,计算装置901可以经由接口装置902从处理装置903中获取输入数据,写入计算装置901片上的存储装置。进一步,计算装置901可以经由接口装置902从处理装置903中获取控制指令,写入计算装置901片上的控制缓存中。替代地或可选地,接口装置902也可以读取计算装置901的存储装置中的数据并传输给处理装置903。
处理装置903作为通用的处理装置,执行包括但不限于数据搬运、对计算装置901的开启和/或停止等基本控制。根据实现方式的不同,处理装置903可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,DSP)、专用集成电路(application specificintegrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算装置901而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置901和处理装置903整合共同考虑时,二者视为形成异构多核结构。
DRAM 904用以存储待处理的数据,为DDR内存,大小通常为16G或更大,用于保存计算装置901和/或处理装置903的数据。
图10示出了计算装置901的内部结构示意图。计算装置901用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,图中的计算装置901采用多核分层结构设计,计算装置901作为一个片上系统,其包括多个集群(cluster),每个集群又包括多个处理器核,可以用于执行本公开下发的任务。换言之,计算装置901是以片上系统-集群-处理器核的层次所构成的。
以片上系统的层级来看,如图10所示,计算装置901包括外部存储控制器1001、外设通信模块1002、片上互联模块1003、同步模块1004以及多个集群1005。
外部存储控制器1001可以有多个,在图中示例性地展示2个,其用以响应处理器核发出的访问请求,访问外部存储设备,例如图9中的DRAM 904,从而自片外读取数据或是将数据写入。外设通信模块1002用以通过接口装置902接收来自处理装置903的控制信号,启动计算装置901执行任务,例如本公开上文所提到的预取部分和实际部分。片上互联模块1003将外部存储控制器1001、外设通信模块1002及多个集群1005连接起来,用以在各个模块间传输数据和控制信号。同步模块1004是一种全局同步屏障控制器(global barriercontroller,GBC),用以协调各集群的工作进度,确保信息的同步。多个集群1005是计算装置901的计算核心,在图中示例性地展示4个,随着硬件的发展,本披露的计算装置901还可以包括8个、16个、64个、甚至更多的集群1005。
以集群的层级来看,如图10所示,每个集群1005包括多个处理器核(IPU core)1006及一个存储核(MEM core)1007。
处理器核10006在图中示例性地展示4个,本披露不限制处理器核1006的数量。其内部架构如图11所示。每个处理器核1006包括三大模块:控制模块91、运算模块92及存储模块93。
控制模块91用以协调并控制运算模块92和存储模块93的工作,以完成深度学习的任务,其包括取指单元(instruction fetch unit,IFU)1111及指令译码单元(instructiondecode unit,IDU)1112。取指单元1111用以获取来自处理装置903的指令,指令译码单元1112则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块92和存储模块93。这里的取指和指令译码操作可以视为本公开的预取部分。
运算模块92包括向量运算单元1121及矩阵运算单元1122。向量运算单元1121用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元1122负责深度学习算法的核心计算,即矩阵乘及卷积。
存储模块93用来存储或搬运相关数据,包括神经元存储单元(neuron RAM,NRAM)1131、权值存储单元(weight RAM,WRAM)1132、输入/输出直接内存访问模块(input/outputdirect memory access,IODMA)1133、搬运直接内存访问模块(move direct memoryaccess,MVDMA)1134。NRAM 1131用以存储供处理器核1006计算的输入、输出数据及中间结果;WRAM 1132则用以存储深度学习网络的权值;IODMA 1133通过广播总线1009控制NRAM1131/WRAM 1132与DRAM 904的访存;MVDMA 1134则用以控制NRAM 1131/WRAM 1132与SRAM1008的访存。
回到图10,存储核1007主要用以存储和通信,即存储处理器核1006间的共享数据或中间结果、以及执行集群1005与DRAM 904之间的通信、集群1005间彼此的通信、处理器核1006间彼此的通信等。在其他实施例中,存储核1007具有标量运算的能力,用以执行标量运算。
存储核1007包括共享存储单元(SRAM)1008、广播总线1009、集群直接内存访问模块(cluster direct memory access,CDMA)1010及全局直接内存访问模块(global directmemory access,GDMA)1011。SRAM 1008承担高性能数据中转站的角色,在同一个集群1005内不同处理器核1006之间所复用的数据不需要通过处理器核1006各自向DRAM 904获得,而是经SRAM 1008在处理器核1006间中转,存储核1007只需要将复用的数据从SRAM 1008迅速分发给多个处理器核1006即可,以提高核间通讯效率,亦大大减少片上片外的输入/输出访问。
广播总线1009、CDMA 1010及GDMA 1011则分别用来执行处理器核1006间的通信、集群1005间的通信和集群1005与DRAM 904的数据传输。以下将分别说明。
广播总线1009用以完成集群1005内各处理器核1006间的高速通信,此实施例的广播总线1009支持核间通信方式包括单播、多播与广播。单播是指点对点(即单一处理器核至单一处理器核)的数据传输,多播是将一份数据从SRAM 1008传输到特定几个处理器核1006的通信方式,而广播则是将一份数据从SRAM 1008传输到所有处理器核1006的通信方式,属于多播的一种特例。
CDMA 1010用以控制在同一个计算装置901内不同集群1005间的SRAM 1008的访存。图12示出当一个处理器核欲将数据写入至另一个集群的处理器核时的示意图,以说明CDMA 1010的工作原理。在此应用场景中,同一个计算装置包括多个集群,为方便说明,图中仅展示集群0与集群1,集群0与集群1分别包括多个处理器核,同样为了说明方便,图中的集群0仅展示处理器核0,集群1仅展示处理器核1。处理器核0欲将数据写入至处理器核1。
首先,处理器核0发送单播写请求将数据写入本地的SRAM 0中,CDMA 0作为主(master)端,CDMA 1作为从(slave)端,主端向从端推送写请求,即主端发送写地址AW和写数据W,将数据传送到集群1的SRAM 1中,接着从端发送写响应B作为回应,最后集群1的处理器核1发送单播读请求将数据从SRAM 1中读取出来。
回到图10,GDMA 1011与外部存储控制器1001协同,用以控制集群1005的SRAM1008到DRAM 904的访存,或是将数据自DRAM 904读取至SRAM 1008中。从前述可知,DRAM904与NRAM 1131或WRAM 1132间的通信可以经由2个渠道来实现。第一个渠道是通过IODAM1133直接联系DRAM 904与NRAM 1131或WRAM 1132;第二个渠道是先经由GDMA 1011使得数据在DRAM 904与SRAM1008间传输,再经过MVDMA 1134使得数据在SRAM 1008与NRAM 1131或WRAM 1132间传输。虽然表面上看来第二个渠道需要更多的元件参与,数据流较长,但实际上在部分实施例中,第二个渠道的带宽远大于第一个渠道,因此DRAM 904与NRAM 1131或WRAM 1132间的通信通过第二个渠道可能更有效率。本公开的实施例可根据本身硬件条件选择数据传输渠道。
在其他实施例中,GDMA 1011的功能和IODMA 1133的功能可以整合在同一部件中。本披露为了方便描述,将GDMA 1011和IODMA 1133视为不同部件,对于本领域技术人员来说,只要其实现的功能以及达到的技术效果与本公开类似,即属于本公开的保护范围。进一步地,GDMA 1011的功能、IODMA 1133的功能、CDMA 1010的功能、MVDMA 1134的功能亦可以由同一部件来实现,同样地,只要其实现的功能以及达到的技术效果与本披露类似,均属于本公开的保护范围。
以上结合图7-图12对本公开的软硬件架构及其内部结构进行了详细的描述。可以理解的是上述描述仅仅是示例性的而非限制性的。根据不同的应用场景和硬件规格,本领域技术人员也可以对本公开的板卡(或者说人工智能设备)及其内部结构进行改变,而这些改变依然落入本公开的保护范围内。
基于上文的描述,本领域技术人员可以理解本申请实际上也公开了一种设备,其包括处理器和存储器。具体地,存储器可以存储用于执行任务的程序指令,当所述程序指令由处理器执行时,实现本申请结合图3-图6所描述的调度操作步骤。另外,由于本申请的方案可以通过计算程序指令来实现,因此本申请也公开了一种计算机可读存储介质或计算机程序产品,其上存储有用于任务调度的计算机程序/指令,从而实现结合图3-图6所描述的调度操作步骤。
以上结合附图对本公开的方案进行了详细的描述。根据不同的应用场景,本披露的设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。
进一步,本披露的设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的功耗高的设备或装置可以应用于云端设备(例如云端服务器),而功耗小的设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于U盘、闪存盘、只读存储器(“Read Only Memory”,简写为ROM)、随机存取存储器(“Random Access Memory”,简写为RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如CPU、GPU、FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(“Resistive Random Access Memory”,简写为RRAM)、动态随机存取存储器(“DynamicRandom Access Memory”,简写为DRAM)、静态随机存取存储器(“Static Random AccessMemory”,简写为SRAM)、增强动态随机存取存储器(“Enhanced Dynamic Random AccessMemory”,简写为“EDRAM”)、高带宽存储器(“High Bandwidth Memory”,简写为“HBM”)、混合存储器立方体(“Hybrid Memory Cube”,简写为“HMC”)、ROM和RAM等。
依据以下条款可更好地理解前述内容:
条款A1、一种任务调度器,其设置于人工智能处理器中,所述人工智能处理器还包括用于处理任务的N个任务处理电路,所述任务调度器包括:
任务划分电路,其用于将第一任务流中N种任务类型的任务分别划分到N个第二任务流中,以使得N个任务处理电路分别对应处理N个第二任务流中的任务,其中,同一个第二任务流中所有任务的任务类型相同,所述N为大于一的整数;
第一发送电路,其用于在任一所述任务处理电路执行已发任务的实际部分期间,向当前任务对应的任务处理电路发送所述当前任务的预取部分,以使得任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分;其中,所述当前任务为当前正在执行下发的任务,一个任务包括彼此关联的预取部分和实际部分。
条款A2、根据条款A1所述的任务调度器,所述任务调度器包括:
依赖添加电路,其用于基于所述第一任务流中的执行次序对N个第二任务流中的任务添加依赖关系,以使得所述N个任务处理电路依据所述依赖关系中的次序顺序处理各个任务中的实际部分。
条款A3、根据权利条款A2所述的任务调度器,所述任务调度器包括:
第二发送电路,其用于在已发任务的实际部分执行完成前的预定时刻,向所述依赖关系中所述已发任务的下一个任务对应的任务处理电路,发送所述下一个任务的实际部分。
条款A4、根据条款A3所述的任务调度器,所述任务调度器还包括:
第一接收电路,其用于接收来自于任务处理电路针对所述已发任务的实际部分的第一预完成指示;和/或
第二接收电路,其用于接收来自于任务处理电路针对所述当前任务的预取部分的第二预完成指示。
条款A5、根据条款A4所述的任务调度器,所述任务调度器还包括:
次序更新电路,其用于根据任务调度器中任务的下发情况以及任务处理电路中任务的处理状态,更新任务调度器中存储的下发任务次序,使得任务调度器能够根据所述下发任务次序执行任务的下发。
条款A6、根据条款A5所述的任务调度器,
所述次序更新电路具体用于响应于完成当前任务预取部分的发送,且未收到已发任务实际部分的第一预完成指示,将当前下发任务次序中首个待发的预取部分对应的任务更新为下发任务次序的待发首任务。
条款A7、根据条款A5所述的任务调度器,
所述次序更新电路具体用于响应于所述第一接收电路接收到所述已发任务的实际部分的第一预完成指示,将所述依赖关系中所述已发任务的下一个任务的实际部分更新为下发任务次序的待发首任务。
条款A8、根据条款A5所述的任务调度器,
所述第二发送电路还用于响应于所述第二接收电路接收到所述当前任务的预取部分的第二预完成指示,向所述当前任务对应的任务处理电路发送所述当前任务的实际部分。
条款A9、根据条款A8所述的任务调度器,
所述次序更新电路具体用于响应于所述第二发送电路发送所述当前任务的实际部分,将当前下发任务次序中首个待发的预取部分对应的任务更新为下发任务次序的待发首任务。
条款A10、根据条款A5所述的任务调度器,所述任务调度器还包括:
次序更新电路具体用于响应于所述第一接收电路接收到所述第一预完成指示,将所述依赖关系中所述已发任务的下一个任务的预取部分,更新为下发任务次序的待发首任务。
条款A11、根据条款A4所述的任务调度器,
当前任务包括有至少两个任务;
第一发送电路或第二发送电路还用于,向所述当前任务对应的任务处理电路发送当前任务的预取部分或实际部分的同时,携带所述当前任务中每个任务的依赖关系,以使得相应任务处理电路在完成其当前所处理任务的实际部分前的预定时刻,向依赖关系中下一个任务对应的任务处理电路发送第一预完成指示。
条款A12、根据条款A4所述的任务调度器,所述任务调度器还包括:
计时器,其用于对任务处理电路处理已发任务的实际部分进行计时;以及
所述第一发送电路还用于响应于所述计时器计时超过预定阈值并且未从所述已发任务对应任务处理电路接收到任何指示,向处理所述已发任务的任务处理电路或另一任务处理电路发送所述当前任务的预取部分。
条款A13、根据条款A5所述的任务调度器,所述任务调度器还包括:
标识比对电路,其用于比对所述下发任务次序中已发任务和当前任务的任务流标识;若任务流标识相同,则比对所述已发任务和所述当前任务的任务标识;
所述第一发送电路响应于所述任务标识不同,向所述任务流标识对应的任务处理电路发送所述当前任务的预取部分;以及
所述第二发送电路响应于所述任务标识相同,向所述任务流标识对应的任务处理电路发送所述当前任务的实际部分。
条款A14、根据条款A13所述的任务调度器,
若所述已发任务和所述当前任务的任务流标识不相同;
所述第一发送电路响应于所述任务流标识不同,向当前任务的任务流标识对应的任务处理电路发送所述当前任务的预取部分;或
所述第一接收电路响应于所述任务流标识不同,等待接收来自于任务处理电路针对已发任务的实际部分的第一预完成指示。
条款A15、根据条款A1-条款A14的任意一项所述的任务调度器,所述预取部分包括指令提取、查询旁路转换缓冲和/或虚拟地址至物理地址转换中的至少一种。
条款A16、根据条款A15所述的任务调度器,所述实际部分包括执行所述指令。
条款A17、一种人工智能处理器,包括:
如条款A1-16的任意一项所述的任务调度器,其配置成将多个任务调度至相应的任务处理电路中进行处理;
N个任务处理电路,其配置成处理所述任务调度器下发的任务,所述N为大于一的整数。
条款A18、一种板卡,包括根据条款A17所述的人工智能处理器。
条款A19、一种用于执行任务的方法,包括:
将第一任务流中N种任务类型的任务分别划分到N个第二任务流中,以使得N个任务处理电路分别对应处理N个第二任务流中的任务;其中,同一个第二任务流中所有任务的任务类型相同,所述N为大于一的整数;
在任一任务处理电路处理已发任务的实际部分期间,向所述任一任务处理电路发送当前任务的预取部分,以使得任务处理电路能够并行处理所述已发任务的实际部分以及所述当前任务的预取部分;其中,所述当前任务为下发任务次序中当前正在执行下发的任务,一个任务包括彼此关联的预取部分和实际部分。
条款A20、根据条款A19所述的方法,所述将第一任务流中N种任务类型的任务分别划分到N个第二任务流中之后,还包括:
基于所述第一任务流中的执行次序对N个第二任务流中的任务添加依赖关系,以使得所述N个任务处理电路依据所述依赖关系中的次序顺序处理各个任务中的实际部分。
条款A21、根据条款A20所述的方法,所述方法还包括:
在已发任务的实际部分执行完成前的预定时刻,向所述依赖关系中所述已发任务的下一个任务对应的任务处理电路,发送所述下一个任务的实际部分。
条款A22、根据条款A21所述的方法,所述方法还包括:
接收来自于任务处理电路针对已发任务的实际部分的第一预完成指示;和/或
接收来自于任务处理电路针对所述当前任务的预取部分的第二预完成指示。
条款A23、根据条款A22所述的方法,所述方法还包括:
响应于完成当前任务预取部分的发送,且未收到已发任务实际部分的第一预完成指示,将当前下发任务次序中首个待发的预取部分对应的任务更新为下发任务次序的待发首任务。
条款A24、根据条款A23所述的方法,所述方法还包括:
响应于接收到针对所述已发任务的实际部分的第一预完成指示,将所述依赖关系中所述已发任务的下一个任务的实际部分更新为下发任务次序的待发首任务。
条款A25、根据条款A23所述的方法,所述方法还包括:
响应于接收到所述当前任务的预取部分的第二预完成指示,向所述当前任务对应的任务处理电路发送所述当前任务的实际部分。
条款A26、根据条款A25所述的方法,所述方法还包括:
响应于发送所述当前任务的实际部分,将当前下发任务次序中首个待发的预取部分对应的任务更新为下发任务次序的待发首任务。
条款A27、根据条款A22所述的方法,所述方法还包括:
响应于接收到针对已发任务的实际部分的第一预完成指示,将所述依赖关系中所述已发任务的下一个任务的预取部分更新为下发任务次序的待发首任务已发任务。
条款A28、根据条款A22所述的方法,所述方法还包括:
在向所述当前任务对应的任务处理电路发送当前任务的同时,携带所述当前任务中每个任务的依赖关系,以使得相应任务处理电路在完成其当前所处理任务前的预定时刻,向依赖关系中下一个任务对应的任务处理电路发送预完成指示。
条款A29、根据条款A22所述的方法,所述方法还包括:
对处理已发任务的实际部分进行计时;
响应于所述计时超过预定阈值并且未从所述已发任务对应任务处理电路接收到任何指示,向处理所述已发任务的任务处理电路或另一任务处理电路发送所述当前任务的预取部分。
条款A30、根据条款A23所述的方法,所述方法还包括:
比对所述下发任务次序中已发任务和当前任务的任务流标识;
若任务流标识相同,则比对所述已发任务和所述当前任务的任务标识;
响应于所述任务标识不同,向所述任务流标识对应的任务处理电路发送所述当前任务的预取部分;
响应于所述任务标识相同,向所述任务流标识对应的任务处理电路发送所述当前任务的实际部分。
条款A31、根据条款A30所述的方法,所述比对所述已发任务和所述当前任务的任务流标识之后,还包括:
响应于所述任务流标识不同,向当前任务的任务流标识对应的任务处理电路发送所述当前任务的预取部分;或
响应于所述任务流标识不同,等待接收来自于任务处理电路针对已发任务的实际部分的第一预完成指示。
条款A32、根据条款A19至31的任意一项所述的方法,所述预取部分包括指令提取、查询旁路转换缓冲和/或虚拟地址至物理地址转换中的至少一种。
条款A33、根据条款A32所述的方法,所述实际部分包括执行所述指令。
条款A34、一种用于执行任务的设备,包括:
处理器;以及
存储器,其存储有用于执行任务的程序指令,当所述程序指令由处理器执行时,使得实现根据条款A19-33的任意一项所述的方法。
条款A35、一种计算机可读存储介质,其存储有用于执行任务的程序指令,当所述程序指令由处理器执行时,使得实现根据条款A19-33的任意一项所述的方法。
虽然本公开的实施方式如上,但所述内容只是为便于理解本公开而采用的实施例,并非用以限定本公开的范围和应用场景。任何本公开所述技术领域内的技术人员,在不脱离本公开所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本公开的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (35)
1.一种任务调度器,设置于人工智能处理器中,所述人工智能处理器还包括用于处理任务的N个任务处理电路,其特征在于,所述任务调度器包括:
任务划分电路,其用于将第一任务流中N种任务类型的任务分别划分到N个第二任务流中,以使得N个任务处理电路分别对应处理N个第二任务流中的任务,其中,同一个第二任务流中所有任务的任务类型相同,所述N为大于一的整数;
第一发送电路,其用于在任一所述任务处理电路执行已发任务的实际部分期间,向当前任务对应的任务处理电路发送所述当前任务的预取部分,以使得任务处理电路能够并行处理已发任务的实际部分以及当前任务的预取部分;其中,所述当前任务为当前正在执行下发的任务,一个任务包括彼此关联的预取部分和实际部分。
2.根据权利要求1所述的任务调度器,其特征在于,所述任务调度器包括:
依赖添加电路,其用于基于所述第一任务流中的执行次序对N个第二任务流中的任务添加依赖关系,以使得所述N个任务处理电路依据所述依赖关系中的次序顺序处理各个任务中的实际部分。
3.根据权利要求2所述的任务调度器,其特征在于,所述任务调度器包括:
第二发送电路,其用于在已发任务的实际部分执行完成前的预定时刻,向所述依赖关系中所述已发任务的下一个任务对应的任务处理电路,发送所述下一个任务的实际部分。
4.根据权利要求3所述的任务调度器,其特征在于,所述任务调度器还包括:
第一接收电路,其用于接收来自于任务处理电路针对所述已发任务的实际部分的第一预完成指示;和/或
第二接收电路,其用于接收来自于任务处理电路针对所述当前任务的预取部分的第二预完成指示。
5.根据权利要求4所述的任务调度器,其特征在于,所述任务调度器还包括:
次序更新电路,其用于根据任务调度器中任务的下发情况以及任务处理电路中任务的处理状态,更新任务调度器中存储的下发任务次序,使得任务调度器能够根据所述下发任务次序执行任务的下发。
6.根据权利要求5所述的任务调度器,其特征在于,
所述次序更新电路具体用于响应于完成当前任务预取部分的发送,且未收到已发任务实际部分的第一预完成指示,将当前下发任务次序中首个待发送的预取部分对应的任务更新为下发任务次序的待发首任务。
7.根据权利要求5所述的任务调度器,其特征在于,
所述次序更新电路具体用于响应于所述第一接收电路接收到所述已发任务的实际部分的第一预完成指示,将所述依赖关系中所述已发任务的下一个任务的实际部分更新为下发任务次序的待发首任务。
8.根据权利要求5所述的任务调度器,其特征在于,
所述第二发送电路还用于响应于所述第二接收电路接收到所述当前任务的预取部分的第二预完成指示,向所述当前任务对应的任务处理电路发送所述当前任务的实际部分。
9.根据权利要求8所述的任务调度器,其特征在于,
所述次序更新电路具体用于响应于所述第二发送电路发送所述当前任务的实际部分,将当前下发任务次序中首个待发的预取部分对应的任务更新为下发任务次序的待发首任务。
10.根据权利要求5所述的任务调度器,其特征在于,所述任务调度器还包括:
所述次序更新电路具体用于响应于所述第一接收电路接收到所述第一预完成指示,将所述依赖关系中所述已发任务的下一个任务的预取部分,更新为下发任务次序的待发首任务。
11.根据权利要求4所述的任务调度器,其特征在于,
所述当前任务包括有至少两个任务;
所述第一发送电路或第二发送电路还用于,向所述当前任务对应的任务处理电路发送当前任务的预取部分或实际部分的同时,携带所述当前任务中每个任务的依赖关系,以使得相应任务处理电路在完成其当前所处理任务的实际部分前的预定时刻,向依赖关系中下一个任务对应的任务处理电路发送第一预完成指示。
12.根据权利要求4所述的任务调度器,其特征在于,所述任务调度器还包括:
计时器,其用于对任务处理电路处理已发任务的实际部分进行计时;以及
所述第一发送电路还用于响应于所述计时器计时超过预定阈值并且未从所述已发任务对应任务处理电路接收到任何指示,向处理所述已发任务的任务处理电路或另一任务处理电路发送所述当前任务的预取部分。
13.根据权利要求5所述的任务调度器,其特征在于,所述任务调度器还包括:
标识比对电路,其用于比对所述下发任务次序中已发任务和当前任务的任务流标识;若任务流标识相同,则比对所述已发任务和所述当前任务的任务标识;
所述第一发送电路响应于所述任务标识不同,向所述任务流标识对应的任务处理电路发送所述当前任务的预取部分;以及
所述第二发送电路响应于所述任务标识相同,向所述任务流标识对应的任务处理电路发送所述当前任务的实际部分。
14.根据权利要求13所述的任务调度器,其特征在于,
若所述已发任务和所述当前任务的任务流标识不相同;
所述第一发送电路响应于所述任务流标识不同,向当前任务的任务流标识对应的任务处理电路发送所述当前任务的预取部分;或
所述第一接收电路响应于所述任务流标识不同,等待接收来自于任务处理电路针对已发任务的实际部分的第一预完成指示。
15.根据权利要求1至14的任意一项所述的任务调度器,其特征在于,所述预取部分包括指令提取、查询旁路转换缓冲和/或虚拟地址至物理地址转换中的至少一种。
16.根据权利要求15所述的任务调度器,其特征在于,所述实际部分包括执行所述指令。
17.一种人工智能处理器,其特征在于,包括:
如权利要求1-16的任意一项所述的任务调度器,其配置成将多个任务调度至相应的任务处理电路中进行处理;
N个任务处理电路,其配置成处理所述任务调度器下发的任务,所述N为大于一的整数。
18.一种板卡,其特征在于,包括根据权利要求17所述的人工智能处理器。
19.一种用于执行任务的方法,其特征在于,包括:
将第一任务流中N种任务类型的任务分别划分到N个第二任务流中,以使得N个任务处理电路分别对应处理N个第二任务流中的任务;其中,同一个第二任务流中所有任务的任务类型相同,所述N为大于一的整数;
在任一任务处理电路处理已发任务的实际部分期间,向所述任一任务处理电路发送当前任务的预取部分,以使得任务处理电路能够并行处理所述已发任务的实际部分以及所述当前任务的预取部分;其中,所述当前任务为当前正在执行下发的任务,一个任务包括彼此关联的预取部分和实际部分。
20.根据权利要求19所述的方法,其特征在于,所述将第一任务流中N种任务类型的任务分别划分到N个第二任务流中之后,还包括:
基于所述第一任务流中的执行次序对N个第二任务流中的任务添加依赖关系,以使得所述N个任务处理电路依据所述依赖关系中的次序顺序处理各个任务中的实际部分。
21.根据权利要求20所述的方法,其特征在于,所述方法还包括:
在已发任务的实际部分执行完成前的预定时刻,向所述依赖关系中所述已发任务的下一个任务对应的任务处理电路,发送所述下一个任务的实际部分。
22.根据权利要求21所述的方法,其特征在于,所述方法还包括:
接收来自于任务处理电路针对已发任务的实际部分的第一预完成指示;和/或
接收来自于任务处理电路针对所述当前任务的预取部分的第二预完成指示。
23.根据权利要求22所述的方法,其特征在于,所述方法还包括:
响应于完成当前任务预取部分的发送,且未收到已发任务实际部分的第一预完成指示,将当前下发任务次序中首个待发的预取部分对应的任务更新为下发任务次序的待发首任务。
24.根据权利要求23所述的方法,其特征在于,所述方法还包括:
响应于接收到针对所述已发任务的实际部分的第一预完成指示,将所述依赖关系中所述已发任务的下一个任务的实际部分更新为下发任务次序的待发首任务。
25.根据权利要求23所述的方法,其特征在于,所述方法还包括:
响应于接收到所述当前任务的预取部分的第二预完成指示,向所述当前任务对应的任务处理电路发送所述当前任务的实际部分。
26.根据权利要求25所述的方法,其特征在于,所述方法还包括:
响应于发送所述当前任务的实际部分,将当前下发任务次序中首个待发的预取部分对应的任务更新为下发任务次序的待发首任务。
27.根据权利要求22所述的方法,其特征在于,所述方法还包括:
响应于接收到针对已发任务的实际部分的第一预完成指示,将所述依赖关系中所述已发任务的下一个任务的预取部分更新为下发任务次序的待发首任务已发任务。
28.根据权利要求22所述的方法,其特征在于,所述方法还包括:
在向所述当前任务对应的任务处理电路发送当前任务的同时,携带所述当前任务中每个任务的依赖关系,以使得相应任务处理电路在完成其当前所处理任务前的预定时刻,向依赖关系中下一个任务对应的任务处理电路发送预完成指示。
29.根据权利要求22所述的方法,其特征在于,所述方法还包括:
对处理已发任务的实际部分进行计时;
响应于所述计时超过预定阈值并且未从所述已发任务对应任务处理电路接收到任何指示,向处理所述已发任务的任务处理电路或另一任务处理电路发送所述当前任务的预取部分。
30.根据权利要求23所述的方法,其特征在于,所述方法还包括:
比对所述下发任务次序中已发任务和当前任务的任务流标识;
若任务流标识相同,则比对所述已发任务和所述当前任务的任务标识;
响应于所述任务标识不同,向所述任务流标识对应的任务处理电路发送所述当前任务的预取部分;
响应于所述任务标识相同,向所述任务流标识对应的任务处理电路发送所述当前任务的实际部分。
31.根据权利要求30所述的方法,其特征在于,所述比对所述已发任务和所述当前任务的任务流标识之后,还包括:
响应于所述任务流标识不同,向当前任务的任务流标识对应的任务处理电路发送所述当前任务的预取部分;或
响应于所述任务流标识不同,等待接收来自于任务处理电路针对已发任务的实际部分的第一预完成指示。
32.根据权利要求19至31的任意一项所述的方法,其特征在于,所述预取部分包括指令提取、查询旁路转换缓冲和/或虚拟地址至物理地址转换中的至少一种。
33.根据权利要求32所述的方法,其特征在于,所述实际部分包括执行所述指令。
34.一种用于执行任务的设备,其特征在于,包括:
处理器;以及
存储器,其存储有用于执行任务的程序指令,当所述程序指令由处理器执行时,使得实现根据权利要求19-33的任意一项所述的方法。
35.一种计算机可读存储介质,其特征在于,存储有用于执行任务的程序指令,当所述程序指令由处理器执行时,使得实现根据权利要求19-33的任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211617284.XA CN118210598A (zh) | 2022-12-15 | 2022-12-15 | 用于执行任务的方法及其相关产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211617284.XA CN118210598A (zh) | 2022-12-15 | 2022-12-15 | 用于执行任务的方法及其相关产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118210598A true CN118210598A (zh) | 2024-06-18 |
Family
ID=91447680
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211617284.XA Pending CN118210598A (zh) | 2022-12-15 | 2022-12-15 | 用于执行任务的方法及其相关产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118210598A (zh) |
-
2022
- 2022-12-15 CN CN202211617284.XA patent/CN118210598A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112465129B (zh) | 片内异构人工智能处理器 | |
US8972699B2 (en) | Multicore interface with dynamic task management capability and task loading and offloading method thereof | |
WO2012174128A1 (en) | General purpose digital data processor, systems and methods | |
CN112799726B (zh) | 数据处理装置、方法及相关产品 | |
WO2013012668A1 (en) | Virtual gpu | |
BRPI0807951A2 (pt) | Processador multimídia multi-encadeado sob demanda | |
CN111258935B (zh) | 数据传输装置和方法 | |
US11422849B2 (en) | Technology for dynamically grouping threads for energy efficiency | |
CN111767995A (zh) | 运算方法、装置及相关产品 | |
CN111209244A (zh) | 数据处理装置及相关产品 | |
CN111258769B (zh) | 数据传输装置和方法 | |
CN118210598A (zh) | 用于执行任务的方法及其相关产品 | |
CN112948001A (zh) | 设定张量硬件配置的方法、可读存储介质及装置 | |
CN114281558A (zh) | 多核处理器、用于多核处理器的方法及相应产品 | |
CN117234674A (zh) | 用于执行任务调度的方法及其相关产品 | |
CN117311812A (zh) | 用于重排序缓冲的方法及其相关产品 | |
WO2024012280A1 (zh) | 用于任务调度的方法、设备、板卡及其计算机可读存储介质 | |
WO2024045580A1 (zh) | 用于调度任务的方法及其相关产品 | |
CN117311813A (zh) | 用于重排序缓冲的方法及其相关产品 | |
CN111340202A (zh) | 运算方法、装置及相关产品 | |
CN113742266B (zh) | 集成电路装置、电子设备、板卡和计算方法 | |
WO2024046018A1 (zh) | 指令控制方法、数据缓存方法及相关产品 | |
CN118035618B (zh) | 数据处理器、数据处理方法、电子设备、存储介质 | |
WO2023016382A1 (zh) | 用于片上系统的方法及其相关产品 | |
CN113469328B (zh) | 执行转数穿过的装置、板卡、方法及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |