并行编程和执行系统与技术.pdf

上传人:xia****o6 文档编号:1037219 上传时间:2018-03-27 格式:PDF 页数:27 大小:1.04MB
返回 下载 相关 举报
摘要
申请专利号:

CN201080014539.2

申请日:

2010.03.26

公开号:

CN102378961A

公开日:

2012.03.14

当前法律状态:

授权

有效性:

有权

法律详情:

专利权的转移IPC(主分类):G06F 9/38变更事项:专利权人变更前权利人:微软公司变更后权利人:微软技术许可有限责任公司变更事项:地址变更前权利人:美国华盛顿州变更后权利人:美国华盛顿州登记生效日:20150421|||授权|||实质审查的生效IPC(主分类):G06F 9/38申请日:20100326|||公开

IPC分类号:

G06F9/38; G06F9/46

主分类号:

G06F9/38

申请人:

微软公司

发明人:

赵伟东; Y. R. 塞尔马德维; 常城; E. S. 克里斯托弗森

地址:

美国华盛顿州

优先权:

2009.04.03 US 12/418452

专利代理机构:

中国专利代理(香港)有限公司 72001

代理人:

刘红;刘鹏

PDF下载: PDF下载
内容摘要

在这里论述并行编程和执行系统与技术。根据一种技术,平行编程模型用于将复杂的处理分解为具有利用数据对象作为接口设置的适当依赖性的并行化的任务。另一种技术以调度机制为特征,其中调度机制以可伸缩方式在诸如CPUS/CPU核心、GPU/GPU核心和/或硬件线程之类的一类处理单元之间提供线程关联度和自动负载平衡管理。这些模型和技术以示例方式被应用于数字媒体编码处理。

权利要求书

1: 一种计算机可读存储介质 (804) , 其利用计算机可执行指令 (806) 来编码, 所述计 算机可执行指令当被执行时执行用于执行处理 (102) 以产生期望的输出数据 (108) 的方法 (600) , 所述处理包括 : 第一数据处理操作 (170) , 第二数据处理操作 (170) , 第一和第二数据处理操作之间的至少一个数据依赖性 (271) , 以及 通过基于至少一个数据依赖性将第一数据处理操作与第二数据处理操作相关而形成 的处理表示 (200) , 所述方法包括 : 定义 (602) 包括所述计算机可执行指令的第一部分的第一线程 (103) , 第一线程可操 作来执行用于执行第一和第二数据处理操作的计算机程序 ; 定义 (602) 包括所述计算机可执行指令的第二部分的第二线程 (103) , 第二线程可操 作来与第一线程异步且同时执行用于执行第一和第二数据处理操作的计算机程序 ; 在所述计算机可执行指令的运行时间, 基于所述处理表示来实例化 (604) 可执行任务 图 (300) , 所述任务图包括 : 第一任务对象 (302) , 其代表被配置为执行第一数据处理操作的第一计算机实现方法, 第二任务对象 (302) , 其代表被配置为执行第二数据处理操作的第二计算机实现方法, 和 数据对象 (303) , 所述数据对象代表被分配用于基于至少一个数据依赖性来存储可用 数据的存储器 (301) 的部分, 所述数据对象具有多个状态 (350) , 以促进第一任务对象与第 二任务对象之间的通信 ; 设置 (606) 所述数据对象的第一状态 ; 基于第一状态, 经由第一任务对象, 触发 (608) 利用第一线程或第二线程的第一计算机 实现方法的执行, 以便经由所述数据对象而输出可用数据到存储器 ; 在可用数据已被输出到存储器之后, 设置 (606) 所述数据对象的第二状态 ; 和 基于第二状态, 经由第二任务对象, 触发 (608) 利用第一线程或第二线程的第二计算机 实现方法的执行, 以转换可用数据。
2: 根据权利要求 1 的计算机可读存储介质 (804) , 其中所述处理 (102) 包括用于包括媒 体样本的序列的媒体内容 (406) 的编码处理 (400) , 所述序列包括多组媒体样本, 和其中期 望的输出数据包括编码的媒体数据 (408) , 以及其中为每组媒体样本实例化可执行任务图。
3: 根据权利要求 1 的计算机可读存储介质, 所述方法进一步包括 : 重复地执行以下步骤 : 设置 (606) 所述数据对象的第一状态 ; 触发 (608) 第一计算机实 现方法的执行 ; 设置 (606) 所述数据对象的第二状态 ; 和触发 (608) 第二计算机实现方法的 执行, 利用第一线程或第二线程异步且在单个时钟周期内执行的第一和第二计算机实现方 法的执行, 直至已产生期望的输出数据。
4: 根据权利要求 1 的计算机可读存储介质 (804) , 其中从包括以下的组中选择第一和第二计算机实现方法的实现方式 : 软件实现方式 ; 硬件实现方式 ; 和固件实现方式。 2
5: 根据权利要求 4 的计算机可读存储介质 (804) , 其中当第一计算机实现方法或第二 计算机实现方法或这两者包括软件实现方式时, 软件实现方式包括在运行时间实例化一个 或多个其它的可执行任务图的一组计算机可执行指令。
6: 根据权利要求 4 的计算机可读存储介质 (804) , 其中当第一和第二计算机实现方法 包括软件实现方式时, 第一任务对象定义至第一计算机程序的接口, 并且第二任务对象定 义至第二计算机程序的接口。
7: 根据权利要求 1 的计算机可读存储介质 (804) , 其中所述数据对象具有从其可接收可用数据的至少一个拥有任务对象, 并具有可用数 据可提供给其的至少一个依赖任务对象, 其中所述至少一个拥有任务对象包括第一任务对 象, 所述至少一个依赖任务对象包括第二任务对象, 以及 其中从包括以下的组中选择所述数据对象的状态 : 存储器不可用状态 (853) , 其指示所述存储器的部分未准备好从所述至少一个拥有任 务对象接收可用数据 ; 存储器可用状态 (352) , 其指示所述存储器的部分准备好从所述至少一个拥有任务对 象接收可用数据 ; 和 数据可用状态 (351) , 其指示可用数据已从所述至少一个拥有任务对象接收并准备好 被提供给所述至少一个依赖任务对象。
8: 根据权利要求 1 的计算机可读存储介质 (804) , 其中所述数据对象具有从其可接收可用数据的至少一个拥有任务对象, 并具有可用数 据可提供给其的至少一个依赖任务对象, 其中所述至少一个拥有任务对象包括第一任务对 象, 所述至少一个依赖任务对象包括第二任务对象, 其中第一任务对象具有第一任务寿命, 第二任务对象具有第二任务寿命, 并且所述数 据对象具有数据对象寿命, 以及 其中所述方法进一步包括 : 在所述计算机可执行指令的运行时间, 在第一任务寿命到期时删除第一任务对象, 在 第二任务寿命到期时删除第二任务对象, 并删除在数据对象寿命到期时删除的数据对象, 当拥有任务对象和依赖任务对象中的每一个的寿命已到期时, 所述数据对象寿命到 期。
9: 一种用于在计算环境内执行处理的方法, 所述处理包括 : 多个数据处理操作 (170) , 多个数据依赖性 (271) , 一个或多个数据依赖性与每个数据处理操作相关联, 和 通过将多个数据处理操作与多个数据依赖性相关而形成的处理表示 (200) , 所述方法包括 : 标识多个线程 (103) 中的第一线程 ; 标识所述多个线程中的第二线程 ; 标识用于存储利用第一线程或第二线程可检索的许多工作项 (361) 的一个或多个队列 (330, 340) ; 基于所述处理表示, 实例化可执行任务图 (300) , 所述任务图包括 : 多个任务对象 (302) , 每个任务对象代表被配置为执行相应的特定数据处理操作的特 3 定计算机实现方法, 多个数据对象 (303) , 每个数据对象代表被分配用于基于与至少一个任务对象相关联 的至少一个数据依赖性来存储数据的存储器 (301) 的部分, 每个数据对象具有从其可接收 可用数据的至少一个拥有任务对象, 并具有可用数据可提供给其的至少一个依赖任务对 象, 每个数据对象具有许多状态 (350) ; 设置特定数据对象的第一状态 ; 基于第一状态, 在一个或多个队列中存储第一工作项 ; 在利用特定数据对象所代表的存储器的部分中存储可用数据 ; 在存储可用数据之后, 设置特定数据对象的第二状态 ; 基于第二状态, 在一个或多个队列中存储第二工作项 ; 标识第一工作项和第二工作项的相对优先级 ; 基于相对优先级, 第一线程或第二线程从一个或多个队列之一中检索第一工作项, 第 一工作项当被检索时触发与特定数据对象的至少一个拥有任务对象相关联的特定计算机 实现方法的执行, 以产生可用数据 ; 基于相对优先级, 第一线程或第二线程从一个或多个队列之一中检索第二工作项, 第 二工作项当被检索时触发与特定数据对象的至少一个依赖任务对象相关联的特定计算机 实现方法的执行, 以转换可用数据来产生期望的输出数据 (108) , 第一线程和第二线程异步 且同时操作 ; 以及 提供期望的输出数据给所述计算环境的用户。
10: 一种用于执行处理 (102) 的计算环境 (800) , 所述处理包括 : 多个数据处理操作 (170) , 多个数据依赖性 (271) , 一个或多个数据依赖性与每个数据处理操作相关联, 和 通过将多个数据处理操作与多个数据依赖性相关而形成的处理表示 (200) , 所述计算环境包括 : 多个处理单元 (802) , 每个处理单元具有相关联的线程组 (875) , 每个线程组具有被配 置为提取工作项 (361) 的一个或多个线程 (103) , 每个工作项触发执行相应的数据处理操 作的特定计算机实现方法 (335) 的执行 ; 一个或多个计算机可读存储介质的多个部分 (506, 508) , 特定线程组内的一个或多个 线程被配置为存取所述多个部分中的特定部分 ; 多个队列 (340, 510, 511, 512, 513) , 每个队列形成在计算机可读存储介质的所述多个 部分中的一个或多个部分中, 每个队列被配置为存储多个工作项 (361) , 每个队列中的多个 工作项可利用每个线程组内的一个或多个线程独立且异步地提取 ; 和 利用多个处理器可执行的计算机程序 (804) , 以执行所述处理, 所述计算机程序执行方 法 (700) , 所述方法包括 : 基于所述处理表示, 实例化 (704) 可执行任务图 (300) , 所述任务图包括 : 多个任务对象 (302) , 每个任务对象代表被配置为执行相应的特定数据处理操作的特 定计算机实现方法 (335) , 和 多个数据对象 (303) , 每个数据对象代表被分配用于基于与至少一个任务对象相关联 的至少一个数据依赖性来存储数据的存储器 (301) 的部分, 每个数据对象具有从其可接收 4 可用数据的至少一个拥有任务对象, 并具有可用数据可提供给其的至少一个依赖任务对 象, 每个数据对象具有许多状态 (350) , 设置 (706) 特定数据对象的第一状态 (350) , 基于第一状态, 在多个队列中的每一个中存储 (708) 第一工作项, 第一工作项在多个队 列中的每一个中具有不同的优先级标识符 (830) , 第一工作项利用特定线程组基于特定优 先级标识符来提取 (710) , 第一工作项的提取触发与特定数据对象相关联的至少一个拥有 任务对象所关联的特定计算机实现方法的执行, 以产生可用数据, 在利用特定数据对象所代表的存储器的部分中存储可用数据, 在存储可用数据之后, 设置 (706) 特定数据对象的第二状态, 以及 基于第二状态, 在多个队列中的每一个中存储 (708) 第二工作项, 第二工作项在多个队 列中的每一个中具有不同的优先级标识符, 第二工作项利用特定线程组基于特定优先级标 识符来提取 (710) , 第二工作项的提取触发与特定数据对象相关联的至少一个依赖任务对 象所关联的特定计算机实现方法的执行, 以转换可用数据。

说明书


并行编程和执行系统与技术

    背景技术 以单个处理器为特征的传统的计算环境一般以串行方式执行与特定的计算机实 现处理相关联的数据处理操作, 尽管一些传统的计算环境可能支持时分复用, 其中单个处 理器在不同的操作之间足够频繁地切换, 以致用户感知这些操作在同时被执行。
     计算环境已趋向于具有多个处理单元的多处理系统。 许多类型的系统可以被视为 多处理系统, 并且多处理系统的示例包括但不限于 : 具有多个中央处理单元 (CPU) 和 / 或图 形处理单元 (GPU) 的系统 ; 具有多个核心的单或多 CPU/GPU 系统 ; 以及具有附加的硬件支持 来高效执行多个操作的单或多 CPC/GPU 系统。
     实现特定的计算机实现处理的全部或部分的计算机程序也可以被设计成多线程 的, 即, 具有多个执行的线程。执行的线程是计算机程序的一部分, 其能够与计算机程序的 另一部分同时被执行。
     朝向多处理系统的趋势和多线程计算机程序的出现、 并且尤其是其组合具有增加 许多计算机实现处理的性能和效率的潜力。为了实现这样的性能和效率提高, 特别地设计 多线程的计算机程序是所希望的。
     发明内容 在这里描述并行编程创作和执行系统, 其提供模型和技术来解决在单或多处理单 元计算环境中设计执行特定的计算机实现处理的至少一部分的多线程计算机程序的各种 挑战。在这里使用术语处理单元来指示任何的 CPU、 GPU、 核心、 硬件线程或其它的已知的或 以后开发的处理构造。 在这里使用术语线程来指示被配置为支持多个操作的同时执行的任 何的软件或处理单元或其安排。
     根据利用在这里描述的系统实现的一种示例技术的各方面, 通过将复杂处理的许 多数据处理操作与这些数据处理操作之间的数据依赖性相关联来表示该复杂处理。 基于处 理表示, 创建可执行的任务图。 该任务图包括许多任务对象和许多数据对象。 每个任务对象 代表 (经由硬件、 软件、 固件或其组合) 执行特定的数据处理操作的特定的相应计算机实现 功能。每个数据对象代表存储器中被分配用于基于至少一个数据依赖性存储数据的部分。
     一般, 特定的任务对象具有一个或多个数据对象输入和一个或多个数据对象输 出。同样地, 特定的数据对象具有从其可接收可用数据的至少一个 “拥有 (owning) ” 任务对 象 (并且实际上可以限于只有一个拥有任务) , 并具有可提供可用数据给其的至少一个 “依 赖 (dependent) ” 任务对象, 除了当该数据对象是最终的输出数据项的时候之外, 通常可以 对其采用不同的接口机制。特定的数据对象也具有被设置的若干状态。
     在任务图的执行期间, 执行特定的数据处理操作的特定的计算机实现功能在与其 相应的任务对象相关联的所有数据对象输入具有指示数据是可使用的状态时变为准备好 执行。在与每个任务对象相关联的数据对象输入和数据对象输出的状态被更新时, 任务图 的执行继续, 从而触发执行相应的数据处理操作的计算机实现方法的执行, 直到已获得该 处理的期望的输出数据为止。
     根据利用在这里描述的系统实现的另一种示例技术的各方面, 计算机实现功能 / 数据处理操作被调度, 以便根据某些调度规则执行。一般而言, 计算机实现功能 / 数据处理 操作被调度, 以便通过将与其相应的任务对象相关联的工作项放入一个或多个队列中来执 行。这些工作项具有基于任务对象的优先级 (在一个示例中, 在任务对象的创建时间, 确定 优先级) 。基于优先级, 与其它线程协力、 独立且同时操作的可用线程提取工作项, 并引起执 行该数据处理操作的计算机实现功能的执行。
     在一个示例调度情况中, 一组线程被绑定到处理单元 (例如, 一组核心或特定 GPU) 并且本地共享主队列和高速缓存 / 存储器层级中相同的高速缓存。当特定的工作项被放置 在特定的主队列上时, 该工作项的链接拷贝也被放置在与其他组 / 处理单元相关联的其它 队列 (被称为 “次” 队列) 中的每一个上, 其中每个工作项具有不同的相对优先级 (例如, 相对 于相关联的任务对象的原始优先级) 。通常, 主队列中的工作项具有比一个或多个次队列中 的相同工作项更高的优先级, 这允许次队列中的工作项在主队列中的线程组太落后的情况 下用作 “救助 (bailout) ” 。一旦工作项被执行, 它就从主队列和次队列中被移除。以这种 方式, 在处理单元级内和处理单元级间两者上, 调度是灵活的并且容易配置用于期望的负 载平衡和 / 或线程关联度 (affinity) 要求。 提供这个发明内容部分来以简化形式介绍概念的选择。 这些概念在具体实施方式 部分中进一步进行描述。除了在这个发明内容部分中描述的元素或步骤之外的其他元素 或步骤是有可能的, 并且没有元素或步骤是一定需要的。这个发明内容部分并不打算标识 所请求保护的主题的关键特征或基本特征, 也不打算用作帮助确定所请求保护的主题的范 围。 所请求保护的主题不限于解决在这个文献的任何部分中指明的任何或所有缺点的实现 方式。
     附图说明
     图 1 是示例多处理计算环境的简化功能框图, 其中利用该示例多处理计算环境, 并行编程创作和执行系统 (Parallel Programming Authoring and Execution System) ( “PPAES” ) 可以被实现或用于促进特定的计算机实现处理的执行。
     图 2 是图 1 中所示的处理的示例的部分处理表示。
     图 3 是基于图 2 中所示的处理表示而生成的示例的部分任务图。
     图 4 是与执行示例的次视频编码处理相关生成的示例任务图。
     图 5 是图 1 中所示的示例多处理计算环境的一种可能的实现方式的简化功能框 图。
     图 6 是用于使用图 1 中所示的 PPAES 的各方面来执行计算机实现处理的一种示例 方法的流程图。
     图 7 是用于使用图 1 中所示的 PPAES 的各方面来执行计算机实现处理的另一示例 方法的流程图。
     图 8 是示例操作环境的简化功能框图, 其中图 1 中所示的 PPAES 与多处理计算环 境的各方面和 / 或图 6 与 7 中所示的方法可以被实现或被使用。 具体实施方式在这里论述的并行编程创作和执行系统 ( “PPAES” ) 与技术促进在诸如多处理计算 环境之类的各种计算环境中计算机实现处理的执行。 基于处理表示的可执行任务图被创建 并被用于将处理分解为具有利用数据对象作为接口设置的适当依赖性的并行化的任务。 调 度技术以可伸缩方式在诸如 CPU 核心和 GPU 单元之类的一类处理单元之间、 在任务图的执 行期间提供线程关联度和 / 或自动负载平衡管理。
     这些技术以示例方式被应用于数字媒体编码处理。 虽然为了示例目的而论述媒体 处理活动, 但是将意识到 : 在这里论述的技术可以应用于任何的能够被分解为若干相对可 预测功能的处理。
     转向其中相似的数字指定相似的组件的附图, 图 1 是多处理计算环境 100 的某些 方面的简化功能框图。 环境 100 包括 PPAES, 其可以被实现或被使用来促进通过创建和执行 任务图和 / 或其组件 (在下面结合图 3 来论述任务图 300) 的特定的计算机实现处理 102 的 执行和某些调度技术 (在下面结合图 5 和 7 来论述调度技术) 的实现。
     处理 102 转换某些源数据 106, 以产生期望的输出 108。在示例实现方式中, 处理 102 是数字媒体编码处理, 但是将意识到 : 处理 102 可以是任何的能够被分解为若干相对可 预测功能的处理。如所示的, 处理 102 包括数据处理操作 170, 其经由线程 103 而被执行。 数据处理操作 170 代表经由环境 100 的内部或外部的硬件、 软件、 固件或其任何组合而可执 行的任何操作。在这里使用术语线程来指示被配置为支持多个操作的同时执行、 例如提取 和 / 或触发执行数据处理操作 170 的计算机实现功能的执行的任何的软件线程或处理单元 或其安排。软件线程是计算机程序的执行的线程-计算机程序的一部分, 其能够与计算机 程序的另一部分同时执行。处理单元指的是任何的中央处理单元 ( “CPU” ) 、 图形处理单元 ( “GPU” ) 、 任何 CPU 或 GPU 的任何核心、 任何硬件线程或任何其它的现在已知的或以后开发 的处理构造。
     继续参照图 1, 图 2 是处理 102 的部分的示例处理表示 200, 其相关数据处理操作 170 与数据依赖性 271。如所示的, 表示 200 采用数据流程图的形式, 这是与处理 102 相结 合执行的各种数据处理操作 170 以及代表流入或流出这些数据处理操作的数据 (进入这些 数据处理操作和 / 或离开这些数据处理操作的箭头) 的其之间的数据依赖链接 271 的图形 表示。虽然处理表示 200 被显示为数据流程图, 但是处理表示可以通过相关数据处理操作 与数据依赖性、 以任何已知的或以后开发的方式来形成, 并且可以采用任何期望的形式。
     继续参照图 1 和 2, 图 3 是基于图 2 中所示的处理表示 200 的示例的部分的任务 图 300。通常, 任务图 300 按照 PPAES 101(在下面结合图 5 进一步论述) 的一个或多个方 面来生成, 并利用一组或多组计算机可执行指令来实现, 其中计算机可执行指令当由具有 一个或多个处理器的计算系统执行时促进利用处理表示 200 所代表的处理 102 的执行。因 而, 在一种可能的实现方式中, 任务图 300 利用其链接来说明若干运行时间对象。利用任务 图提供的责任的清晰且自然的边界增进面向对象的设计。
     如所示的, 任务图 300 包括若干任务对象 302 和若干数据对象 303(数据对象 303 利用圆边缘来说明) 。可用数据 371 被显示为移动穿过任务图 300。应当注意 : 图 3 中所示 的任务对象编号方案不一定暗示特定的执行顺序, 并且流入或流出特定的数据对象 303 和 / 或任务对象 302 的可用数据 371 在不同的处理中可以表示不同事情的意思。例如, 发散 流能够意味着 : 正在发送可用数据的复制拷贝, 或复杂数据集正被分为更多个基本数据项,或具有不同值的项正被分开。 汇聚流能够指示 : 若干基本数据项被结合在一起, 以形成更复 杂的数据集, 或来自不同源的输入数据被操作。也应当注意 : 在输入至特定的任务对象和 / 或数据对象的可用数据 371 与从特定的任务对象和 / 或数据对象输出的可用数据 371 之间 可能不具有一对一比率。
     与处理表示 200 相关, 每个任务对象 302 代表特定的相应 (通常, 异步的) 计算机实 现功能 330, 其执行特定的数据处理操作 170。特定的计算机实现功能 330 可以利用负责执 行任务图 300 的计算系统的内部或外部的硬件、 软件、 固件或其任何组合来执行。在一种可 能的实现方式中, 特定的任务对象是至被配置为引起基于经由任务对象提供的信息的相应 的计算机实现功能的执行的计算机程序的接口。被称为 “源任务” (未示出) 的某些任务能 够产生其它的任务图, 并且源任务也负责管理长期数据对象 (在下面进一步讨论) , 因为源 任务知道对于将来的服务是否需要长期数据对象。
     与可执行的任务图 300 相关, 任务对象 302 可以利用诸如服务之类的任务管理器 引擎 (未示出) 作为 PPAES 101 的一部分来创建和 / 或管理。每个任务对象 302 代表对其输 入数据对象起作用并在其输出数据对象中产生结果的操作。特定的任务对象 302 可以具有 一个或多个数据对象作为输入以及一个或多个数据对象 303 作为输出。任务对象通常在生 成特定的任务图 300 时 (从堆 (heap) 中) 创建, 生存在任务图上, 并在相应的计算机实现功 能 330 已完成其特定的数据处理操作 170 的执行之后 (或在源任务的情况下, 在已生成子任 务图之后) 被删除。因此, 任务对象 302 具有到期的寿命 (未示出) (在下面结合示例的 “线 程操作循环” 来进一步论述任务对象的删除) 。
     当创建任务对象时, 该任务对象具有分配给它的优先级标识符 ( “优先级 id” ) (在 图 8 中显示优先级 id 830) 。通常, 优先级 id 具有跨越利用处理 102 操作的源数据 106 的 整体的范围 (例如, 如下面结合图 4 所论述的, 源数据 106 可以是由媒体样本的序列组成的 媒体内容) , 以确保与该处理的执行相关而执行的多个任务图之间任务的适当的优先化。将 意识到 : 任务对象优先级 id 可以运行相对于期望的输出的产生、 性能反馈或其它因素的相 对优先级。
     下面的伪代码定义示例的任务对象模式, 其中 “DB” 指 “数据对象” :Base Class for Task: enum DBStatus { MU, MA,DA} class Task { // 当 m_iNumUnavailInputDB 和 m_iNumUnavailOutputDB 两者 = = 0 时 , 任务转到 ReadyQ // 当 m_iNumUnavailInputDB = = 0 和 m_iNumUnavailOutputDB!= 0 时 , 任务转到 memWQ Int m_iNumUnavailInputDB; // 输入的数量, 其中 DBStatus!= DA // 如果所有其 input_DB 处于 DA 状态中, 任务对象变为准备好执行 ; 取决于变为可运行所需的其它资源, 诸如对于 output_DB 从存储器不可用状态变为存储器可用状态的存储器要求, 准备好的任务对象可能不是立即可运行的。准备好但不是可运行的工作项 / 任务对象以优先级顺序被 放置在停置队列中 ; 它以后在所需的资源由于从另一对象释放的结果而变为可用于它时而 变为可运行的。Int m_iNumUnavailOutputDB; // 输出的数量, 其中 DBStatus = = MU Int64 m_iSchedulePriority; // 确定由调度规则 / 任务操作管理器使用的序列-范 围优先级 Int m_iThreadGroup; // 确定这个任务应被绑定哪个线程组 Input_DB_list; Output_DB_list; // 所有的输入数据对象的列表 ; 所有的输出数据 对象的列表 virtual Execute(); // 期望 Execute() 虚拟函数被导出类超越, 以实现特定的计算 机实现功能 / 数据处理操作。 Execute() 使用 Input_DB_list 作为输入, 并使用 Output_DB_ list 作为输出 } 。 再次参照图 3, 可以利用诸如服务之类的数据对象管理器引擎 (未示出) 作为 PPAES 101 的一部分来创建和 / 或管理数据对象 303。每个数据对象 303 代表被分配用于基于至 少一个数据依赖性 271 来存储数据的存储器的部分━ “底层存储块” ( “UMB” ) 201, 其可以利 用别名 207 来标识。使用别名 207, 一个 UMB 一次可以与多个数据块相关联, 并且可以维持 代表对于特定 UMB 使用别名的数据块的数量的 “别名计数” (当别名计数达到零时, UMB 可 以被删除, 即, 变为可用于其他目的) 。在特定的任务对象具有对于相同的 UMB 使用别名的 输入数据块和输出数据块时, 当就地操作 (in-place operation) 是优选的时, 或在其中多 个分段正分享相同的 UMB 的分段的情况下, 使用别名能够是有用的。分段可以用于将底层 UMB 划分为较小分段, 用于更细的颗粒任务。 通常, 数据对象在堆上进行创建, 并生存在任务 图上, 例外是长期数据对象, 其可以另外生存在指向长期数据对象的全局阵列的指针上。
     特定的数据对象 303 具有从其可接收可用数据 371 的至少一个 (并且可能期望仅 有一个) “拥有” 任务对象以及可用数据 371 可提供给其的至少一个 “依赖” 任务对象, (除 了当它是最后的输出对象之一时之外, 在这种情况中可以采用不同的接口机制) 。拥有任务 可以拥有不止一个数据对象, 例如短期数据对象和长期数据对象。 通常, 特定的数据对象维 持具有数据对象作为输入的任务对象的列表。流入特定的数据对象 303 的可用数据 371 可 以被描述为被放入特定 UMB 201 中的新信息, 其可以是除了该 UMB 内的现有信息的全部或 部分之外附加的信息, 或作为该 UMB 内的现有信息的全部或部分的替代或修改。
     每个数据对象具有若干状态 350。虽然将意识到 : 更多、 更少或不同的状态是有 可能的, 但是如下定义三个示例状态 : 存储器不可用状态 351, 其指示利用特定的数据对象 303 所代表的存储器的部分没有准备好从拥有任务对象接收可用数据 371 ; 存储器可用状 态 352, 其指示利用特定的数据对象 303 所代表的存储器的部分准备好从拥有任务对象接 收可用数据 371 ; 和数据可用状态 353, 其指示可用数据 371 已从拥有任务对象中接收并准 备好被提供给依赖任务对象。
     数据对象利用服务来创建和删除, 其中所述服务可以是类似于堆管理器的服务。 数据对象具有在满足某些条件时到期的寿命 (未示出) 。通常, 在建立任务图的时候, 利用一
     定大小并利用存储不可用的状态来创建数据对象。存储器不可用状态阻碍拥有任务运行, 直到该状态被改变为存储器可用为止。任务图可以在其拥有任务对象准备好执行时被创 建, 并在其相关联的叠压数据对象已服务于其目的 (包括可能的长期目的) 时被删除。在删 除时间, 释放与该数据对象相关联的 UMB。在一种情形下, 通过将一个或多个数据对象的状 态改变为存储器可用状态, 需要存储器资源的一个或多个数据块可以被标识, 并且释放的 存储器被分配给这一个或多个数据块。
     数据块可以维持在到期 (例如, 被删除) 之前它需要服务的目的的数量的记录 (出 于示例目的, 被称为 “目的计数器” ) 。当目的被服务时, 目的计数器被递减。长期数据对象 可以具有至具有全局范围的阵列或其它数据结构的链接。至全局范围数据结构的连接 (其 可以在任务图被设立并在确定特定的数据对象已完成用作长期数据对象之后被以后的任 务图的同一设立移除时建立) 用作对于特定的数据对象的目的计数器中的一个计数。
     以下的伪代码定义示例的数据对象模式, 其中 “DB” 指 “数据对象” :Base Class for DataObject: Class UMB { Void * m_pData; Int iSize; Int m_iAliasCount; // 在物理存储器中保持别名计数 } class DataObject { DBStatus m_eDBStatus; Int m_iRefCount; // ref_count = 出入这个 DB 的边缘的数量 Dependent_task_list; Task * m_pOwningTask; UMB * m_pUMB; }。 再次参照图 3, 一旦在运行时间已实例化用于特定任务图 300 的所有的任务对象 302 和数据对象 303, 该任务图就被执行, 以产生期望的输出 108。特别地, 当利用相应的任 务对象 302 所代表 (执行特定的数据处理操作 170) 的计算机实现功能被认为准备好被执行 时, 与该任务对象相关联的工作项 361(被描绘为与任务对象 1 相关联的工作项 “T1” ) 根据 该任务对象的优先级被放置在一个或多个队列 330、 340(下面进一步论述) 上并利用可用 线程 103 来提取。利用可用线程 103 的工作项的提取导致利用提取线程的被配置为引起执 行数据处理操作的计算机实现功能的执行的计算机程序 (任务对象可以是到该计算机程序 的接口) 的执行。下面是示例的线程操作循环的伪代码形式的描述, 其中示例的线程操作循 环可以利用线程执行引擎作为 PPAES 101 的一部分来实现和 / 或管理 :
     获取下一工作项 通过调用在任务对象中涉及的 Execute() 例程, 执行工作项 在完成工作项之后, 清除任务对象 对于每个输入数据对象, 递减其目的计数, 并在目的计数达到零时将它删除 对于每个输出数据对象 递减其目的计数 (注意 : 如果具有利用它作为输入数据对象的其它任务对象, 则目的计 数不能为零)将其状态标记为可用于不阻塞依赖于它的其它任务对象的数据 对于利用这个数据对象作为输入数据对象的每个任务对象, 在它由于这个数据对象的 状态改变而已变成准备好时创建将被放入队列中的工作项 (根据调度规则) 删除任务对象。
     虽然清除在上面的示例线程操作循环中描述的任务对象的技术没有特别引用任 务图自身, 但是移除完成的任务对象及其相关联的数据对象的操作的确达到了逐步拆除任 务图的效果。
     在一个示例的实现方式中, 当与相应的任务对象相关联的每个输入数据对象处于 数据可用状态 353 中时, 认为计算机实现功能准备好被执行, 并创建与相应的任务对象相 关联的工作项 361。相对于工作项将在其中被执行的计算环境的可用全局资源 (例如, 存储 器) 来检查该工作项。
     当可用资源被认为少于将与任务对象相关联的所有的输出数据对象放入特定状 态中 (例如, 将输出数据对象状态从存储器不可用置于存储器可用) 所需的资源时, 根据任 务对象的优先级, 将工作项放置在停置队列 330 上。当输出数据对象全部处于存储器可用 状态中时, 或当实现其它期望的条件时, 停置队列上的工作项可以被移到运行队列 340。通 常, 诸如存储器之类的资源作为其它的不相关的对象释放存储器的结果而变为可用, 但是 可用存储器也可能由于某一外部因素而增加。由于资源变为可用, 所以可以基于其相关联 的任务对象的优先级 id 而将这些资源提供给停置队列上的工作项。
     当认为可用资源是足够的时, 用于任务对象的输出数据对象的 UMB 被提交, 输出 数据对象的状态从存储器不可用改变为存储器可用 (并且适当的全局资源水平被更新) , 并 根据任务对象的优先级 id, 将工作项放置在运行队列 340 上, 其中利用可用线程 103 来提取 它。
     继续参照图 1-3, 图 4 是与对于媒体内容 406 的特定输入序列的特定样本 (例如, 帧) 集合、 执行示例的次视频编码处理相关可使用来产生编码的媒体内容 408 的示例的可执 行任务图 400。如所示的, 任务对象 302(示出 7 个) 具有尖边缘, 而数据对象 303 具有圆边 缘。
     S0 代表原始媒体内容 (例如, 媒体样本的序列, 诸如视频帧) 。编码处理由若干数据 处理操作或数据处理阶段组成, 其中每个阶段具有相关联的任务对象 : 预编码 / 检测阶段, 任务对象 T1 ; 运动估计阶段, 任务对象 T2, 其相对于以前的源帧进行搜索, 以标识和消除在 各个图片之间存在的时间冗余 ; 运动估计细化阶段, 任务对象 T3, 其相对于以前重建的帧 进行搜索, 以便对于来自 T2 阶段的结果执行细化 ; 模式决定 / 量化阶段, 任务对象 T4 ; 环路 过滤和重建阶段, 任务对象 T7 ; 熵编码阶段, 任务对象 T5, 其中剩余部分被编码, 以便以比 特流的形式产生编码的媒体数据 408 ; 和速率控制阶段, 任务对象 T6。S1 是用于存储预编 码和图片类型检测任务的结果的缓冲器。 MVn 和 MCDn 分别是在阶段 n 运动估计之后的运动 矢量和运动补偿的失真。
     在编码情形中一般具有至少两个源任务 : 一个在帧进入点上, 用于帧类型发现的 目的 ; 另一个正好在帧类型发现之后, 用于构造帧特定的任务图。正好在预编码阶段 (预编 码任务可以被分解为固定的子任务图) 中的图片类型发现之后, 用于主任务图的设立例程 对于每一帧作为源任务被执行。基于所发现的图片类型, 创建用于图片编码的任务对象和数据对象, 并且设立用于该图片的主任务图。在帧内, 任务对象优先级 id 通常从输入朝向 输出降低 (并且在帧级上, 锚帧 (anchor frame) 应具有比随后的 B 帧更高的优先级) 。通过 将新的任务图与来自全局数据对象阵列的现有 (长期) 数据对象相联系来实例化新的任务 图, 并且准备好运行的任何任务对象的工作项被放置在适当的队列上。 逐渐地, 利用在已执 行每个工作项 / 任务对象之后执行的每线程清除例程, 任务图被拆除。在运行时间, 若干部 分 “分解的” 任务图一般将共存, 这实现帧间并行。
     长期数据对象能够跨越多个编码图片的持续时间。 至长期数据对象的连接可以在 设立任务图时建立, 并在确定数据对象已完成用作长期数据对象之后由于以后图片的相同 设立而被移除, 因而将它降级为短期数据对象。
     优 先 级 id 到 特 定 的 任 务 对 象 的 示 例 (例 如,默 认) 分 配 如 下 : m_ iSchedulePriority=m_t*MaxNumOfTasksInASample+iStagelnASample, 其中 m_t 是序列级 上的样本 (例如, 帧) 索引 ; 并且 iStageInASample 指示用于当前工作 / 项 / 任务对象的样 本内的相对阶段。这个公式确保 : 来自较早样本的工作项 / 任务对象采用比来自较晚样本 的工作项 / 任务对象更高的优先级, 并且在相同的样本内, 较早阶段的工作项 / 任务对象采 用比较晚阶段的工作项 / 任务对象更高的优先级。这个公式也允许任意定制。 继续参照图 1-4, 图 5 是诸如环境 100 和 / 或 900(如图 8 所示) 之类的示例多处 理计算环境的一种可能的实现方式的简化功能框图, 其中可以执行在这里描述的任务图, 诸如任务图 300 和 400。 基于下面描述的调度机制和技术, 有可能以可缩放方式来解决负载 平衡和线程关联度的问题, 并使得特定的多线程计算机程序能够容易适应于不同的计算环 境, 其包括多核心 CPU 和 GPGPU。一般而言, 线程关联度和负载平衡是刻度的两个极端。一 方面, 将线程绑定到特定处理单元并由此增进数据业务本地性的线程关联度能够在多个线 程上的负载在运行时间不均分布时导致差的负载平衡。另一方面, 通过禁止线程关联度并 漠视本地性能够实现完整的负载平衡。在跨越高速缓存 / 存储器层级沉重地重新分配工作 量时, 这样的实践在使空闲处理单元周期最小化的同时能够在多处理架构中导致数据业务 污染。
     在这里提出的线程组 ( “TG” ) 的概念帮助解决在多处理计算环境和 / 或多线程计 算机程序的执行中出现的线程关联度 / 负载平衡困境。如图 5 所示, 特定线程组 ( “TG” ) 被 绑定到在时常用于描述现代的多核心架构的高速缓存 / 存储器层级命名法中分享相同的 本地 L1/L2/L3 等高速缓存的特定处理单元。显示五个组, TG0 500、 TG1 501、 TG2 502、 TG3 503 和 TG4 504。如所示的, 线程组 TG0、 TG1、 TG2 和 TG3 被绑定到 4x4 核心 505(C0、 C1、 C2 和 C3) 的假设 CPU 590, 并且线程组 TG4 被绑定到 GPU 591。特定处理单元通常在相同的高 速缓存 / 存储器层级中。例如, 核心 505 的组在 L2 506 高速缓存 / 存储器层级中, 而整个 CPU 590 共享 L3 高速缓存 / 存储器层级 508。GPU 一般访问独立的高速缓存 / 存储器层级 (未示出) 。每个 TG 访问 (并且在多处理单元的情况下, 共享) 主运行队列 (在图 5 中被称为 “runQ” ) 。如所示的, TG0 访问 runQ0 510, TG1 访问 runQ1 511, TG2 访问 runQ2 512, TG3 访 问 runQ3 513, 且 TG4 访问 runQ4 514。在 TG 内, 通常没有关联度, 并且每个线程具有从其 主 runQ 提取最高优先级工作项的平等权利, 因此在 TG 内基本上达到总负载平衡。TG 被建 立在相同的本地 L1/L2/L3 高速缓存上的事实也基本上消除由于负载平衡引起的数据业务 污染的问题, 并且反而增进本地高速缓存的高效使用。
     在 TG 间工作项调度的情况中, 在其中 TG 之间的工作量没有均匀分布时, 可以在 TG 基础上应用软负载平衡 / 关联度技术。 即, 基于在整体高速缓存 / 存储器层级中期望的 L1/ L2/L3 等高速缓存本地性, 总硬件线程被分为若干 TG, 如上所述。相关联的软件线程可以进 一步被划分并被分配给每个 TG。 每个 TG 也具有 runQ, 如上所述, 组内的线程可以从该 runQ 中提取工作项来执行。当特定的任务对象 (未示出) 变为可运行的时, 基于原始任务优先级 id 分配, 它被放在与其 TG 相关联的主运行队列上作为工作项 (如所示的, 工作项 T0 524) 。 另外, (利用箭头 525 指明) 任务对象的工作项的链接拷贝被放在具有降低的相对优先级 (例 如, 相对于任务对象的原始优先级 id) 的其它 TG 的主运行队列上。其它 TG 的主运行队列 因而被视为次运行队列, 其能够在主 TG 变得太落后的情况下用作 “救助” 。相对优先级降低 量一般在次 TG 之间不均地分配。将意识到 : 原始任务对象优先级 id 和降低的相对优先级 可以运行相对于已在特定队列中的期望输出的产生、 业务信息、 性能反馈或其它因素的相 对优先级。当特定工作项的任何拷贝被任何 TG 的任何线程提取时, 工作项的所有链接拷贝 可以从如此拷贝出现在其中的所有的 runQ 中被移除。
     次运行队列中工作项的降低的相对优先级拷贝确保 : 在整个系统的负载平衡是健 康的时候, 与主运行队列相关联的 TG 的线程将具有最高机会来提取特定工作项。当系统负 载平衡使得主 TG 运行太落后时, 具有相对较轻负载的次 TG 将具有较高机会来提取工作项。 工作项的链接拷贝帮助确保这个方案的完整性。 能够看到 : 这个框架能够被扩展以包括现代 GPGPU, 以致 GPU/CPU 组间负载平衡 是有可能的。实际上, 由于 GPU 591 和 CPU 590 到 PCI-e 总线 540 之间的连接一般比系统 存储器慢得多, 所以专用的 TG 可以被分配用于每个 GPU 设备, 以利用 PCI-e 与 GPU 之间的 并行性。通常, GPU 线程与 GPU 的数量之比可以大于一, 以便充分利用 GPU/PCI-e 并行性。 由于 GPGPU 操作可以涉及在系统存储器与视频存储器之间数据的拷贝, 所以具有在数据对 象和任务对象二者中可能是期望的一些改变, 例如, 除了系统存储器的指针之外, 数据对象 类还可以包括到 GPU 存储器的指针, 并且任务对象可以具有用于 CPU 和 GPU 的不同版本的 execute()。对于在 GPU 591(例如, TG4 504) 上运行的连续任务对象, 其中中间阶段不依 靠返回拷贝到 CPU 590 的数据, 有可能跳过那些存储器拷贝以及用于那个目的的系统存储 器分配。当然, 当 TG4 504 与其它线程组之间的组间负载平衡开始时, 那些被跳过的存储器 拷贝通常将不得不利用某种可能的等待时间而再次被执行。
     继续参照图 1-5, 图 6 和 7 是使用在这里描述的系统和技术来执行诸如处理 102 之 类的处理以产生诸如期望的输出数据 108 之类的期望的输出数据的方法的流程图, 其中处 理包括诸如数据处理操作 170 之类的数据处理操作以及诸如数据依赖性 271 之类的数据处 理操作之间的数据依赖性, 并且利用诸如处理表示 200 之类的处理表示来代表。图 6 中所 示的方法对于基于处理表示来创建和执行任务图而言是有用的。图 7 中所示的方法结合调 度在执行任务图的计算系统内的处理的数据处理操作的执行以实现期望的线程关联度和 / 或负载平衡而是有用的。
     图 6 和 7 中所示的处理可以在一个或多个通用、 多用途或单用途处理器或处理单 元中进行实现。除非特别说明, 在这里描述的方法不限于特定的顺序或序列。另外, 所描述 的方法或其元素中的一些能够同时发生或被执行。
     参照图 6 的流程图中所示的方法, 该方法开始于框 600 并在框 602 继续, 在框 602
     定义诸如线程 103 之类的一个或多个线程。接下来, 在框 604, 诸如任务图 300 或 400 之类 的可执行任务图被实例化并被执行。任务图包括诸如任务对象 302 之类的任务对象以及诸 如数据对象 303 之类的数据对象。 设置数据对象的一个或多个状态, 如在框 606 上所示。 在 框 608, 基于数据对象的一个或多个状态, 所定义的线程同时且异步地提取与任务对象相关 联的工作项, 从而触发数据处理操作的执行。
     参照图 7 的流程图中所示的方法, 该方法开始于框 700 并在框 702 继续, 在框 702 在计算环境内定义 : 若干处理单元, 诸如处理单元 590 和 591 (或, 更一般地, 处理单元 902, 如图 8 中所示) ; 若干线程组 ( “TG” ) , 诸如 TG 500、 501、 502、 503 和 504, 每个 TG 与特定的处 理单元相关联 ; 高速缓存 / 存储器层级, 特定的 TG 访问特定的高速缓存 / 存储器层级 ; 以及 与每个 TG 相关联的队列, 诸如 runQ 510、 511、 512、 513 和 514。在框 704, 诸如任务图 300 之类的可执行的任务图基于处理表示而被实例化。该任务图包括诸如任务对象 302 之类的 任务对象以及诸如数据对象 303 之类的数据对象。如框 706 上所示, 特定数据对象的状态 被设置, 诸如数据可用状态 351。基于该状态, 在框 708, 诸如工作项 T1 361 或 T0 524 之类 的与任务对象相关联的工作项被存储在每个队列中。 工作项在每个队列中具有不同的相对 优先级, 诸如相对于在创建任务对象时生成的原始优先级 id 的降低优先级, 以反映整个系 统的期望的负载平衡和 / 或线程关联度。如框 710 上所示, 基于工作项的相对优先级, 由一 个 TG 从一个队列中提取工作项, 以触发数据处理操作的执行。在框 712, 工作项在它被 TG 提取之后从每个队列中被移除。
     因而, 能够明白 : 在这里论述的系统和技术高效且以可缩放方式尤其提供 : 由于 在软件线程和 / 或处理单元之间共享数据的需要而可能必须的软件线程和 / 或处理单元的 通常复杂的协调和运行时间开销 ; 由于经由系统总线和 / 或存储器共享这样的数据而导致 的业务和 / 或距离约束的管理 ; 均匀地跨越线程的处理操作的平衡 / 调度 ; 以及特定的多 线程计算机程序容易适应于不同的计算环境的能力。
     继续参照图 1-7, 图 8 是示例的操作环境 800 的简化框图, 其中 PPAES 的各方面、 多 处理计算环境和 / 或在这里讨论的方法可以被实现或被使用。操作环境 800 只是适当的操 作环境的一个示例, 并且不打算对于在这里描述的系统和方法的使用或功能的范围建议任 何限制。例如, 操作环境 800 可以是一种类型的计算机, 诸如个人计算机、 工作站、 服务器、 便携式设备、 膝上型计算机、 平板计算机或任何其它类型的电子设备, 诸如移动电话、 个人 数字助理、 媒体播放器设备 ; 机顶盒设备 ; 数字记录设备 ; 车内设备或前述的任何硬件、 软 件或固件方面。例如, 操作环境 800 也可以是分布式计算网络或服务。
     诸如总线之类的一个或多个通信媒体 820 可用于在操作环境 800 和 / 或其元件 内、 向操作环境 800 和 / 或其元件、 或从操作环境 800 和 / 或其元件传送数据、 地址、 消息、 控制信号和其它信息。一个或多个处理单元是 / 响应于计算机可读介质 804 和计算机可执 行指令 506。可以是真实的或虚拟的处理器的处理单元 802 通过执行计算机可执行指令来 控制电子设备的功能。处理单元 802 可以在装配、 汇编或机器级上执行指令, 以执行特定的 处理。这样的指令可以使用源代码或任何其它已知的计算机程序设计工具来创建。
     计算机可读介质 804 代表现在已知的或以后开发的任何形式的能够记录、 存储或 发送诸如由处理单元 802 可执行的指令之类的计算机可读数据的任何数量和组合的本地 或远程设备。具体地, 计算机可读介质 804 可以是或可以包括半导体存储器 (例如, 诸如只读存储器 ( “ROM” ) 、 任何类型的可编程 ROM( “PROM” ) 、 随机存取存储器 ( “RAM” ) 或快闪存储 器) ; 磁存储设备 (诸如软盘驱动器、 硬盘驱动器、 磁鼓、 磁带或磁光盘) ; 光学存储设备 (诸如 任何类型的紧致盘或数字多用途盘) ; 磁泡存储器 ; 高速缓存存储器 ; 核心存储器 ; 全息存储 器; 存储器棒 ; 纸带 ; 穿孔卡 ; 或其任何组合。计算可读介质 504 也可以包括传输介质和与 之相关联的数据。传输介质 / 数据的示例包括但不限于 : 以有线线路或无线传输的任何形 式体现的数据, 诸如利用调制的载波信号传送的分组的或未分组的数据。
     计算机可执行指令 806 代表电子控制数据上的预定操作的任何信号处理方法或 存储的指令。一般而言, 计算机可执行指令 806 是根据用于基于组件的软件开发的公知实 践而实现为软件组件并在计算机可读介质 (诸如计算机可读介质 804) 中编码的计算机程 序。计算机程序可以以各种方式进行组合或分布。如所示的, 可以进一步包括 (未示出) 任 务图创建和 / 或执行引擎的 PPAES 101 负责创建和执行任务图 (包括创建和删除任务对象 和数据对象) 、 工作项 / 队列和 / 或调度管理以及管理线程循环操作。与 PPAES 101 的操作 相关, 计算机可读存储介质可以存储诸如处理表示 200、 任务图 300、 数据对象 303、 任务对 象 302、 队列 330 和 340、 工作项 361、 优先级标识符 830、 线程组标识符 875、 高速缓存 / 存储 器层级标识符 871 以及调度规则 873 之类的项。
     在操作环境 800/ 计算环境 100 的上下文中描述的功能 / 组件不限于利用计算机 程序的任何特定实施例的实现方式。 相反, 功能是传递或转换数据的处理, 并且一般可以利 用硬件、 软件、 固件或其任何组合来实现或在硬件、 软件、 固件或其任何组合中执行, 位于功 能元件的任何组合, 或利用功能元件的任何组合来访问。
     一个或多个输入接口 808 提供输入给操作环境 800。输入可以使用任何类型的现 在已知的或以后开发的诸如用户接口之类的接口来收集。 输入接口的示例包括但不限于远 程控制器、 显示器、 鼠标、 笔、 刻针、 轨迹球、 键盘、 麦克风、 扫描设备以及使用输入数据的所 有类型的设备。
     一个或多个输出接口 810 从操作环境 800 提供输出。输出接口 810 的示例包括但 不限于显示器、 打印机、 扬声器、 驱动器等等。
     一个或多个通信接口 812 可用于增强操作环境 800 经由诸如信道信号、 数据信号 或计算机可读介质之类的通信媒体从另一实体接收信息或向另一实体发送信息的能力。 通 信接口 812 可以是或可以包括诸如电缆调制解调器、 数据终端设备、 媒体播放器、 数据存储 设备、 个人数字助理之类的元件或任何其它的设备或组件 / 其组合以及相关联的网络支持 设备和 / 或软件或接口。
     因此, 已描述了并行编程创作和执行系统与多处理计算环境的各个方面。 然而, 将 明白 : 不需要使用 PPAES 或计算环境的所有描述的方面, 这些方面在被使用时也不是必须 同时出现。在这里被描述为计算机程序的功能 / 组件不限于利用计算机程序的任何特定实 施例的实现方式。 相反, 功能是传递或转换数据的处理, 并且一般可以利用硬件、 软件、 固件 或其任何组合来实现或在硬件、 软件、 固件或其任何组合中执行。
     虽然在这里以特定于结构特征和 / 或方法动作的语言描述了主题, 但是也将明 白: 在权利要求中定义的主题不一定限于上述的特定特征或动作。 相反, 上述的特定特征和 动作被公开为实现这些权利要求的示例形式。
     将进一步明白 : 当一个元件被指示为响应于另一元件时, 这些元件可以直接或间接地进行耦合。在这里描述的连接实际上可以是逻辑或物理的连接, 以实现元件之间的耦 合或通信接口。 连接可以尤其被实现为软件处理之间的处理间通信或联网的计算机之间的 机器间通信。
     在这里使用词 “示例的” 来表示用作示例、 实例或例证的意思。在这里描述为 “示 例的” 任何实现方式或其方面不一定被构造为相对于其它的实现方式或其方面而是优选的 或有利的。
     如所明白的, 除了上述的特定实施例之外的实施例可以在不偏离所附的权利要求 书的精神和范围的情况下进行设计, 意图是在这里的主题的范围将利用随后的权利要求书 来决定。

并行编程和执行系统与技术.pdf_第1页
第1页 / 共27页
并行编程和执行系统与技术.pdf_第2页
第2页 / 共27页
并行编程和执行系统与技术.pdf_第3页
第3页 / 共27页
点击查看更多>>
资源描述

《并行编程和执行系统与技术.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,并且线程。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1