《并行编程和执行系统与技术.pdf》由会员分享,可在线阅读,更多相关《并行编程和执行系统与技术.pdf(27页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN102378961A43申请公布日20120314CN102378961ACN102378961A21申请号201080014539222申请日2010032612/41845220090403USG06F9/38200601G06F9/4620060171申请人微软公司地址美国华盛顿州72发明人赵伟东YR塞尔马德维常城ES克里斯托弗森74专利代理机构中国专利代理香港有限公司72001代理人刘红刘鹏54发明名称并行编程和执行系统与技术57摘要在这里论述并行编程和执行系统与技术。根据一种技术,平行编程模型用于将复杂的处理分解为具有利用数据对象作为接口设置的适当依赖性的并行化的任。
2、务。另一种技术以调度机制为特征,其中调度机制以可伸缩方式在诸如CPUS/CPU核心、GPU/GPU核心和/或硬件线程之类的一类处理单元之间提供线程关联度和自动负载平衡管理。这些模型和技术以示例方式被应用于数字媒体编码处理。30优先权数据85PCT申请进入国家阶段日2011093086PCT申请的申请数据PCT/US2010/0289222010032687PCT申请的公布数据WO2010/114776EN2010100751INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书4页说明书14页附图8页CN102378971A1/4页21一种计算机可读存储介质(804),其利用计算。
3、机可执行指令(806)来编码,所述计算机可执行指令当被执行时执行用于执行处理(102)以产生期望的输出数据(108)的方法(600),所述处理包括第一数据处理操作(170),第二数据处理操作(170),第一和第二数据处理操作之间的至少一个数据依赖性(271),以及通过基于至少一个数据依赖性将第一数据处理操作与第二数据处理操作相关而形成的处理表示(200),所述方法包括定义(602)包括所述计算机可执行指令的第一部分的第一线程(103),第一线程可操作来执行用于执行第一和第二数据处理操作的计算机程序;定义(602)包括所述计算机可执行指令的第二部分的第二线程(103),第二线程可操作来与第一线程。
4、异步且同时执行用于执行第一和第二数据处理操作的计算机程序;在所述计算机可执行指令的运行时间,基于所述处理表示来实例化(604)可执行任务图(300),所述任务图包括第一任务对象(302),其代表被配置为执行第一数据处理操作的第一计算机实现方法,第二任务对象(302),其代表被配置为执行第二数据处理操作的第二计算机实现方法,和数据对象(303),所述数据对象代表被分配用于基于至少一个数据依赖性来存储可用数据的存储器(301)的部分,所述数据对象具有多个状态(350),以促进第一任务对象与第二任务对象之间的通信;设置(606)所述数据对象的第一状态;基于第一状态,经由第一任务对象,触发(608)利。
5、用第一线程或第二线程的第一计算机实现方法的执行,以便经由所述数据对象而输出可用数据到存储器;在可用数据已被输出到存储器之后,设置(606)所述数据对象的第二状态;和基于第二状态,经由第二任务对象,触发(608)利用第一线程或第二线程的第二计算机实现方法的执行,以转换可用数据。2根据权利要求1的计算机可读存储介质(804),其中所述处理(102)包括用于包括媒体样本的序列的媒体内容(406)的编码处理(400),所述序列包括多组媒体样本,和其中期望的输出数据包括编码的媒体数据(408),以及其中为每组媒体样本实例化可执行任务图。3根据权利要求1的计算机可读存储介质,所述方法进一步包括重复地执行以。
6、下步骤设置(606)所述数据对象的第一状态;触发(608)第一计算机实现方法的执行;设置(606)所述数据对象的第二状态;和触发(608)第二计算机实现方法的执行,利用第一线程或第二线程异步且在单个时钟周期内执行的第一和第二计算机实现方法的执行,直至已产生期望的输出数据。4根据权利要求1的计算机可读存储介质(804),其中从包括以下的组中选择第一和第二计算机实现方法的实现方式软件实现方式;硬件实现方式;和固件实现方式。权利要求书CN102378961ACN102378971A2/4页35根据权利要求4的计算机可读存储介质(804),其中当第一计算机实现方法或第二计算机实现方法或这两者包括软件实。
7、现方式时,软件实现方式包括在运行时间实例化一个或多个其它的可执行任务图的一组计算机可执行指令。6根据权利要求4的计算机可读存储介质(804),其中当第一和第二计算机实现方法包括软件实现方式时,第一任务对象定义至第一计算机程序的接口,并且第二任务对象定义至第二计算机程序的接口。7根据权利要求1的计算机可读存储介质(804),其中所述数据对象具有从其可接收可用数据的至少一个拥有任务对象,并具有可用数据可提供给其的至少一个依赖任务对象,其中所述至少一个拥有任务对象包括第一任务对象,所述至少一个依赖任务对象包括第二任务对象,以及其中从包括以下的组中选择所述数据对象的状态存储器不可用状态(853),其指。
8、示所述存储器的部分未准备好从所述至少一个拥有任务对象接收可用数据;存储器可用状态(352),其指示所述存储器的部分准备好从所述至少一个拥有任务对象接收可用数据;和数据可用状态(351),其指示可用数据已从所述至少一个拥有任务对象接收并准备好被提供给所述至少一个依赖任务对象。8根据权利要求1的计算机可读存储介质(804),其中所述数据对象具有从其可接收可用数据的至少一个拥有任务对象,并具有可用数据可提供给其的至少一个依赖任务对象,其中所述至少一个拥有任务对象包括第一任务对象,所述至少一个依赖任务对象包括第二任务对象,其中第一任务对象具有第一任务寿命,第二任务对象具有第二任务寿命,并且所述数据对象。
9、具有数据对象寿命,以及其中所述方法进一步包括在所述计算机可执行指令的运行时间,在第一任务寿命到期时删除第一任务对象,在第二任务寿命到期时删除第二任务对象,并删除在数据对象寿命到期时删除的数据对象,当拥有任务对象和依赖任务对象中的每一个的寿命已到期时,所述数据对象寿命到期。9一种用于在计算环境内执行处理的方法,所述处理包括多个数据处理操作(170),多个数据依赖性(271),一个或多个数据依赖性与每个数据处理操作相关联,和通过将多个数据处理操作与多个数据依赖性相关而形成的处理表示(200),所述方法包括标识多个线程(103)中的第一线程;标识所述多个线程中的第二线程;标识用于存储利用第一线程或第。
10、二线程可检索的许多工作项(361)的一个或多个队列(330,340);基于所述处理表示,实例化可执行任务图(300),所述任务图包括多个任务对象(302),每个任务对象代表被配置为执行相应的特定数据处理操作的特权利要求书CN102378961ACN102378971A3/4页4定计算机实现方法,多个数据对象(303),每个数据对象代表被分配用于基于与至少一个任务对象相关联的至少一个数据依赖性来存储数据的存储器(301)的部分,每个数据对象具有从其可接收可用数据的至少一个拥有任务对象,并具有可用数据可提供给其的至少一个依赖任务对象,每个数据对象具有许多状态(350);设置特定数据对象的第一状态;。
11、基于第一状态,在一个或多个队列中存储第一工作项;在利用特定数据对象所代表的存储器的部分中存储可用数据;在存储可用数据之后,设置特定数据对象的第二状态;基于第二状态,在一个或多个队列中存储第二工作项;标识第一工作项和第二工作项的相对优先级;基于相对优先级,第一线程或第二线程从一个或多个队列之一中检索第一工作项,第一工作项当被检索时触发与特定数据对象的至少一个拥有任务对象相关联的特定计算机实现方法的执行,以产生可用数据;基于相对优先级,第一线程或第二线程从一个或多个队列之一中检索第二工作项,第二工作项当被检索时触发与特定数据对象的至少一个依赖任务对象相关联的特定计算机实现方法的执行,以转换可用数据。
12、来产生期望的输出数据(108),第一线程和第二线程异步且同时操作;以及提供期望的输出数据给所述计算环境的用户。10一种用于执行处理(102)的计算环境(800),所述处理包括多个数据处理操作(170),多个数据依赖性(271),一个或多个数据依赖性与每个数据处理操作相关联,和通过将多个数据处理操作与多个数据依赖性相关而形成的处理表示(200),所述计算环境包括多个处理单元(802),每个处理单元具有相关联的线程组(875),每个线程组具有被配置为提取工作项(361)的一个或多个线程(103),每个工作项触发执行相应的数据处理操作的特定计算机实现方法(335)的执行;一个或多个计算机可读存储介质。
13、的多个部分(506,508),特定线程组内的一个或多个线程被配置为存取所述多个部分中的特定部分;多个队列(340,510,511,512,513),每个队列形成在计算机可读存储介质的所述多个部分中的一个或多个部分中,每个队列被配置为存储多个工作项(361),每个队列中的多个工作项可利用每个线程组内的一个或多个线程独立且异步地提取;和利用多个处理器可执行的计算机程序(804),以执行所述处理,所述计算机程序执行方法(700),所述方法包括基于所述处理表示,实例化(704)可执行任务图(300),所述任务图包括多个任务对象(302),每个任务对象代表被配置为执行相应的特定数据处理操作的特定计算机实。
14、现方法(335),和多个数据对象(303),每个数据对象代表被分配用于基于与至少一个任务对象相关联的至少一个数据依赖性来存储数据的存储器(301)的部分,每个数据对象具有从其可接收权利要求书CN102378961ACN102378971A4/4页5可用数据的至少一个拥有任务对象,并具有可用数据可提供给其的至少一个依赖任务对象,每个数据对象具有许多状态(350),设置(706)特定数据对象的第一状态(350),基于第一状态,在多个队列中的每一个中存储(708)第一工作项,第一工作项在多个队列中的每一个中具有不同的优先级标识符(830),第一工作项利用特定线程组基于特定优先级标识符来提取(710)。
15、,第一工作项的提取触发与特定数据对象相关联的至少一个拥有任务对象所关联的特定计算机实现方法的执行,以产生可用数据,在利用特定数据对象所代表的存储器的部分中存储可用数据,在存储可用数据之后,设置(706)特定数据对象的第二状态,以及基于第二状态,在多个队列中的每一个中存储(708)第二工作项,第二工作项在多个队列中的每一个中具有不同的优先级标识符,第二工作项利用特定线程组基于特定优先级标识符来提取(710),第二工作项的提取触发与特定数据对象相关联的至少一个依赖任务对象所关联的特定计算机实现方法的执行,以转换可用数据。权利要求书CN102378961ACN102378971A1/14页6并行编程。
16、和执行系统与技术背景技术0001以单个处理器为特征的传统的计算环境一般以串行方式执行与特定的计算机实现处理相关联的数据处理操作,尽管一些传统的计算环境可能支持时分复用,其中单个处理器在不同的操作之间足够频繁地切换,以致用户感知这些操作在同时被执行。0002计算环境已趋向于具有多个处理单元的多处理系统。许多类型的系统可以被视为多处理系统,并且多处理系统的示例包括但不限于具有多个中央处理单元(CPU)和/或图形处理单元(GPU)的系统;具有多个核心的单或多CPU/GPU系统;以及具有附加的硬件支持来高效执行多个操作的单或多CPC/GPU系统。0003实现特定的计算机实现处理的全部或部分的计算机程序。
17、也可以被设计成多线程的,即,具有多个执行的线程。执行的线程是计算机程序的一部分,其能够与计算机程序的另一部分同时被执行。0004朝向多处理系统的趋势和多线程计算机程序的出现、并且尤其是其组合具有增加许多计算机实现处理的性能和效率的潜力。为了实现这样的性能和效率提高,特别地设计多线程的计算机程序是所希望的。发明内容0005在这里描述并行编程创作和执行系统,其提供模型和技术来解决在单或多处理单元计算环境中设计执行特定的计算机实现处理的至少一部分的多线程计算机程序的各种挑战。在这里使用术语处理单元来指示任何的CPU、GPU、核心、硬件线程或其它的已知的或以后开发的处理构造。在这里使用术语线程来指示被。
18、配置为支持多个操作的同时执行的任何的软件或处理单元或其安排。0006根据利用在这里描述的系统实现的一种示例技术的各方面,通过将复杂处理的许多数据处理操作与这些数据处理操作之间的数据依赖性相关联来表示该复杂处理。基于处理表示,创建可执行的任务图。该任务图包括许多任务对象和许多数据对象。每个任务对象代表(经由硬件、软件、固件或其组合)执行特定的数据处理操作的特定的相应计算机实现功能。每个数据对象代表存储器中被分配用于基于至少一个数据依赖性存储数据的部分。0007一般,特定的任务对象具有一个或多个数据对象输入和一个或多个数据对象输出。同样地,特定的数据对象具有从其可接收可用数据的至少一个“拥有(OW。
19、NING)”任务对象(并且实际上可以限于只有一个拥有任务),并具有可提供可用数据给其的至少一个“依赖(DEPENDENT)”任务对象,除了当该数据对象是最终的输出数据项的时候之外,通常可以对其采用不同的接口机制。特定的数据对象也具有被设置的若干状态。0008在任务图的执行期间,执行特定的数据处理操作的特定的计算机实现功能在与其相应的任务对象相关联的所有数据对象输入具有指示数据是可使用的状态时变为准备好执行。在与每个任务对象相关联的数据对象输入和数据对象输出的状态被更新时,任务图的执行继续,从而触发执行相应的数据处理操作的计算机实现方法的执行,直到已获得该处理的期望的输出数据为止。说明书CN10。
20、2378961ACN102378971A2/14页70009根据利用在这里描述的系统实现的另一种示例技术的各方面,计算机实现功能/数据处理操作被调度,以便根据某些调度规则执行。一般而言,计算机实现功能/数据处理操作被调度,以便通过将与其相应的任务对象相关联的工作项放入一个或多个队列中来执行。这些工作项具有基于任务对象的优先级(在一个示例中,在任务对象的创建时间,确定优先级)。基于优先级,与其它线程协力、独立且同时操作的可用线程提取工作项,并引起执行该数据处理操作的计算机实现功能的执行。0010在一个示例调度情况中,一组线程被绑定到处理单元(例如,一组核心或特定GPU)并且本地共享主队列和高速缓。
21、存/存储器层级中相同的高速缓存。当特定的工作项被放置在特定的主队列上时,该工作项的链接拷贝也被放置在与其他组/处理单元相关联的其它队列(被称为“次”队列)中的每一个上,其中每个工作项具有不同的相对优先级(例如,相对于相关联的任务对象的原始优先级)。通常,主队列中的工作项具有比一个或多个次队列中的相同工作项更高的优先级,这允许次队列中的工作项在主队列中的线程组太落后的情况下用作“救助(BAILOUT)”。一旦工作项被执行,它就从主队列和次队列中被移除。以这种方式,在处理单元级内和处理单元级间两者上,调度是灵活的并且容易配置用于期望的负载平衡和/或线程关联度(AFFINITY)要求。0011提供这。
22、个发明内容部分来以简化形式介绍概念的选择。这些概念在具体实施方式部分中进一步进行描述。除了在这个发明内容部分中描述的元素或步骤之外的其他元素或步骤是有可能的,并且没有元素或步骤是一定需要的。这个发明内容部分并不打算标识所请求保护的主题的关键特征或基本特征,也不打算用作帮助确定所请求保护的主题的范围。所请求保护的主题不限于解决在这个文献的任何部分中指明的任何或所有缺点的实现方式。附图说明0012图1是示例多处理计算环境的简化功能框图,其中利用该示例多处理计算环境,并行编程创作和执行系统(PARALLELPROGRAMMINGAUTHORINGANDEXECUTIONSYSTEM)(“PPAES”。
23、)可以被实现或用于促进特定的计算机实现处理的执行。0013图2是图1中所示的处理的示例的部分处理表示。0014图3是基于图2中所示的处理表示而生成的示例的部分任务图。0015图4是与执行示例的次视频编码处理相关生成的示例任务图。0016图5是图1中所示的示例多处理计算环境的一种可能的实现方式的简化功能框图。0017图6是用于使用图1中所示的PPAES的各方面来执行计算机实现处理的一种示例方法的流程图。0018图7是用于使用图1中所示的PPAES的各方面来执行计算机实现处理的另一示例方法的流程图。0019图8是示例操作环境的简化功能框图,其中图1中所示的PPAES与多处理计算环境的各方面和/或图。
24、6与7中所示的方法可以被实现或被使用。具体实施方式说明书CN102378961ACN102378971A3/14页80020在这里论述的并行编程创作和执行系统(“PPAES”)与技术促进在诸如多处理计算环境之类的各种计算环境中计算机实现处理的执行。基于处理表示的可执行任务图被创建并被用于将处理分解为具有利用数据对象作为接口设置的适当依赖性的并行化的任务。调度技术以可伸缩方式在诸如CPU核心和GPU单元之类的一类处理单元之间、在任务图的执行期间提供线程关联度和/或自动负载平衡管理。0021这些技术以示例方式被应用于数字媒体编码处理。虽然为了示例目的而论述媒体处理活动,但是将意识到在这里论述的技术。
25、可以应用于任何的能够被分解为若干相对可预测功能的处理。0022转向其中相似的数字指定相似的组件的附图,图1是多处理计算环境100的某些方面的简化功能框图。环境100包括PPAES,其可以被实现或被使用来促进通过创建和执行任务图和/或其组件(在下面结合图3来论述任务图300)的特定的计算机实现处理102的执行和某些调度技术(在下面结合图5和7来论述调度技术)的实现。0023处理102转换某些源数据106,以产生期望的输出108。在示例实现方式中,处理102是数字媒体编码处理,但是将意识到处理102可以是任何的能够被分解为若干相对可预测功能的处理。如所示的,处理102包括数据处理操作170,其经由。
26、线程103而被执行。数据处理操作170代表经由环境100的内部或外部的硬件、软件、固件或其任何组合而可执行的任何操作。在这里使用术语线程来指示被配置为支持多个操作的同时执行、例如提取和/或触发执行数据处理操作170的计算机实现功能的执行的任何的软件线程或处理单元或其安排。软件线程是计算机程序的执行的线程计算机程序的一部分,其能够与计算机程序的另一部分同时执行。处理单元指的是任何的中央处理单元(“CPU”)、图形处理单元(“GPU”)、任何CPU或GPU的任何核心、任何硬件线程或任何其它的现在已知的或以后开发的处理构造。0024继续参照图1,图2是处理102的部分的示例处理表示200,其相关数据。
27、处理操作170与数据依赖性271。如所示的,表示200采用数据流程图的形式,这是与处理102相结合执行的各种数据处理操作170以及代表流入或流出这些数据处理操作的数据(进入这些数据处理操作和/或离开这些数据处理操作的箭头)的其之间的数据依赖链接271的图形表示。虽然处理表示200被显示为数据流程图,但是处理表示可以通过相关数据处理操作与数据依赖性、以任何已知的或以后开发的方式来形成,并且可以采用任何期望的形式。0025继续参照图1和2,图3是基于图2中所示的处理表示200的示例的部分的任务图300。通常,任务图300按照PPAES101(在下面结合图5进一步论述)的一个或多个方面来生成,并利用。
28、一组或多组计算机可执行指令来实现,其中计算机可执行指令当由具有一个或多个处理器的计算系统执行时促进利用处理表示200所代表的处理102的执行。因而,在一种可能的实现方式中,任务图300利用其链接来说明若干运行时间对象。利用任务图提供的责任的清晰且自然的边界增进面向对象的设计。0026如所示的,任务图300包括若干任务对象302和若干数据对象303(数据对象303利用圆边缘来说明)。可用数据371被显示为移动穿过任务图300。应当注意图3中所示的任务对象编号方案不一定暗示特定的执行顺序,并且流入或流出特定的数据对象303和/或任务对象302的可用数据371在不同的处理中可以表示不同事情的意思。例。
29、如,发散流能够意味着正在发送可用数据的复制拷贝,或复杂数据集正被分为更多个基本数据项,说明书CN102378961ACN102378971A4/14页9或具有不同值的项正被分开。汇聚流能够指示若干基本数据项被结合在一起,以形成更复杂的数据集,或来自不同源的输入数据被操作。也应当注意在输入至特定的任务对象和/或数据对象的可用数据371与从特定的任务对象和/或数据对象输出的可用数据371之间可能不具有一对一比率。0027与处理表示200相关,每个任务对象302代表特定的相应(通常,异步的)计算机实现功能330,其执行特定的数据处理操作170。特定的计算机实现功能330可以利用负责执行任务图300的。
30、计算系统的内部或外部的硬件、软件、固件或其任何组合来执行。在一种可能的实现方式中,特定的任务对象是至被配置为引起基于经由任务对象提供的信息的相应的计算机实现功能的执行的计算机程序的接口。被称为“源任务”(未示出)的某些任务能够产生其它的任务图,并且源任务也负责管理长期数据对象(在下面进一步讨论),因为源任务知道对于将来的服务是否需要长期数据对象。0028与可执行的任务图300相关,任务对象302可以利用诸如服务之类的任务管理器引擎(未示出)作为PPAES101的一部分来创建和/或管理。每个任务对象302代表对其输入数据对象起作用并在其输出数据对象中产生结果的操作。特定的任务对象302可以具有一。
31、个或多个数据对象作为输入以及一个或多个数据对象303作为输出。任务对象通常在生成特定的任务图300时(从堆(HEAP)中)创建,生存在任务图上,并在相应的计算机实现功能330已完成其特定的数据处理操作170的执行之后(或在源任务的情况下,在已生成子任务图之后)被删除。因此,任务对象302具有到期的寿命(未示出)(在下面结合示例的“线程操作循环”来进一步论述任务对象的删除)。0029当创建任务对象时,该任务对象具有分配给它的优先级标识符(“优先级ID”)(在图8中显示优先级ID830)。通常,优先级ID具有跨越利用处理102操作的源数据106的整体的范围(例如,如下面结合图4所论述的,源数据10。
32、6可以是由媒体样本的序列组成的媒体内容),以确保与该处理的执行相关而执行的多个任务图之间任务的适当的优先化。将意识到任务对象优先级ID可以运行相对于期望的输出的产生、性能反馈或其它因素的相对优先级。0030下面的伪代码定义示例的任务对象模式,其中“DB”指“数据对象”说明书CN102378961ACN102378971A5/14页10BASECLASSFORTASKENUMDBSTATUSMU,MA,DACLASSTASK/当M_INUMUNAVAILINPUTDB和M_INUMUNAVAILOUTPUTDB两者0时,任务转到READYQ/当M_INUMUNAVAILINPUTDB0和M_IN。
33、UMUNAVAILOUTPUTDB0时,任务转到MEMWQINTM_INUMUNAVAILINPUTDB/输入的数量,其中DBSTATUSDA/如果所有其INPUT_DB处于DA状态中,任务对象变为准备好执行;取决于变为可运行所需的其它资源,诸如对于OUTPUT_DB从存储器不可用状态变为存储器可用状态的存储器要求,准备好的任说明书CN102378961ACN102378971A6/14页11务对象可能不是立即可运行的。准备好但不是可运行的工作项/任务对象以优先级顺序被放置在停置队列中;它以后在所需的资源由于从另一对象释放的结果而变为可用于它时而变为可运行的。INTM_INUMUNAVAILO。
34、UTPUTDB/输出的数量,其中DBSTATUSMUINT64M_ISCHEDULEPRIORITY/确定由调度规则/任务操作管理器使用的序列范围优先级INTM_ITHREADGROUP/确定这个任务应被绑定哪个线程组INPUT_DB_LISTOUTPUT_DB_LIST/所有的输入数据对象的列表;所有的输出数据对象的列表VIRTUALEXECUTE/期望EXECUTE虚拟函数被导出类超越,以实现特定的计算机实现功能/数据处理操作。EXECUTE使用INPUT_DB_LIST作为输入,并使用OUTPUT_DB_LIST作为输出。0031再次参照图3,可以利用诸如服务之类的数据对象管理器引擎(未。
35、示出)作为PPAES101的一部分来创建和/或管理数据对象303。每个数据对象303代表被分配用于基于至少一个数据依赖性271来存储数据的存储器的部分“底层存储块”(“UMB”)201,其可以利用别名207来标识。使用别名207,一个UMB一次可以与多个数据块相关联,并且可以维持代表对于特定UMB使用别名的数据块的数量的“别名计数”(当别名计数达到零时,UMB可以被删除,即,变为可用于其他目的)。在特定的任务对象具有对于相同的UMB使用别名的输入数据块和输出数据块时,当就地操作(INPLACEOPERATION)是优选的时,或在其中多个分段正分享相同的UMB的分段的情况下,使用别名能够是有用的。
36、。分段可以用于将底层UMB划分为较小分段,用于更细的颗粒任务。通常,数据对象在堆上进行创建,并生存在任务图上,例外是长期数据对象,其可以另外生存在指向长期数据对象的全局阵列的指针上。0032特定的数据对象303具有从其可接收可用数据371的至少一个(并且可能期望仅有一个)“拥有”任务对象以及可用数据371可提供给其的至少一个“依赖”任务对象,(除了当它是最后的输出对象之一时之外,在这种情况中可以采用不同的接口机制)。拥有任务可以拥有不止一个数据对象,例如短期数据对象和长期数据对象。通常,特定的数据对象维持具有数据对象作为输入的任务对象的列表。流入特定的数据对象303的可用数据371可以被描述为。
37、被放入特定UMB201中的新信息,其可以是除了该UMB内的现有信息的全部或部分之外附加的信息,或作为该UMB内的现有信息的全部或部分的替代或修改。0033每个数据对象具有若干状态350。虽然将意识到更多、更少或不同的状态是有可能的,但是如下定义三个示例状态存储器不可用状态351,其指示利用特定的数据对象303所代表的存储器的部分没有准备好从拥有任务对象接收可用数据371;存储器可用状态352,其指示利用特定的数据对象303所代表的存储器的部分准备好从拥有任务对象接收可用数据371;和数据可用状态353,其指示可用数据371已从拥有任务对象中接收并准备好被提供给依赖任务对象。0034数据对象利用。
38、服务来创建和删除,其中所述服务可以是类似于堆管理器的服务。数据对象具有在满足某些条件时到期的寿命(未示出)。通常,在建立任务图的时候,利用一说明书CN102378961ACN102378971A7/14页12定大小并利用存储不可用的状态来创建数据对象。存储器不可用状态阻碍拥有任务运行,直到该状态被改变为存储器可用为止。任务图可以在其拥有任务对象准备好执行时被创建,并在其相关联的叠压数据对象已服务于其目的(包括可能的长期目的)时被删除。在删除时间,释放与该数据对象相关联的UMB。在一种情形下,通过将一个或多个数据对象的状态改变为存储器可用状态,需要存储器资源的一个或多个数据块可以被标识,并且释放。
39、的存储器被分配给这一个或多个数据块。0035数据块可以维持在到期(例如,被删除)之前它需要服务的目的的数量的记录(出于示例目的,被称为“目的计数器”)。当目的被服务时,目的计数器被递减。长期数据对象可以具有至具有全局范围的阵列或其它数据结构的链接。至全局范围数据结构的连接(其可以在任务图被设立并在确定特定的数据对象已完成用作长期数据对象之后被以后的任务图的同一设立移除时建立)用作对于特定的数据对象的目的计数器中的一个计数。0036以下的伪代码定义示例的数据对象模式,其中“DB”指“数据对象”BASECLASSFORDATAOBJECTCLASSUMBVOIDM_PDATAINTISIZEINT。
40、M_IALIASCOUNT/在物理存储器中保持别名计数CLASSDATAOBJECTDBSTATUSM_EDBSTATUSINTM_IREFCOUNT/REF_COUNT出入这个DB的边缘的数量DEPENDENT_TASK_LISTTASKM_POWNINGTASKUMBM_PUMB说明书CN102378961ACN102378971A8/14页13。0037再次参照图3,一旦在运行时间已实例化用于特定任务图300的所有的任务对象302和数据对象303,该任务图就被执行,以产生期望的输出108。特别地,当利用相应的任务对象302所代表(执行特定的数据处理操作170)的计算机实现功能被认为准备好。
41、被执行时,与该任务对象相关联的工作项361(被描绘为与任务对象1相关联的工作项“T1”)根据该任务对象的优先级被放置在一个或多个队列330、340(下面进一步论述)上并利用可用线程103来提取。利用可用线程103的工作项的提取导致利用提取线程的被配置为引起执行数据处理操作的计算机实现功能的执行的计算机程序(任务对象可以是到该计算机程序的接口)的执行。下面是示例的线程操作循环的伪代码形式的描述,其中示例的线程操作循环可以利用线程执行引擎作为PPAES101的一部分来实现和/或管理获取下一工作项通过调用在任务对象中涉及的EXECUTE例程,执行工作项在完成工作项之后,清除任务对象对于每个输入数据对。
42、象,递减其目的计数,并在目的计数达到零时将它删除对于每个输出数据对象递减其目的计数(注意如果具有利用它作为输入数据对象的其它任务对象,则目的计数不能为零)说明书CN102378961ACN102378971A9/14页14将其状态标记为可用于不阻塞依赖于它的其它任务对象的数据对于利用这个数据对象作为输入数据对象的每个任务对象,在它由于这个数据对象的状态改变而已变成准备好时创建将被放入队列中的工作项(根据调度规则)删除任务对象。0038虽然清除在上面的示例线程操作循环中描述的任务对象的技术没有特别引用任务图自身,但是移除完成的任务对象及其相关联的数据对象的操作的确达到了逐步拆除任务图的效果。00。
43、39在一个示例的实现方式中,当与相应的任务对象相关联的每个输入数据对象处于数据可用状态353中时,认为计算机实现功能准备好被执行,并创建与相应的任务对象相关联的工作项361。相对于工作项将在其中被执行的计算环境的可用全局资源(例如,存储器)来检查该工作项。0040当可用资源被认为少于将与任务对象相关联的所有的输出数据对象放入特定状态中(例如,将输出数据对象状态从存储器不可用置于存储器可用)所需的资源时,根据任务对象的优先级,将工作项放置在停置队列330上。当输出数据对象全部处于存储器可用状态中时,或当实现其它期望的条件时,停置队列上的工作项可以被移到运行队列340。通常,诸如存储器之类的资源作。
44、为其它的不相关的对象释放存储器的结果而变为可用,但是可用存储器也可能由于某一外部因素而增加。由于资源变为可用,所以可以基于其相关联的任务对象的优先级ID而将这些资源提供给停置队列上的工作项。0041当认为可用资源是足够的时,用于任务对象的输出数据对象的UMB被提交,输出数据对象的状态从存储器不可用改变为存储器可用(并且适当的全局资源水平被更新),并根据任务对象的优先级ID,将工作项放置在运行队列340上,其中利用可用线程103来提取它。0042继续参照图13,图4是与对于媒体内容406的特定输入序列的特定样本(例如,帧)集合、执行示例的次视频编码处理相关可使用来产生编码的媒体内容408的示例的。
45、可执行任务图400。如所示的,任务对象302(示出7个)具有尖边缘,而数据对象303具有圆边缘。0043S0代表原始媒体内容(例如,媒体样本的序列,诸如视频帧)。编码处理由若干数据处理操作或数据处理阶段组成,其中每个阶段具有相关联的任务对象预编码/检测阶段,任务对象T1;运动估计阶段,任务对象T2,其相对于以前的源帧进行搜索,以标识和消除在各个图片之间存在的时间冗余;运动估计细化阶段,任务对象T3,其相对于以前重建的帧进行搜索,以便对于来自T2阶段的结果执行细化;模式决定/量化阶段,任务对象T4;环路过滤和重建阶段,任务对象T7;熵编码阶段,任务对象T5,其中剩余部分被编码,以便以比特流的形式。
46、产生编码的媒体数据408;和速率控制阶段,任务对象T6。S1是用于存储预编码和图片类型检测任务的结果的缓冲器。MVN和MCDN分别是在阶段N运动估计之后的运动矢量和运动补偿的失真。0044在编码情形中一般具有至少两个源任务一个在帧进入点上,用于帧类型发现的目的;另一个正好在帧类型发现之后,用于构造帧特定的任务图。正好在预编码阶段(预编码任务可以被分解为固定的子任务图)中的图片类型发现之后,用于主任务图的设立例程对于每一帧作为源任务被执行。基于所发现的图片类型,创建用于图片编码的任务对象和说明书CN102378961ACN102378971A10/14页15数据对象,并且设立用于该图片的主任务图。
47、。在帧内,任务对象优先级ID通常从输入朝向输出降低(并且在帧级上,锚帧(ANCHORFRAME)应具有比随后的B帧更高的优先级)。通过将新的任务图与来自全局数据对象阵列的现有(长期)数据对象相联系来实例化新的任务图,并且准备好运行的任何任务对象的工作项被放置在适当的队列上。逐渐地,利用在已执行每个工作项/任务对象之后执行的每线程清除例程,任务图被拆除。在运行时间,若干部分“分解的”任务图一般将共存,这实现帧间并行。0045长期数据对象能够跨越多个编码图片的持续时间。至长期数据对象的连接可以在设立任务图时建立,并在确定数据对象已完成用作长期数据对象之后由于以后图片的相同设立而被移除,因而将它降级。
48、为短期数据对象。0046优先级ID到特定的任务对象的示例(例如,默认)分配如下M_ISCHEDULEPRIORITYM_TMAXNUMOFTASKSINASAMPLEISTAGELNASAMPLE,其中M_T是序列级上的样本(例如,帧)索引;并且ISTAGEINASAMPLE指示用于当前工作/项/任务对象的样本内的相对阶段。这个公式确保来自较早样本的工作项/任务对象采用比来自较晚样本的工作项/任务对象更高的优先级,并且在相同的样本内,较早阶段的工作项/任务对象采用比较晚阶段的工作项/任务对象更高的优先级。这个公式也允许任意定制。0047继续参照图14,图5是诸如环境100和/或900(如图8所。
49、示)之类的示例多处理计算环境的一种可能的实现方式的简化功能框图,其中可以执行在这里描述的任务图,诸如任务图300和400。基于下面描述的调度机制和技术,有可能以可缩放方式来解决负载平衡和线程关联度的问题,并使得特定的多线程计算机程序能够容易适应于不同的计算环境,其包括多核心CPU和GPGPU。一般而言,线程关联度和负载平衡是刻度的两个极端。一方面,将线程绑定到特定处理单元并由此增进数据业务本地性的线程关联度能够在多个线程上的负载在运行时间不均分布时导致差的负载平衡。另一方面,通过禁止线程关联度并漠视本地性能够实现完整的负载平衡。在跨越高速缓存/存储器层级沉重地重新分配工作量时,这样的实践在使空闲处理单元周期最小化的同时能够在多处理架构中导致数据业务污染。0048在这里提出的线程组(“TG”)的概念帮助解决在多处理计算环境和/或多线程计算机程序的执行中出现的线程关联度/负载平衡困境。如图5所示,特定线程组(“TG”)被绑定到在时常用于描述现代的多核心架构的高速缓存/存储器层级命名法中分享相同的本地L1/L2/L3等高速缓存的特定处理单元。显示五个组,TG0500、TG1501、TG2502、TG3503和TG4504。如所示的,线程组TG0、TG1、TG2和TG3被绑定到4X4核心505(C0、C1、C2和C3)的假设CPU590,并且线程。