CN105164638A - 控制由计算系统执行的任务 - Google Patents
控制由计算系统执行的任务 Download PDFInfo
- Publication number
- CN105164638A CN105164638A CN201480023375.8A CN201480023375A CN105164638A CN 105164638 A CN105164638 A CN 105164638A CN 201480023375 A CN201480023375 A CN 201480023375A CN 105164638 A CN105164638 A CN 105164638A
- Authority
- CN
- China
- Prior art keywords
- task
- node
- subroutine
- state
- perform
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
-
- 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
Abstract
一种基于图的程序说明(104),在由其节点表示的多个任务中指定至少部分排序。执行特定程序包括:执行对应于第一任务的第一子程序,所述第一子程序包括用于执行所述第一任务的第一任务部分;存储表明从一组可能状态中选择的所述第一任务的状态的状态信息,所述组可能状态包括:所述第一任务部分等待执行所述第一任务的待定状态、以及阻止所述第一任务部分执行所述第一任务的抑制状态;并且执行对应于第二任务的第二子程序,所述第二子程序包括用于执行所述第二任务的第二任务部分、以及至少部分基于由所存储的状态信息表明的所述第一任务的所述状态来控制所述第二任务部分的执行的控制部分。
Description
相关申请的交叉引用
本申请要求享有2013年4月23日提交的61/815,052号美国专利申请的优先权。
技术领域
本申请涉及控制由计算系统执行的任务。
背景技术
在控制由计算系统执行的任务的一些技术中,由为一项任务生成的进程或线程来执行该单独任务,并且在完成该任务后,此进程或线程结束。计算系统的操作系统、或利用操作系统的特征的其他集中控制实体可以被用来调度不同的任务或者管理不同任务之间的通讯。可以使用控制流图来限定多个任务的部分排序,该控制流图表明在其他下游任务(例如,任务B)开始之前某些上游任务(例如,任务A)必须完成。可能存在管理新进程的生成的控制进程,用于根据控制流图执行任务。在控制进程生成用于执行任务A的进程A之后,控制进程等待操作系统发出进程A已经结束的通知。在进程A结束之后,操作系统通知控制进程,然后控制进程生成用于执行任务B的进程B。
发明内容
在一个方案中,通常,一种控制由计算系统执行的任务的方法包括:将基于图程序说明的数据结构存储在数据存储系统中,所述基于图程序说明包括表示任务的多个节点,并且所述基于图程序说明包括节点之间的有向边,所述有向边指定在由所述节点表示的多个任务中的至少部分排序;以及使用至少一个处理器执行由所述基于图程序说明指定的程序。所述执行包括:执行对应于第一任务的第一子程序,所述第一子程序包括用于执行所述第一任务的第一任务部分;存储状态信息,所述状态信息表明选自一组可能状态的所述第一任务的状态,该组可能状态包括:所述第一任务部分等待执行所述第一任务的待定状态、以及阻止所述第一任务部分执行所述第一任务的抑制状态;以及执行对应于第二任务的第二子程序,所述第二子程序包括用于执行所述第二任务的第二任务部分、以及至少部分基于由所存储的状态信息表明的所述第一任务的所述状态来控制所述第二任务部分的执行的控制部分。
这些方案可包括一个或多个以下特征。
从上游节点到下游节点的有向边表明在所述部分排序中由所述上游节点表示的所述任务先于由所述下游节点表示的所述任务。
该组可能状态包括:所述第一任务部分已经执行所述第一任务的完成状态、所述第一任务部分等待执行所述第一任务的待定状态、以及已经阻止所述第一任务部分执行所述第一任务的抑制状态。
该组可能状态包括所述第一任务部分处于执行所述第一任务的进程中的活动状态。
所述控制部分包括确定是否调用所述第二任务部分的逻辑。
所述逻辑基于标志的值来确定是否调用所述第二任务部分。
所述逻辑至少部分基于所有任务的状态来确定是否调用所述第二任务部分,所述所有任务是由通过有向边连接至表示所述第二任务的节点的多个节点来表示的所有任务。
如果由通过有向边连接至表示所述第二任务的节点的多个节点表示的所有任务处于所述抑制状态,则所述逻辑确定不调用所述第二部分。
如果由通过有向边连接至表示所述第二任务的节点的多个节点表示的至少一个任务处于所述完成状态并且由通过有向边连接至表示所述第二任务的节点的多个节点表示的任务均不处于所述待定状态时,则所述逻辑确定调用所述第二部分。
在另一个方案中,通常,一种存储在计算机可读存储介质上的计算机程序,用于控制任务,所述计算机程序包括用于使计算系统执行下述步骤的指令:为基于图程序说明存储数据结构,所述基于图程序说明包括表示任务的多个节点,并且所述基于图程序说明包括节点之间的有向边,所述有向边指定在由所述节点表示的多个任务中的至少部分排序;以及执行由所述基于图程序说明指定的程序,所述执行包括:执行对应于第一任务的第一子程序,所述第一子程序包括用于执行所述第一任务的第一任务部分;存储状态信息,所述状态信息表明选自一组可能状态的所述第一任务的状态,该组可能状态包括:所述第一任务部分等待执行所述第一任务的待定状态、以及阻止所述第一任务部分执行所述第一任务的抑制状态;以及执行对应于第二任务的第二子程序,所述第二子程序包括用于执行所述第二任务的第二任务部分、以及至少部分基于由所存储的状态信息表明的所述第一任务的所述状态来控制所述第二任务部分的执行的控制部分。
在另一个方案中,通常,一种用于控制任务的计算系统包括:数据存储系统,为基于图程序说明存储数据结构,所述基于图程序说明包括表示任务的多个节点,并且所述基于图程序说明包括节点之间的有向边,所述有向边指定在由所述节点表示的多个任务中的至少部分排序;以及至少一个处理器,被配置为执行由所述基于图程序说明指定的程序。所述执行包括:执行对应于第一任务的第一子程序,所述第一子程序包括用于执行所述第一任务的第一任务部分;存储状态信息,所述状态信息表明选自一组可能状态的所述第一任务的状态,该组可能状态包括:所述第一任务部分等待执行所述第一任务的待定状态、以及阻止所述第一任务部分执行所述第一任务的抑制状态;以及执行对应于第二任务的第二子程序,所述第二子程序包括用于执行所述第二任务的第二任务部分、以及至少部分基于由所存储的状态信息表明的所述第一任务的所述状态来控制所述第二任务部分的执行的控制部分。
在另一个方案中,通常,一种用于控制任务的计算系统包括:为基于图程序说明存储数据结构的装置,所述基于图程序说明包括表示任务的多个节点,并且所述基于图程序说明包括节点之间的有向边,所述有向边指定在由所述节点表示的多个任务中的至少部分排序;以及用于执行由所述基于图程序说明指定的程序的装置。所述执行包括:执行对应于第一任务的第一子程序,所述第一子程序包括用于执行所述第一任务的第一任务部分;存储状态信息,所述状态信息表明选自一组可能状态的所述第一任务的状态,该组可能状态包括:所述第一任务部分等待执行所述第一任务的待定状态、以及阻止所述第一任务部分执行所述第一任务的抑制状态;以及执行对应于第二任务的第二子程序,所述第二子程序包括用于执行所述第二任务的第二任务部分、以及至少部分基于由所存储的状态信息表明的所述第一任务的所述状态来控制所述第二任务部分的执行的控制部分。
这些方案可包括一个或多个以下优点。
当由计算系统执行任务时,在生成用于执行任务的新进程时需要花费处理时间,并且在任务进程与调度器或保持任务相关性和排序的其他中央进程之间来回交换时需要花费时间。本文描述的技术能够以计算有效的方式来选择性地生成新进程,或者选择性地再用运行进程。基于被添加至用于执行任务的子程序的相对少量代码,编译器能够避免唯一地依赖于具有分散调度机制的集中调度器。以允许并发性和条件逻辑的方式,完成任务自然使得计算系统根据输入约束(诸如,控制流图)执行其他任务。编译器生成的与任务相关的代码在运行期间调用函数以基于存储在计数器和标志中的状态信息来确定是否执行其他任务。由此,在运行期间,编译器生成的所述代码有效地实施了控制任务子程序的调用的状态机。免于切换至调度器和从调度器切换的额外开销,计算系统可以更有效地执行细粒度的潜在同时发生的任务。
通过以下说明书和权利要求书,本发明的其它特征和优点将变得显而易见。
附图说明
图1是计算系统的方框图。
图2A是控制流图的图表。
图2B-图2D是与执行图2A的控制流图的节点的子程序相关的进程生命周期的图表。
图3和图4是控制流图的图表。
具体实施方式
图1示出其中可以使用任务控制技术的计算系统100的示例。系统100包括用于存储任务说明104的存储系统102、用于将任务说明编译成任务子程序以执行任务的编译器106、以及用于执行被加载至存储器系统110的任务子程序的执行环境108。每个任务说明104对将要执行的任务进行编码,并且当可以执行上述任务时进行约束(包括不同任务之间的排序约束)。任务说明104中的一些可以由通过执行环境108的用户接口114相互作用的用户112来构建。所述执行环境108可能被托管在例如受一个合适的操作系统(诸如UNIX操作系统的一个版本)控制的一个或多个通用计算机。例如,所述执行环境108还可以包括多节点并行计算环境,该多节点并行计算环境包括使用多个中央处理器(CPU)或处理器内核的计算机系统的配置,这些CPU或处理器内核可以是本地(例如多处理器系统,诸如对称多处理(symmetricmulti-processing,SMP)计算机),或本地分布式(例如多个处理器耦合为集群或大规模并行处理(MPP)系统),或者远程,或远程分布式(例如通过局域网(LAN)和/或广域网(WAN)来耦合的多个处理器),或其组合。提供所述存储系统102的存储设备可能是所述执行环境108本地的存储设备,例如,存储在被连接到托管所述执行环境108的计算机的存储介质(例如,硬盘驱动器)上;或可能是所述执行环境108远程的存储设备,例如,被托管在通过远程连接(例如,由云计算基础架构提供)与托管所述执行环境108的计算机进行通讯的远程系统上。
图2A示出控制流图200的示例,其限定了将被施加于由计算系统100执行的一组任务上的部分排序。由控制流图200限定的部分排序被编码成存储的任务说明104。在一些实施方式中,用户112选择将被包含在控制流图中的各类节点,并且使用表示被连接节点之间的排序约束的链路来连接这些节点中的一些。一类节点是任务节点,由图2A中的直角方块表示。每个任务节点表示待执行的不同任务。从第一任务节点(在有向链路的开始处)连接至第二任务节点(在有向链路的终点处)的有向链路施加这样的排序约束:在第二节点的任务可以开始之前第一节点的任务必须完成。另一类节点是结节点,由图2A中的圆角方块表示。除非控制流图包括条件行为,否则结节点仅仅用于施加排序约束。具有单个输入链路和多个输出链路的结节点施加排序约束,使得在由输出链路连接的任务节点中的任何任务可以开始之前由输入链路连接的任务节点中的任务必须完成。具有多输入链路和单个输出链路的结节点施加排序约束,使得在由输出链路连接的任务节点中的任务可以开始之前由输入链路连接的任务节点中的所有任务必须完成。任务节点还可以是多个输入链路的终点,其施加排序约束,使得在该任务节点中的任务可以开始之前由输入链路连接的任务节点中的所有任务必须完成。利用条件行为,具有多个输入链路的任务节点还提供与具有多个输入的结节点不同的逻辑行为,在下文进行更详细地的描述。
在构建控制流图之后,编译器106编译任务说明104(其中任务说明104对控制流图表示的任务信息和排序信息进行编码),并且产生用于执行任务的指令。该指令可以是准备好被执行的低级机器代码的形式,或是更高级代码的形式(其被进一步编译为提供最终将被执行的低级机器代码)。所生成的指令包括每个任务节点的子程序(“任务子程序”)、以及每个结节点的子程序(“结点子程序”)。每个任务子程序包括用于执行相应任务的任务部分(也称为任务体)。任务节点包括待执行的相应任务的一些描述,使得编译器能够生成适当的任务部分。例如,在一些实施方式中,任务节点识别将被调用的特定函数、将要运行的程序、或包含在任务部分中的可执行代码。一些任务子程序还可以包括控制部分,所述控制部分控制控制流图中另一个节点的后续子程序的执行。因为在控制完成之后不需要将其传至任何后续任务,所以未被连接至任何下游节点的任务节点的任务子程序可以不需要控制部分。因为结节点的目的是对控制流指定约束,所以每个结点子程序包括控制部分作为其主体。
包含在控制部分中的函数的示例是“chain(链)”函数,其基于与控制流图的节点相关的状态信息确定是否生成用于执行后续节点的子程序的新进程。chain函数的参数(argument)识别后续节点。下表示出被包含在由编译器为控制流图200的每个节点编写的子程序中函数的示例,其中任务子程序的任务部分由函数调用T#()表示,并且子程序的剩余部分被视为表示控制部分。(在其他示例中,任务部分可以包括多个函数调用,且在最后一个函数返回之后表示任务完成)。结点子程序不包括任务部分,并且由此完全由控制部分组成。在这个示例中,单独的函数调用以它们被调用的顺序由分号隔开。
节点 | 子程序 |
任务节点T1 | T1();chain(J1) |
结节点J1 | chain(T2);chain(T3) |
任务节点T2 | T2();chain(J2) |
任务节点T3 | T3();chain(J2) |
结节点J2 | chain(T4) |
任务节点T4 | T4() |
表1
在任务说明104被编译之后,计算系统100将生成的子程序加载至执行环境108的存储器系统110中。当调用特定子程序时,程序计数器将被设置为在存储有子程序的存储器系统110的一部分地址空间起点处的对应地址。
在被调度的时刻,或响应于用户输入或预定事件,计算系统100开始执行表示控制流图的根的至少一个所加载子程序。例如,对于控制流图200,计算系统100生成用于执行任务节点T1的任务子程序的进程。当子程序开始执行时,该进程将首先调用用于执行任务节点T1的任务的任务部分,然后在任务部分返回之后(表明任务节点T1的任务已经完成),进程将调用子程序的控制部分中的chain函数。chain函数所使用的用以确定是否生成用于执行特定节点的子程序的新进程的状态信息是这样的信息,该信息捕捉(capture)使用该特定节点作为参数调用的之前chain函数的历史。在下文进行更详细地的描述。
这个历史信息可以被保持在与不同节点相关联的激活计数器中。计数器的值可以被存储在,例如,一部分存储器(memory)系统110中或者存储在其他工作贮存器(storage)中。在生成第一进程之前,每个节点的激活计数器的值被初始化为到该节点的输入链路的数目。因此,对于控制流图200,具有被初始化为以下值的六个激活计数器。
节点 | 激活计数器值 |
任务节点T1 | 0 |
结节点J1 | 1 |
任务节点T2 | 1 |
任务节点T3 | 1 |
结节点J2 | 2 |
任务节点T4 | 1 |
表2
由于任务节点T1不具有任何输入链路,其激活计数器被初始化为零。可替代地,对于不具有任何输入链路的初始节点,无需具有与该节点相关联的激活计数器。通过输入链路连接的不同节点的控制部分将减小下游链接节点的激活计数器并且将基于减小的值来确定动作。在一些实施方式中,在减小操作(例如,原子“减小-和-测试”操作)之前或之后,访问计数器的函数可以利用原子地减小计数器且读取计数器的值的原子操作(atomicoperation)。在一些系统中,由系统的本地指令来支持这种操作。可替代地,取代将计数器的值减小至零,计数器可以在零处开始,并且函数可以增大计数器的值直到达到被初始化为到节点的输入链路的数目的预定阈值(例如,使用原子“增大-和-测试”操作)。
对chain函数“chain(N)”的调用减小了节点N的激活计数器,并且如果减小后的值为零,则chain函数通过新生成的进程来触发节点N的子程序的执行,然后返回。如果减小后的值大于零,则chain函数简单地返回而不触发新子程序的执行或生成新进程。如对于表1的结节点J1的结点子程序一样,子程序的控制部分可以包括对chain函数的多个调用。在控制部分中最后一个函数返回之后,执行子程序的进程可以退出,或者对于一些函数调用(例如,对于下文描述的“chainTo(链至)”函数),该进程继续执行另一个子程序。新进程的有条件生成使得能够根据期望的部分排序来(潜在同时地)执行任务子程序,而不需要切换至调度器进程或从调度器切换以管理新进程的生成。
对于表1的子程序,在任务子程序T1的任务部分之后对chain函数“chain(J1)”的调用返回节点J1的激活计数器中从1减小至0的结果,使得执行结点子程序,其包括对chain函数“chain(T2)”和“chain(T3)”的调用。这些调用中的每个导致节点T2和T3的相应激活计数器从1减小到0,从而能够执行节点T2和T3的任务子程序。两个任务子程序都包括调用“chain(J2)”的控制部分,其减小了节点J2的激活计数器。不论节点T2和T3的任务体中哪一个首先结束,都将导致调用将节点J2的激活计数器从2减小到1的chain函数。其次结束的任务部分将调用使节点J2的激活计数器从1减小到0的chain函数。由此,只有要完成的最后一个任务将导致执行节点J2的结点子程序,其导致对chain函数“chain(T4)”的最后一次调用并且将节点T4的激活计数器从1减小到0,这初始化了节点T4的任务子程序的执行。在节点T4的任务部分返回之后,因为节点T4的任务子程序不存在控制部分,所以控制流完成。
在表1的子程序的示例中,为控制流图200中每个节点的子程序生成新进程。尽管具有控制部分的每个进程(其中控制部分自身确定是否生成新进程而不需要中央任务监控或调度进程)的子程序获得了一些效率,通过对控制部分进行一定的编译器优化可以得到更高的效率。例如,在一种编译器优化中,如果存在对第一子程序的控制部分中chain函数的单次调用,则在执行第一子程序的相同进程中可以执行(当激活计数器达到零时)下一个子程序(即,该chain函数的参数)-无需生成新进程。实现上述的一个方式是对于节点的最后一个输出链路,编译器明确地生成不同的函数调用(例如,“chainTo”函数而不是“chain”函数)。除了取代当激活计数器是零时生成新进程来执行其参数的子程序之外,chainTo函数与chain函数类似,chainTo函数使得相同进程来执行其参数的子程序。如果节点具有单个输出链路,则其编译后的子程序将具有单次调用chainTo函数的控制部分。如果节点具有多个输出链路,则其编译后的子程序将具有一次或多次调用chain函数且单次调用chainTo函数的控制部分。这降低了在独立进程中生成的子程序的数目和它们相关的启动开销。表3示出使用这个编译器优化,对于控制流图200将产生的子程序的示例。
节点 | 子程序 |
任务节点T1 | T1();chainTo(J1) |
结节点J1 | chain(T2);chainTo(T3) |
任务节点T2 | T2();chainTo(J2) |
任务节点T3 | T3();chainTo(J2) |
结节点J2 | chainTo(T4) |
任务节点T4 | T4() |
表3
在表3的子程序的示例中,第一进程执行节点T1和J1的子程序,然后生成新进程来执行节点T2的子程序,同时第一进程继续执行节点T3的子程序。不论这两个进程中的哪一个首先从它们相应任务部分返回,则其首先减小(从2到1)结节点J2的激活计数器,然后退出。从其任务部分返回的第二进程将结节点J2的激活计数器从1减小到0,然后通过执行结节点J2的子程序继续,其是函数调用“chainTo(T4)”,并且最后为任务节点T4的子程序。图2B示出在节点T3的任务在节点T2的任务之前结束的情况下,当第一和第二进程执行控制流图200中不同节点的子程序时,第一和第二进程的生命周期的示例。沿着表示进程的线的点对应于不同节点(由虚线连接至点)子程序的执行。点之间线段的长度不一定与流逝的时间成比例,而只是旨在示出执行不同子程序和生成新进程的相对顺序。
可以潜在地提高效率的另一修改示例是延迟生成新进程,直到满足阈值,这表明特定子程序可能受益于并发性。如果每个子程序都需要花费大量时间来完成,则由不同进程来同时执行多个子程序是尤其有利的。另外,如果子程序中的任意子程序与其他子程序性相比花费相对少量的时间来完成,则可以利用另一个子程序来连续地执行子程序,而不浪费大量效率。上述延迟生成机制允许由同时运行进程来执行花费大量时间且可以一起执行的多个任务,而且尝试阻止为较短任务生成新进程。
在使用延迟生成的chain函数的可替代实施方式中,chain函数(像chainTo函数)使得由相同的进程来开始执行其参数的子程序。但是,与chainTo函数不同,计时器跟踪它花费在执行子程序上的时间,并且如果超过阈值时间,则chain函数生成新进程来继续执行子程序。第一进程可以继续,就像子程序已经完成一样,并且第二进程可以在第一进程中断处接管的子程序的执行。可以被用来完成上述的一个机制是使得第二进程继承第一进程的子程序栈框架(stackframe)。被执行的子程序的栈框架包括指向特定指令的程序计数器、以及包含与子程序执行相关的其他值(例如,局部变量和寄存器值)。在这个示例中,T2的任务子程序的栈框架将包括返回指针,返回指针使得在完成T2的任务子程序之后,进程返回至J1的结点子程序。当延迟生成计时器溢出时,生成新进程且将其与T2的任务子程序的当前栈框架相关联,并且第一进程立即返回至J1的结点子程序(以调用“chainTo(T3)”)。因为在完成T2的任务子程序之后新进程不需要返回至J1的结点子程序,所以在继承的栈框架中的返回指针被移除(即使其变为null(空))。所以,当任务是快(相对于可配置阈值)的情况,延迟生成使得能够执行后续任务的子程序而没有生成新进程的开销,并且对于通过继承现有栈框架而使得任务更长的情况,延迟生成降低生成新进程的开销。
图2C示出在节点T2的任务比延迟生成阈值长的情况下,当第一和第二进程执行控制流图200中不同节点的子程序时,第一和第二进程的生命周期的示例。当达到生成阈值时,进程1生成进程2,其继承执行节点T2的任务的子程序的栈框架且继续执行子程序。在这个示例中,在节点T2的任务(由进程1开始且由进程2完成)结束之前,节点T3的任务(由进程1执行)结束。所以,在这个示例中,进程1将J2的激活计数器从2减小到1(并且然后退出),且进程2将J2的激活计数器从1减小到0,导致进程2执行任务节点T4的任务。在这个示例中,在确定这种并发性将有益于整体效率之后,允许同时执行节点T2的任务和节点T3的任务。
图2D示出在节点T2的任务比延迟生成阈值短的情况下,当单个进程执行控制流图200中不同节点的子程序时,单个进程的生命周期的示例。在这个示例中,在节点T3的任务(由进程1执行)结束之前,节点T2的任务(也由进程1执行)结束。所以,在这个示例中,进程1在完成节点T2的任务之后将J2的激活计数器从2减小到1,并且进程1在完成节点T3的任务之后将J2的激活计数器从1减小到0,使得进程1执行任务节点T4的任务。在这个示例中,在确定可以快速完成节点T2的任务之后,牺牲节点T2和节点T3任务的同时执行,避免生成第二进程,从而获得效率。
可以包含在控制流图中的另一类节点是条件节点,由图3示出的控制流图300中的圆圈表示。条件节点限定用于确定是否执行任务节点(该任务节点被连接至条件节点的输出)的任务的条件。如果在运行期间所限定的条件为真,则控制流跳过该条件节点继续向下游进行,但是如果在运行期间所限定的条件为假,则控制流不会跳过该条件节点继续进行。如果条件为假,且如果控制流图存在到条件节点下游那些任务节点(且它们自身没有被其它假条件节点阻挡)的其他路径,则只执行条件节点下游那些任务节点的任务。
编译器为每个条件节点产生“条件子程序”,且还使用由条件节点限定的条件来修改条件节点下游的其他一些节点的子程序。例如,编译器可以为将在运行期间应用的“跳过机制”生成指令以遵循由控制流图限定的控制流。在跳过机制中,每个节点都有相关联的“跳过标志”,其控制是否执行相应的任务部分(如果有的话)。如果设置了跳过标志,则任务部分的执行被抑制(节点处于“抑制”状态),并且可以通过适当的控制代码(其由编译器放置在控制部分中)将这个抑制传播至其他任务。在前面的示例中,任务子程序的任务部分先于控制部分。在以下示例中,一些任务子程序的控制部分包括在任务部分之前出现的控制代码(也称为“序言(prologue)”)以及在任务部分之后出现的控制代码(也称为“后记(epilogue)”)。例如,为了实现这个跳过机制,在序言中(即,在任务部分之前执行的代码),编译器包括条件指令(例如if(如果)语句),以及对使用识别下游节点的参数来调用的“跳过函数”的调用。在后记中(即,在任务部分之后执行的代码),编译器包括对chain或chainTo函数的调用。在一些情况下,可以只执行序言,并且由于由跳过标志的值表示的存储状态,任务部分和后记可以被跳过。表4示出为控制流图300生成子程序的示例。
表4
与chain和chainTo函数类似,跳过函数“skip(N)”减小其参数(节点N)的激活计数器,并且如果减小后的值为0,则执行相应的子程序。在这个示例中,通过继续使用相同的进程而不生成新的进程来遵循chainTo函数的行为,然而,编译器可以使用表现为chain和chainTo函数的两个版本跳过函数来以相似的方式控制任务生成。编译器为条件节点的下游节点生成子程序,使得如果设置了正在执行其子程序的节点的跳过标志(即,评估为布尔真值),则其对下游节点调用跳过而不调用任务部分,并且如果跳过标志被清除(即,评估为布尔假值),则其调用任务部分(如果该节点是任务节点)且对下游节点调用chain。可替代地,编译器可以默认包括子程序的控制部分中的条件语句,而无需确定哪个节点是条件节点的下游。特别地,对于每个节点的子程序,可以默认包括用以检查跳过标志的“if”语句,无需编译器确定是否包括该“if”语句(尽管这可能导致对跳过标志的不必要检查)。
如果控制流图中存在条件节点,则具有多个输入的节点在运行期间获得基于节点类型的逻辑行为。具有多个输入链路和单个输出链路的结节点对应于逻辑“或”操作,使得如果由输出链路连接的输出节点使它的子程序为chain调用(且不是跳过调用)的参数,则由输入链路连接的至少一个输入节点必须使它的子程序执行chain调用(且不是跳过调用)。具有多个输入链路和一个输出链路的任务节点对应于逻辑“与”操作,使得如果该任务节点的子程序为chain调用(且不是跳过调用)的参数,则由输入链路连接的所有输入节点必须使它们的子程序执行chain调用(且不是跳过调用)。
为了确保这个逻辑行为,设置与节点相关的跳过标志,并且在运行期间根据预定规则将其清除。在执行控制流图中节点的任何子程序之前出现的初始化阶段,提供跳过标志的初始值,并且该初始值取决于节点的类型。编译器还使用不同版本的跳过函数和chain函数,其根据节点的类型具有不同的行为。如下示出用以改变节点N的跳过标志的预定规则组、以及编译器使用的不同版本函数的行为的一个示例。
·对于多输入结节点(OR(或)操作):初始设置跳过标志,skip_OR(N)不改变跳过标志,chain_OR(N)清除跳过标志
·对于多输入任务节点(与操作):初始清除跳过标志,skip_AND(N)设置跳过标志,chain_AND(N)不改变跳过标志
·对于单输入节点:初始设置跳过标志,skip(N)不改变跳过标志,chain(N)清除跳过标志
关于跳过标志,chainTo函数的行为与chain函数是相同的。对于单输入节点,或操作和与操作的行为是等价的,并且两者都可以被使用(诸如这个示例中或操作的行为)。对于此组规则,(多个)起始节点(即,不具有任何输入链路的节点)使得它们的跳过标志被清除(如果其初始值尚未被清除)。
对于控制流图300,考虑节点C1的条件为真、节点C2的条件为假、并且在节点C2条件检查完成之前节点T3的任务结束的情况:节点T3的子程序将遵循chain逻辑(与跳过逻辑相反),其清除节点J2的跳过标志,并且减小节点J2的激活计数器(从2到1);然后节点T4的子程序遵循跳过逻辑(其不改变跳过标志),并且减小节点J2的激活计数器(从1到0),由于节点J2的跳过标志被节点T3的子程序清除了,所以这导致chain(T5)。
其他规则也是可能的。如下示出用以改变节点N的跳过标志的预定规则组、以及编译器使用的不同版本函数的行为的另一个示例。
·对于结节点:初始设置跳过标志,skip_J(N)不改变跳过标志,chain_J(N)清除跳过标志
·对于任务节点或条件节点:初始清除跳过标志,skip(N)设置跳过标志,chain(N)不改变跳过标志
对于此组规则,(多个)起始节点(即,不具有任何输入链路的节点)也将使得它们的跳过标志被清除(如果其初始值尚未被清除)。
编译器可以基于控制流图的分析可选地执行子程序的控制部分中条件语句或其他指令的多种优化。例如,根据控制流图300,可以确定不管条件节点C1和C2的条件是真还是假,因为在结节点J1与结节点J3之间存在将最终导致执行任务节点T5的任务的链路,所以任务节点T5的任务不会被跳过。所以,编译器能够为任务节点T5生成子程序,其避免了检查其跳过标志,从而简单地调用其任务部分T5()。编译器还可以进行其他优化,例如,在条件节点之后跳过控制流图的整个部分的情况下,只要在适当地处理被跳过的部分之后有任何其他输入了下游节点,就省去中间跳过标志检查和跳过函数调用(即,多次减小下游节点的计数器,该次数为在包含对被跳过部分的中间调用情况下该下游节点的计数器将被减小的次数)。
图4示出包括多输入任务节点T3的简单控制流图400,具有来自分别沿袭条件节点(分别为C1和C2)的任务节点T1和T2的输入链路。在这个示例中,任务节点T3对应于逻辑与操作,使得当节点T3的任务被执行时,节点T1和T2的任务也必须被执行(而不是跳过)。表5示出为控制流图400生成的子程序的示例。
表5
在一些实施方式中,结节点(或其它节点)可以被配置为根据到节点的输入的特性来提供各种逻辑操作。例如,当所有的输入被指定为“必需”输入时,节点可以被配置为提供逻辑与操作,以及当所有的输入被指定为“可选”输入时,节点可以被配置为提供逻辑或操作。如果一些输入被指定为“必需”输入且一些输入被指定为“可选”输入,则可以使用一组预定规则来说明将由节点执行的逻辑操作的组合。
在一些实施方式中,由控制部分中的控制代码表示的且由编译器构建的状态机可以使用其他状态变量来表示与由上述激活计数器和跳过标志的值表示的状态等价的状态。例如,一组状态可以包括:“待定(pending)”、“激活(active)”、“完成(completed)”以及“抑制(suppressed)”。在这个示例中,任务起始于待定状态。这些状态之间容许的转换包括:(1)待定到抑制;或(2)待定到激活、以及激活到完成。具有激活计数器的系统与不具有激活计数器的系统的行为之间存在一些差异。取代执行由上游任务的后记触发的下游任务的序言(其确定激活计数器已经达到零),将由其序言触发任务的执行(其确定至少一个上游任务处于完成状态且没有一个上游任务处于待定状态)。可替代地,如果其序言确定所有的上游任务都处于抑制状态,则该任务的执行也将被抑制。
在一些实施方式中,使用激活计数器降低了需要调用序言的次数。例如,如果没有激活计数器,对于与输入链路直接相连的每个上游任务,可能每次都需要调用下游任务的序言。然而,使用激活计数器,可能最后一个上游任务才需要调用下游任务的序言以减小其激活计数器。
对于使用的任何类型状态信息,编译器可以对控制部分应用额外优化。例如,对于具有一定拓扑结构的被连接节点的一些子集,编译器可以提供减小的控制部分集合。这种拓扑结构的一种示例是具有单个上游根节点的一个或多个下游节点的节点树。控制流图中不是这个树子图的一部分的任何节点具有通用的序言和后记。然而,对于树子图中的节点,编译器为根节点提供单个组合序言且仅仅为树子图的叶节点提供减小的后记集合。编译器可以确定树子图的成员,例如,通过从根节点向下游遍历控制流图并且将带有仅仅来自根节点或来自之前添加的另一节点的输入的任何节点添加至树来确定。树子图的组合序言将包括代码来一起执行或抑制树中所有节点的任务部分,并且调用所有叶节点的后记。其他的编译器优化包括对于不具有来自任何上游节点的输入链路的任何节点省略序言,或者对于不具有到任何下游节点的任何输出链路的任何节点省略后记。
在一些实施方式中,由节点表示的任务可以具有由除了控制流图的多种基于图程序说明中的任何一个指定的部分排序。例如,基于图程序说明中的一些有向边可以表示控制流(其可以施加阻止链接节点同时运行它们的任务的排序关系),并且基于图程序说明中的其他有向边可以表示数据流(其可以施加不阻止链接节点同时运行它们的任务的依赖关系)。
上述任务控制技术可以使用执行适当软件的计算系统来实施。例如,软件包括在一个或多个已编程或可编程计算机系统(可以具有各种架构,诸如分布式、客户端/服务器、或网格式)上执行的一个或多个计算机程序中的程序,每个计算机系统包括至少一个处理器、至少一个数据存储系统(包括易失性和/或非易失性存储器和/或存储元件)、以及至少一个用户接口(用于使用至少一个输入设备或端口来接收输入,以及用于使用至少一个输出设备或端口来提供输出)。该软件可以包括大型程序的一个或多个模块,例如,该大型程序提供与数据流图的设计、配置和执行相关的服务。该程序的模块(例如,数据流图的元件)可以被实施为数据结构或者符合在数据库中存储的数据模型的其它经过组织的数据。
该软件可以被提供在诸如CD-ROM或其他计算机可读介质之类的有形永久存储介质(例如,其可以被通用或专用计算机系统或设备读取)上,或者通过网络的通信介质递送(例如,被编码成传播信号)到执行该软件的计算机系统的有形永久介质。一些或全部处理可以在专用计算机上执行,或者使用诸如协处理器或现场可编程门阵列(FPGA)或专用集成电路(ASIC)之类的专用硬件来执行。该处理可以以分布方式实施,在该分布方式中,由该软件指定的不同的计算部分由不同的计算元件执行。每个这样的计算机程序被优选地存储在或下载到可由通用或专用可编程计算机读取的存储设备的计算机可读存储介质(例如,固态存储器或介质、或者磁或光介质),用于在计算机读取该存储介质或设备时配置和操作该计算机,以执行此处所描述的处理。也可以考虑将本发明的系统实施为有形永久存储介质,其配置有计算机程序,其中,如此配置的存储介质使得计算机以特定和预定义的方式操作以执行此处所描述的一个或多个处理步骤。
已经对本发明的多个实施例进行了描述。然而,应当理解,前面的描述旨在说明而非限制本发明的范围,本发明的范围由以下权利要求书的范围来限定。因此,其它实施例也落在以下权利要求书的范围内。例如,在不脱离本发明的范围的情况下可进行各种修改。此外,上述的一些步骤可以是顺序独立的,因此可以以不同于所述的顺序来执行。
Claims (12)
1.一种控制由计算系统执行的任务的方法,所述方法包括:
将基于图程序说明的数据结构存储在数据存储系统中,所述基于图程序说明包括表示任务的多个节点,并且所述基于图程序说明包括节点之间的有向边,所述有向边指定在由所述节点表示的多个任务中的至少部分排序;以及
使用至少一个处理器执行由所述基于图程序说明指定的程序,所述执行包括:
执行对应于第一任务的第一子程序,所述第一子程序包括用于执行所述第一任务的第一任务部分;
存储状态信息,所述状态信息表明选自一组可能状态的所述第一任务的状态,该组可能状态包括:所述第一任务部分等待执行所述第一任务的待定状态、以及阻止所述第一任务部分执行所述第一任务的抑制状态;以及
执行对应于第二任务的第二子程序,所述第二子程序包括用于执行所述第二任务的第二任务部分、以及至少部分基于由所存储的状态信息表明的所述第一任务的所述状态来控制所述第二任务部分的执行的控制部分。
2.根据权利要求1所述的方法,其中从上游节点到下游节点的有向边表明在所述部分排序中由所述上游节点表示的所述任务先于由所述下游节点表示的所述任务。
3.根据权利要求1或2所述的方法,其中该组可能状态包括:所述第一任务部分已经执行所述第一任务的完成状态、所述第一任务部分等待执行所述第一任务的待定状态、以及已经阻止所述第一任务部分执行所述第一任务的抑制状态。
4.根据权利要求3所述的方法,其中该组可能状态包括所述第一任务部分处于执行所述第一任务的进程中的活动状态。
5.根据前述任意权利要求所述的方法,其中所述控制部分包括确定是否调用所述第二任务部分的逻辑。
6.根据权利要求5所述的方法,其中所述逻辑基于标志的值来确定是否调用所述第二任务部分。
7.根据权利要求5所述的方法,其中所述逻辑至少部分基于所有任务的状态来确定是否调用所述第二任务部分,所述所有任务是由通过有向边连接至表示所述第二任务的节点的多个节点来表示的所有任务。
8.根据权利要求7所述的方法,其中如果由通过有向边连接至表示所述第二任务的节点的多个节点表示的所有任务处于所述抑制状态,则所述逻辑确定不调用所述第二部分。
9.根据权利要求7或8所述的方法,其中如果由通过有向边连接至表示所述第二任务的节点的多个节点表示的至少一个任务处于所述完成状态并且由通过有向边连接至表示所述第二任务的节点的多个节点表示的任务均不处于所述待定状态时,则所述逻辑确定调用所述第二部分。
10.一种存储在计算机可读存储介质上的计算机程序,用于控制任务,所述计算机程序包括用于使计算系统执行下述步骤的指令:
存储基于图程序说明的数据结构,所述基于图程序说明包括表示任务的多个节点,并且所述基于图程序说明包括节点之间的有向边,所述有向边指定在由所述节点表示的多个任务中的至少部分排序;以及
执行由所述基于图程序说明指定的程序,所述执行包括:
执行对应于第一任务的第一子程序,所述第一子程序包括用于执行所述第一任务的第一任务部分;
存储状态信息,所述状态信息表明选自一组可能状态的所述第一任务的状态,该组可能状态包括:所述第一任务部分等待执行所述第一任务的待定状态、以及阻止所述第一任务部分执行所述第一任务的抑制状态;以及
执行对应于第二任务的第二子程序,所述第二子程序包括用于执行所述第二任务的第二任务部分、以及至少部分基于由所存储的状态信息表明的所述第一任务的所述状态来控制所述第二任务部分的执行的控制部分。
11.一种用于控制任务的计算系统,所述计算系统包括:
数据存储系统,存储基于图程序说明的数据结构,所述基于图程序说明包括表示任务的多个节点,并且所述基于图程序说明包括节点之间的有向边,所述有向边指定在由所述节点表示的多个任务中的至少部分排序;以及
至少一个处理器,被配置为执行由所述基于图程序说明指定的程序,所述执行包括:
执行对应于第一任务的第一子程序,所述第一子程序包括用于执行所述第一任务的第一任务部分;
存储状态信息,所述状态信息表明选自一组可能状态的所述第一任务的状态,该组可能状态包括:所述第一任务部分等待执行所述第一任务的待定状态、以及阻止所述第一任务部分执行所述第一任务的抑制状态;以及
执行对应于第二任务的第二子程序,所述第二子程序包括用于执行所述第二任务的第二任务部分、以及至少部分基于由所存储的状态信息表明的所述第一任务的所述状态来控制所述第二任务部分的执行的控制部分。
12.一种用于控制任务的计算系统,所述计算系统包括:
存储基于图程序说明的数据结构的装置,所述基于图程序说明包括表示任务的多个节点,并且所述基于图程序说明包括节点之间的有向边,所述有向边指定在由所述节点表示的多个任务中的至少部分排序;以及
用于执行由所述基于图程序说明指定的程序的装置,所述执行包括:
执行对应于第一任务的第一子程序,所述第一子程序包括用于执行所述第一任务的第一任务部分;
存储状态信息,所述状态信息表明选自一组可能状态的所述第一任务的状态,该组可能状态包括:所述第一任务部分等待执行所述第一任务的待定状态、以及阻止所述第一任务部分执行所述第一任务的抑制状态;以及
执行对应于第二任务的第二子程序,所述第二子程序包括用于执行所述第二任务的第二任务部分、以及至少部分基于由所存储的状态信息表明的所述第一任务的所述状态来控制所述第二任务部分的执行的控制部分。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361815052P | 2013-04-23 | 2013-04-23 | |
US61/815,052 | 2013-04-23 | ||
PCT/US2014/035098 WO2014176313A1 (en) | 2013-04-23 | 2014-04-23 | Controlling tasks performed by a computing system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105164638A true CN105164638A (zh) | 2015-12-16 |
CN105164638B CN105164638B (zh) | 2019-09-27 |
Family
ID=50884503
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480023375.8A Active CN105164638B (zh) | 2013-04-23 | 2014-04-23 | 控制由计算系统执行的任务 |
CN201480023408.9A Active CN105164639B (zh) | 2013-04-23 | 2014-04-23 | 控制由计算系统执行的任务 |
CN201811207891.2A Active CN109614170B (zh) | 2013-04-23 | 2014-04-23 | 控制由计算系统执行的任务 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480023408.9A Active CN105164639B (zh) | 2013-04-23 | 2014-04-23 | 控制由计算系统执行的任务 |
CN201811207891.2A Active CN109614170B (zh) | 2013-04-23 | 2014-04-23 | 控制由计算系统执行的任务 |
Country Status (8)
Country | Link |
---|---|
US (3) | US9665396B2 (zh) |
EP (3) | EP2989540B1 (zh) |
JP (3) | JP6469083B2 (zh) |
KR (2) | KR102305084B1 (zh) |
CN (3) | CN105164638B (zh) |
AU (3) | AU2014257135B2 (zh) |
CA (3) | CA2909751C (zh) |
WO (2) | WO2014176313A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108874394A (zh) * | 2018-04-17 | 2018-11-23 | 上海达野智能科技有限公司 | 机器人用户程序的解释方法及解释装置 |
CN109656568A (zh) * | 2018-12-28 | 2019-04-19 | 黑龙江省工业技术研究院 | 按需的可约程序控制流图图可达性索引方法 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2909751C (en) | 2013-04-23 | 2021-02-16 | Ab Initio Technology Llc | Controlling tasks performed by a computing system |
US9342415B2 (en) * | 2014-07-14 | 2016-05-17 | International Business Machines Corporation | Run-to-completion thread model for software bypass fail open for an inline intrusion protection system |
CA2959534C (en) * | 2014-09-02 | 2021-06-29 | Ab Initio Technology Llc | Compiling graph-based program specifications |
US9933918B2 (en) | 2014-09-02 | 2018-04-03 | Ab Initio Technology Llc | Specifying control and data connections in graph-based programs |
US9760406B2 (en) | 2014-09-02 | 2017-09-12 | Ab Initio Technology Llc | Controlling data processing tasks |
CN112363712B (zh) | 2014-09-02 | 2024-03-12 | 起元科技有限公司 | 用于处理基于图的程序规范的方法 |
US9934070B2 (en) | 2014-09-02 | 2018-04-03 | Ab Initio Technology Llc | Managing state for controlling tasks |
CN105988907B (zh) * | 2015-01-29 | 2019-04-02 | 深圳市腾讯计算机系统有限公司 | 业务监控方法和装置 |
US10229150B2 (en) * | 2015-04-23 | 2019-03-12 | Splunk Inc. | Systems and methods for concurrent summarization of indexed data |
US11093878B2 (en) * | 2015-07-01 | 2021-08-17 | Oracle International Corporation | System and method for providing temporal dependencies between tasks |
KR101767418B1 (ko) * | 2015-10-21 | 2017-08-11 | 현대오트론 주식회사 | 임베디드 운영체제에서 로직의 우선순위 보장 방법 및 그 장치 |
CN105653905B (zh) * | 2015-12-28 | 2018-07-24 | 西北大学 | 一种基于api安全属性隐藏与攻击威胁监控的软件保护方法 |
US10152349B1 (en) * | 2016-09-27 | 2018-12-11 | Juniper Networks, Inc. | Kernel scheduling based on precedence constraints and/or artificial intelligence techniques |
US10261799B2 (en) * | 2017-02-28 | 2019-04-16 | International Business Machines Corporation | Programmatic implicit multithreading |
KR101867866B1 (ko) * | 2017-03-23 | 2018-06-18 | 주식회사 노트스퀘어 | 프로그램의 동적 최적화 방법 및 장치 |
CN108519915A (zh) * | 2018-04-12 | 2018-09-11 | 北京邮电大学 | 流量任务调度方法和装置 |
US10817220B2 (en) * | 2019-01-31 | 2020-10-27 | EMC IP Holding Company LLC | Sharing processor cores in a multi-threading block i/o request processing data storage system |
CN111027196B (zh) * | 2019-12-03 | 2023-04-28 | 南方电网科学研究院有限责任公司 | 一种电力设备的仿真分析任务处理方法、装置及存储介质 |
US11080111B1 (en) * | 2020-02-24 | 2021-08-03 | Nvidia Corporation | Technique for sharing context among multiple threads |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6378066B1 (en) * | 1999-02-04 | 2002-04-23 | Sun Microsystems, Inc. | Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications |
US20040073529A1 (en) * | 2002-10-10 | 2004-04-15 | Stanfill Craig W. | Startup and control of graph-based computation |
US20090030863A1 (en) * | 2007-07-26 | 2009-01-29 | Ab Initio Software Corporation | Transactional graph-based computation with error handling |
US20110276968A1 (en) * | 2010-05-07 | 2011-11-10 | Oracle International Corporation | Event driven change injection and dynamic extensions to a bpel process |
US20120030646A1 (en) * | 2010-07-30 | 2012-02-02 | Kaushik Ravindran | Developing Programs in a Graphical Specification and Constraint Language |
Family Cites Families (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5471622A (en) | 1989-10-04 | 1995-11-28 | Paralogic, Inc. | Run-time system having nodes for identifying parallel tasks in a logic program and searching for available nodes to execute the parallel tasks |
US5394549A (en) | 1992-12-17 | 1995-02-28 | International Business Machines Corporation | Task spawning responsive to relational database conditions and operations |
CA2095311A1 (en) | 1993-04-30 | 1994-10-31 | Richard E. Swagerman | Conversation management routine for co-operative processing applications |
US5966072A (en) | 1996-07-02 | 1999-10-12 | Ab Initio Software Corporation | Executing computations expressed as graphs |
GB2335051B (en) | 1998-05-19 | 2000-01-19 | Bookham Technology Ltd | Optical device for splitting up a multi-wavelength light beam |
US6823517B1 (en) * | 2000-01-27 | 2004-11-23 | Andrew E. Kalman | Multi-tasking-real-time operating system for microprocessors with limited memory that constrains context switching to occur only at task level |
US6316958B1 (en) * | 2000-05-16 | 2001-11-13 | Xilinx, Inc. | Programmable logic device with adjustable length delay line |
US7685602B1 (en) * | 2000-06-05 | 2010-03-23 | Teradata Us, Inc. | Controlling software components in a multi-node processing system |
DE10065498B4 (de) * | 2000-12-28 | 2005-07-07 | Robert Bosch Gmbh | Verfahren und Vorrichtung zur Rekonstruktion des Prozessablaufs eines Steuerprogramms |
US6983456B2 (en) * | 2002-10-31 | 2006-01-03 | Src Computers, Inc. | Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms |
US20040154010A1 (en) * | 2003-01-31 | 2004-08-05 | Pedro Marcuello | Control-quasi-independent-points guided speculative multithreading |
JP2004326486A (ja) * | 2003-04-25 | 2004-11-18 | Matsushita Electric Ind Co Ltd | タスク管理装置 |
US7467383B2 (en) | 2004-03-08 | 2008-12-16 | Ab Initio Software Llc | System for controlling task execution using a graphical representation of task dependency |
JP2005258920A (ja) | 2004-03-12 | 2005-09-22 | Fujitsu Ltd | マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置 |
EP1783604A3 (en) * | 2005-11-07 | 2007-10-03 | Slawomir Adam Janczewski | Object-oriented, parallel language, method of programming and multi-processor computer |
JP2007193529A (ja) * | 2006-01-18 | 2007-08-02 | Matsushita Electric Ind Co Ltd | 半導体集積回路の高位合成方法 |
US7870556B2 (en) * | 2006-05-16 | 2011-01-11 | Ab Initio Technology Llc | Managing computing resources in graph-based computations |
KR20080068385A (ko) * | 2007-01-19 | 2008-07-23 | 슈어소프트테크주식회사 | 소프트웨어 테스트 시스템, 방법 및 그 방법을 실행하기위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체 |
US20080282246A1 (en) * | 2007-05-07 | 2008-11-13 | Danny Dolev | Compiler aided ticket scheduling of tasks in a computing system |
US8589925B2 (en) * | 2007-10-25 | 2013-11-19 | Microsoft Corporation | Techniques for switching threads within routines |
CN101446909B (zh) * | 2007-11-30 | 2011-12-28 | 国际商业机器公司 | 用于管理任务事件的方法和系统 |
KR101510355B1 (ko) * | 2008-02-26 | 2015-04-14 | 아브 이니티오 테크놀로지 엘엘시 | 데이터 관계의 그래픽 표현 |
WO2009132047A2 (en) * | 2008-04-21 | 2009-10-29 | Zytron Corp. | Collaborative and proactive defense of networks and information systems |
CN105843684B (zh) * | 2009-02-13 | 2020-03-03 | 起元技术有限责任公司 | 管理任务执行 |
JP5390947B2 (ja) | 2009-06-10 | 2014-01-15 | 日本放送協会 | ジョブ管理システム、ジョブ管理装置及びそのプログラム |
US8561041B1 (en) * | 2009-06-22 | 2013-10-15 | The Mathworks, Inc. | Parallel execution of function calls in a graphical model |
US8667329B2 (en) * | 2009-09-25 | 2014-03-04 | Ab Initio Technology Llc | Processing transactions in graph-based applications |
US8250576B2 (en) | 2009-09-30 | 2012-08-21 | Microsoft Corporation | Structured task hierarchy for a parallel runtime |
JP2012108576A (ja) * | 2010-11-15 | 2012-06-07 | Toyota Motor Corp | マルチコアプロセッサ、処理実行方法、プログラム |
US20130110576A1 (en) * | 2011-10-28 | 2013-05-02 | Infosys Limited | System and method for checking the conformance of the behavior of a process |
US20130259137A1 (en) * | 2012-03-30 | 2013-10-03 | Google Inc. | System and Method for Multi-Core Hardware Video Encoding And Decoding |
CN102708053B (zh) * | 2012-04-27 | 2017-10-20 | 北京邮电大学 | 程序路径中确定函数调用的上下文环境影响的方法 |
CN102819218B (zh) * | 2012-07-19 | 2015-04-29 | 西安交通大学 | 基于事件控制函数的离散事件系统监控器及其控制方法 |
US9832068B2 (en) * | 2012-12-17 | 2017-11-28 | Microsoft Technology Licensing, Llc | Reachability-based coordination for cyclic dataflow |
US9286119B2 (en) * | 2013-02-13 | 2016-03-15 | Nvidia Corporation | System, method, and computer program product for management of dependency between tasks |
CA2909751C (en) | 2013-04-23 | 2021-02-16 | Ab Initio Technology Llc | Controlling tasks performed by a computing system |
CN103559044A (zh) * | 2013-11-20 | 2014-02-05 | 无锡儒安科技有限公司 | 无线传感器网络控制代码形式化方法和装置 |
-
2014
- 2014-04-23 CA CA2909751A patent/CA2909751C/en active Active
- 2014-04-23 KR KR1020157033437A patent/KR102305084B1/ko active IP Right Grant
- 2014-04-23 JP JP2016510749A patent/JP6469083B2/ja active Active
- 2014-04-23 KR KR1020157033433A patent/KR102251932B1/ko active IP Right Grant
- 2014-04-23 WO PCT/US2014/035098 patent/WO2014176313A1/en active Application Filing
- 2014-04-23 AU AU2014257135A patent/AU2014257135B2/en active Active
- 2014-04-23 AU AU2014257132A patent/AU2014257132B2/en active Active
- 2014-04-23 EP EP14728014.3A patent/EP2989540B1/en active Active
- 2014-04-23 EP EP16178434.3A patent/EP3113017B1/en active Active
- 2014-04-23 CN CN201480023375.8A patent/CN105164638B/zh active Active
- 2014-04-23 CA CA3125705A patent/CA3125705C/en active Active
- 2014-04-23 CA CA2909748A patent/CA2909748C/en active Active
- 2014-04-23 CN CN201480023408.9A patent/CN105164639B/zh active Active
- 2014-04-23 EP EP14728015.0A patent/EP2989541B1/en active Active
- 2014-04-23 US US14/259,451 patent/US9665396B2/en active Active
- 2014-04-23 US US14/259,479 patent/US10565005B2/en active Active
- 2014-04-23 JP JP2016510752A patent/JP6469084B2/ja active Active
- 2014-04-23 WO PCT/US2014/035094 patent/WO2014176310A2/en active Application Filing
- 2014-04-23 CN CN201811207891.2A patent/CN109614170B/zh active Active
-
2016
- 2016-10-06 US US15/287,296 patent/US10489191B2/en active Active
-
2018
- 2018-05-23 AU AU2018203641A patent/AU2018203641B2/en active Active
-
2019
- 2019-01-15 JP JP2019004419A patent/JP6761878B2/ja active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6378066B1 (en) * | 1999-02-04 | 2002-04-23 | Sun Microsystems, Inc. | Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications |
US20040073529A1 (en) * | 2002-10-10 | 2004-04-15 | Stanfill Craig W. | Startup and control of graph-based computation |
US20090030863A1 (en) * | 2007-07-26 | 2009-01-29 | Ab Initio Software Corporation | Transactional graph-based computation with error handling |
CN101821721A (zh) * | 2007-07-26 | 2010-09-01 | 起元技术有限责任公司 | 具有误差处理的事务型基于图的计算 |
US20110276968A1 (en) * | 2010-05-07 | 2011-11-10 | Oracle International Corporation | Event driven change injection and dynamic extensions to a bpel process |
US20120030646A1 (en) * | 2010-07-30 | 2012-02-02 | Kaushik Ravindran | Developing Programs in a Graphical Specification and Constraint Language |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108874394A (zh) * | 2018-04-17 | 2018-11-23 | 上海达野智能科技有限公司 | 机器人用户程序的解释方法及解释装置 |
CN109656568A (zh) * | 2018-12-28 | 2019-04-19 | 黑龙江省工业技术研究院 | 按需的可约程序控制流图图可达性索引方法 |
CN109656568B (zh) * | 2018-12-28 | 2022-04-05 | 黑龙江省工业技术研究院 | 按需的可约程序控制流图图可达性索引方法 |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105164638A (zh) | 控制由计算系统执行的任务 | |
KR101413049B1 (ko) | 그래프 기반 계산에서의 계산 자원의 관리 | |
JP6763072B2 (ja) | データ処理グラフのコンパイル | |
JP2010079622A (ja) | マルチコアプロセッサシステム、および、そのタスク制御方法 | |
CN104572260A (zh) | 用于实现事务内存区域提升的代码版本控制的方法和设备 | |
US10564948B2 (en) | Method and device for processing an irregular application | |
Ivutin et al. | Optimization Strategies for Automated Parallelization for Multicore Architectures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |