CN115968467A - 存储器受限调度 - Google Patents
存储器受限调度 Download PDFInfo
- Publication number
- CN115968467A CN115968467A CN202180051645.6A CN202180051645A CN115968467A CN 115968467 A CN115968467 A CN 115968467A CN 202180051645 A CN202180051645 A CN 202180051645A CN 115968467 A CN115968467 A CN 115968467A
- Authority
- CN
- China
- Prior art keywords
- nodes
- node
- data
- graph
- edge
- 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
Images
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本公开的某些方面提供了用于生成执行调度的技术,包括:接收用于进程的数据流图表,其中数据流图表包括多个节点和多条边;至少部分地基于该进程的存储器利用来生成该数据流图表的拓扑排序;通过基于预定义的存储器容量将与存储器存取相对应的一个或多个新节点插入到该拓扑排序中来生成第一经修改拓扑排序;基于第一经修改拓扑排序来分配存储器单元;以及通过按第一经修改拓扑排序重新排列一个或多个节点来生成第二经修改拓扑排序,其中第二经修改拓扑排序使得能够增加多个硬件组件的并行利用。
Description
相关申请的交叉引用
本申请要求于2021年8月31日提交的美国专利申请S/N.17/463,393的优先权,该美国专利申请要求于2020年9月1日提交的美国临时专利申请S/N.63/073,269的权益和优先权,其中每件申请的全部内容通过援引整体纳入于此。
引言
本公开的各方面涉及计算机处理器操作调度,尤其涉及针对存储器受限系统的改进的操作调度。
如今各种各样的计算进程涉及顺序地或并行地执行数个离散的操作。调度这些操作应当计及数据依赖关系(例如,在特定操作必须在某些后续操作之前完成的情况下)。计算系统往往利用具有快速存取的存储器(诸如高速缓存、紧密耦合存储器(TCM)、静态随机存取存储器(SRAM)等)来存储每个操作的执行所需的相关联数据。然而,在存储器受限系统中,这些快速存取存储器中可能没有足够的空间来存储整个操作序列和伴随的数据。
在存储器受限系统上执行此类进程会以各种方式降低性能。尽管一些数据通常会被存储在快速存取存储器(诸如高速缓存)中,但存储器受限系统往往需要依赖于更大更慢的存储器来存储其余数据。因为较大的主机存储器相比于快速存取存储器(诸如SRAM)通常会引致显著更多的计算成本,所以减少此类存储器存取的次数以改进进程的执行是有用的。一般而言,对主机存储器的存取增加了功耗和等待时间,并减少了计算机的总带宽。由此,调度此类操作的一个重要方面是减少对较慢存储器(例如,主机处理系统动态随机存取存储器(DRAM))的存储器存取。
一些现有的调度器利用贪婪启发法和局部优化朝着开发减少功耗、等待时间和存储器存取的最优调度的目标迈进。存在各种办法来平衡这些相互竞争的目标,但此类办法本质上是由计算进程和操作的全局结构驱动的问题的局部和次优解决方案。
相应地,所需要的是用于改进进程调度的系统和方法,以便更高效地执行计算机处理。
简要概述
某些实施例提供一种用于生成执行调度的方法,该方法包括:接收用于进程的数据流图表,其中数据流图表包括多个节点和多条边;至少部分地基于该进程的存储器利用来生成该数据流图表的拓扑排序;通过基于预定义的存储器容量将与存储器存取相对应的一个或多个新节点插入到该拓扑排序中来生成第一经修改拓扑排序;基于第一经修改拓扑排序来分配存储器单元;以及通过按第一经修改拓扑排序重新排列一个或多个节点来生成第二经修改拓扑排序,其中第二经修改拓扑排序使得能够增加多个硬件组件的并行利用。
其他方面提供了:处理系统,其被配置成执行前述方法以及本文中所描述的那些方法;非瞬态计算机可读介质,其包括在由处理系统的一个或多个处理器执行时使该处理系统执行前述方法以及本文中所描述的那些方法的指令;计算机程序产品,其被实施在计算机可读存储介质上,该计算机可读存储介质包括用于执行前述方法以及本文中进一步描述的那些方法的代码;以及处理系统,其包括用于执行前述方法以及本文中进一步描述的那些方法的装置。
以下描述和相关附图详细阐述了一个或多个实施例的某些解说性特征。
附图简述
附图描绘了该一个或多个实施例的某些方面,并且因此不被认为限制本公开的范围。
图1描绘了用于改进进程调度以确保进程的高效执行的工作流。
图2A描绘了解说执行进程所涉及的操作集和对应数据流的图表。
图2B描绘了反向边修改以创建经修改图表。
图2C-2D描绘了图表上的割以将诸节点分割成不相交子集。
图2E描绘了全连接修改以创建经修改图表。
图2F描绘了解分配修改以创建经修改图表。
图3A–3D描绘了被执行以高效地生成数据流图表的有效拓扑排序以改进对应进程的调度的一系列评估和操作。
图4描绘了解说用于改进进程调度的方法的流程图。
图5描绘了根据本文中公开的一些实施例的存储器分配的可视化。
图6描绘了解说用于生成拓扑排序以改进进程调度的方法的流程图。
图7描绘了解说用于在生成高效进程调度的同时实施拓扑有效性的方法的流程图。
图8描绘了解说用于处置并行数据流以准确地生成高效进程调度的方法的流程图。
图9描绘了解说用于划分数据流图表以生成拓扑排序以产生高效进程调度的方法的流程图。
图10描绘了解说用于生成和修改拓扑排序以改进进程调度的方法的流程图。
图11描绘了可被配置成执行本文中描述的至少一些方法的示例处理系统。
图12描绘了可被配置成执行本文中描述的至少一些方法的示例处理系统。
为了促成理解,在可能之处使用了相同的附图标记来指定各附图共有的相同要素。构想一个实施例的要素和特征可有益地纳入其他实施例而无需进一步引述。
详细描述
本公开的各方面提供了用于使用图表分析来生成更高效的计算机处理操作调度以最小化存储器利用并改进执行这些调度的计算效率的装置、方法、处理系统和计算机可读介质。
许多计算进程的执行可以使用图表来建模,其中图表中的每个节点对应于要执行的特定操作,并且每条边对应于这些操作之间的数据流。
例如,为了执行神经网络,数据可在任何数目的节点之间流动以供处理,以生成最终的输出。在本公开的各实施例中,计算进程可被构造为有向无环图(DAG)。DAG是没有有向循环的有向图(例如,具有节点和有向边的图表,其中逐节点沿着有向边永远不会导致闭环)。有向图的“源”通常可以指为该进程提供任何需要的输入数据的某个上游实体或组件(刚好在该图表的(诸)第一节点之前),而“目标”是接收来自该进程的任何输出的下游实体或组件(刚好在(诸)最后节点之后)。为了调度该进程的执行,本公开的各实施例可基于该图表来生成拓扑排序(例如,节点的线性排序)。一般而言,有效拓扑排序必须确保生产者节点(例如,生成或以其他方式输出某种数据以供下游消费的节点)在任何对应的消费者节点(例如,接收、操作或以其他方式依赖于某个上游实体生成的数据的节点)开始执行之前被调度和执行。即,如果存在从第一节点(生产者)到第二节点(消费者)的有向边,则在拓扑排序中第一节点必须出现在第二节点之前。值得注意的是,给定节点既可充当生产者(对于一个或多个下游节点)又可充当消费者(对于一个或多个上游节点)。
对于任何给定图表,往往存在大量有效拓扑排序。找到使任何特定准则或属性最大化的排序通常是NP困难的。在本公开的一些实施例中,创建拓扑排序以尝试最小化存储存取。通过最小化此类存储存取,调度可以在减少等待时间和功耗的情况下执行。在一实施例中,图表中的每个节点可输出由零个或更多个后续节点消费的数据。存储器或存储一般在节点产生数据时被分配(或被使用),并仅在最后消费者完成其对所生成的数据的处理时才被释放(例如,存储器空间变得可用)。由此,在一些实施例中,生成带权有向图以反映节点依赖关系,其中每个节点对应于数据所需的存储器单元。
例如,如果给定(生产者)节点向消费节点输出4千字节的数据,则它们之间的边可被赋予权重4千字节。这允许系统对将在任何给定的执行阶段所需要的总存储器进行量化。
本公开的各实施例提供用于使用恰适的边加权来生成和修改图表以产生有效拓扑排序的技术,该有效拓扑排序寻求最小化存储器利用以减少对较慢存储组件的存取次数。附加地,本公开的各实施例提供用于分析和修改拓扑排序以提高调度效率的技术。
在各个实施例中,效率增益可包括但不限于功耗和等待时间减少、系统吞吐量增加等。在各个实施例中,可应用这些调度改进以改进各种各样的处理器和进程的操作,包括机器学习模型的执行。
图表中的最小割
对于给定图表,割是在被移除的情况下使该图断开(例如,将诸节点分割成两个不相交子集)的边集。如本文中使用的,最小割是使其成本最小化的割。在各实施例中,割的成本被定义为被该割切断或移除的每条边的权重之和。由此,最小割是将图表完全分隔成两个不相交子图表、同时使被移除边的总权重最小化的割。例如,如果图表通过移除两条各自权重为10的边而被分割,则割的成本为20。
在有向图的情形中,给定割的成本可部分地基于每条被移除边的方向性和该割的方向性来确定。一般而言,沿一个方向(例如,在二维图表的情形中从左到右)穿越割的边在计算该割的成本时被包括,而沿另一个方向穿越割的边被忽略。
最小割概念的一个推论是最大流。最大流最小割定理指出,从源到目标传递通过有向图的最大流量等于最小割的总成本。在本文中公开的一些实施例中,基于流经有向图中的边的数据量来向该边赋予权重。已由生产者节点产生但尚未被消费者节点消费的任何数据可被称为“正在飞行中”,并必须被分配存储器中的空间。由此,图表中的边的权重指示“正在飞行中”的数据量,并因此必须在存储器中为生产者/消费者集分配空间。因此,根据最大流/最小割定理,通过找到最小割,可以确定最大“正在飞行中”数据量。即,最小割的成本是在任一时间执行图表中的操作将需要的最大存储器量。
用于改进计算机进程调度的示例工作流
图1描绘了用于改进进程调度以确保进程的高效执行的示例工作流100。在所解说的工作流100中,为了概念清晰,描绘了各种组件。然而,在各个实施例中,每个组件的功能性可被组合或跨任何数目和种类的组件分布。附加地,各个组件和操作可按任何次序来执行,包括迭代地执行(例如,给定组件可在工作流100中被多次利用)。所解说的工作流100包括排序组件110、存储器组件120、重排序组件125和分配组件130。这些组件中的每一者通常可被实现为通用处理器上的软件进程、使用硬件来实现、或者被实现为硬件与软件的组合。
如所解说的,工作流100在排序组件110接收到数据图表105时开始。在一实施例中,数据图表105是反映完成给定进程的数据流的有向图。在这样的实施例中,数据图表105中的每个节点可对应于操作(例如,数据变换),而每条边可对应于正在操作之间传递的数据。
例如,在一个实施例中,进程对应于执行机器学习模型任务,诸如用人工神经网络模型进行训练或推断。尽管在本文中讨论的一些示例中使用神经网络,但本公开的各实施例容易适用于任何数据处理操作。
在一实施例中,数据图105中的每个节点可对应于神经网络中的神经元,并且边可对应于此类神经元之间的连接。为了使用神经网络来处理模型输入数据(例如,图像数据、声音数据、传感器数据、文本数据或其他类型的数据),它由神经元顺序地、并行地或以这两种方式进行处理。由此,在一实施例中,数据图表105使用具有针对神经元之间的数据流的对应边的节点集合来反映该操作序列。
在一些实施例中,基于每条边对应的数据来对数据图表105的边进行加权。在一个实施例中,给定边的权重指示沿神经网络中的对应连接传送的数据量。例如,如果第一节点向第二节点传递10千字节的数据,则数据图表105中的对应边将具有权重10千字节。以此方式,数据图表105对执行期间在任何给定点处“正在飞行中”的数据量进行量化。在各实施例中,当创建或产生数据时,存储器中需要空间来存储该数据。该空间直到该数据的最后消费者已完成其操作才会被释放。由此,通过标识已经开始(例如,生产者已输出数据)但尚未终止(例如,(诸)消费者尚未完成执行)的生产者-消费者集,数据图表105可被用于对执行中在任何给定点处需要的存储器量进行量化。
在图1的所解说实施例中,排序组件110基于数据图表105来生成拓扑排序115A。拓扑排序115A通常是遵循该图表中反映的依赖关系的线性操作序列(例如,来自数据图表105的一系列节点)。由此,如果数据图表105中的给定节点在第二节点之前完成,则在拓扑排序115A中该给定节点将先于第二节点。通过沿拓扑排序115A步进(按所指示的顺序执行每个节点),可以执行原始进程(例如,使用机器学习模型(诸如神经网络模型)来处理数据)。
如上面讨论的,在一些实施例中,系统中可用的本地和/或相对较快(例如,相比于需要在共用数据总线上移动数据的主机系统存储器存取更快)的存储器量有限。例如,紧密耦合存储器(TCM)可充当紧密耦合至处理器的快速本地存储器。在各个实施例中,该快速存储器可包括高速缓存空间、SRAM等。尽管这样的存储器可以快速存取(由于其与(诸)处理器的紧密耦合),但由于对于处理系统的物理约束和其他设计考虑,此类快速存储器的大小往往是受限的。相比之下,在主机系统中他处(例如,在典型RAM、硬件驱动或固态驱动设备等中)可能有相对较大的存储或存储器量可用。典型计算操作的执行可能是存储器密集型的,往往超过本地较快存储器中可用的空间。由此,虽然期望将所需要的数据存储在本地快速存储器中,但往往不可能同时存储所有这些数据(由于其大小较小),这需要依赖远程存储器,诸如主机系统存储器(例如,DRAM)。
在一实施例中,拓扑排序115A被配置成减少该进程中在任何给定点处存储的数据量。有益的是,这减少了进程期间的总体存储器利用、等待时间和功率。在一些实施例中,排序组件110被配置成生成最小割集,以便生成拓扑排序115A。
一般而言,计算最小割包括找到将图表的源与目标断开的最小总边权重。如上面讨论的,图表(或子图表)的源是向该图表提供输入的节点或组件,而目标是充当遍历该图表的数据的最终阱或目的地的节点或组件。通过迭代找到此类最小割,排序组件110可以生成拓扑排序115A。在各实施例中,排序组件110可利用任何数目的技术来找到最小割,包括Ford-Fulkerson算法、Edmonds-Karp算法等。
在所解说的工作流100中,拓扑排序115A由存储器组件120接收,该存储器组件120按需将存储器操作插入到该排序中。在一实施例中,每个存储器操作对应于将一个或多个数据单元从本地存储器(例如,TCM)移到远程存储器或存储(例如,DRAM)中,将一个或多个数据单元从远程存储器移到本地存储器中,或两者。在一些实施例中,此类操作可被称为“溢出/填充”操作。换言之,数据可以从本地存储器溢出到远程存储器,并稍后从该远程存储器回填到本地存储器中。
在一实施例中,存储器组件120分析拓扑排序115A以确定该排序中的每个点处(例如,每个节点处、或每个顺序节点之间)需要的存储器量。在一些实施例中,为了这样做,存储器组件120确定每个点处仍然“正在飞行中”(例如,已离开生产者节点但尚未终止于消费者节点处)的所有边的总权重。
对于超过本地存储器中的可用空间的任何点,存储器组件120插入一个或多个存储器操作以将一些数据从较快存储器移出到远程存储器中。以此方式,存储器组件120生成经修改拓扑排序115B,该经修改拓扑排序115B是其中插入了零个或更多个存储器操作的原始拓扑排序115A。这里为零个或更多个是因为一些数据图表105(例如,需要小于或等于本地存储器的存储器空间的数据图表105)将不需要对远程存储器进行任何存储器操作。
在所解说的实施例中,经修改拓扑排序115B随后被提供给重排序组件125。在一实施例中,重排序组件125可以移动经修改拓扑排序115B中的节点(而同时遵循数据依赖关系),以力图提高执行中并行处理的潜力。在一实施例中,遵循数据依赖关系包括确保在经修改拓扑排序115B中没有消费者节点被置于其任何生产者之前。例如,如果消费者被置于紧跟在其生产者之后,则该消费者不能在排序中被移到更靠前。如果在拓扑排序115A中一个或多个节点位于消费者与其生产者之间,则该消费者可在排序中被移到更靠前,以创建经修改拓扑排序115B。
例如,在一个实施例中,重排序组件125可将直接存储器存取(DMA)操作移到排序中更靠前的位置,以允许它们在后台发生、由一个或多个处理单元执行,而操作的执行在一个或多个其他处理单元上继续。即,如果本地存储器中有足够的空间可用,则重排序组件125可将DMA操作移到更靠前,以允许其在(例如下一节点)需要数据之前开始将数据加载到该存储器中,而不是在(例如下一节点)需要数据之前才发起DMA。这增加了硬件组件的并行利用(例如,在一个处理单元加载数据之时,其他处理单元可继续对其他数据进行操作)。
作为另一示例,重排序组件125可修改节点的排序,以改进分立的硬件处理单元上的并行执行。在一些实施例中,系统可包括数个处理单元(例如,一个或多个中央处理单元(CPU)、一个或多个图形处理单元(GPU)、一个或多个机器学习加速器(诸如神经处理单元(NPU))等)、在这样的实施例中,重排序组件125可进一步修改经修改拓扑排序115B,以允许一些操作在分开的处理单元上被并行地执行。这导致第二经修改拓扑排序115C。
在所解说的工作流100中,分配组件130随后对经修改拓扑排序115C进行处理,以生成处理调度135。尽管描绘为被用作工作流100中的最后处理步骤(从而导致处理调度135的生成),但在一些实施例中,可在其他工作流中的不同步骤利用分配组件130。附加地,在一些实施例中,可在分配组件130之后应用一个或多个附加过程。
例如,在一些实施例中,存储器组件120可在分配组件130操作之前插入存储器操作。然而,在一些实施例中,只有在分配期间才需要插入一个或多个存储器操作。因此,在这样的实施例中,存储器组件120可在分配被执行之后分析(或重新分析)排序。
在一个实施例中,分配组件130基于拓扑排序115C来分配(例如,TCM中的)存储器单元。在各实施例中,如上面讨论的,数据图表105和拓扑排序115各自包括使用输入数据来产生输出数据的操作的集合。这些数据在使用时需要工作存储器。因为本地存储器空间可能是受限的,所以在一些实施例中,一些存储器位置必须被重用。这是可能的,因为仅进程的某个子集需要某些数据单元。例如,如果数据由生产者节点产生并由消费者节点消费,则该数据只需要从产生时间存储到消费时间。由此,每个生产者-消费者集跨越拓扑排序115C的一部分,该部分开始于该生产者节点并结束于该(最后)消费者节点。分配组件130可在每个时间点为排序中的该点处“活着(live)”的数据分配存储器中的物理位置。
在各实施例中,处理调度135随后可由处理系统的一个或多个处理单元来执行(诸如关于图10和11描述的),以执行原始进程。
用于改进计算机进程调度的示例图表修改
图2A描绘了包括执行进程所涉及的操作集和对应数据流的示例图表200A。例如,进程可包括机器学习任务,诸如基于机器学习模型进行训练或推断。
在所解说的实施例中,数据从源205经由节点210集合流到目标215。在各实施例中,每个节点210对传入数据执行某种操作,诸如数学运算、变换等。此外,每个节点210可以或可以不输出某种数据。在所解说的实施例中,每条边是有向的(由箭头的方向性指示)。由此,每条边对应于数据从生产者节点流到消费者节点。在所描绘的图200A中,节点210A从源205接收2个数据单元,执行某种操作,并向节点210B和节点210C输出4个数据单元。节点210B未输出数据,并由此可被称为数据阱或叶节点。
如所解说的,节点210C接收4个数据单元,并向节点210E输出1个数据单元。例如,节点210C可在数据被压缩的机器学习模型中执行层操作,诸如卷积层或池化层。
节点210E附加地从节点210D接收5个数据单元。基于该输入,节点210E向目标215输出4个数据单元。由此,在所解说的实施例中,节点210A是以下两个节点的“生产者”节点:节点210B和210C。节点210C对于消费者节点210E而言是生产者。节点210D对于消费者节点210E而言也是生产者。进而,节点210E对于目标215而言是生产者。
尽管为了概念清晰,图表200A描绘了简单的示例过程,但在各个实施例中,图表可以显著更复杂。
值得注意的是,并非给定图表的所有最小割集都会产生有效排序。例如,最小割集可能创建不遵循(由边的方向性所指示的)数据依赖关系的排序。类似地,当给定生产者具有多个消费者时,只有最后完成的节点才能释放所分配的数据。为了解决这些问题,可执行预处理操作集,以在生成拓扑排序之前将图2A的图表200A变换成经修改表示。
图2B描绘了反向边修改以创建经修改图表200B。在所解说的实施例中,通过变换图表200A来执行该修改。在一个实施例中,该修改由图1的排序组件110执行。该图表200B插入了一条或多条新边,以确保割产生有效拓扑排序。如上面讨论的,最小割的概念未遵循数据依赖关系,并且将不一定导致有效拓扑排序(例如,因为该割可能弯回以对边进行切割,以使得从该割的角度来看,该边向后交叉(例如,从右到左),并且因此该割的成本中不包括该权重)。在所解说的实施例中,对于该图表中的每条边,已插入了对应的后向或反向边(标记为216)。这在图2B中使用虚线箭头解说。在一实施例中,这些反向边被赋予确保它们在后续操作期间将不被切割的权重,如下面关于图2C和2D更详细地讨论的。即,后向边通过实际上不可切割而迫使割遵循数据依赖关系。例如,可向每条后向边赋予无限权重。
注意,反向边在本文中的一些示例中被描述为具有“无限”权重,以确保某些割将在算法上被阻止。一般而言,此类边可具有任意高的值。例如,因为真正无限的权重可能是不切实际的(由于物理硬件和软件的限制),所以系统可使用预定义值,该预定义值显著超过系统中所使用的任何真实权重并由此是任意高的。一般而言,预定义值可被选择成大于最昂贵的最小割,这确保它永远不被包括在割中,因为切割如此高的权重,即使是单独切割,也会比任何替换有效切割引致更多的惩罚。
在一些实施例中,该任意高的预定义值被选择成足够高以使得它超过合理或真实权重、但足够低以使得将无限边的权重与其他边的权重相加不会造成可将权重带回合理权重范围的整数溢位。在其他实施例中,针对反向边的任意高值可基于图表中的前向边的一个或多个值(诸如基于最大前向边权重、前向边权重的平均值等)来设置,并且此类参考值可通过系数或函数来修改以变为任意高。
图2C-2D描绘了图表上的割以将诸节点分割成不相交子集。
图2C描绘了具有割217A的图表200B。在各实施例中,最小割可被概念化为穿越图表中一条或多条边的集合以将源与目标分离的有向线。在所解说的实施例中,割217A从下到上横切页面。对于沿一个方向穿越割217A(例如,在所解说的实施例中为从割的左侧穿到右侧)的每条边,该边的权重被添加到该割的成本。对于沿另一个方向通过(在所解说的实施例中为从割的右侧穿到左侧)的每条边,该边的权重被忽略。
在所解说的实施例中,从节点210D到节点210E的边和从节点210C到210E的边两者沿同一方向(从左到右)跨过割217A。因此,割217A的成本中包括它们的权重。相比之下,从节点210E到210C和从节点210E到210D的两条反向边从右到左跨过割217A,并且它们的权重因此被忽略。由此,割217A的成本为6。
图2D描绘了另一割217B。从节点210C到节点210E的边从左到右跨过割217B,并因此在计算割217B的成本时被计入。从节点210E到节点210C的无限反向边从右到左跨过,并因此被忽略。如所解说的,从节点210A到节点210C的边从割217B的右侧跨过割217B至割217B的左侧(基于由箭头指示的割217B的方向性确定)。由此,该边被忽略。相比之下,从节点210C到节点210A的无限反向边从割217B的左侧跨过割217B至割217B的右侧。由此,割217B的成本中包括该边的(无限)权重。这给了割217B(其可能违反原始图表的拓扑)无限的成本,从而确保它将不被用于分割图表200B。
由此,如果没有插入无限(或高权重)边,则最小割技术可能导致割“向后”跨过边并违反依赖关系的图表。插入反向边确保后续生成的割不会违反以下拓扑:这样的割将招致无限的成本。
图2E描绘了全连接修改以创建经修改图表200C。具体而言,图表200C反映图表200B的经修改版本,其中插入了附加边以实施最终排序的拓扑有效性。有效拓扑排序(亦称为具有拓扑有效性的排序)是遵循图表的原始依赖关系的拓扑排序,因为没有消费者节点位于其任何生产者之前。在所解说的实施例中,该修改被执行以确保在图表200C中存在从每一个节点210到目标215以及从源205到每一个节点210的路径。为了这样做,在所解说的实施例中,插入了零权重边。具体而言,在图2B的图表200B中,不存在从源205抵达节点210D的路径。相比之下,在图2E的图表200C中,已经插入了直接从源205到节点210D的零权重边(例如,由图1的组件110排序),并且已经添加了对应的无限权重反向边。
类似地,在图2B的图表200B中不存在从节点210B到目标215的路径。因此,为了确保拓扑有效性,排序组件110插入了将节点210B连接至目标215的零权重边(连同反向的对应无限权重边)。
图2F描绘了解分配修改以创建经修改图表200D。图表200D基于图2E的图表200C,并且被配置成计及多个消费者节点。如以上讨论的,当生产者向一个或多个消费者输出数据时,该数据必须被存储,直到所有这些消费者完成处理该数据。如果对于生产者而言存在单个消费者,则一旦该消费者完成,数据就可被解分配。然而,如果存在多个消费者,则数据直到所有消费者都已完成其操作才能被解分配。在许多实施例中,可能难以(或不可能)知晓哪个消费者将最后完成。由此,在所解说的实施例中,排序组件110按需生成并插入解分配节点220。在各实施例中,解分配节点220是占位节点(例如,不执行任何数据操作或变换并且存在以指示存储器空间何时可被解分配或释放的节点)。
在一个实施例中,排序组件110为具有不止一个消费者的任何生产者节点插入解分配节点220。解分配节点220被插入以确保本地存储器中的空间直到该空间中的数据的所有消费者都已完成才被解分配。如果生产者节点具有单个消费者,则图表中反映的依赖关系(例如,从该生产者到该消费者的边)足以确保该消费者被调度在该生产者之后。一旦消费者完成,生产者/消费者集所需的空间就被解分配。然而,如果对于给定生产者而言存在多个消费者,则不可能知晓空间何时会被解分配,因为这些消费者之间不存在迫使一个消费者最后完成的依赖关系。因此,为了确保空间不会过早地被解分配,解分配节点220被用于(仅当所有消费者都已完成对数据的操作时才)发信号通知应当何时将空间解分配。
在另一实施例中,排序组件110可以简单地为每一个生产者插入解分配节点,而不管消费者的数目。如所解说的,插入用于给定生产者的解分配节点220包括插入从该生产者的每个消费者到解分配节点220的边。因此,在所解说的实施例中,对于生产者节点210A,插入了从每个消费者节点210B和210C到解分配节点200的零权重边。如上,还针对每条边添加了无限权重后向边。这确保在拓扑排序中解分配节点220被置于节点210B和210C两者之后,并且空间直到这两者都已完成其操作才会被解分配。
在各实施例中,排序组件110还将从生产者节点到消费者的每条原始边的权重设置为零。在所解说的实施例中,这包括将从节点210A到210B以及从节点210A到210C的边的权重改变为零。这被执行是因为如果两条边保持其原始权重,则在这些边上流动的数据在计算最小割时会“重复计入”,从而导致最终调度中的不准确和效率低下。
为了量化这些边的权重并确保它们在最终排序中被计入,排序组件110可以附加地插入从生产者节点210A到解分配节点220的边。该边被赋予与从生产者到(诸)消费者的原始边相对应的权重。附加地,如所解说的,该新边类似地伴随有无限后向边以实施拓扑有效性。
在各实施例中,排序组件110随后可使用最大流/最小割技术来处理图表200D,以生成原始图表200A的有效拓扑排序。附加地,通过利用边权重(对应于每个生产者/消费者集所需的数据量),基于存储器利用来计算最小割,并尝试在执行的每个阶段使用最小存储器量。
用于改进计算机进程调度的示例最小割规程
图3A–3D描绘了被执行以高效地生成数据流图表的有效拓扑排序以改进对应进程的调度的一系列评估和操作。具体而言,图3A-3D描绘了由排序组件(例如,图1的排序组件110)计算以生成拓扑排序的一系列最小割。
图3A描绘了生成割之前的初始图表300A。在所解说的实施例中,数据从源305A经由节点310集合流到目标315A。具体而言,节点310A从源305A接收数据,并向节点310B和310C传送数据。节点310B进而向节点310D提供数据,并且节点310C向节点310E提供数据。节点310F从节点310D和节点310E两者接收数据。节点310F随后向目标315A提供数据。
图3B描绘了图表300A中的第一割317。在各实施例中,最小割技术产生图表的单个割。为了生成拓扑排序,排序组件可选择节点以用作给定割的“索引节点”,并将该割约束为刚好在该索引节点之后通过。这允许排序组件对割被置于的位置施加某种控制,以帮助改善切割过程的效率和等待时间。例如,如果割未被约束,则给定图表的最小割很有可能是在该图表的开始或结尾附近的单条边。然而,这里的切割在生成拓扑排序时没有用,因为图表的该部分已经是线性的。即,如果单条边将节点A连接至节点B,则不存在将节点B置于节点A之前的可能排序。因此,在该点生成割是无用的。
在一些实施例中,为了将割约束到索引节点,排序组件110选择索引节点,计算用于将图表划分成两个子图表的割,并随后对每个子图表进行处理以计算每个子图表的另一割。通过对每个子图表进行迭代处理,生成了拓扑排序。在各实施例中,拓扑排序是节点的线性序列。给定图表可存在多个有效拓扑排序。通过对每个子图表进行迭代处理以将每个子图表细分成附加子图表,排序组件迭代地使整个图表更线性。即,每个割通过将一些节点置于该割之前并且将一些节点置于该割之后来有效地施加某个线性度。通过迭代地计算割,图表变得更线性。
在一个实施例中,该过程重复,直到所有子图表都呈线性(或所有子图表都包括单个节点)。在另一实施例中,处理系统不是计算割直到各子图表呈线性(或包含单个节点),而是可以继续,直到每个子图表已达到与大小或复杂性(例如,该子图表中的节点数目)相关的某个预定义准则。这些子图表随后可使用一种或多种技术进行变换,以生成子图表的拓扑排序。
在一实施例中,通过在出现割的地方按正确的次序重新连接每个子图表(例如,通过添加或重新连接被切断的边、同时维持节点的线性序列)来创建最终的拓扑排序。
在所解说的实施例中,排序组件110已选择节点310B用作第一割317的索引节点。在一些实施例中,排序组件110随机选择索引节点。在至少一个实施例中,排序组件110尝试基于每个节点的深度来选择处于图表300A的中心附近的索引节点。
在一个实施例中,排序组件110基于每个相应节点310与源305A和目标315A的距离来确定其深度。例如,对于每个相应节点310,排序组件110可对先于该相应节点310(例如,从源到该节点必须要遍历)的节点或边的数目和在该相应节点310之后(例如,从该节点到目标必须要遍历)的节点或边的数目进行计数。通过汇总这些计数(例如,经由加法或乘法),排序组件110可以标识被定位成最靠近图表300A的中心的节点(或节点集合)。在一实施例中,具有与源和目标的最高总深度的节点被称为“质心”节点。尽管通常位于中心附近,但在各实施例中,质心节点当然可能不会在图表中精确居中。
在一个实施例中,如果多个节点具有相同的深度得分,则排序组件110可以在它们之间进行随机选择以选择索引节点。在至少一个实施例中,如果两个节点处于相同深度并且具有相同的操作类型,则排序组件110将它们视为同胞节点。同胞节点通常对应于被拆分成各自执行同一操作的一组同胞的单个节点。同胞节点可被生成以增强处理并行性。在一实施例中,为了在此类同胞之间进行选择,排序组件110将割约束在同胞的中间节点之后,以使得一半同胞在索引节点运行之前完成,而另一半在索引节点运行之后完成。在一个实施例中,为了标识中间同胞,排序组件在图表中向上游遍历一条边,随后向下遍历一条边回到同胞。重复此操作,直到找到所有同胞。
通常情况下,最小割技术会将割置于使它切穿的边的权重最小化的位置以将图表300A二等分。为了将割约束为刚好在所选索引节点(例如,节点310B)之后发生,排序组件110可向图表添加附加边。在所解说的实施例中,排序组件110添加从源305A到索引节点310B的具有无限权重的边。排序组件110附加地添加从索引节点(在所解说的实施例中为节点310D)的每个消费者到目标315A的具有无限权重的边。这确保所计算出的割将刚好在索引节点之后并且在索引节点的任何消费者之前通过。
在所解说的实施例中,结果所得的割317将索引节点310B与其消费者节点310D分离。如所解说的,为了将图表300A二等分并将源305A与目标315A断开,割317还切穿节点310A与节点310C之间的边。当然,在各实施例中,割317可改为在节点310C与310E之间、节点310E与310F之间、或节点310D与310F之间进行切割(继续切穿节点310F与315A之间的边)。
在各实施例中,割的特定路径(例如,其切断的边)被选择成使被切断的边的总/累积权重最小化。割317必须将节点310B与310D之间的边分支(由于排序组件110所添加的边)。排序组件110随后将按需路由割317贯穿(诸)其他边以完全分开图表300A,同时最小化总成本。每次割317穿越边,该边的权重会被添加到该割的总成本(亦称为惩罚)。值得注意的是,割317的总成本反映了在该割的对应点处在存储器中维持的总数据量。
割317将图表300A分支,以使得图表300A的某个部分在割317之前被执行,而另一部分在割317之后发生。在所解说的实施例中,节点310A和310B(连同源305A)先于割317,而节点310C-F(连同目标315A)在割317之后。
图3C描绘了割317的结果。具体而言,如所解说的,割317一侧的所有元素已被置于第一子图表300B中,而另一侧的所有元素属于第二子图表300C。附加地,如所解说的,新目标315B已被插入到子图表300B中,以为该子图表提供新目标。在一些实施例中,对于被割317切割的每条边,向新目标315B添加新边,以保留和实施原始图表300A中的依赖关系。
类似地,在子图表300C中,已经添加了新源305B。附加地,如所解说的,对于割317割断的每条边,已经从新源305B添加新边,以实施原始图表300A的依赖关系。
图3D描绘了由排序组件110分别为子图表300B和300C生成的附加割320和325。在子图表300B中,排序组件110已经选择节点310A作为索引节点。如所解说的,为了将割320约束为刚好在该节点310A之后发生,排序组件110插入从源305A到索引节点310A以及从该索引节点的所有消费者(例如,从消费者节点310B)到新目标315B的无限权重边。
类似地,在子图表300C中,排序组件110已经选择节点310E用作索引节点。为了约束割325,排序组件110已经插入了从新源305B到索引节点310E的无限边、以及从该索引节点的每个消费者(这里为节点310F)到目标315A的无限边。
如以上讨论的,割320和325将每个子图表300B和300C分支成两个新子图表(从而产生总共四个子图表)。在一些实施例中,排序组件110可以迭代地针对每个子图表执行类似的处理,直到某种终止准则(例如,最大迭代次数、或找到割所花费的最大时间)已被满足。即,排序组件110可计算割以将图表划分成两个子图表。对于每个子图表,排序组件110随后可计算另一割以将每个子图表划分成再两个子图表(从而产生总共四个子图表)。对于这四个子图表中的每一者,排序组件110可以类似地计算割以产生总共八个子图表。
在一个实施例中,排序组件110选择要基于每个子图表的大小进行划分的下一子图表。尽管选择质心节点可以帮助平衡子图表,但结果所得的割可能非常不均匀(一侧的节点比另一侧多)。在一些实施例中,排序组件110选择可用子图表中最大的子图表来计算下一割。该迭代过程重复,直到预定义准则得到满足。通过迭代地选择和切割最大的子图表,排序组件可以首先计算图表的较密集或较复杂区域的最小割,继之以计算较不密集或较不复杂区域的最小割。这导致更高效的拓扑排序,并减少找到最终割集所需的时间。
在一个实施例中,终止准则与完整拓扑排序相关。例如,排序组件110可继续迭代地切割每个子图表,直到给定子图表中的节点是线性的。当子图表呈线性时,不需要附加割来产生拓扑排序。一旦所有子图表都呈线性,它们随后就可被组合(例如,通过在这些子图表被切割的地方将它们链接在一起),以形成完整拓扑排序。在一些实施例中,终止准则可包括要计算的迭代次数或切割次数。一旦已达到该迭代次数,该过程就停止。在一些实施例中,终止准则包括时限。当已花费了预定义时间量时,切割过程停止。
用于进程调度的示例方法
图4描绘了解说用于改进计算机处理操作调度的方法400的流程图。在一些实施例中,方法400由(诸如关于图10描述的)处理系统来执行,该处理系统包括一个或多个组件,诸如排序组件110、存储器组件120、重排序组件125、分配组件130等。
方法400开始于框405,其中接收数据流图表以供处理。在一实施例中,如以上讨论的,数据流图表通常对应于某个计算进程,其中每个节点对应于在该进程期间执行的操作且每条(有向)边对应于该进程中的数据流。在一些实施例中,数据流图表中的每条边的权重对应于沿依赖关系传递并因此需要被分配存储器中的空间的数据量。
在框410,处理系统生成所接收到的数据流图表的拓扑排序。在一个实施例中,该过程包括上面关于图2A-2D和3A-3D所解说和讨论的一些或所有步骤。
方法400随后行进至框415,其中处理系统确定在任何点处该拓扑排序是否会超过存储器中(例如,本地存储器中)的可用空间。即,处理系统可以确定所需的存储器(由该排序中的任何点处边的总权重指示)是否超过存储器中(例如,TCM中)的可用空间。如果是的话,则方法400继续至框420。
在框420,处理系统将一个或多个存储器操作(例如,溢出/填充操作)插入到该拓扑排序中。在一实施例中,对于所需要的空间(由每个点处边的权重指示)超过本地存储器中的可用空间的每个点,处理系统插入(诸)存储器操作以将某些数据移出本地存储器并移到更远程的存储器中,以确保不超过本地存储器容量。方法400随后继续至框425。处理系统可以类似地插入操作以在需要时将数据移回到存储器中。
附加地,在框415,如果处理系统确定该排序中没有点会需要比本地存储器中可用的空间更多的空间,则方法400继续至框425。
在框425,处理系统基于该拓扑排序来分配存储器单元。如上面讨论的,在一些实施例中,这包括在每个时间点向每个数据片指派存储器中的地址。
图5描绘了根据本文中公开的一些实施例的存储器分配的可视化。在所解说的实施例中,在图表500上绘制了分配,其中水平轴是时间并且垂直轴是本地存储器中的存储器单元。在一实施例中,每个分配510(例如,向生产者-消费者或生产者-消费者集)被描绘为矩形,其水平地跨越从生产者节点产生数据的时间到最终消费者节点消费该数据的时间。每个分配510的高度对应于生产者-消费者集所需的数据量。在一实施例中,处理系统通过以下方式来分配存储器:指派存储器单元以力图在不超过垂直轴上的某个预定义值(对应于本地存储器的可用空间(由虚线505指示))的情况下尽可能紧密地压紧此类矩形。如果任何分配510过了该线505,则某些数据必须被移到远程(主机)存储器,并且本地存储器中的对应空间被解分配(从而允许它被重新分配给其他生产者/消费者集)。
在所解说的实施例中,分配指示每个生产者和消费者可以操作的时间。例如,与分配510F相关联的生产者在与分配510B相关联的消费者已完成之后具有所分配的空间。由此,分配510F的生产者直到分配510B的消费者完成才能开始。
返回到图4,在所解说的实施例中,一旦已分配了存储器,方法400就继续至框430,其中处理系统对拓扑排序中节点的排序进行修改,以增加资源的并行利用。在各个实施例中,这可以包括例如将加载操作(将数据从存储移到存储器)移到排序中更靠前的位置,重新排列各节点以允许在分开的处理单元上并行执行,等等。
用于生成拓扑排序的示例方法
图6描绘了解说用于生成拓扑排序以改进进程调度的方法600的流程图。
在一个实施例中,方法600提供了图4中的框410(生成拓扑排序)的附加细节。
方法600开始于框605,其中处理系统执行一个或多个操作以确保割将导致有效拓扑排序(例如,遵循原始依赖关系的排序)。如上面讨论的,这可包括例如添加具有高权重或无限权重的反向边(以防止割向后跨过边并违反依赖关系)。
方法600随后继续至框610,其中处理系统按需将零个或更多个解分配节点插入到图表中。在一个实施例中,如上面讨论的,解分配节点可被用于确保具有多个消费者节点的生产者通过(诸)最小割算法被正确处理。
在框615,发起循环以生成最小割集。在框615,处理系统确定预定义的终止准则是否被满足。
在一个实施例中,终止准则包括确定图表(或每个子图表)是否呈线性。如果是的话,则方法600继续至框620,其中处理系统返回该线性拓扑排序。在各个实施例中,终止准则可包括例如最大时间、最大切割或迭代次数等。
如果终止准则未被满足,则方法600继续至框625,其中处理系统选择子图表。在一实施例中,在循环的第一次迭代期间,处理系统对整个图表进行操作。在每次后续迭代中,框625可包括选择要对其操作的下一子图表。在一个实施例中,处理系统选择其余(非线性)子图表中最大的子图表。
方法600随后继续至框630,其中处理系统计算所选子图表(或原始图表(对于第一次迭代))的最小割。在一些实施例中,为了计算割,处理系统首先选择用于约束割的索引节点。即,处理系统确保割将索引节点与其所有消费者分离。选择在图表的中心附近的索引节点可以允许处理系统首先处理图表的复杂部分,而不是切掉单个节点,这确保迭代过程迅速且高效,并导致计及全局图表结构(而不是其个体局部部分)的最终排序。
在一些实施例中,计算割包括:选择要移除的边集,以将源节点与目标节点完全分离而同时使割的总成本最小化。任何给定割的成本是基于将该割跨过的每条边的个体权重汇总(例如,相加)来确定的。
方法600随后继续至框615。以此方式,处理系统继续迭代地评估和切割每个子图表,直到终止准则被满足。
用于修改图表以实施拓扑有效性的示例方法
图7描绘了解说用于在生成高效进程调度的同时实施拓扑有效性的方法700的流程图。
在一个实施例中,方法700提供了图6中的框605(确保割将产生有效拓扑排序)的附加细节。
在所解说的实施例中,方法700开始于框705,其中处理系统选择图表中的边。该初始选择可按任何数目的方式(包括随机)来完成,因为处理系统将迭代遍历图表中的所有边。
在框710,处理系统生成所选边的对应反向边。即,如果所选边从第一节点穿向第二节点,则反向边是从第二节点到第一节点。在各实施例中,该反向边被赋予指示它不能被最小割切割的预定义权重或其他标志。例如,在一个实施例中,处理系统指派无限(或任意高的)权重,该权重会使得对在错误的方向上(例如,在会违反图表中的数据依赖关系的方向上)跨过的任何割施加无限(或任意高的)惩罚。
在框715,处理系统确定是否有任何附加边仍待评估。如果是的话,方法700返回到框705。以此方式,处理系统插入反向边以实施图表中的数据依赖关系并确保任何最小割都会导致有效拓扑排序。方法700随后继续至框720。
在框720,处理系统尝试通过从源遍历有向边来访问图表中的所有节点。这可包括利用宽度优先搜索或深度优先搜索,这取决于特定实现。在一实施例中,处理系统记录在该搜索期间已访问了哪些节点。方法700随后行进至框725,其中处理系统确定图表中是否有任何节点在该搜索期间未被访问。如果是的话,则将未受访节点与源断开,因为不存在使用有向边从源到达该节点的有效路径。如果访问了所有节点,则方法700行进至框735。然而,如果在该搜索期间至少一个节点未被遍历,则方法700行进至框730。
在框730,处理系统插入从源到在该搜索期间未被访问的任何节点的具有零权重的边。这确保未受访节点与源全连接,并实施任何计算出的最小割的拓扑有效性。在一个实施例中,处理系统附加地插入从(诸)未受访节点到源的无限权重反向边。方法700随后继续到框735。
在框735,处理系统执行另一搜索以尝试通过从目标遍历反向边来访问所有节点。该系统可以类似地记录在该搜索期间找到/遍历了哪些节点。在各实施例中,可以深度优先或宽度优先地执行该搜索。
方法700随后继续至框740,其中处理系统确定在该搜索期间是否从目标访问了所有节点。如果未找到任何节点,则它们与目标断开,并且图表中不存在使用(前向)有向边从未受访节点至目标的有效路径。如果找到了所有节点,则方法700行进至框750。然而,如果至少一个节点未被访问,则方法700行进至框745。
在框745,处理系统插入从(诸)未受访节点到目标的具有零权重的边。这确保该节点与目标全连接,并实施任何计算出的最小割的拓扑有效性。在一个实施例中,处理系统附加地插入从目标到(诸)未受访节点的无限权重反向边。方法700随后继续至框750。
在框750,处理系统返回经修改的图表。以此方式,处理系统确保每个节点经由有效路径来连接到源和目标两者,以实施图表中的数据依赖关系并确保任何最小割都会导致有效拓扑排序。
用于使用解分配节点来修改图表的示例方法
图8描绘了解说用于处置并行数据流以准确地生成高效进程调度的方法800的流程图。
在一个实施例中,方法800提供了图6中的框610(按需插入解分配节点)的附加细节。方法800开始于框805,其中处理系统选择图表中的生产者节点。在各实施例中,生产者节点是向一个或多个后续节点(或向目标节点)输出数据的任何节点。
在一些实施例中,在框805,处理系统从图表中的生产者子集中选择生产者节点。例如,在一个实施例中,方法800仅被应用于具有一个以上消费者的生产者节点。即,由于为具有单个消费者的任何生产者添加解分配节点是不必要的并且是潜在的浪费,因此处理系统可以首先标识向多个消费者输出的所有节点,并从该所标识子集中进行选择。在另一实施例中,方法800被应用于所有生产者节点,而不管与每个生产者节点相关联的消费者的数目。在各个实施例中,该初始选择可按任何数目的方式(包括随机)来完成。
在框810,处理系统标识所选生产者的消费者节点集合。
方法800随后行进至框815,其中处理系统确定由所选生产者向(诸)所标识的消费者输出的数据量。产生的数据量将被用于设置至解分配节点的边的权重。例如,如果生产者产生10千字节的数据(而不管使用该数据的消费者的数目),该系统随后会将至解分配节点的边的权重设置为10千字节。方法800随后继续至框820。
在框820,处理系统生成用于所选生产者的解分配节点。在框825,处理系统随后插入从所选生产者到解分配节点的边。
方法800随后行进至框830,其中处理系统向新生成的边赋予权重。在一实施例中,边的权重基于(先前确定的)由生产者节点向(诸)消费者输出的数据量。在一些实施例中,处理系统还插入从解分配节点向所选生产者节点的具有任意高的权重的反向边。
方法800随后行进至框835,其中处理系统创建从所选生产者的每个所标识消费者连接到新创建的解分配节点的边。
在框840,处理系统将去往和来自所标识消费者的边的权重设置为零。即,处理系统将从所选生产者到(诸)所标识消费者的所有边的权重设置为零。这确保生产者-消费者集的数据在计算最小割时不会被多次计入。系统进一步将(诸)新创建的从每个消费者到解分配节点的边的权重设置为零。
在框845,处理系统确定是否有至少一个附加生产者(或生产者子集中是否有具有多个消费者的一个附加生产者)尚未被评估。如果是的话,方法800返回到框805。
否则,方法800继续至框850,其中处理系统返回插入了解分配节点的该经修改图表。
用于找到最小割的示例方法
图9描绘了解说用于划分数据流图表以生成拓扑排序以产生高效进程调度的方法900的流程图。
在一个实施例中,方法900提供了图6中的框630(生成图表中的割)的附加细节。
方法900开始于框905,其中处理系统从图表中选择索引节点。在一个实施例中,如上面讨论的,处理系统基于每个节点的深度来选择索引节点。例如,处理系统可基于每个节点与开始节点和结尾节点的距离来生成其深度得分,其中较高深度得分对应于更靠近图表(或子图表)的中心的节点。处理系统随后可选择具有最大深度得分的节点作为索引节点。
在框910,处理系统插入从源节点到所选索引节点的无限权重边。这将后续割约束为在索引节点之后发生。
此外,在框915,处理系统标识该索引节点的(诸)消费者。
在框920,处理系统类似地插入从每个所标识消费者到目标的无限权重边。这将割约束为在任何所标识消费者之前发生。以此方式,处理系统可以将最小割技术约束为紧跟在索引节点之后切割,从而将索引节点与其消费者分离。
方法900随后继续至框925,其中处理系统生成该索引节点的最小割。在各实施例中,通过标识要割断的会将源与目标分离而同时招致最小惩罚(基于边权重)的边集来找到最小割,如上面讨论的。
用于生成拓扑排序以实现高效进程调度的示例方法
图10描绘了解说用于生成和修改拓扑排序以改进进程调度的方法1000的流程图。
方法1000开始于框1005,其中处理系统接收用于进程的数据流图表,其中数据流图表包括多个节点和多条边。
在框1010,处理系统至少部分地基于该进程的存储器利用来生成该数据流图表的拓扑排序。
在一些方面,数据流图表中的多个节点对应于在进程期间执行的操作,数据流图表中的多条边对应于在这些操作之间传递的数据,该多条边中的每条相应边关联于相应权重,该相应权重基于与该相应边相关联的数据的大小,并且生成拓扑排序包括基于这些权重来找到数据流图表中的最小割集。
在一些方面,找到最小割集包括通过以下操作来修改数据流图表以实施数据依赖关系:对于该多条边中的每条相应边,添加无限权重的相应后向边。在一些方面,找到最小割集包括通过以下操作来修改数据流图表以实施数据依赖关系:确保数据流图表中存在从源到该多个节点中的每一者以及从该多个节点中的每一者到阱的至少一条有效路径。
在一些方面,找到最小割集包括通过以下操作向该多条边赋予权重:标识该多个节点中向该多个节点中的至少一个消费者节点输出数据的生产者节点;确定由该生产者节点输出的该数据的大小;以及通过以下操作将解分配节点插入到该数据流图表中:创建具有与由该生产者节点输出的该数据的大小相对应的权重的第一边,其中第一边从该生产者节点插入到该解分配节点;向从该生产者节点到该至少一个消费者节点的边赋予为零的权重;以及创建从该至少一个消费者节点到该解分配节点的边,该边被赋予为零的权重。
在一些方面,找到最小割集包括:对于该多个节点中的第一索引节点,通过以下操作将第一最小割约束为在第一索引节点之后发生:创建从源到第一索引节点的具有无限权重的第一边;标识来自该多个节点中的从第一索引节点接收数据的消费者节点集合;创建从该消费者节点集合中的每个消费者节点到阱的具有无限权重的边;以及计算第一最小割,其中第一最小割将第一索引节点置于该数据流图表的第一部分中并且将第一索引节点的所有后继节点置于该数据流图表的第二部分中。
在一些方面,找到最小割集进一步包括:迭代地计算该数据流图表的第一和第二部分中的索引节点的最小割,以及基于这些最小割来对该数据流图表的第一和第二部分进行分离,直到预定义的停止条件被满足。
在一些方面,方法1000进一步包括基于确定第一索引节点在该数据流图表中居中来选择第一索引节点。
在一些方面,方法1000进一步包括:确定第一索引节点是该数据流图表中的一组同胞节点之一;以及通过将该组同胞节点的第一部分约束到该数据流图表的第一部分中并且将该组同胞节点的第二部分约束到该数据流图表的第二部分中来计算第一最小割。
在框1015,处理系统通过基于预定义的存储器容量将与存储器存取相对应的一个或多个新节点插入到该拓扑排序中来生成第一经修改拓扑排序。
在框1020,处理系统基于第一经修改拓扑排序来分配存储器中的存储器单元。
在框1025,处理系统通过按第一经修改拓扑排序重新排列一个或多个节点来生成第二经修改拓扑排序,其中第二经修改拓扑排序使得能够增加多个硬件组件的并行利用。
在一些方面,按第一经修改拓扑排序重新排列一个或多个节点包括:将与将数据从主机处理系统存储器加载到该存储器中相对应的一个或多个节点移到该拓扑排序中更靠前的位置。
用于生成和执行高效进程调度的示例系统
图11描绘了示例处理系统1100,其可被配置成执行本文中所描述的各种方法(包括例如关于图4和6-10所描述的方法)的各方面。
处理系统1100包括中央处理单元(CPU)1102,其在一些示例中可以是多核CPU。在CPU 1102处执行的指令可例如从与CPU 1102相关联的程序存储器加载,或者可从存储器1114加载。
处理系统1100还包括为特定功能定制的附加处理组件,诸如图形处理单元(GPU)1104、数字信号处理器(DSP)1106、以及神经处理单元(NPU)1108。
尽管在图11中未描绘,但是NPU 1108可被实现为CPU 1102、GPU 1104和/或DSP1106中的一者或多者的一部分。
尽管未被包括在所解说的实施例中,处理系统1100还可包括一个或多个输入和/或输出设备,诸如屏幕、物理按钮、扬声器、话筒等等。
处理系统1100还包括存储器1114,该存储器1114代表一个或多个静态和/或动态存储器,诸如动态随机存取存储器、基于闪存的静态存储器等。在该示例中,存储器1114包括计算机可执行组件,其可由处理系统1100的前述处理器中的一个或多个处理器执行。
在该示例中,存储器1114包括排序组件1110、存储器组件120、重排序组件125、分配组件130、(诸)数据图表105、(诸)拓扑排序115和(诸)处理调度135。所描绘的组件以及其他未描绘的组件可被配置成执行本文所描述的方法的各个方面。例如,排序组件1110、存储器组件120、重排序组件125和分配组件130可以分析数据图表105以生成拓扑排序115和处理调度135。这些处理调度135可由处理系统1100执行,或者可由一个或多个其他设备或系统使用。
在所解说的示例中,处理系统1100还包括排序电路1120、存储器电路1122、重排序电路1124和分配电路1126。所描绘的组件以及其他未描绘的组件可被配置成执行本文中所描述的技术的各个方面。
例如,排序电路1120可被配置成执行排序组件110的功能性,存储器电路1122可被配置成执行存储器组件120的功能性,重排序电路1124可被配置成执行重排序组件125的功能性,并且分配电路1126可被配置成执行分配组件130的功能性。
尽管为了清楚起见在图11中被描绘为分开的组件和电路,但排序电路1120、存储器电路1122、重排序电路1124和分配电路1126可被整体地或个体地实现在处理系统1100的其他处理设备中(诸如在CPU 1102、GPU 1104、DSP 1106、NPU 1108等内)。
图12描绘了可被配置成执行本文中所描述的各种方法的各方面的示例多处理器处理系统1200。
处理系统1200包括中央处理单元(CPU)1202,其在一些示例中可以是多核CPU。在CPU 1202处执行的指令可例如从与CPU 1202相关联的程序存储器加载,或者可从存储器1214或主机存储器1216加载。
处理系统1200还包括为特定功能定制的附加处理组件,诸如图形处理单元(GPU)1204、数字信号处理器(DSP)1206、以及神经处理单元(NPU)1208。在一些示例中,处理系统1200的一个或多个处理器可基于ARM或RISC-V指令集。
尽管在图12中未描绘,但是NPU 1208可被实现为CPU 1202、GPU 1204和/或DSP1206中的一者或多者的一部分。
尽管未被包括在所解说的实施例中,处理系统1200还可包括一个或多个输入和/或输出设备,诸如屏幕、物理按钮、扬声器、话筒等等。
处理系统1200包括本地存储器1214,其代表被置于靠近各个处理单元的存储器或存储。例如,本地存储器1214可包括紧密耦合存储器(TCM)、SRAM、高速缓存空间等。如所解说的,本地存储器1214包括某种数据1218A。在一实施例中,本地存储器1214中的该数据1218A可对应于当前正被处理系统1200处理或使用的数据(例如,在使用处理调度135执行进程之时)。
处理系统1200还包括主机存储器1216,其代表一个或多个静态和/或动态存储器,诸如动态随机存取存储器、基于闪存的静态存储器等。在该示例中,主机存储器1216包括(诸)计算机可执行处理调度135,其可由处理系统1200的前述处理器中的一个或多个处理器执行。在所解说的实施例中,主机存储器1216还包括数据1218B。在一些实施例中,该数据1218B可以是不能容纳在本地存储器1218A中可用的有限空间内的用于一个或多个正在进行的操作(例如,根据处理调度135被执行)的附加数据。
在一些实施例中,处理系统1200可在使用一个或多个处理单元执行处理调度135之时将数据在本地存储器1214和主机存储器1216之间来回移动,如上面讨论的。
示例条款
条款1:一种方法,包括:接收用于进程的数据流图表,其中数据流图表包括多个节点和多条边;至少部分地基于该进程的存储器利用来生成该数据流图表的拓扑排序;通过基于预定义的存储器容量将与存储器存取相对应的一个或多个新节点插入到该拓扑排序中来生成第一经修改拓扑排序;基于第一经修改拓扑排序来分配存储器单元;以及通过按第一经修改拓扑排序重新排列一个或多个节点来生成第二经修改拓扑排序,其中第二经修改拓扑排序使得能够增加多个硬件组件的并行利用。
条款2:根据条款1所述的方法,其中按第一经修改拓扑排序重新排列一个或多个节点包括:将与将数据从主机处理系统存储器加载到该存储器中相对应的一个或多个节点移到该拓扑排序中更靠前的位置。
条款3:根据条款1-2中任一项所述的方法,其中:该数据流图表中的该多个节点对应于在该进程期间执行的操作,该数据流图表中的该多条边对应于在这些操作之间传递的数据,该多条边中的每条相应边关联于相应权重,该相应权重基于与该相应边相关联的数据的大小,并且生成该拓扑排序包括基于这些权重来找到该数据流图表中的最小割集。
条款4:根据条款1-3中任一项所述的方法,其中找到该最小割集包括通过以下操作来修改该数据流图表以实施数据依赖关系:对于该多条边中的每条相应边,添加无限权重的相应后向边。
条款5:根据条款1-4中任一项所述的方法,其中找到该最小割集进一步包括通过以下操作来修改该数据流图表以实施数据依赖关系:确保该数据流图表中存在从源到该多个节点中的每一者以及从该多个节点中的每一者到阱的至少一条有效路径。
条款6:根据条款1-5中任一项所述的方法,其中找到该最小割集包括通过以下操作向该多条边赋予权重:标识该多个节点中向该多个节点中的至少一个消费者节点输出数据的生产者节点;确定由该生产者节点输出的该数据的大小;以及通过以下操作来将解分配节点插入到该数据流图表中:创建具有与由该生产者节点输出的该数据的大小相对应的权重的第一边,其中第一边从该生产者节点插入到该解分配节点;向从该生产者节点到该至少一个消费者节点的边赋予为零的权重;以及创建从该至少一个消费者节点到该解分配节点的边,该边被赋予为零的权重。
条款7:根据条款1-6中任一项所述的方法,其中找到该最小割集包括:对于该多个节点中的第一索引节点,通过以下操作将第一最小割约束为在第一索引节点之后发生:创建从源到第一索引节点的具有无限权重的第一边;标识来自该多个节点中的从第一索引节点接收数据的消费者节点集合;创建从该消费者节点集合中的每个消费者节点到阱的具有无限权重的边;以及计算第一最小割,其中第一最小割将第一索引节点置于该数据流图表的第一部分中并且将第一索引节点的所有后继者置于该数据流图表的第二部分中。
条款8:根据条款1-7中任一项所述的方法,其中找到该最小割集进一步包括:迭代地计算该数据流图表的第一和第二部分中的索引节点的最小割;以及基于这些最小割来对该数据流图表的第一和第二部分进行分离,直到预定义的停止条件被满足。
条款9:根据条款1-8中任一项所述的方法,进一步包括:基于确定第一索引节点在该数据流图表中居中来选择第一索引节点。
条款10:根据条款1-9中任一项所述的方法,进一步包括:确定第一索引节点是该数据流图表中的一组同胞节点之一;以及通过将该组同胞节点的第一部分约束到该数据流图表的第一部分中并且将该组同胞节点的第二部分约束到该数据流图表的第二部分中来计算第一最小割。
条款11:一种系统,包括:包括计算机可执行指令的存储器;以及一个或多个处理器,该一个或多个处理器被配置成执行计算机可执行指令并使得该处理系统执行根据条款1-10中任一项所述的方法。
条款12:一种系统,包括用于执行根据条款1-10中任一项所述的方法的装置。
条款13:一种包括计算机可执行指令的非瞬态计算机可读介质,这些计算机可执行指令在由处理系统的一个或多个处理器执行时使该处理系统执行根据条款1-10中任一项所述的方法。
条款14:一种实施在计算机可读存储介质上的计算机程序产品,包括用于执行根据条款1-10中任一项所述的方法的代码。
附加考虑
提供先前描述是为了使本领域任何技术人员均能够实践本文中所描述的各个实施例。本文所讨论的示例并非是对权利要求中阐述的范围、适用性或者实施例的限定。对这些实施例的各种修改将容易为本领域技术人员所明白,并且在本文中所定义的普适原理可被应用于其他实施例。例如,可以对所讨论的要素的功能和布置作出改变而不会脱离本公开的范围。各种示例可恰适地省略、替代、或添加各种规程或组件。例如,可以按与所描述的次序不同的次序来执行所描述的方法,并且可以添加、省略、或组合各种步骤。而且,参照一些示例所描述的特征可在一些其他示例中被组合。例如,可使用本文中所阐述的任何数目的方面来实现装置或实践方法。另外,本公开的范围旨在覆盖使用作为本文中所阐述的本公开的各个方面的补充或者不同于本文中所阐述的本公开的各个方面的其他结构、功能性、或者结构及功能性来实践的此类装置或方法。应当理解,本文中所披露的本公开的任何方面可由权利要求的一个或多个元素来实施。
如本文所使用的,术语“示例性”意指“用作示例、实例或解说”。本文中描述为“示例性”的任何方面不必被解释为优于或胜过其他方面。
如本文中所使用的,引述一列项目“中的至少一者”的短语是指这些项目的任何组合,包括单个成员。作为示例,“a、b或c中的至少一者”旨在涵盖:a、b、c、a-b、a-c、b-c、和a-b-c,以及具有多重相同元素的任何组合(例如,a-a、a-a-a、a-a-b、a-a-c、a-b-b、a-c-c、b-b、b-b-b、b-b-c、c-c、和c-c-c,或者a、b和c的任何其他排序)。
如本文所使用的,术语“确定”涵盖各种各样的动作。例如,“确定”可包括演算、计算、处理、推导、研究、查找(例如,在表、数据库或另一数据结构中查找)、查明及诸如此类。而且,“确定”可以包括接收(例如,接收信息)、访问(例如,访问存储器中的数据)及诸如此类。而且,“确定”可包括解析、选择、选取、建立及诸如此类。
本文中所公开的各方法包括用于实现方法的一个或多个步骤或动作。这些方法步骤和/或动作可以彼此互换而不会脱离权利要求的范围。换言之,除非指定了步骤或动作的特定次序,否则具体步骤和/或动作的次序和/或使用可以改动而不会脱离权利要求的范围。此外,上述方法的各种操作可由能够执行相应功能的任何合适的装置来执行。这些装置可包括各种硬件和/或软件组件和/或模块,包括但不限于电路、专用集成电路(ASIC)、或处理器。一般地,在存在附图中解说的操作的场合,这些操作可具有带相似编号的相应配对装置加功能组件。
以下权利要求并非旨在被限定于本文中示出的实施例,而是应被授予与权利要求的语言相一致的全部范围。在权利要求内,对单数元素的引用不旨在意指“有且只有一个”(除非专门如此声明),而是“一个或多个”。除非特别另外声明,否则术语“一些/某个”指的是一个或多个。权利要求的任何要素都不应当在35U.S.C.§112(f)的规定下来解释,除非该要素是使用短语“用于……的装置”来明确叙述的或者在方法权利要求情形中该要素是使用短语“用于……的步骤”来叙述的。本公开通篇描述的各个方面的要素为本领域普通技术人员当前或今后所知的所有结构上和功能上的等效方案通过引述被明确纳入于此,且旨在被权利要求所涵盖。此外,本文所公开的任何内容都不旨在捐献于公众,无论此类公开内容是否明确记载在权利要求书中。
Claims (30)
1.一种方法,包括:
接收用于进程的数据流图表,其中数据流图表包括多个节点和多条边;
至少部分地基于所述进程的存储器利用来生成所述数据流图表的拓扑排序;
通过基于预定义的存储器容量将与存储器存取相对应的一个或多个新节点插入到所述拓扑排序中来生成第一经修改拓扑排序;
基于所述第一经修改拓扑排序来分配存储器中的存储器单元;以及
通过按所述第一经修改拓扑排序重新排列一个或多个节点来生成第二经修改拓扑排序,其中所述第二经修改拓扑排序使得能够增加多个硬件组件的并行利用。
2.如权利要求1所述的方法,其中按所述第一经修改拓扑排序重新排列一个或多个节点包括:将与将数据从主机处理系统存储器加载到所述存储器中相对应的一个或多个节点移到所述拓扑排序中更靠前的位置。
3.如权利要求1所述的方法,其中:
所述数据流图表中的所述多个节点对应于在所述进程期间执行的操作,
所述数据流图表中的所述多条边对应于在所述操作之间传递的数据,
所述多条边中的每条相应边关联于相应权重,该相应权重基于与该相应边相关联的所述数据的大小,并且
生成所述拓扑排序包括基于所述权重来找到所述数据流图表中的最小割集。
4.如权利要求3所述的方法,其中找到所述最小割集包括通过以下操作来修改所述数据流图表以实施数据依赖关系:
对于所述多条边中的每条相应边,添加无限权重的相应后向边。
5.如权利要求4所述的方法,其中找到所述最小割集进一步包括通过以下操作来修改所述数据流图表以实施数据依赖关系:
确保在所述数据流图表中存在从源到所述多个节点中的每一者以及从所述多个节点中的每一者到阱的至少一条有效路径。
6.如权利要求3所述的方法,其中找到所述最小割集包括通过以下操作向所述多条边赋予所述权重:
标识所述多个节点中向所述多个节点中的至少一个消费者节点输出数据的生产者节点;
确定由所述生产者节点输出的所述数据的大小;以及
通过以下操作将解分配节点插入到所述数据流图表中:
创建具有与由所述生产者节点输出的所述数据的大小相对应的权重的第一边,其中所述第一边从所述生产者节点插入到所述解分配节点;
向从所述生产者节点到所述至少一个消费者节点的边赋予为零的权重;以及
创建从所述至少一个消费者节点到所述解分配节点的边,该边被赋予为零的权重。
7.如权利要求3所述的方法,其中找到所述最小割集包括:对于所述多个节点中的第一索引节点,通过以下操作将第一最小割约束为在所述第一索引节点之后发生:
创建从源到所述第一索引节点的具有无限权重的第一边;
标识来自所述多个节点中的从所述第一索引节点接收数据的消费者节点集合;
创建从所述消费者节点集合中的每个消费者节点到阱的具有无限权重的边;以及
计算所述第一最小割,其中所述第一最小割将所述第一索引节点置于所述数据流图表的第一部分中并且将所述第一索引节点的所有后继节点置于所述数据流图表的第二部分中。
8.如权利要求7所述的方法,其中找到所述最小割集进一步包括:迭代地计算所述数据流图表的所述第一部分和所述第二部分中的索引节点的最小割;以及基于所述最小割来对所述数据流图表的所述第一部分和所述第二部分进行分离,直到预定义的停止条件被满足。
9.如权利要求7所述的方法,进一步包括:基于确定所述第一索引节点在所述数据流图表中居中来选择所述第一索引节点。
10.如权利要求9所述的方法,进一步包括:
确定所述第一索引节点是所述数据流图表中的一组同胞节点之一;以及
通过将该组同胞节点的第一部分约束到所述数据流图表的所述第一部分中并且将该组同胞节点的第二部分约束到所述数据流图表的所述第二部分中来计算所述第一最小割。
11.一种处理系统,包括:
包括计算机可执行指令的存储器;以及
一个或多个处理器,所述一个或多个处理器被配置成执行所述计算机可执行指令并使得所述处理系统执行包括以下动作的操作:
接收用于进程的数据流图表,其中数据流图表包括多个节点和多条边;
至少部分地基于所述进程的存储器利用来生成所述数据流图表的拓扑排序;
通过基于预定义的存储器容量将与存储器存取相对应的一个或多个新节点插入到所述拓扑排序中来生成第一经修改拓扑排序;
基于所述第一经修改拓扑排序来分配存储器中的存储器单元;以及
通过按所述第一经修改拓扑排序重新排列一个或多个节点来生成第二经修改拓扑排序,其中所述第二经修改拓扑排序使得能够增加多个硬件组件的并行利用。
12.如权利要求11所述的处理系统,其中按所述第一经修改拓扑排序重新排列一个或多个节点包括:将与将数据从主机处理系统存储器加载到所述存储器中相对应的一个或多个节点移到所述拓扑排序中更靠前的位置。
13.如权利要求11所述的处理系统,其中:
所述数据流图表中的所述多个节点对应于在所述进程期间执行的操作,
所述数据流图表中的所述多条边对应于在所述操作之间传递的数据,
所述多条边中的每条相应边关联于相应权重,该相应权重基于与该相应边相关联的所述数据的大小,并且
生成所述拓扑排序包括基于所述权重来找到所述数据流图表中的最小割集。
14.如权利要求13所述的处理系统,其中找到所述最小割集包括通过以下动作来修改所述数据流图表以实施数据依赖关系:
对于所述多条边中的每条相应边,添加无限权重的相应后向边。
15.如权利要求14所述的处理系统,其中找到所述最小割集进一步包括通过以下动作来修改所述数据流图表以实施数据依赖关系:
确保在所述数据流图表中存在从源到所述多个节点中的每一者以及从所述多个节点中的每一者到阱的至少一条有效路径。
16.如权利要求13所述的处理系统,其中找到所述最小割集包括通过以下动作向所述多条边赋予所述权重:
标识所述多个节点中向所述多个节点中的至少一个消费者节点输出数据的生产者节点;
确定由所述生产者节点输出的所述数据的大小;以及
通过以下动作将解分配节点插入到所述数据流图表中:
创建具有与由所述生产者节点输出的所述数据的大小相对应的权重的第一边,其中所述第一边从所述生产者节点插入到所述解分配节点;
向从所述生产者节点到所述至少一个消费者节点的边赋予为零的权重;以及
创建从所述至少一个消费者节点到所述解分配节点的边,该边被赋予为零的权重。
17.如权利要求13所述的处理系统,其中找到所述最小割集包括:对于所述多个节点中的第一索引节点,通过以下动作将第一最小割约束为在所述第一索引节点之后发生:
创建从源到所述第一索引节点的具有无限权重的第一边;
标识来自所述多个节点中的从所述第一索引节点接收数据的消费者节点集合;
创建从所述消费者节点集合中的每个消费者节点到阱的具有无限权重的边;以及
计算所述第一最小割,其中所述第一最小割将所述第一索引节点置于所述数据流图表的第一部分中并且将所述第一索引节点的所有后继节点置于所述数据流图表的第二部分中。
18.如权利要求17所述的处理系统,其中找到所述最小割集进一步包括:迭代地计算所述数据流图表的所述第一部分和所述第二部分中的索引节点的最小割;以及基于所述最小割来对所述数据流图表的所述第一部分和所述第二部分进行分离,直到预定义的停止条件被满足。
19.如权利要求17所述的处理系统,进一步包括:基于确定所述第一索引节点在所述数据流图表中居中来选择所述第一索引节点。
20.如权利要求19所述的处理系统,进一步包括:
确定所述第一索引节点是所述数据流图表中的一组同胞节点之一;以及
通过将该组同胞节点的第一部分约束到所述数据流图表的所述第一部分中并且将该组同胞节点的第二部分约束到所述数据流图表的所述第二部分中来计算所述第一最小割。
21.如权利要求11所述的处理系统,进一步包括:
排序组件,其被配置成生成所述拓扑排序;
存储器组件,其被配置成通过插入与存储器存取相对应的所述一个或多个新节点来生成所述第一经修改拓扑排序;
分配组件,其被配置成分配所述存储器单元;以及
重排序组件,其被配置成通过按所述第一经修改拓扑排序重新排列一个或多个节点来生成所述第二拓扑排序。
22.一种包括计算机可执行指令的非瞬态计算机可读介质,所述计算机可执行指令在由处理系统的一个或多个处理器执行时使得所述处理系统执行包括以下动作的操作:
接收用于进程的数据流图表,其中数据流图表包括多个节点和多条边;
至少部分地基于所述进程的存储器利用来生成所述数据流图表的拓扑排序;
通过基于预定义的存储器容量将与存储器存取相对应的一个或多个新节点插入到所述拓扑排序中来生成第一经修改拓扑排序;
基于所述第一经修改拓扑排序来分配存储器中的存储器单元;以及
通过按所述第一经修改拓扑排序重新排列一个或多个节点来生成第二经修改拓扑排序,其中所述第二经修改拓扑排序使得能够增加多个硬件组件的并行利用。
23.如权利要求22所述的非瞬态计算机可读介质,其中按所述第一经修改拓扑排序重新排列一个或多个节点包括:将与将数据从主机处理系统存储器加载到所述存储器中相对应的一个或多个节点移到所述拓扑排序中更靠前的位置。
24.如权利要求22所述的非瞬态计算机可读介质,其中:
所述数据流图表中的所述多个节点对应于在所述进程期间执行的操作,
所述数据流图表中的所述多条边对应于在所述操作之间传递的数据,
所述多条边中的每条相应边关联于相应权重,该相应权重基于与该相应边相关联的所述数据的大小,并且
生成所述拓扑排序包括基于所述权重来找到所述数据流图表中的最小割集。
25.如权利要求24所述的非瞬态计算机可读介质,其中找到所述最小割集包括通过以下动作来修改所述数据流图表以实施数据依赖关系:
对于所述多条边中的每条相应边,添加无限权重的相应后向边;以及
确保在所述数据流图表中存在从源到所述多个节点中的每一者以及从所述多个节点中的每一者到阱的至少一条有效路径。
26.如权利要求24所述的非瞬态计算机可读介质,其中找到所述最小割集包括通过以下动作向所述多条边赋予所述权重:
标识所述多个节点中向所述多个节点中的至少一个消费者节点输出数据的生产者节点;
确定由所述生产者节点输出的所述数据的大小;以及
通过以下动作将解分配节点插入到所述数据流图表中:
创建具有与由所述生产者节点输出的所述数据的大小相对应的权重的第一边,其中所述第一边从所述生产者节点插入到所述解分配节点;
向从所述生产者节点到所述至少一个消费者节点的边赋予为零的权重;以及
创建从所述至少一个消费者节点到所述解分配节点的边,该边被赋予为零的权重。
27.如权利要求24所述的非瞬态计算机可读介质,其中找到所述最小割集包括:对于所述多个节点中的第一索引节点,通过以下动作将第一最小割约束为在所述第一索引节点之后发生:
创建从源到所述第一索引节点的具有无限权重的第一边;
标识来自所述多个节点中的从所述第一索引节点接收数据的消费者节点集合;
创建从所述消费者节点集合中的每个消费者节点到阱的具有无限权重的边;以及
计算所述第一最小割,其中所述第一最小割将所述第一索引节点置于所述数据流图表的第一部分中并且将所述第一索引节点的所有后继节点置于所述数据流图表的第二部分中。
28.如权利要求27所述的非瞬态计算机可读介质,其中找到所述最小割集进一步包括:迭代地计算所述数据流图表的所述第一部分和所述第二部分中的索引节点的最小割;以及基于所述最小割来对所述数据流图表的所述第一部分和所述第二部分进行分离,直到预定义的停止条件被满足。
29.如权利要求28所述的非瞬态计算机可读介质,进一步包括:
基于确定所述第一索引节点在所述数据流图表中居中来选择所述第一索引节点;
确定所述第一索引节点是所述数据流图表中的一组同胞节点之一;以及
通过将该组同胞节点的第一部分约束到所述数据流图表的所述第一部分中并且将该组同胞节点的第二部分约束到所述数据流图表的所述第二部分中来计算所述第一最小割。
30.一种处理系统,包括:
用于接收用于进程的数据流图表的装置,其中数据流图表包括多个节点和多条边;
用于至少部分地基于所述进程的存储器利用来生成所述数据流图表的拓扑排序的装置;
用于通过基于预定义的存储器容量将与存储器存取相对应的一个或多个新节点插入到所述拓扑排序中来生成第一经修改拓扑排序的装置;
用于基于所述第一经修改拓扑排序来分配存储器中的存储器单元的装置;以及
用于通过按所述第一经修改拓扑排序重新排列一个或多个节点来生成第二经修改拓扑排序的装置,其中所述第二经修改拓扑排序使得能够增加多个硬件组件的并行利用。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063073269P | 2020-09-01 | 2020-09-01 | |
US63/073,269 | 2020-09-01 | ||
US17/463,393 US20220066834A1 (en) | 2020-09-01 | 2021-08-31 | Memory-bound scheduling |
US17/463,393 | 2021-08-31 | ||
PCT/US2021/048745 WO2022051422A1 (en) | 2020-09-01 | 2021-09-01 | Memory-bound scheduling |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115968467A true CN115968467A (zh) | 2023-04-14 |
Family
ID=80357696
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180051645.6A Pending CN115968467A (zh) | 2020-09-01 | 2021-09-01 | 存储器受限调度 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20220066834A1 (zh) |
EP (1) | EP4208786A1 (zh) |
KR (1) | KR20230058621A (zh) |
CN (1) | CN115968467A (zh) |
BR (1) | BR112023003044A2 (zh) |
WO (1) | WO2022051422A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116957170B (zh) * | 2023-09-20 | 2023-12-22 | 中国南方电网有限责任公司 | 一种电力系统优化问题的约束集约减方法及系统 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010044850A1 (en) * | 1998-07-22 | 2001-11-22 | Uri Raz | Method and apparatus for determining the order of streaming modules |
US7844959B2 (en) * | 2006-09-29 | 2010-11-30 | Microsoft Corporation | Runtime optimization of distributed execution graph |
US20090327195A1 (en) * | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Root cause analysis optimization |
KR20120134549A (ko) * | 2011-06-02 | 2012-12-12 | 삼성전자주식회사 | Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법 |
US20130055091A1 (en) * | 2011-08-23 | 2013-02-28 | Cisco Technology, Inc. | Graph-Based Virtual Data Center Requests |
US8938599B2 (en) * | 2012-03-15 | 2015-01-20 | Hewlett-Packard Development Company, L. P. | Distributed graph storage system |
US9411558B2 (en) * | 2012-10-20 | 2016-08-09 | Luke Hutchison | Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing |
US20150254130A1 (en) * | 2013-12-03 | 2015-09-10 | Kabushiki Kaisha Toshiba | Error correction decoder |
US10956050B2 (en) * | 2014-03-31 | 2021-03-23 | Sandisk Enterprise Ip Llc | Methods and systems for efficient non-isolated transactions |
US10089056B2 (en) * | 2015-06-07 | 2018-10-02 | Apple Inc. | Device, method, and graphical user interface for collaborative editing in documents |
US10664757B2 (en) * | 2015-09-16 | 2020-05-26 | International Business Machines Corporation | Cognitive operations based on empirically constructed knowledge graphs |
US10200875B2 (en) * | 2017-04-17 | 2019-02-05 | DeepSig Inc. | Placement and scheduling of radio signal processing dataflow operations |
US10515431B2 (en) * | 2017-12-12 | 2019-12-24 | Intel Corporation | Global optimal path determination utilizing parallel processing |
US20190286972A1 (en) * | 2018-03-14 | 2019-09-19 | Microsoft Technology Licensing, Llc | Hardware accelerated neural network subgraphs |
US10868728B2 (en) * | 2018-08-22 | 2020-12-15 | Hewlett Packard Enterprise Development Lp | Graph-based network management |
US11861464B2 (en) * | 2019-10-31 | 2024-01-02 | Adobe Inc. | Graph data structure for using inter-feature dependencies in machine-learning |
-
2021
- 2021-08-31 US US17/463,393 patent/US20220066834A1/en active Pending
- 2021-09-01 WO PCT/US2021/048745 patent/WO2022051422A1/en unknown
- 2021-09-01 KR KR1020237006310A patent/KR20230058621A/ko unknown
- 2021-09-01 BR BR112023003044A patent/BR112023003044A2/pt unknown
- 2021-09-01 CN CN202180051645.6A patent/CN115968467A/zh active Pending
- 2021-09-01 EP EP21786300.0A patent/EP4208786A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2022051422A1 (en) | 2022-03-10 |
US20220066834A1 (en) | 2022-03-03 |
BR112023003044A2 (pt) | 2023-03-21 |
EP4208786A1 (en) | 2023-07-12 |
KR20230058621A (ko) | 2023-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Mittal et al. | A survey of techniques for optimizing deep learning on GPUs | |
CN105593818B (zh) | 用于调度分布式工作流程任务的装置和方法 | |
US11500959B2 (en) | Multiple output fusion for operations performed in a multi-dimensional array of processing units | |
CN110383247B (zh) | 由计算机执行的方法、计算机可读介质与异构计算系统 | |
CN110929627B (zh) | 基于宽模型稀疏数据集的高效gpu训练模型的图像识别方法 | |
Chen et al. | A flow-guided file layout for out-of-core streamline computation | |
WO2023179415A1 (zh) | 机器学习计算优化方法和平台 | |
CN105468439A (zh) | 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行算法 | |
CN112015765B (zh) | 基于缓存价值的Spark缓存淘汰方法及系统 | |
US11797337B2 (en) | Data processing management methods for imaging applications | |
CN115968467A (zh) | 存储器受限调度 | |
US20210390405A1 (en) | Microservice-based training systems in heterogeneous graphic processor unit (gpu) cluster and operating method thereof | |
JPH11259433A (ja) | 並列実行システム | |
CN108108242B (zh) | 基于大数据的存储层智能分发控制方法 | |
Jeon et al. | Loop pipelining in hardware-software partitioning | |
WO2023221626A1 (zh) | 一种内存分配的方法和装置 | |
Nasr et al. | Task scheduling algorithm for high performance heterogeneous distributed computing systems | |
Romero et al. | SkyFlow: Heterogeneous streaming for skyline computation using flowgraph and SYCL | |
Lee et al. | Implication of Optimizing NPU Dataflows on Neural Architecture Search for Mobile Devices | |
Gissler et al. | Efficient Uniform Grids for Collision Handling in Medical Simulators. | |
Kosiachenko | Efficient GPU Parallelization of the Agent-Based Models Using MASS CUDA Library | |
Benitez et al. | Parallel performance model for vertex repositioning algorithms and application to mesh partitioning | |
Trostanovsky | Vertex-and-edge ordering for faster parallel graph processing | |
US20220343145A1 (en) | Method and system for graph neural network acceleration | |
Osama | GPU load balancing |
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 |