掌桥专利:专业的专利平台
掌桥专利
首页

计算机实现的方法、硬件加速器以及存储介质

文献发布时间:2023-06-19 19:28:50


计算机实现的方法、硬件加速器以及存储介质

技术领域

本发明是有关于一种利用图形处理单元(GPU)处理图像的方法,且特别是有关于一种能够自适应作业调度器以平衡处理器中流工作负荷的计算机实现的方法、硬件加速器以及存储介质。

背景技术

使用图形处理单元(GPU)等专用处理器进行深度学习(DL)已经成为一种规范。最近的DL框架通过将其DL工作负载的计算密集型部分卸载到GPU或其他类似的专用处理器上来提高推理和训练速度。在GPU方面,这被称为启动内核。启动内核可能涉及主机中央处理单元(CPU)将内核调度到GPU上。当这些内核很多且持续时间很短时,启动开销可能成为一个问题。最近的商用GPU产品提供了一种减少开销的方法,即把内核表示为一个计算图,并把计算图作为一个单一的操作启动到GPU,而不是由主机CPU逐一启动内核。在GPU上,多流(如HyperQTM)是一种实现内核执行并发的机制。如何将计算图中的内核映射到GPU中的多流,对GPU的利用效率和整体计算性能至关重要。

因此,如何自适应作业调度器以平衡处理处理器中多流的工作负荷,提高对GPU的利用效率,提升整体计算性能实为需要解决的问题之一。

发明内容

本发明的实施例提供一种计算机实现的方法、硬件加速器以及存储介质,通过将映射到同一流中的内核由GPU顺序执行,映射到不同流的内核由该GPU并发执行,能够提高对GPU的利用效率,提升整体计算性能。

本发明一实施方式的计算机实现的方法,包括接收用于图形处理单元的计算图,所述计算图包括多个节点及多个边,所述多个节点表示所述图形处理单元所要执行的多个内核,所述多个边表示所述多个内核之间的执行依赖性;在所述计算图上执行一或多个波段划分,以确定所述多个内核的多个波段,每一波段包括一个或多个可在所述图形处理单元上同时执行的内核;获取包括每个内核资源使用情况的内核资源表;根据所述多个波段以及所述内核资源表将所述多个内核映射成多个流;以及在所述图形处理单元上执行所述多个流;其中映射在同一流中的内核由所述图形处理单元按顺序执行,而映射到不同流中的内核由所述图形处理单元同时执行。

上述的方法,其中,根据所述多个波段和所述内核资源表将所述多个内核映射成多个流的步骤进一步包括:对于来自所述多个波段中同一波段的一个或多个内核,确定资源使用量大于一阈值的一个或多个内核;将所述被确定的一个或多个内核分配至同一流;以及以循环方式将同一波段中的其他内核分配到多个流中。

上述的方法,其中,获取包括每个内核资源使用情况的内核资源表的步骤进一步包括:从编译多个内核的编译器中获得所述内核资源表。

上述的方法,其中,在所述计算图上执行一或多个波段划分,以确定所述多个内核的多个波段的步骤进一步包括:在所述计算图上执行广度优先搜索,以确定所述计算图的所述多个节点中每个节点的深度;以及确定来自同一深度的一个或多个内核作为一个波段。

上述的方法,其中,在所述计算图上执行广度优先搜索,以确定所述计算图的所述多个节点中每个节点的深度的步骤进一步包括:当一个节点出现在所述计算图中的多条路径上时,基于所述广度优先搜索,确定该节点分别对应于所述多条路径的多个深度;以及确定所述多个深度中的最大深度作为该节点的深度。

上述的方法,其中,所述多个流包括计算统一设备架构流。

上述的方法,其中,进一步包括:插入一个或多个同步内核至一个或多个流中,以保持内核之间执行依赖性的正确性。

上述的方法,其中,所述插入一个或多个同步内核至一个或多个流中的步骤进一步包括:当第一流前面的内核取决于第二流前面的内核的执行时,在所述第一流前面的内核之前插入一个同步内核,以便所述图形处理单元仅在所述第二流前面的内核被执行时执行所述第一流前面的内核。

上述的方法,其中,进一步包括:定期检测所述多个流之间的负载不平衡;以及将一个内核从一个流重新映射到另一个流,以平衡所述多个流中的负载。

上述的方法,其中,所述计算图由所述图形处理单元执行多个迭代,以及内核从一个流到另一个流的重新映射影响执行所述计算图的当前迭代,而不是未来的迭代。

上述的方法,其中,在所述图形处理单元上执行所述多个流的步骤进一步包括:从所述多个流的头部取回内核;以及将取回的内核分配给多个流多处理器进行并行处理。

上述的方法,其中,从所述多个流的头部取回内核的步骤进一步包括:以循环的方式从所述多个流的头部取走内核。

本发明一实施方式的硬件加速器,包括:一图波划分模块,用于接收用于图形处理单元的计算图,所述计算图包括多个节点及多个边,所述多个节点表示所述图形处理单元所要执行的多个内核,所述多个边表示所述多个内核之间的执行依赖性,在所述计算图上执行一或多个波段划分,以确定所述多个内核的多个波段,每一波段包括一个或多个可在所述图形处理单元上同时执行的内核;一内核资源表获取模块,用于获取包括每个内核资源使用情况的内核资源表;一内核流映射模块,用于根据所述多个波段以及所述内核资源表将所述多个内核映射成多个流;以及一全局调度模块,用于将所述多个流中的内核分配到多个流多处理器中进行并行处理。

上述的硬件加速器,其中,所述内核资源表获取模块还用于从编译所述多个内核的编译器中获得所述内核资源表。

上述的硬件加速器,其中,所述图波划分模块还用于在所述计算图上执行广度优先搜索,以确定所述计算图中所述多个节点中每一个节点的深度;确定来自同一深度的一个或多个内核作为一个波段。

上述的硬件加速器,其中,所述多个流包括计算统一设备架构流。

上述的硬件加速器,其中,进一步包括:一同步内核插入模块,用于当第一流前面的内核取决于第二流前面的内核的执行时,在所述第一流前面的内核之前插入一个同步内核,以便所述图形处理单元仅在所述第二流前面的内核被执行时执行所述第一流前面的内核。

上述的硬件加速器,其中,进一步包括:一内核重新映射模块,用于定期检测所述多个流之间的负载不平衡;以及将一个内核从一个流重新映射到另一个流,以平衡所述多个流中的负载。

上述的硬件加速器,其中,所述计算图由所述图形处理单元执行多个迭代,以及内核从一个流到另一个流的重新映射影响执行所述计算图的当前迭代,而不是未来的迭代。

本发明一实施方式的存储介质,用于存储计算机程序,其中,所述计算机程序用于执行如权利要求1-12所述的任意一种计算机实现的方法。

考虑到以下描述和参考附图的附加权利要求,所公开的系统、方法和硬件设备的这些特征和其他特征,以及相关结构元件的操作方法和功能,以及部件和制造经济性的组合将变得更加明显,其中,相似的参考数字表示图中的相应部分。然而,应当理解的是,附图仅用于说明和描述,并不打算作为本发明限制的定义。

以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。

附图说明

图1是本发明一实施例在GPU上调度计算任务的示例性工作流程。

图2A是本发明一实施例计算图的波段划分的示意图。

图2B是本发明一实施例GPU的图到流映射的示意图。

图3是本发明根据一些实施例不同图到流调度方法之间性能比较的示意图。

图4A是本发明一实施例计算机实现的方法的流程示意图。

图4B是本发明一实施例硬件加速器的结构示意图。

图5是本发明一实施例用于实现计算机实现的方法的硬件环境的结构示意图。

具体实施方式

下面结合附图对本发明的结构原理和工作原理作具体的描述:

本发明的提出是为了使本领域技术人员能够制造和使用实施例,并且是在特定应用及其要求的背景下提供的。对于本领域技术人员来说,对所公开实施例的各种修改将是显而易见的,并且本文定义的一般原则可以应用于其他实施例和应用,而不会背离本说明书的精神和范围。因此,本规范不限于所示实施例,而是应符合与本文所揭示的原理和特征相一致的最广泛范围。

GPU体系结构的性能随着新一代的出现而不断提高。现代GPU速度如此之快,以至于在许多有意义的情况下,每个GPU操作(例如内核或内存拷贝)所花费的时间现在都以微秒为单位。然而,向GPU提交每个操作都会产生间接开销,这在越来越多的情况下变得越来越重要。

现实世界中的应用程序执行大量GPU操作:典型的模式涉及许多迭代(或时间步),每个步骤中有多个操作。例如,分子系统的模拟会在多个时间步长上迭代,其中每个分子的位置在每个步长上都会根据其他分子施加的力进行更新。对于精确建模此类系统的仿真技术,通常每个时间步需要对应于多个GPU操作的多个算法阶段。如果这些操作中的每一个都单独启动到GPU并快速完成,那么开销可能会合并在一起,从而导致性能的整体显著下降。

为了解决上述问题,商业GPU产品设计了计算图,以允许工作/内核被定义为图,而不是单一操作,这在图1中得到了说明。可以理解的是,GPU被用于说明目的,在本公开内容中,除非另有说明,也可以使用相当于GPU或提供并行处理的处理器(例如,专用处理器、神经处理器等)。

图1是本发明一实施例在GPU上调度计算任务的示例性工作流程。如图1所示,图1中说明的工作流程提供了一种机制,将多个GPU内核表示为计算图120,并通过单个CPU操作启动计算图,从而减少开销。在GPU的上下文中,内核指的是在GPU上执行的函数。计算图120包括代表内核的多个节点和代表内核之间依赖关系的多条边。依赖于第二内核的第一内核(例如,由来自第二内核并指向第一内核节点的箭头表示)可以在第二内核执行后被执行。

然而,减少启动开销只是优化GPU整体计算性能的第一步。下一步是如何充分挖掘GPU内部的并行性。众所周知,GPU具有强大的能力,可以同时运行成千上万的线程。例如,在GPU中可以使用多流机制来实现内核的执行并发,如果资源(GPU计算能力和/或内存空间)充足,来自不同流的内核可以并发运行,而一个流中的内核则以FIFO(先入先出)的顺序顺序执行。

利用GPU能力有两种方法:(1)在单个GPU流140中充分利用GPU内核,(2)使用多个GPU流142同时运行多个GPU任务。单流方案是使每个内核保持足够的内核内并行度,以便每个内核都能充分利用GPU的计算能力。然而,取决于内核的实现和在每个内核中计算的张量的大小,内核内并行度可能存在不足,这可能导致所有内核的序列化执行,并可能导致低利用率。相比之下,多流方案更能保证在大多数情况下充分利用GPU计算能力。如图1所示,使用两个流142-1、142-2并行执行任务B和C可以提高总体计算效率。

多流方案的现有实现涉及以循环方式手动将内核分配给不同的流。这些方法效率低下,因为考虑到依赖关系和资源消耗,它们需要程序员努力将内核图仔细映射到多个流(例如,不自动),图形流映射是静态的,不自适应的(例如,当新内核提交给GPU时,当前计算图形的执行性能可能会受到影响)。

为了克服现有实现的上述技术缺陷,本发明描述了在调度GPU内核时自动和自适应的图到流映射,以最大化GPU内的并行处理。

为了更好地理解本发明,给出了以下术语的示例性定义。

流:它可以指由GPU设备按顺序处理的设备操作(例如内核启动)的序列。

工作队列:它可以指GPU上的硬件按顺序排队,以接收来自流的内核启动命令。内核调度器将从一个工作队列中选择一个命令并在GPU上启动计算。工作队列可以指的是实现流的硬件。

流多处理器(SM):它可能是指执行线程块的基本计算单元。它可能包括执行的硬件资源,如执行单元、寄存器、L1高速缓存/共享内存等。多个线程块可以驻留在同一个SM上。

流处理器(SP):它可以指一个基本的计算单元来执行一个warp。

warp:它可以指一组线程(例如,32个线程),是执行和调度的基本单元。

线程块:它可以指一种编程抽象,它表示一组线程,这些线程可以在一个SM上并发执行,并共享相同的L1/共享内存。

图2A是本发明一实施例计算图的波段划分的示意图。注意,当(1)两个内核没有依赖项,并且(2)有足够的资源同时执行两个内核时,可以并行处理两个内核。这个计算图分区步骤旨在从内核依赖关系的角度识别可能跨多个流并发执行的内核。计算图中的这些内核可以划分为多个波段。每个波段中的内核相互独立,可以在GPU上并发执行。给定波段(表示为第(i+1)波段)中的内核可能依赖于前面任何波段中的内核,因此在执行第i波段之前可能不会执行。

以图2A中的计算图210为例,K2和K5取决于K1的执行,K3和K6取决于K2的执行,K6取决于K2和K5的执行,而K4取决于K1和K3的执行。为了划分计算图,可以从根节点执行宽度优先搜索(BFS)算法,例如K1,以确定计算图中多个节点中的每个节点的深度。具有相同深度的节点可以划分为同一个波段。这里,节点的“深度”可以指根节点和节点之间的距离。例如,K1的BFS可以确定K1的深度为0,K2和K5的深度为1,K3和K6的深度为2,K4的深度为3。根据节点深度,波段划分220可以将K1划分至波段220-1,K2、K5划分至波段220-2,K3、K6划分至波段220-3,K4划分至波段220-4。

在一些实施例中,计算图可能有一个节点存在于根节点的多个路径中,这意味着相应的内核依赖于多个前面的内核。BFS算法可以使用不同的路径计算该节点的多个深度,这些深度可能不同。在这些情况下,可以选择多个深度中的最大值作为节点的深度,以进行波段划分。例如,根据BFS,计算图210中的K4的深度可以为1(使用K1到K4的路径),深度也可以为3(使用从K1、K2、K3到K4),深度3可以用作K4的最终深度。

在计算图210被划分为波段后,内核根据依赖关系被划分,其中来自同一波段的内核是相互独立的。然而,如上所述,两个内核是否能够当前执行还取决于两个内核的资源需求。这意味着,有可能因为资源不足,两个独立的内核不能在GPU上同时执行。这里,资源可能包括一个或多个:线程块的数量,线程的数量,寄存器的数量,共享内存的大小,等等。因此,在将内核映射到多个流时,图到流的映射也需要考虑到内核的资源使用情况,以实现最佳的并发性。

图2B是本发明一实施例GPU的图到流映射的示意图。结合图2A、2B所示,在图2B所示的例子中,计算图210被映射到三个流中,然后使用各种函数(通常表示为模块)在GPU中被分派处理。尽管模块被说明为GPU的内部模块(例如,前端接口),但其中一些模块可以在GPU外部的作业调度器或加速器中实现。在一些实施例中,这些模块可以由一个或多个相应的电路实现。

在一些实施例中,图到流的映射可以从使用图波划分模块将计算图210划分成多个波段220-1、220-2、220-3、220-4开始。图波划分模块可以在计算图210上执行广度优先搜索(BFS),以将计算图中的节点(内核)划分为多个波段220-1、220-2、220-3、220-4,其中同一波中的内核是彼此独立的,并且可以以并发方式执行。划分过程可以类似于图2A中描述的示例性实现。

在一些实施例中,图到流的映射可以确定由计算图210代表的多个内核中的每一个的内核资源使用情况。一些示例性的资源可以包括线程块的数量、线程的数量、寄存器的数量、共享存储器的大小等。在一些实施例中,每个内核的资源使用情况可以在编译时从编译器获得。在一些实施例中,内核资源使用情况可以存储在内核资源表中。

在一些实施例中,从图波划分模块输出的波段划分和内核资源表都可以被送入内核流映射模块,以将内核的波段划分分配到可用流中。在某些情况下,流可以指的是计算统一设备架构(CUDA)流。同一流内的内核以先进先出的方式被分配到SM,以便顺序执行,来自不同流的内核可以被分配到SM,以便并发执行。在一些实施方案中,分配包括执行以下两个规则的迭代过程:(1)以轮流方式将来自同一波的内核分配给不同的流,以及(2)将来自同一波的最资源密集型的内核分配给同一流。

规则(1)背后的一个基本原理是,来自同一波的内核彼此独立,因此可以并发执行,将它们分配给不同的流可以允许GPU并发执行这些独立的内核。规则(2)背后的一个基本原理是,即使来自同一波的资源最密集的内核彼此独立,但由于资源限制,GPU可能无法同时执行它们。因此,将它们分配给不同的流不仅无法实现并发执行,而且还会在这些流之间引入序列化,这会有效延迟分配给这些流的其他内核。出于这些原因,实施规则(2)将这些资源密集型内核分配给同一个流,并允许GPU以序列化方式执行它们(因为同一流中的内核将以FIFO方式执行),而不会阻止执行分配给其他流的其他内核(例如,除了分配了资源密集型核的流之外的可用流)。

迭代过程的示例性实现可能包括:根据资源使用情况对同一波段中的内核进行排序,识别GPU上资源使用情况超出可用资源的内核,将识别的内核分配给同一流,以循环方式将其余内核分配给可用流。GPU上的可用资源可以预先确定为阈值。在一些实施例中,资源使用可以是不同类型资源需求的加权和,并且可以通过实验或领域知识来学习阈值。

上述迭代过程处理波内流映射,现在重点转移到波间流映射。多个波段的序列表示数据相关性,因此,在执行第i波段的内核之前,可能不会执行第(i+1)波段的内核。因此,在一些实施例中,同步插入模块可以配置为将同步内核S插入到一个或多个流中,以保持流之间的内核依赖性的正确性。特别是,当第一流头部的内核依赖于在第二流头部执行内核时,可以在第一流头部内核之前插入同步内核,以便GPU仅在执行第二流顶部的内核时才在第一流顶部执行内核。这里,流的“head”指的是流中的第一个内核。例如,如图2B所示,在执行K1之前,不应执行K2和K5。将K1分配给流W1后,直接将K2和K5分配给流W2和流W3可能会导致GPU同时执行K1、K2和K5(例如,从所有可用流中提取第一个内核以进行并行处理)。为了保持依赖关系,可以在K2和K5之前将同步内核S(例如虚拟内核)插入流W2和流W3,以便GPU在K2或K5之前执行K1。同样,在将K6分配给流W1之前,可以在K1和K6之间插入同步内核S,以便K6在执行K2和K5之前不会执行。

在某些情况下,上述的内核分配过程和/或内核的实时执行可能会导致多个流之间的工作负载不平衡。在实时执行中,其他工作负载的内核也可能被分配到流中。例如,内核X1和X2可以与当前计算图210的K1-K6一起被分配到流1、2和3。X1和X2的分配也可能导致工作负载的不平衡。为了缓解不平衡,内核重新映射模块可以被配置为定期检测多个流之间的负载不平衡,并将内核从一个流重新映射到另一个流以平衡多个流之间的负载。如图2B所示,K1′最初被分配到流W1,并被重新映射到流W2以平衡工作负载。这里,K1-K6可以指在工作负载的第一迭代中执行的内核(例如,在GPU工作负载中,一些工作负载可能包括在多个迭代中执行同一组内核),而K1′指在第二迭代中执行的工作负载的第一个内核。K1′最初可能被分配到流W1,因为它的对应的前一个迭代的K1之前被分配到流W1。然而,内核重新映射模块可以检测到,在当前情况下,K1′可以被分配到流W2以平衡负载。重新映射(例如,K1′从流1到流2)可能只影响当前的迭代,而不影响未来的迭代。也就是说,K″(将在第三阶段执行的工作负载的第一个内核)迭代可能仍然最初被分配到流W1,但受制于内核重新映射模块出于负载平衡目的的重新映射。

在图到流映射完成后,或者当图到流的映射正在进行时,GPU的全局调度模块可以开始从多个流的头部提取内核,并将提取的内核发送给多个流多处理器(SM)以并行执行。在一些实施例中,全局调度模块可以循环方式从多个流的头部获取内核。当全局调度模块检测到由于资源不足而无法执行提取的内核时,它会暂停执行,直到内核执行完毕,然后再从其他流中提取更多内核。

图3是本发明根据一些实施例不同图到流调度方法之间性能比较的示意图。在图3所示的例子中,具有多个内核K1-K9和多个依赖边的计算图340被用作图到流调度到三个流(S1-S3)的示例工作负载。除了计算图340内的内核外,来自其他工作负载(例如,图3中未显示的其他计算图)的额外内核X1和X2也需要被调度到三个流中。图表310、320和330说明了内核是如何被映射到流中的。假设每个内核的运行时间是相同或相似的,因此图表中每个条形图(代表相应内核的执行)的宽度是相同或相似的。

图表310说明了一个单流调度方法,其中所有的内核都被分配到同一个流。当内核都是相互依赖的,需要按顺序执行时,这种调度方法可能工作得很好。然而,当有可能同时执行的内核时,单流调度方法可能导致低的GPU利用率。

图表320说明了图2A中说明的具有波段划分的图到流的调度。特别是,图340中的内核使用像BFS这样的算法被划分成波,其中具有相同深度(例如,从图340中的根节点的深度)的内核被聚集到同一个波段。每个波段内的内核是相互独立的,第(i+1)个波段内的内核可能不会被执行,直到第i个波段内的内核被执行,其中i是一个整数,i>=1(假设根节点K1被划分到第一个波段)。图表320的图到流映射可以按顺序迭代波,并以轮流方式将每个波段中的内核安排到可用的流中。例如,假设K1在波W1中,K2、K5、K8和K9在波W2中,K1被映射到流S1,K2被映射到流S2,K5被映射到流S3,K8再次被映射到流S1(轮流流转),而K9被映射到流S2。在计算图340中,我们进一步假设K2和K5是资源密集型任务,K2不能被GPU同时执行。由于这种调度方法不考虑内核的资源消耗,K2和K5被映射到两个不同的流,仅仅是因为它们来自同一个流。这在图表330中是不同的。

图表330说明了一种图到流调度方法,其中图2A所示的波段划分和图2B所示实施例中使用的内核资源表。除了使用BFS等算法将计算图340中的内核划分为波段之外,调度时还考虑了每个内核的资源使用情况。如图2B所述,全局调度模块可以按顺序迭代波段,并通过以下两个规则将内核映射到流:(1)以循环方式将来自同一波段的内核分配给不同的流,以及(2)将来自同一波段的资源最密集的内核分配到同一流。当存在冲突时,规则(2)优先于规则(1)。在图3所示的示例中,由于K2和K5都是资源密集型的,因此它们根据规则(2)映射到图表330所示的相同流(流S2)。这样,来自同一波段的其他独立内核可以更快地并发执行。例如,图表330中的K8现在映射到流S3,可以在K2执行之后立即执行,并与K5同时执行。

从图3所示的比较来看,图表330所示的调度比图表310和图表320所示的更有效。也就是说,图2A所示波段划分和图2B所示实施例中使用的内核资源表的自动自适应图到流调度方法比其他调度方法提供了技术改进。

图4A是本发明一实施例计算机实现的方法的流程示意图,图4B是本发明一实施例硬件加速器的结构示意图,图5是本发明一实施例用于实现计算机实现的方法的硬件环境的结构示意图。本发明计算机实现的方法400可由图4B所示的硬件加速器或图5所示的硬件环境中实现。该方法400的示例性步骤以图4A所示的步骤来说明。

步骤S410,包括接收用于图形处理单元(GPU)的计算图,该计算图包括(1)代表用于GPU执行的多个内核的多个节点和(2)代表该多个内核之间的执行依赖性的多个边。

步骤S420包括在计算图上执行波段划分,以确定多个内核的波段,每个波段包括可在GPU上并发执行的内核。在一些实施例中,在计算图上执行波段划分以确定多个波段的内核包括:在计算图上执行广度优先搜索(BFS)以确定计算图中多个节点的每个节点的深度;以及确定来自与波段的内核相同的深度的内核。在一些实施例中,在计算图上执行BFS以确定多个节点中的每个节点的深度可以包括:当一个节点出现在计算图中来自根节点的一个以上的路径上时,基于BFS,确定分别对应于该一个以上的路径的该节点的一个以上的深度;以及确定该一个以上的深度的最大深度作为该节点的深度。

步骤S430包括获取包含每个内核资源使用情况的内核资源表。在一些实施例中,包含计算图中表示的每个内核的资源使用情况的内核资源表的获取包括:从编译多个内核的编译器获取内核资源表。

步骤S440包括基于多个波段和内核资源表将多个内核映射为多个流。在一些实施例中,基于多个波和内核资源表将多个内核映射到多个流包括:对于来自多个波中相同波的内核,识别资源使用大于阈值的一个或多个内核;将一个或多个标识的内核分配给同一个流;以及以循环方式将来自同一波的其他内核分配给多个流。在一些实施例中,多个流包括计算统一设备架构(CUDA)流。

步骤S450包括在GPU上执行多个流,其中映射在同一流中的内核由GPU顺序执行,并且映射到不同流的内核由GPU并发地执行。在一些实施方案中,在GPU上执行多个流包括:从多个流的头部获取内核;以及将获取的内核分配给多个流多处理器(SM)以进行并行执行。在一些实施例中,从多个流的头部获取内核包括:以轮流的方式从多个流的头部获取内核。

在一些实施例中,方法400可以进一步包括将同步内核插入到一个或多个流中,以保持内核之间的内核依赖正确性。在一些实施例中,插入同步内核的步骤包括:当第一流头部的内核依赖于第二流头部的内核的执行时,在第一流头部的内核之前插入同步内核,以便GPU仅在第二流头部的内核被执行时执行第一流头部的内核。

在一些实施例中,方法400可以进一步包括周期性地检测多个流之间的负载不平衡;以及将内核从一个流重新映射到另一个流以平衡多个流之间的负载。在一些实施例中,计算图正在由GPU执行多个迭代,并且将内核从一个流重新映射到另一个流只影响执行计算图的当前迭代,而不影响未来迭代。

图4B是本发明一实施例硬件加速器的结构示意图。如图4B所示,硬件加速器480中的部件仅用于说明目的。根据实施情况,硬件加速器可能包括更多、更少或替代组件。在一些实施例中,硬件加速器可以指GPU的前端或与GPU耦合的加速器。

具体的,如图4B所示,本发明的硬件加速器480包括图波划分模块482、内核资源表获取模块484、内核流映射模块486和全局调度模块487。图波划分模块482可以配置为接收GPU的计算图,计算图包括(1)表示GPU要执行的多个内核的多个节点和(2)表示多个内核之间的执行依赖关系的多个边;并在计算图上执行波段划分,以确定多个波段的内核,每个波段包括在GPU上并发执行的内核。内核资源表获取模块484可以配置为获取包含每个内核的资源使用情况的内核资源表。内核流映射模块486可以配置为基于多个波段和内核资源表将多个内核映射为多个流。全局调度模块487可以配置为将多个流中的映射内核调度到多个流多处理器(SM)中以进行并行处理。

在一些实施例中,硬件加速器480可以进一步包括同步内核插入模块,该模块被配置为:当第一流头部的内核依赖于第二流头部的内核的执行时,在第一流头部的内核之前插入同步内核,以便GPU仅在第二流头部的内核被执行时执行第一流头部的内核。

在一些实施例中,硬件加速器480可以进一步包括内核重新映射模块,该模块被配置为:定期检测多个流之间的负载不平衡;以及将内核从一个流重新映射到另一个流以平衡多个流之间的负载。

图5是本发明一实施例用于实现计算机实现的方法的硬件环境的结构示意图。如图5所示,图5中的硬件设备500说明了调度器520和GPU前端(或GPU加速器)530的内部结构,以及调度器520、GPU前端530和外部存储器510之间的数据和指令流。

如图5所示,调度器520可以包括多个处理器522和多个处理器520共享的缓存521。每个处理器522可以包括指令获取单元(IFU)525、指令解码单元(IDU)526、指令发送单元(ITU)527和指令执行单元(IEU)528。

在一些实施例中,IFU 525可以从存储器510向寄存器组524提取待执行的指令或数据。在获得指令或数据后,调度器520进入指令解码阶段。IDU 526根据预定的指令格式对获取的指令进行解码,以确定操作数获取信息,其中操作数是执行获取的指令所必需的。在一些实施例中,操作数获取信息可能包括立即数据、寄存器或提供操作数的其他软件/硬件的指针或地址。

在一些实施例中,ITU 527可以配置在IDU 526和IEU 528之间,用于指令调度和管理。它可以有效地将指令分配给不同的IEU 528进行并行处理。

在一些实施例中,在ITU 527将指令分配给一个IEU 528之后,IEU 528可以执行该指令。然而,如果IEU 528确定该指令应该由GPU前端530执行,它可以将该指令转发给相应的GPU前端530执行。例如,如果指令被指向基于输入图的GNN计算,IEU 528可以通过总线通道531将指令发送给GPU前端530,以便GPU前端530执行该指令。

在一些实施例中,GPU前端530可以包括多个流多处理器(SM)536(图5中示出了4个SM 536,但本领域的技术人员可以理解,GPU前端530也可以包括其他数量的SM 536)、命令处理器537和直接存储访问(DMA)接口535,以及总线通道531。

总线通道531可以包括指令/数据通过其进入和离开GPU前端530的通道。DMA接口535可以指一些计算机总线架构所提供的功能,它使设备可以直接从存储器510读取数据和/或将数据写入存储器510。与所有设备之间的数据传输都要经过调度器520的方法相比,图5中说明的架构大大提高了数据访问的效率。例如,GPU前端530的核心可以直接访问存储器510并读取神经网络模型的参数(例如,图形中每个节点的权重)和/或输入数据。

命令处理器537可以被配置为将调度器520通过IEU 528发送给GPU前端530的指令分配给SM 536执行。在待执行指令从总线通道531进入GPU前端530后,它们可以被缓存在命令处理器537中,并且命令处理器537可以选择SM 536并将指令分配给SM 536执行。此外,命令处理器537还可以负责SM 536之间的同步操作。

本发明还提供一种存储介质,用于存储计算机程序,计算机程序用于执行如上所述的任意一种计算机实现的方法。

前几节中描述的每个过程、方法和算法可以体现在由一个或多个计算机系统或计算机处理器(包括计算机硬件)执行的代码模块中,并由其完全或部分自动化。这些过程和算法可以部分或全部在特定于应用的电路中实现。

当本发明公开的功能以软件功能单元的形式实现并作为独立产品出售或使用时,它们可以存储在处理器可执行的非易失性计算机可读存储介质中。本文中披露的特定技术解决方案(全部或部分)或有助于当前技术的方面可以以软件产品的形式体现。软件产品可以存储在存储介质中,该存储介质包含多条指令,以使计算设备(可以是个人计算机、服务器、网络设备等)执行本申请实施例的方法的全部或部分步骤。存储介质可以包括闪存驱动器、便携式硬盘驱动器、ROM、RAM、磁盘、光盘、可用于存储程序代码的另一介质或其任何组合。

特定实施例进一步提供了一种系统,该系统包括处理器和非暂时性计算机可读存储介质,存储处理器可执行的指令,以使系统执行与上述实施例的任何方法中的步骤相对应的操作。特定实施例还提供一种非暂时性计算机可读存储介质,该存储介质配置有可由一个或多个处理器执行的指令,以使一个或更多处理器执行与上述实施例的任何方法中的步骤相对应的操作。

本文公开的实施例可以通过与客户端互动的云平台、服务器或服务器组(以下统称″服务系统″)来实现。客户端可以是终端设备,或由用户在平台注册的客户端,其中终端设备可以是移动终端、个人电脑(PC),以及可以安装有平台应用程序的任何设备。

上述各种特征和过程可以相互独立使用,也可以以各种方式组合。所有可能的组合和子组合都是为了落在本公开的范围内。此外,在一些实施方案中可以省略某些方法或过程模块。这里描述的方法和过程也不限于任何特定的顺序,与之相关的块或状态可以以其他适当的顺序执行。例如,所描述的区块或状态可以以非具体公开的顺序执行,或者多个区块或状态可以结合在一个区块或状态中。示例的区块或状态可以连续、同时或以其他方式执行。块或状态可以被添加到所公开的示例性实施方案中或从其中移除。此处描述的示例性系统和组件的配置可以与描述的不同。例如,与所披露的示例性实施方案相比,可将元素添加到、移除或重新排列。

本文所述示例方法的各种操作可通过算法至少部分地执行。该算法可以包括存储在存储器中的程序代码或指令(例如,上述非暂时性计算机可读存储介质)。这种算法可以包括机器学习算法。在一些实施例中,机器学习算法可能不会明确地对计算机进行编程以执行功能,但可以从训练数据中学习以生成执行该功能的预测模型。

本文描述的示例方法的各种操作可以至少部分地由一个或多个临时配置(例如,通过软件)或永久配置以执行相关操作的处理器执行。无论是临时配置还是永久配置,这些处理器都可以构成处理器实现的引擎,其运行以执行本文描述的一个或多个操作或功能。

本文描述的方法可以至少部分地由处理器实现,以一个或多个特定处理器作为硬件的示例。例如,一个方法的至少一些操作可以由一个或多个处理器或处理器实现的引擎执行。此外,一个或多个处理器也可以在“云计算”环境中或作为“软件即服务”(SaaS)运行以支持相关操作的性能。例如,至少一些操作可以由一组计算机(例如包括处理器的机器)执行,这些操作可以通过网络(例如,Internet)和一个或多个合适的接口(例如,应用程序接口(API))访问。

某些操作的性能可以分布在处理器之间,不仅驻留在一台机器内,而且部署在若干机器上。在一些示例性实施例中,处理器或处理器实现的引擎可以位于单个地理位置(例如,在家庭环境、办公室环境或服务器场内)。在其他示例性实施方案中,处理器或处理器实现的引擎可以分布在若干地理位置上。

在本说明书中,多个实例可以实现作为单个实例描述的组件、操作或结构。尽管一个或多个方法的单个操作被说明和描述为单独的操作,但一个或多个单独的操作可以同时执行,而且没有什么要求这些操作必须按照说明的顺序执行。在示例配置中作为独立组件呈现的结构和功能可以作为组合结构或组件实施。同样地,作为单一组件呈现的结构和功能可以作为单独的组件来实现。这些和其他的变化、修改、补充和改进都属于本文的主题范围。

虽然参考具体示例实施例描述了主题的概述,但在不脱离本公开实施例的更广泛范围的情况下,可以对这些实施例进行各种修改和更改。本文中,仅为了方便起见,可以单独或集体地用术语“发明”来指代主题的这些实施例,并且如果事实上公开了不止一个,则不打算自愿将本申请的范围限制为任何单一的公开或概念。

本文所示的实施例被充分详细地描述,以使本领域技术人员能够实践所公开的教导。可以使用其他实施例并从中派生,以便在不脱离本发明范围的情况下进行结构和逻辑替换和更改。因此,详细描述不具有限制性意义,各种实施例的范围仅由所附权利要求以及这些权利要求有权享有的全部等价物定义。

此处描述的和/或附图中描述的流程图中的任何过程描述、元素或块应理解为可能代表模块、段或代码段,其中包括一个或多个用于实现过程中特定逻辑功能或步骤的可执行指令。替代实现包括在本文所述实施例的范围内,在该实施例中,根据所涉及的功能,可以从所示或所讨论的内容中删除、无序执行元素或功能,包括大体上同时执行或以相反的顺序执行,如本领域技术人员所理解的。

在这里,“或”是包含性的,而不是排他性的,除非明确指出或根据上下文另有表示。因此,在这里,“A,B,或C”是指“A,B,A和B,A和C,B和C,或A,B和C”,除非明确指出或由上下文另行指明。此外,“和”既是共同的,也是个别的,除非有明确的指示或根据上下文另有表示。因此,在这里,“A和B”是指“A和B,共同或单独”,除非明确表示或由上下文另行表示。此外,可以为本文描述的资源、操作或结构提供复数实例,作为单一实例。此外,各种资源、操作、引擎和数据存储之间的界限在某种程度上是任意的,并且特定的操作是在特定的说明性配置的背景下说明的。其他功能的分配是可以设想的,并且可以落在本公开的各种实施例的范围内。一般来说,在示例配置中作为单独资源呈现的结构和功能可以作为组合结构或资源来实现。同样地,作为单一资源呈现的结构和功能可以作为单独的资源来实现。这些和其他的变化、修改、补充和改进都属于所附权利要求书所代表的本公开的实施例的范围。因此,本说明书和附图应以说明性而非限制性的意义来看待。

术语“包括”或“包含”被用来表示随后声明的特征的存在,但它并不排除其他特征的增加。条件性语言,例如,除其他外,“可以”、“可能”,除非特别说明,或在所使用的上下文中以其他方式理解,一般是为了表达某些实施例包括,而其他实施例不包括某些特征、元素和/或步骤。因此,这种条件性语言一般不意味着特征、元素和/或步骤以任何方式是一个或多个实施方案所必需的,或者一个或多个实施方案必须包括用于决定在有或没有用户输入或提示的情况下,这些特征、元素和/或步骤是否包括或在任何特定实施方案中执行的逻辑。

当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

技术分类

06120115922700