CN104662511A - 用于可执行对象的编译系统 - Google Patents
用于可执行对象的编译系统 Download PDFInfo
- Publication number
- CN104662511A CN104662511A CN201280076139.3A CN201280076139A CN104662511A CN 104662511 A CN104662511 A CN 104662511A CN 201280076139 A CN201280076139 A CN 201280076139A CN 104662511 A CN104662511 A CN 104662511A
- Authority
- CN
- China
- Prior art keywords
- perform
- state
- application
- instruction
- place
- 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
Classifications
-
- 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/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
在一个实施方式中,一种编译系统识别应用的描述内的多个对象,确定所述对象之中的多个状态路径,并且生成多个可执行对象,所述可执行对象独立地可执行并各自与表示该可执行对象的状态的数据结构相关联。每个状态路径是从对来自所述对象的一个对象的在所述应用的所述描述中包括的操作得到的,对于来自所述对象的一个对象来说来自所述对象的另一对象是操作数。每个可执行对象包括指令,所述指令当在主机处执行时使所述主机执行与该可执行对象相关联的操作,并且响应于在所述应用的所述描述中未定义的同步机制根据一个或多个状态路径来将该可执行对象的状态提供给来自所述多个可执行对象的一个或多个其他可执行对象。
Description
背景技术
并行计算是其中同时地执行多个计算的计算方法学。例如,包括多核处理器的计算系统能够同时地在每个核上执行计算以实施并行计算。作为特定示例,图形处理单元(GPU)能够被提供或者配置成同时地执行多个计算。作为另一示例,彼此通信的一组计算系统能够通过同时地执行计算来协作地执行并行计算。这样成组的计算系统常常被称为分布式计算系统或环境。
并行计算方法学能够显著地减少执行计算任务所需要的时间。然而,适当地对应用编程以便并行处理避免竞争条件、死锁以及逻辑错误可能是困难的。此外,使应用和这样的应用内的错误的验证、复制以及调试复杂化的许多并行计算方法学是非确定的。
附图说明
图1是根据实施方式的包括编译系统的过程流程的图示。
图2是根据实施方式的编译系统的示意框图。
图3是根据实施方式的编译过程的流程图。
图4是根据实施方式的应用的描述的图示。
图5是根据实施方式的可执行对象和在可执行对象之中的状态路径的图的图示。
图6是根据实施方式的在编译系统处生成的可执行对象的图示。
图7是根据实施方式的由可执行对象实施的过程的流程图。
图8是根据实施方式的托管在计算系统处的编译系统的示意框图。
具体实施方式
尽管存在各种编程方法学和框架用于实施并行计算,但是实现或者实施并行计算的系统通常难以编程并且难以验证。并行计算的普通方法包括在以编程方式定义的执行点处引用普通信号量或相互排斥(或互斥)对象来防止对特定资源(例如,存储器或硬件设备)的同时访问的同时地执行的线程(或轻量进程或甚至标准进程)的使用、消息传递接口(MPI)以及角色编程模型。
基于同时地执行的线程的并行计算是易出错的,因为程序设计员指定线程未被允许同时地执行所在的执行点。常常,模糊编程错误能够导致竞争条件和死锁。此外,因为线程大多数时间同时地执行,所以应用(由线程实施)的执行每当它由于非确定线程调度而运行时不同,这使运行时错误的检测复杂化。此外,运行时错误可能难以调试,因为调试器与应用的交互改变应用的执行,这能够防止诸如竞争条件和死锁之类的错误在测试期间发生。附加地,在分布式计算环境中,常常需要共享存储器基础设施以支持基于线程的并行计算方法学并且对于大应用可能难以定标。
MPI允许跨越通信链路(例如,分布式计算环境)分布的进程通过交换消息进行通信。然而,与基于线程的并行计算方法学类似,MPI通常依靠独立的分布式进程来执行并行计算。因为这些进程独立地执行,所以应用(由进程实施)的执行每当它由于进程的非确定调度而运行时不同,这可能使运行时错误混淆。附加地,当应用被编程时在进程与用于共享数据的机制之间共享的任何数据被描述或者指定。也就是说,应用开发者指定应用的消息传递点。结果,能够通过应用开发者引入模糊编程错误。此外,依靠MPI的调试应用可能是困难的,因为调试器与应用的交互改变应用的执行,这能够防止诸如竞争条件和死锁之类的错误在测试期间发生。
类似地,角色模型通常依靠同时独立的进程来执行同时计算。在角色模型中,进程(或角色)不共享存储器。尽管角色模型的这个特征消除了上面所讨论的基于线程的并行计算的一些困难,但是角色遭受上面所讨论的基于线程的并行计算和MPI的相同的非确定运行时间和调试特性。
本文中所公开的实施方式实施为在运行时间确定的、可重复的、可伸缩的并且能够容易地被调试的并行计算方法学。此外,应用开发者在对应用进行编程时不必指定同步机制(例如,信号量、互斥对象或消息传递点)。相反,例如,本文中所讨论的系统和方法识别应用的描述内的状态路径(例如,数据或状态在对象之间的交换),并且生成同步地并行执行以通过根据状态路径交换数据并且对这样的数据执行操作来实施应用的一组可执行对象。
图1是根据实施方式的包括编译系统的过程流程的图示。编译系统120访问(例如,读取或者接收)应用的描述110并且基于应用的描述110来生成应用130。然后在执行环境140处执行和托管应用130。执行环境140包括应用130的可执行对象执行或者被托管所在的主机(例如,主机141和主机142)。主机可以是以其可执行对象能够执行的硬件和软件的任何组合。例如,主机可以是虚拟机或逻辑处理器、诸如中央处理单元(CPU)或GPU之类的处理器、处理器的核或执行引擎或计算系统。因此,执行环境140可以是计算系统或分布式计算环境,诸如包括经由通信链路彼此通信的一组计算系统的计算机集群。在一些实施方式中,执行环境能够包括诸如能够执行多个同时执行线程的GPU之类的单个主机。此外,执行环境140的主机可以是同构的或异构的。如本文中所使用的,短语“用于可执行对象的主机”和类似短语指代一个或多个可执行对象被或者能够被执行所在的主机。
应用的描述110描述或者定义应用。换句话说,应用的描述110包括描述或者定义操作以及相对于其那些操作是相关联的对象的成组的符号。这样的操作和对象(以及诸如用来实现这样的操作和对象的主机特定指令之类的有关指令)被包括在应用的描述110内。例如,应用的描述110可以是包括各种编程语言中的任一种的指令的源代码文件或一组源代码文件。作为特定示例,应用的描述110能够符合以下编程语言中的任一种或多种:Scala、C、C++、Java?、Objective-C以及Python。在一些实施方式中,应用的描述110能够符合诸如可扩展标记语言(XML)之类的标记语言。在一些实施方式中,应用的描述110包括诸如库或二进制组件之类的编译的组件。
编译系统120分析应用的描述110以识别应用的描述110内的对象和对象之中的状态路径。对象是定义在应用内操作的状态的实体或构造。例如,对象可以是面向对象编程语言内的类的实例。作为另一示例,对象可以是定义作为对象的状态的变量和/或对象的布置的数据结构。更具体地,例如,对象可以是定义或者描述对象的状态被存储在的变量的布置、变量的阵列、变量的多维阵列、对象、对象的阵列和/或对象的多维阵列的数据结构。当对象的状态(例如,对象的变量或对象内的值或数据)被改变或者访问时对象被操作。
状态路径是状态从一个对象到另一对象的流动(或交换)。状态路径可以是单向的(即,状态从一个对象向另一对象流动),或双向的(即,状态从第一对象向第二对象并且从第二对象向第一对象流动)。状态路径能够在应用的描述110中被识别,其中一个对象的状态被用来修改另一对象的状态。换句话说,状态路径在对象之间的交互中可以是隐式的,并且编译系统120识别这样的状态路径。作为示例,如果第一对象是应用的描述110内的函数(即,由该函数执行的操作的操作数)的输入并且函数的结果被存储在第二对象处(即,对第二对象执行操作),则流动路径存在于第一对象与第二对象之间。换句话说,第一对象的状态(以及一个或多个操作)被用来修改第二对象。
尽管第一对象和第二对象能够被称为由函数执行的操作的操作数,但是当强调对象被操作改变时,这样的对象在本文中被称为被操作操作或者称为对该对象使操作执行。类似地,操作可以被说成为对该对象的操作。此外,在本文中对作为操作的操作数的对象的引用不意味着操作不改变那些对象(或其状态)。相反,对操作数的这种引用意在强调这样的对象的状态被对另一对象的操作用来改变该其他对象的状态。
编译系统120分析在应用的描述110处(隐式地或显式地)描述或者定义的状态路径和对象,并且生成应用130。应用130包括同步地并同时地执行在应用的描述110内包括(例如,在应用的描述110处描述或者定义)的操作。可执行对象包括用于执行在应用的描述110内包括的操作(例如,单个计算或一组有关计算)的指令,以及可执行对象的状态能够被存储在的数据结构的描述,并且能够被存储在处理器可读介质处并在主机处执行。
这样的指令可以被说成被包括在应用的描述110内,因为这些指令是从在应用的描述110内包括的操作和/或对象得到的。换句话说,编译系统120基于应用的描述110的定义或者描述在应用的描述110内包括的操作和对象的符号、句法和/或其它元素并且基于与用于可执行对象的主机有关或与中间表示语言(或语法)有关的信息来生成这样的指令。因此,可执行对象的一些指令基于相对于一个或多个对象在应用的描述110内包括的操作。
除从应用的描述110得到的指令之外,可执行对象还包括在应用的描述110内未包括(或者定义或描述)的指令。换句话说,可执行对象包括不是从在应用的描述110内包括的操作或对象得到的指令。这样的指令通过编译系统120在不引用在应用的描述110内包括的操作或对象的情况下生成,并且例如可以用于响应于在应用的描述110处同样未包括(或者描述或定义)的同步机制来交换(即,向另一可执行对象提供和/或从另一可执行对象接收)状态。换句话说,同步机制在应用的描述110内未被引用,并且因此,不由通过应用的描述110所描述的应用的开发者确定。
换句话说,应用的描述110不包括隐式地或显式地参考同步机制或指令来实施同步机制或者对同步机制做出响应的符号(symbol)、对象或操作。这样的指令通过编译系统120而被包括在可执行对象中以提供应用130中的可执行对象的同步的同时执行。在一些实施方式中,编译系统120还生成用来将同步机制提供给实施应用的可执行对象的指令。
可执行对象的数据结构对应于在应用的描述110处描述或者定义的对象。换句话说,可执行对象的状态对应于在应用的描述110处描述或者定义的对象的状态。因此,可执行对象能够被称为对应于在应用的描述110处描述或者定义的对象。在一些实施方式中,由编译系统120基于应用的描述110所生成的应用130的可执行对象唯一地对应于在应用的描述110处描述或者定义的对象。换句话说,应用130内的单个可执行对象对应于在应用的描述110处描述或定义的单个对象。
编译系统120能够包括用来基于应用的描述110生成应用130的各种组件(或模块)。例如,图2是根据实施方式的编译系统的示意框图。尽管关于图2和其它示例实施方式图示并讨论了各种模块(即,硬件和软件的组合),但是模块的其他组合或子组合能够被包括在其他实施方式中。换句话说,尽管在本文中所讨论的示例中图2中所图示的和其他示例实施方式中所讨论的模块执行特定功能性,但是能够在不同的模块处或以模块的组合实行、实施或者实现这些和其他功能性。例如,分开图示和/或讨论的两个或更多个模块能够被组合成执行关于两个模块所讨论的功能性的一模块。作为另一示例,能够在一个或多个不同的模块处执行像关于这些示例所讨论的那样在一个模块处执行的功能性。
编译系统200包括解析器模块210、分析模块220以及指令模块230。解析器模块210是解析应用的描述以识别应用的描述内的对象的硬件和软件的组合。例如,解析模块210能够解释在应用的描述中包括的句法、关键词、符号名称以及其他信息以识别在应用的描述内描述的对象。作为特定示例,解析器模块210执行语法分析、句法分析以及语义分析以识别应用的描述内的对象。
分析模块220分析对象之中的关系以确定对象之间的状态路径。例如,分析模块220分析在应用的描述中描述的操作以确定对象的状态是否通过操作被交换。作为特定示例,分析模块220能够识别作为操作的操作数(例如,提供给函数或方法调用的算术操作或变元(arguments)的操作数)的对象和对其执行了操作的对象。分析模块220然后能够根据作为对其执行了操作的对象的操作的操作数的对象来确定状态路径存在。换句话说,分析模块220识别状态如何在应用的描述中所描述的对象之中流动。
指令模块230基于在应用的描述中描述的对象和操作以及在分析模块220处确定的状态路径来生成可执行对象。例如,指令模块230能够生成用来在主机的存储器处实施数据结构的指令,所述数据结构对应于可执行对象的状态能够被存储在的对象的数据结构。换句话说,指令模块230输出成组的指令,所述指令当在主机处执行时使该主机实施对应于对象的可执行对象。
指令模块230针对每个可执行对象生成对应于在应用的描述中描述的操作的一组指令。例如,操作可以是使用在应用的描述中描述的计算(例如,作为函数或作为算符)和其他可执行对象的状态来修改可执行对象的状态。此外,每个可执行对象可单独地或独立地执行。也就是说,每个可执行对象能够在不同的主机处被托管或者执行,并且能够在没有来自其他可执行对象的输入或协作的情况下执行与该可执行对象相关联的操作。因此,每个可执行对象能够执行它独立于其他可执行对象的操作。此外,独立地可执行的可执行对象能够在操作之间将数据提供给另一可执行对象和/或从另一可执行对象接收数据。
本文中所讨论的操作包括在主机处对于与那些操作相关联的可执行对象不是原子(atomic)的操作。例如,这些操作包括具有多个计算、步骤或子操作的操作。作为特定示例,操作能够包括包括有许多加法、乘法以及存储步骤的矩阵操纵,所述步骤中的每一个在主机处对于与该操作相关联的可执行对象是原子的,但是其共同地是非原子的(例如,能够在任何两个步骤之间中断主机)。因此,与可执行对象相关联的操作能够包括在主机执行与该操作相关联的可执行对象时能够被中断、延迟或者暂停的多个(例如,数十、数百或数千)单独的步骤。
除基于在应用的描述中描述的对象和操作的指令之外,指令模块230还生成用来使可执行对象(当在主机处执行时)同步地执行并且根据由分析模块220所确定的状态路径来交换状态的指令。更具体地,指令模块230针对每个可执行对象生成使可执行对象对同步机制做出响应的指令。例如,指令模块230能够在每个可执行对象中包括使可执行对象在执行从应用的描述得到的操作之后等待来自同步机制的同步信号的指令。附加地,指令能够响应于同步机制来使可执行对象沿着状态路径将它们的状态提供给其他可执行对象。在可执行对象之中交换了状态之后,可执行对象使用新近接收到的状态再次执行它们相应的操作。在一些实施方式中,指令使可执行对象在再次执行它们相应的操作之前再次等待来自同步机制的同步信号。
使可执行对象等待或者响应同步机制的这样的指令能够简化并行计算应用的调试。例如,调试器能够控制或者代替同步机制控制应用的执行。也就是说,调试器能够抑制同步机制以防止可执行对象(单独地执行以实施应用)继续执行。调试器(或调试系统)能够在可执行对象正在等待同步机制的同时监控应用的每个可执行对象的执行(例如,访问存储在存储器处的数据),并且在观察到可执行对象之后提供或允许同步机制到可执行对象以使可执行对象继续执行。
附加地,这样的指令使并行计算应用具有确定的执行。例如,因为每当可执行对象完成它们相应的操作时包括应用的可执行对象的执行被同步,所以每当应用被执行时它具有普通执行路径。这样的调试支持和决定论能够简化并行计算应用的开发。
图3是根据实施方式的编译过程的流程图。过程300是示例实施方式。在其他实施方式中,根据各种实施方式能够重新布置步骤或块和/或附加的或较少的步骤或块能够被包括在编译过程中。能够例如在诸如托管在计算系统处的编译系统之类的编译系统处实施在图3处所图示的过程300。编译系统识别应用的描述中的对象。例如,编译系统能够基于在应用的描述内包括的关键词、变量名称、句法或其他信息来识别对象。
作为更特定示例,图4是根据实施方式的应用的描述的图示。由应用的描述400所描述的应用从两个相机捕获图像,对每个图像应用滤波器(例如,以使图像锐化或者从图像去除伪像),针对每个相机来确定先前捕获的图像与当前图像之间的差异,并且确定图像的一些特征的运动特性。INPUT_OBJECT_0、INPUT_OBJECT_1、FILTERED_FRAME_0、FILTERED_FRAME_1、DIFFERENCE_FRAME_0、DIFFERENCE_FRAME_1以及MOVEMENT_OBJECT是对象。尽管在图4未图示,但是这些对象能够包括与这些对象相关联或在这些对象内包括的数据结构的显式定义。例如,INPUT_OBJECT_0、INPUT_OBJECT_1、FILTERED_FRAME_0、FILTERED_FRAME_1、DIFFERENCE_FRAME_0以及DIFFERENCE_FRAME_1能够包括图像的像素值能够被存储在的二维阵列。
更具体地,INPUT_OBJECT_0是定义其中第一相机被识别为CAMERA_0的接口的对象,并且INPUT_OBJECT_1是定义其中第二相机被识别为CAMERA_1的接口的对象。例如,能够分别在INPUT_OBJECT_0和INPUT_OBJECT_1处访问诸如由第一相机和第二相机所捕获的视频帧之类的图像。如应用的描述400的行401和行402中所图示的,INPUT_OBJECT_0和INPUT_OBJECT_1相对于它们相应的相机被初始化。
FILTERED_FRAME_0和FILTERED_FRAME_1是经由INPUT_OBJECT_0和INPUT_OBJECT_1访问的图像的滤波版本。如行403和行404中所图示的,INPUT_OBJECT_0和INPUT_OBJECT_1被作为变元提供给FILTER()函数,并且结果被分别分配给FILTERED_FRAME_0和FILTERED_FRAME_1。例如,FILTER()函数能够从INPUT_OBJECT_0访问当前图像,并且对图像执行滤波操作。结果得到的滤波图像被存储在FILTERED_FRAME_0处。类似地,基于来自INPUT_OBJECT_1的当前图像的滤波图像能够被存储在FILTERED_FRAME_1处。
FILTERED_FRAME_0与来自INPUT_OBJECT_0的当前图像之间的差异被计算并且结果得到的信息被存储在行405处的DIFFERENCE_FRAME_0处。类似地,FILTERED_FRAME_1与来自INPUT_OBJECT_1的当前图像之间的差异被计算并且结果得到的信息被存储在行406处的DIFFERENCE_FRAME_1处。最后,DIFFERENCE_FRAME_0、DIFFERENCE_FRAME_1以及MOVEMENT_OBJECT的当前状态(例如,MOVEMENT_OBJECT的值或一组值)被提供给DISPLACEMENT()函数,并且结果被存储在MOVEMENT_OBJECT处。
在一些实施方式中,MOVEMENT_OBJECT是输出对象并且输出它的状态。例如,MOVEMENT_OBJECT的当前状态除被提供给DISPLACEMENT()函数之外还能够被输出到通信链路、数据储存器、存储服务、消息传送服务、显示器或其他设备。
参考图3,在块310处编译系统能够解析应用的描述400并且基于那些对象(未示出)的定义或那些对象在应用的描述400内的使用(例如,操作的结果到那些对象的分配)将INPUT_OBJECT_0、INPUT_OBJECT_1、FILTERED_FRAME_0、FILTERED_FRAME_1、DIFFERENCE_FRAME_0、DIFFERENCE_FRAME_1以及MOVEMENT_OBJECT识别对象。作为对象的定义的示例,类定义或结构定义可以是对象的定义。也就是说,编译系统能够基于对象的定义或对象的使用(例如,作为诸如函数之类的操作的操作数的对象的使用)来确定应用的描述中的某个变量名称表示对象。此外,编译系统能够基于对象的定义或使用来确定与对象相关联的数据结构(例如,变量和/或对象的布置)的属性。
在识别了应用的描述内的对象之后,在块320处确定了应用的对象之中的状态路径。换句话说,编译系统识别对象的状态如何在应用的描述中所描述的对象之中流动。换句话说,编译系统分析应用的描述以确定对象通过其交互的操作。
参考在图4中作为示例所图示的应用的描述400,编译系统能够确定操作的操作数之中的状态路径和对其执行了那些操作的对象。更具体地,编译系统能够识别在行403处INPUT_OBJECT_0是函数FILTER()的变元(即,INPUT_OBJECT_0是由函数FILTER()所定义的操作的操作数)并且函数FILTER()的结果被存储在FILTERED_FRAME_0处(即,对FILTERED_FRAME_0执行了操作,因为操作的结果修改FILTERED_FRAME_0)。因此,编译系统能够确定状态路径存在于INPUT_OBJECT_0与FILTERED_FRAME_0之间。类似地,编译系统能够基于行404确定状态路径存在于INPUT_OBJECT_1与FILTERED_FRAME_1之间。
附加地,编译系统能够识别在行405处FILTERED_FRAME_0和INPUT_OBJECT_0是差分操作的操作数并且对DIFFERENCE_FRAME_0执行了操作(即,差分操作的结果被存储在DIFFERENCE_FRAME_0处),并且因此确定状态路径存在于FILTERED_FRAME_0与DIFFERENCE_FRAME_0之间并且存在于INPUT_OBJECT_0与DIFFERENCE_FRAME_0之间。换句话说,DIFFERENCE_FRAME_0的状态取决于FILTERED_FRAME_0的状态、INPUT_OBJECT_0的状态以及差分操作。类似地,编译系统能够识别在行406处FILTERED_FRAME_1和INPUT_OBJECT_1是差分操作的操作数并且对DIFFERENCE_FRAME_1执行了操作,并且因此确定状态路径存在于FILTERED_FRAME_1与DIFFERENCE_FRAME_1之间并且存在于INPUT_OBJECT_1与DIFFERENCE_FRAME_1之间。也就是说,DIFFERENCE_FRAME_1的状态取决于FILTERED_FRAME_1的状态、INPUT_OBJECT_1的状态以及差分操作。
在一些实施方式中,实施过程300的编译系统能够将对象之中的状态路径表示为与那些对象相对应的可执行对象的图,其中图的边表示状态路径。图5是根据实施方式的可执行对象和在可执行对象之中的状态路径的图的图示。如本文中所讨论的,图是表达信息之中的关系的数据结构或一组数据结构。
图500是包括节点131 – 137和边501 – 509的图的图形图示。节点131 – 137表示与对象INPUT_OBJECT_0、INPUT_OBJECT_1、FILTERED_FRAME_0、FILTERED_FRAME_1、DIFFERENCE_FRAME_0、DIFFERENCE_FRAME_1以及MOVEMENT_OBJECT相对应的可执行对象。如果该可执行对象具有与该对象的状态基本上相同的状态(或状态根据其被存储在存储器处的数据结构)则可执行对象能够被说成对应于对象。在一些实施方式中,对应于对象的可执行对象执行如对该对象执行的在应用的描述内所描述的操作(当在主机处执行时)。边501 – 509表示对象INPUT_OBJECT_0、INPUT_OBJECT_1、FILTERED_FRAME_0、FILTERED_FRAME_1、DIFFERENCE_FRAME_0、DIFFERENCE_FRAME_1以及MOVEMENT_OBJECT对应于的对象之中并且沿着其状态在表示那些对象的可执行对象之中转移的状态路径。
更具体地,边501表示INPUT_OBJECT_0 (由节点131表示)与FILTERED_FRAME_0 (由节点133表示)之间的状态路径;边503表示FILTERED_FRAME_0 (由节点133表示)与DIFFERENCE_FRAME_0 (由节点135表示)之间的状态路径;边505表示INPUT_OBJECT_0 (由节点131表示)与DIFFERENCE_FRAME_0 (由节点135表示)之间的状态路径;边507表示DIFFERENCE_FRAME_0 (由节点135表示)与MOVEMENT_OBJECT (由节点137表示)之间的状态路径;边502表示INPUT_OBJECT_1 (由节点132表示)与FILTERED_FRAME_1 (由节点134表示)之间的状态路径;边504表示FILTERED_FRAME_1 (由节点134表示)与DIFFERENCE_FRAME_1 (由节点136表示)之间的状态路径;边506表示INPUT_OBJECT_1 (由节点132表示)与DIFFERENCE_FRAME_1 (由节点136表示)之间的状态路径;边508表示DIFFERENCE_FRAME_1 (由节点136表示)与MOVEMENT_OBJECT (由节点137表示)之间的状态路径;以及边509表示MOVEMENT_OBJECT (由节点137表示)与它本身之间的状态路径。
因此,作为示例,参考图3中所图示的块320,实施过程300的编译系统能够基于在应用的描述中描述的操作来生成图以确定对象之中的状态路径。过程300然后进行到块330,在所述块330处生成了可执行对象。在图3中所图示的示例中,通过生成或者输出与应用的描述中的操作相对应的指令以及不对应于那些操作的其他指令来生成可执行对象。更具体地,在块331处生成与应用的描述中的操作相对应的指令,在块332处生成与在应用的描述中未包括的同步机制有关的指令,并且在块333处生成用来根据在块320处确定的状态路径交换状态的指令。块331、332以及333被执行来针对每个可执行对象生成用来实施由应用的描述所描述的应用的指令。
作为特定示例,在块331处,实施像应用的描述中所描述的那样对每个可执行对象对应于的对象执行的操作的指令被生成并且包括在该可执行对象中。附加地,使每个可执行对象根据该可执行对象对应于的对象的数据结构来将它的状态存储在存储器处的指令被生成并且包括在该可执行对象中。
在块332处能够根据各种同步方法学生成与同步机制有关的指令。如上面所讨论的,同步机制使可执行对象同步地执行操作,并且在应用的描述中未被描述或者包括。作为示例,编译系统(例如,编译系统的指令模块)能够生成作为同步机制操作以将同步信号(例如,消息)提供给其他可执行对象的附加的可执行对象。可执行对象能够包括用来经由例如主机或网络通信的共享存储器(例如,计算系统或GPU内的共享存储器)彼此交换消息(例如,发送和接收)的指令。在一些实施方式中,同步机制能够以规则间隔将同步信号提供给可执行对象。因此,可执行对象能够相对于同步信号同步地执行。
在其他实施方式中,编译系统能够包括在每个可执行对象处用来使该可执行对象在该可执行对象完成在应用的描述中描述的操作之后将完成信号(或消息)提供给同步机制的指令并且为此指令被包括在该可执行对象内。也就是说,编译系统包括在每个可执行对象中用来使每个可执行对象执行从应用的描述得到的操作、将完成信号(例如,指示该可执行对象已完成操作的消息)提供给同步机制、并且等待(例如,另一时间不执行操作)来自同步机制的信号的指令。在同步机制从每个可执行对象接收到完成信号之后,同步机制将同步信号提供给每个可执行对象。这样的同步信号可以被称为锁步(lockstep)信号,因为它们使可执行对象相对于在可执行对象处执行的操作以锁步方式执行。换句话说,可执行对象同时地各自执行操作(由在该可执行对象处的指令定义),并且在再次执行操作之前同步。
响应于同步信号,每个可执行对象根据状态路径来将它的状态提供给其他可执行对象,并且根据状态路径从其他可执行对象接收状态。在根据状态路径提供和接收到任何状态之后,每个可执行对象再次执行它的操作,这次使用任何接收到的状态。在一些实施方式中,可执行对象在根据状态路径提供和接收到状态之后再次同步。例如,可执行对象能够再次发送完成信号,并且同步机制(即,实施同步机制的可执行对象)能够在从每个可执行对象接收到完成信号之后发送同步信号。可执行对象然后响应于同步信号来各自执行它们相应的操作,提供完成信号,并且再次等待同步信号。
作为同步机制的另一示例,每个可执行对象能够在该可执行对象完成操作时将完成信号提供给每个其他可执行对象。也就是说,每个可执行对象包括用来将诸如完成信号之类的同步信号提供给共同地实施应用的其他可执行对象的指令。如在上面所讨论的示例中一样,在执行操作并且提供完成信号之后,每个可执行对象等待。然而,在这个示例中,每个可执行对象等待来自每个其他可执行对象的完成信号,而不是等待同步信号。在可执行对象从每个其他可执行对象接收到完成信号之后,该可执行对象将它的状态提供给其他可执行对象。因此,同步机制在每个可执行对象内部(即,基于在编译系统处生成的可执行对象内包括的指令)。
类似地如上面所讨论的,可执行对象还能够在同步机制上等待以在根据状态路径交换状态之后执行它们的操作。也就是说,在根据状态路径交换状态之后可执行对象能够将完成信号提供给所有其他可执行对象,并且在从每个其他可执行对象接收到完成信号之后继续执行它们相应的操作。然而在其他的实施方式中,可执行对象能够在沿着每个状态路径接收到状态之后继续执行它相应的操作,经由所述每个状态路径另一可执行对象或其他可执行对象将状态提供给该可执行对象。换句话说,在将状态提供给可执行对象的任何可执行对象的状态在该可执行对象处被接收到之后,该可执行对象能够继续执行它的操作。
此外,在一些实施方式中,能够组合这样的同步机制。因此,例如,每个可执行对象通过等待从应用的每个其他可执行对象接收完成信息并且等待接收同步信号来等待同步机制。在一些实施方案中,同步信号可以是完成信号。因此,每个可执行对象通过等待等于实施应用的可执行对象的数目(即,其他可执行对象加上一个附加的完成信号的数目)的许多完成信号来对同步机制做出响应。例如,每个可执行对象包括使该可执行对象等待来自共同地实施应用的每个其他可执行对象的完成信号以及来自例如调试器的一个附加的完成信号的在应用的描述内未包括的指令。
在块333处实施过程300的编译系统还生成用来使实施应用的可执行对象根据状态路径交换状态的指令。换句话说,编译系统包括使可执行对象在托管可执行对象(或应用)的计算环境内彼此交换状态的指令。例如,编译系统能够生成使可执行对象基于在块320处确定的状态路径经由共享存储器和/或网络通信将状态提供给其他可执行对象的指令。
作为示例,编译系统能够生成包括或者做出可执行对象应该将它的当前状态提供给的可执行对象的可访问标识符的指令,以及使该可执行对象将它的当前状态提供给那些可执行对象的指令。更具体地,例如,编译系统能够针对每个可执行对象生成使可执行对象访问将每个可执行对象的标识符映射到该可执行文件正在执行所在的主机的目录的指令。每个可执行对象能够包括可执行对象应该将状态提供给的可执行对象的标识符,并且能够访问目录以识别那些可执行对象正在执行所在的主机。该可执行对象然后能够将状态提供给那些主机以将该状态提供在那些主机处执行的可执行对象。
作为可执行对象的示例,图6是根据实施方式的在编译系统处生成的可执行对象的图示。可执行对象600包括可执行指令610、非可执行指令620以及状态数据结构630。在一些实施方式中,可执行对象不包括与可执行指令610和非可执行指令620分开的状态数据结构630。相反,可执行指令610和非可执行指令620定义使可执行对象600基于应用的描述中的对象来访问(例如,读取和写入)在数据结构处的状态的存储器访问。
可执行指令610是可在可执行对象600的主机处执行的代码和/或值。例如,可执行指令610能够包括Java?字节码、诸如x86机器代码之类的机器代码、二进制代码,或能够在主机处执行的其他代码。非可执行指令620是在主机处执行之前需要进一步处理的指令。例如,非可执行指令620能够包括在主机上执行之前不久(或及时)针对特定主机编译的OpenCL指令和/或被及时编译的Java?指令。因此,定义可执行对象的指令能够包括由编译系统提供的各种类型类别的指令。
作为可执行对象的执行的示例,图7是根据实施方式的由可执行对象实施的过程的流程图。如上面所讨论的,可执行对象在主机处执行。也就是说,在主机处执行了可执行对象的指令。在块710处,可执行对象被初始化。可执行对象通过使主机准备执行该可执行对象而被初始化。例如,可执行对象的非可执行指令能够被编译或者以其他方式准备以用于执行,并且与可执行对象相关联的变量或数据结构然后能够分配有初始值。此外,在一些实施方式中,可执行对象能够访问目录以识别可执行对象应该将状态提供给的可执行对象正在执行所在的主机。
在一些实施方式中,可执行对象然后在块720处等待操作信号。操作信号指示可执行对象应该执行由该可执行对象的指令所定义的操作。操作信号可以是诸如完成信号之类的同步信号。此外,在一些实施方式中并且如关于完成信号上面所讨论的,可执行对象能够等待多个操作信号(例如,来自多个可执行对象用来指示那些可执行对象已完成初始化程序的操作信号)。因此,在一些实施方式中,块710能够包括提供用来指示可执行对象准备好执行操作的操作信号。
过程700然后进行到块730,在所述块730处执行了可执行对象的操作。也就是说,可执行对象被托管在的主机执行用来执行在应用的描述中所描述的操作的指令,实施该应用的这个可执行对象和其他可执行对象部分地得自所述指令。换句话说,在块730处可执行对象执行应用的操作。如上面所讨论的,操作在主机处对于可执行对象可能是非原子的,并且能够包括多个计算、步骤或子操作。
在块730处执行了操作之后,在块740处输出(或者发送)完成信号以指示可执行对象已完成它的操作。如上面所讨论的,能够将完成信号输出到实施提供同步信号的同步机制的可执行对象,和/或输出到实施应用的其他可执行对象。可执行对象然后在块750处在同步机制上等待。也就是说,可执行对象等待可执行对象应该继续根据状态路径提供状态的来自同步机制的指示(例如,同步信号或许多完成信号)。
过程700然后进行到块760,在所述块760处状态根据状态路径在可执行对象之中被交换。在根据状态路径交换了状态之后,过程700返回到块730,在所述块730处执行可执行对象的操作。如图7中所图示的,在一些实施方式中,在再次在块730处执行操作之前过程700在块720处等待操作信号。
作为说明性示例,能够连同图5中所图示的图500讨论过程700。如上面所讨论的,节点131 – 137表示与对图4中所图示的应用的描述400的描述中的对象相对应的可执行对象,并且边501 – 509表示状态路径,在本讨论中,节点131 – 137还将被称为可执行对象131 – 137。
当由图5中所图示的可执行对象131 – 137实施的应用(即,由应用的描述400所定义的应用)被托管在计算环境(诸如其中每个可执行对象被托管在计算系统或具有其中每个可执行对象被托管在一个或多个GPU处的一个或多个GPU的计算系统处的分布式计算环境)中时,可执行对象中的每一个独立地实施过程700。因此,每个可执行对象能够与其他可执行对象一起同时地执行它相应的操作。参考应用的描述400,可执行对象131的操作将访问CAMERA_0的当前图像;可执行对象132的操作将访问CAMERA_1的当前图像;可执行对象133的操作将对从可执行对象131接收到的图像应用FILTER()函数的操作;可执行对象134的操作将对从可执行对象132接收到的图像应用FILTER()函数的操作;可执行对象135的操作将确定从可执行对象131和可执行对象133接收到的状态之间的差异;可执行对象136的操作将确定从可执行对象132和可执行对象134接收到的状态之间的差异;并且可执行对象137的操作将对从可执行对象135和可执行对象136接收到的状态以及可执行对象137的此前状态执行 DISPLACEMENT()函数。
在可执行对象中的每一个被初始化之后,每个可执行对象执行它相应的操作并且然后在同步机制上等待。响应于同步机制,每个可执行对象从该可执行对象根据状态路径提供它的状态(例如,它的操作的结果)。更具体地,可执行对象131将它的状态提供给可执行对象133和可执行对象135;可执行对象132将它的状态提供给可执行对象134和可执行对象136;可执行对象133将它的状态提供给可执行对象135;可执行对象134将它的状态提供给可执行对象136。可执行对象135将它的状态提供给可执行对象137;可执行对象136将它的状态提供给可执行对象137;并且可执行对象137将它的状态提供给它本身(例如,使用它的当前状态来定义它的下一个状态)。每个可执行对象然后(再次响应于同步机制在一些实施方式中像上面所讨论的那样)再次使用所接收到的一个或多个状态来执行它的操作。这个过程随着可执行对象的状态以锁步方式通过应用(或可执行对象)传播而继续,从而使应用的执行变得确定、可重复且可调试。
图8是根据实施方式的托管在计算系统处的编译系统的示意框图。在图8所图示的示例中,计算系统800包括处理器810、通信接口820以及存储器830。处理器810是执行或者解释指令、代码或信号的硬件和软件的任何组合。例如,处理器810可以是微处理器、专用集成电路(ASIC)、诸如处理器或计算系统的集群或网络之类的分布式处理器、多核或多处理器处理器,或虚拟机的虚拟或逻辑处理器。
通信接口820是经由其处理器810能够经由通信链路与其他处理器或计算系统进行通信的模块。通信链路包括设备、服务或定义设备或服务之间的通信路径(未示出)的其组合。例如,通信链路能够包括电缆(例如,双绞线电缆、同轴电缆或光纤电缆)、无线链路(例如,射频链路、光学链路或声波链路)中的一个或多个,或发送或者支持信号的传输的任何其他连接器或系统。此外,通信链路能够包括诸如内部网、因特网、其他电信网络之类的通信网络,或其组合。附加地,通信链路能够包括代理、路由器、交换机、网关、桥接器、负载均衡器以及类似的通信设备。
作为特定示例,通信接口820能够包括网络接口卡和托管在处理器810处的通信协议栈(例如,存储在存储器830处并且在处理器810处执行或者解释以实施网络协议的指令或代码)以接收和发送动作请求。作为特定示例,通信接口820可以是有线接口、无线接口、以太网接口、光纤通道接口、无限带宽技术(InfiniBand)接口以及IEEE 802.11接口,或经由其处理器810能够交换表示数据的信号或符号以与其他处理器或计算系统进行通信的一些其他通信接口。
存储器830是存储指令、代码、数据或其他信息的处理器可读介质。如本文中所使用的,处理器可读介质是非暂性地存储指令、代码、数据或其他信息并且处理器可直接或间隔访问的任何介质。换句话说,处理器可读介质是在其处理器能够访问指令、代码、数据或其他信息的非暂时性介质。例如,存储器830可以是易失性随机存取存储器(RAM)、诸如硬盘或固态驱动器之类的持久性数据储存器、紧凑盘(CD)、数字视频盘(DVD)、Secure Digital?(安全数字?) (SD)卡、多媒体卡(MMC)卡、CompactFlash?(紧凑式闪存?) (CF)卡,或其组合或其他存储器。换句话说,存储器830能够表示多个处理器可读介质。在一些实施方式中,存储器830能够与处理器810集成在一起、与处理器810分开或者在计算系统800外部。
存储器830包括指令或代码,所述指令或代码当在处理器810处执行时实施操作系统831和包括解析器模块210、分析模块200以及指令模块230的编译系统。解析器模块210、分析模块220以及指令模块230能够共同地被称为编译系统。如上面所讨论的,编译系统能够包括附加的或比图8中所图示的更少的模块(或组件)。
在一些实施方式中,计算系统800可以是虚拟化的计算系统。例如,计算系统800可以作为虚拟机被托管在计算服务器处。此外,在一些实施方式中,计算系统800可以是虚拟化的计算设备,并且操作系统831是用来支持(例如,提供诸如通信协议栈之类的服务以及对计算系统800的诸如通信接口820之类的组件的访问)解析器模块210、分析模块220以及指令模块230的最小或即够操作系统。
包括解析器模块210、分析模块220以及指令模块230的编译系统能够被从各种存储器或处理可读介质访问或者安装在计算系统800处。例如,计算系统800能够经由通信接口820访问在远程处理器可读介质处的编译系统。作为特定示例,计算系统810可以是在引导序列期间访问操作系统831、解析器模块210、分析模块220以及指令模块230的网络引导设备。
作为另一示例,计算系统800能够包括(在图8中未图示)处理器可读介质访问设备(例如,CD、DVD、SD、MMC或CF驱动器或阅读器),并且能够经由该处理器可读介质访问设备来访问解析器模块210、分析模块220以及指令模块230。作为更特定示例,处理器可读介质访问设备可以是在其包括解析器模块210、分析模块220以及指令模块230中的一个或多个的安装包的DVD是可访问的DVD驱动器。能够在处理器800处执行或者解释安装包以将解析器模块210、分析模块220以及指令模块230中的一个或多个安装在计算系统800处(例如,在存储器830处)。计算系统800然后能够托管或者执行解析器模块210、分析模块220以及指令模块230中的一个或多个。
在一些实施方式中,能够在多个源、位置或资源处访问或者从多个源、位置或资源安装解析器模块210、分析模块220以及指令模块230。例如,能够经由通信链路(例如,从经由通信链路可访问的文件服务器)安装解析器模块210、分析模块220以及指令模块230中的一些,并且能够从DVD安装解析器模块210、分析模块220以及指令模块230中的其他的。
在其他实施方式中,解析器模块210、分析模块220以及指令模块230能够跨越多个计算系统分布。也就是说,解析器模块210、分析模块220以及指令模块230中的一些能够被托管在一个计算系统处并且解析器模块210、分析模块220以及指令模块230中的其他的能够被托管在另一计算系统处。作为特定示例,解析器模块210、分析模块220以及指令模块230能够被托管在解析器模块210、分析模块220以及指令模块230中的每一个被托管在多个计算系统处并且没有单个计算系统托管解析器模块210、分析模块220以及指令模块230中的每一个的计算系统的集群内。
虽然已经在上面示出并描述了特定实施方式,但是可以做出形式和细节上的各种改变。例如,关于一个实施方式和/或过程已经描述的一些特征能够与其他实施方式有关。换句话说,在其他实施方式中关于一个实施方式所描述的过程、特征、组件和/或属性可能是有用的。作为另一示例,在其他实施方式中关于特定模块或元件上面所讨论的功能性能够被包括在不同的模块、引擎或元件处。此外,应该理解,本文中所描述的系统、装置以及方法能够包括所描述的不同实施方式的组件和/或特征的各种组合和/或子组合。因此,参考一个或多个实施方式所描述的特征能够与本文中所描述的其他实施方式组合。
如本文中所使用的,术语“模块”指代硬件(例如,诸如集成电路或其他电路之类的处理器)和软件(例如,机器或处理器可执行指令、命令,或诸如固件、编程或目标代码之类的代码)的组合。硬件和软件的组合包括仅硬件(即,没有软件元件的硬件元件)、托管在硬件处的软件(例如,被存储在存储器处并且在处理器处执行或者解释的软件),或硬件和托管在硬件处的软件。
附加地,如本文中所使用的,除非上下文另外清楚地规定,否则单数形式“一”、“一个”以及“该”包括复数指示物。因此,例如,术语“模块”旨在意指一个或多个模块或诸模块的组合。此外,如本文中所使用的术语“提供”包括推送机制(例如,经由通信路径或通道将数据发送到计算系统或代理)、拉进机制(例如,响应于来自计算系统或代理的请求将数据递送到计算系统或代理)以及存储机制(例如,将数据存储在计算系统或代理能够访问该数据所在的数据储存器或服务处)。此外,如本文中所使用的,术语“基于”意指“至少部分地基于”。因此,被描述为基于某个原因的特征能够仅基于该原因,或者基于该原因并且基于一个或多个其他原因。
Claims (15)
1.一种存储表示指令的代码的处理器可读介质,所述指令当在处理器处执行时使所述处理器:
识别应用的描述内的多个对象;
确定所述多个对象之中的多个状态路径,来自所述多个状态路径的每个状态路径是从对来自所述多个对象的一个对象的在所述应用的所述描述中包括的操作得到的,对于来自所述多个对象的一个对象来说来自所述多个对象的另一对象是操作数;以及
生成多个可执行对象,每个可执行对象独立地可执行并且与表示该可执行对象的状态的数据结构相关联,
每个可执行对象包括当在用于该可执行对象的主机处执行时使用于该可执行对象的所述主机进行下列的指令
执行与该可执行对象相关联的操作并且
响应于在所述应用的所述描述内未定义的同步机制根据来自所述多个状态路径的一个或多个状态路径来将该可执行对象的所述状态提供给来自所述多个可执行对象的一个或多个其他可执行对象。
2.根据权利要求1所述的处理器可读介质,其中与每个可执行对象相关联的所述操作对应于对与该可执行对象唯一地对应的对象的在所述应用的所述描述中包括的操作。
3.根据权利要求1所述的处理器可读介质,其中所述同步机制是在所述应用的所述描述中未定义的同步信号。
4.根据权利要求1所述的处理器可读介质,其中在每个可执行对象处包括的所述指令当在用于该可执行对象的所述主机处执行时,使用于该可执行对象的所述主机在第一时间段期间执行与该可执行对象相关联的所述操作并且在第二时间段期间从所述多个可执行对象给该可执行对象的所述状态提供一个或多个其他可执行对象,所述同步机制使所述第一时间段与所述第二时间段分开。
5.根据权利要求1所述的处理器可读介质,其中在每个可执行对象处包括的所述指令当在用于该可执行对象的所述主机处执行时,使用于该可执行对象的所述主机在执行了与该可执行对象相关联的所述操作之后输出完成信号。
6.根据权利要求1所述的处理器可读介质,其中:
在每个可执行对象处包括的所述指令当在用于该可执行对象的所述主机处执行时,使用于该可执行对象的所述主机在执行了与该可执行对象相关联的所述操作之后输出完成信号;并且
所述同步机制包括基于在执行了与每个可执行对象相关联的所述操作之后输出的所述完成信号。
7.一种编译系统,包括:
解析器,其用来识别应用的描述内的多个对象;
分析模块,其用来分析与来自所述多个对象的对象相关联的多个操作并且用来基于所述多个操作来确定所述多个对象之中的多个状态路径;以及
指令模块,其用来生成多个独立的可执行对象,每个可执行对象包括当在用于该可执行对象的主机处执行时使用于该可执行对象的所述主机进行下列的指令
执行与该可执行对象相关联的操作,
响应于在所述应用的所述描述内未定义的同步机制根据来自所述多个状态路径的一个或多个状态路径来将该可执行对象的所述状态提供给来自所述多个可执行对象的一个或多个其他可执行对象,并且
基于在所述应用的所述描述内未定义的指令,不再执行与该可执行对象相关联的所述操作,直到在该可执行对象的所述状态被提供给一个或多个其他可执行对象为止。
8.根据权利要求7所述的系统,其中在由来自所述多个操作的一个操作所操作的来自所述多个对象的一个对象与作为所述操作的操作数的来自所述多个操作的另一对象之间定义了来自所述多个状态路径的每个状态路径。
9.根据权利要求7所述的系统,其中所述分析模块针对来自所述多个对象的每个对象来确定该对象与作为对该对象的操作的操作数的来自所述多个对象的至少一个其他对象之间的来自所述多个状态路径的至少一个状态路径。
10.根据权利要求7所述的系统,其中所述同步机制是在所述应用的所述描述中未定义的同步信号。
11.根据权利要求7所述的系统,其中在每个可执行对象处包括的所述指令当在用于该可执行对象的所述主机处执行时,使用于该可执行对象的所述主机在执行了与该可执行对象相关联的所述操作之后输出完成信号。
12.一种存储表示指令的代码的处理器可读介质,所述指令当在处理器处执行时使所述处理器:
识别应用的描述内的多个对象;
针对来自所述应用的所述描述内的所述多个对象的每个对象,识别对该对象的操作,对于该对象来说来自所述多个对象的至少一个其他对象是操作数;
针对来自所述多个对象的每个对象,定义该对象与作为对该对象的所述操作的操作数的来自所述多个对象的所述至少一个其他对象中的每一个之间的至少一个状态路径;并且
生成多个可执行对象,每个可执行对象唯一地对应于来自所述多个对象的一个对象,
每个可执行对象与表示该可执行对象的状态的数据结构相关联并且
包括当在用于该可执行对象的主机处执行时使用于该可执行对象的所述主机进行下列的指令
对该可执行对象执行对与该可执行对象唯一地对应的所述对象的所述操作并且
响应于在所述应用的所述描述内未定义的同步机制根据与该可执行对象唯一地对应的所述对象的所述至少一个状态路径来将该可执行对象的所述状态提供给来自所述多个可执行对象的一个或多个其他可执行对象。
13.根据权利要求12所述的处理器可读介质,其中所述同步机制是在所述应用的所述描述中未定义的同步信号。
14.根据权利要求12所述的处理器可读介质,其中在每个可执行对象处包括的所述指令当在用于该可执行对象的所述主机处执行时,使用于该可执行对象的所述主机在执行了对该可执行对象的所述操作之后输出完成信号。
15.根据权利要求12所述的处理器可读介质,其中在每个可执行对象处包括的所述指令当在用于该可执行对象的所述主机处执行时,使用于该可执行对象的所述主机在第一时间段期间执行与该可执行对象相关联的所述操作并且在第二时间段期间从所述多个可执行对象给该可执行对象的所述状态提供一个或多个其他可执行对象,所述同步机制使所述第一时间段与所述第二时间段分开。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2012/048822 WO2014021817A1 (en) | 2012-07-30 | 2012-07-30 | Compilation system for executable objects |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104662511A true CN104662511A (zh) | 2015-05-27 |
Family
ID=50028337
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280076139.3A Pending CN104662511A (zh) | 2012-07-30 | 2012-07-30 | 用于可执行对象的编译系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20150212862A1 (zh) |
EP (1) | EP2880526A4 (zh) |
CN (1) | CN104662511A (zh) |
WO (1) | WO2014021817A1 (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030120701A1 (en) * | 2001-12-20 | 2003-06-26 | Darren Pulsipher | Mechanism for managing execution environments for aggregated processes |
US20060031814A1 (en) * | 2004-08-03 | 2006-02-09 | Luc Morin | Method for compiling and executing a parallel program |
US20070174828A1 (en) * | 2006-01-25 | 2007-07-26 | O'brien John Kevin P | Apparatus and method for partitioning programs between a general purpose core and one or more accelerators |
CN101086710A (zh) * | 2006-06-06 | 2007-12-12 | 学校法人早稻田大学 | 面向异种多处理器的全局编译程序 |
US20080276025A1 (en) * | 2007-05-04 | 2008-11-06 | Microsoft Corporation | Lock inference for atomic sections |
US20090313600A1 (en) * | 2008-06-13 | 2009-12-17 | Microsoft Corporation | Concurrent code generation |
CN102099788A (zh) * | 2008-06-06 | 2011-06-15 | 苹果公司 | 用于在多处理器上进行数据并行计算的应用编程接口 |
US20110225565A1 (en) * | 2010-03-12 | 2011-09-15 | Van Velzen Danny | Optimal incremental workflow execution allowing meta-programming |
-
2012
- 2012-07-30 WO PCT/US2012/048822 patent/WO2014021817A1/en active Application Filing
- 2012-07-30 CN CN201280076139.3A patent/CN104662511A/zh active Pending
- 2012-07-30 EP EP12882428.1A patent/EP2880526A4/en not_active Withdrawn
- 2012-07-30 US US14/417,224 patent/US20150212862A1/en not_active Abandoned
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030120701A1 (en) * | 2001-12-20 | 2003-06-26 | Darren Pulsipher | Mechanism for managing execution environments for aggregated processes |
US20060031814A1 (en) * | 2004-08-03 | 2006-02-09 | Luc Morin | Method for compiling and executing a parallel program |
US20070174828A1 (en) * | 2006-01-25 | 2007-07-26 | O'brien John Kevin P | Apparatus and method for partitioning programs between a general purpose core and one or more accelerators |
CN101086710A (zh) * | 2006-06-06 | 2007-12-12 | 学校法人早稻田大学 | 面向异种多处理器的全局编译程序 |
US20080276025A1 (en) * | 2007-05-04 | 2008-11-06 | Microsoft Corporation | Lock inference for atomic sections |
CN102099788A (zh) * | 2008-06-06 | 2011-06-15 | 苹果公司 | 用于在多处理器上进行数据并行计算的应用编程接口 |
US20090313600A1 (en) * | 2008-06-13 | 2009-12-17 | Microsoft Corporation | Concurrent code generation |
US20110225565A1 (en) * | 2010-03-12 | 2011-09-15 | Van Velzen Danny | Optimal incremental workflow execution allowing meta-programming |
CN102193823A (zh) * | 2010-03-12 | 2011-09-21 | 微软公司 | 允许元编程的最优增量工作流执行 |
Non-Patent Citations (2)
Title |
---|
FENG LI等: "Automatic Extraction of Coarse-Grained Data-Flow Threads FROM IMPERATIVE PROGRAMS", 《IEEE MICRO》 * |
HASSAN CHAFI等: "A domain-specific approach to heterogeneous parallelism", 《PPOPP "11 PROCEEDINGS OF THE 16TH ACM SYMPOSIUM ON PRINCIPLES AND PRACTICE OF PARALLEL PROGRAMMING》 * |
Also Published As
Publication number | Publication date |
---|---|
EP2880526A1 (en) | 2015-06-10 |
US20150212862A1 (en) | 2015-07-30 |
WO2014021817A1 (en) | 2014-02-06 |
EP2880526A4 (en) | 2016-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5496772B2 (ja) | コンポーネント・ベース・アプリケーションに対して実行可能なコードを構築する方法、その方法を実行するプログラムを含むコンピュータ可読の記憶媒体、およびコンパイラ | |
US9391831B2 (en) | Dynamic stream processing within an operator graph | |
US11481200B1 (en) | Checking source code validity at time of code update | |
US7698692B1 (en) | Preparing a binary file for future instrumentation | |
CN101727316B (zh) | 适于集群系统的并行程序集成开发系统及其应用实现方法 | |
US20060236315A1 (en) | Reifying generic types while maintaining migration compatibility | |
TWI710913B (zh) | 跨網路執行元組圖形程式之方法 | |
US8161127B2 (en) | Process mapping in parallel computing | |
EP4070183A1 (en) | Behavior-based comparison of software | |
CN109542444B (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
EP2972880B1 (en) | Kernel functionality checker | |
CN102968372A (zh) | 具有程序分析功能的程序调试系统 | |
Meyer et al. | Weak conformance between process models and synchronized object life cycles | |
CN109564507B (zh) | 数据处理方法、系统和存储介质 | |
CN113238739A (zh) | 一种插件开发和数据获取方法、装置、电子设备及介质 | |
US11106564B2 (en) | Deframeworking for static program analysis | |
US10713150B1 (en) | Accurate test coverage of generated code | |
US11182272B2 (en) | Application state monitoring | |
US7231334B2 (en) | Coupler interface for facilitating distributed simulation of a partitioned logic design | |
CN104662511A (zh) | 用于可执行对象的编译系统 | |
Ng et al. | Scalable session programming for heterogeneous high-performance systems | |
TWI414995B (zh) | 開發及執行平台 | |
Bošnački et al. | Towards modular verification of threaded concurrent executable code generated from DSL models | |
US11681508B2 (en) | Source code analysis to map analysis perspectives to events | |
US9063826B2 (en) | Process mapping in parallel computing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150527 |
|
WD01 | Invention patent application deemed withdrawn after publication |