专利名称:用于并行数据的可配置划分的利记博彩app
用于并行数据的可配置划分
背景技术:
控制并行性在多线程化环境和多处理环境中得到支持。编程模型中的控制并行性 涉及对并行执行两个或更多个指令序列的支持。多线程环境通过支持并行执行两个或更多 个线程,或通过至少允许开发者在多个处理器核可用的情况下以促进线程指令序列的并行 执行的方式构造软件来例如支持控制并行性。编程模型中的数据并行性涉及对并行处理数据集中的两个或更多个部分的支持。 数据并行性因此涉及处理数据的指令中的某种形式的控制并行性。然而,控制并行性不一 定涉及任何数据并行性;例如,每一线程可能仅仅对其自己的内部变量进行操作,而不对底 层共享数据集的某一部分进行操作。例如,当图形处理器同时对四个像素进行操作时,在计 算机硬件内的较低层上发生一些形式的数据并行性。其他形式的数据并行性已在较高层上 继续进行,例如将元素数组分成被并行处理的子集。
发明内容
在一些实施方式中,数据划分接口支持并行数据的划分。数据划分实现与数据划 分接口相关联。数据分区具有在数据划分接口中未指定的但是在数据划分实现中是专用的 组织结构。例如,划分可以按照块(chunk)、条(stripe)、域(range)或另一组织结构来实 现。一些实施方式提供用于创建数据分区和用于从数据分区获得数据元素的操作。一些支 持用于促进负载平衡的动态划分。给定的示例仅仅是说明性的。本发明内容不旨在标识所要求保护的主题的关键特 征或必要特征,也不旨在用于限制所要求保护的主题的范围。相反,提供本发明内容以便以 简化形式介绍下面在具体实施方式
中进一步描述的一些概念。创新性用权利要求来界定, 且在本发明内容与权利要求冲突时,应以权利要求为准。
将参考附图来给出更具体的描述。这些图仅示出所选择的方面且因而并不完全决 定有效范围或范围。图1是示出操作环境中的计算机系统和经配置的存储介质实施方式的框图;图2是进一步示出配置有数据划分接口、至少一种数据划分实现和至少一种数据 划分的计算机系统的框图;图3是进一步示出数据划分接口的框图;图4是进一步示出数据划分实现的框图;图5是示出具有应用程序、用于处理并行数据的代码、用于划分的并行数据和处 理结果的配置的框图;以及图6是示出某种方法的步骤和经配置的存储介质实施方式的流程图。
具体实施例方式腿用于数据并行性的许多方法依赖于作为用于实现并行性的主要或唯一的机制的 数据划分。然而存在无数用于划分特定数据结构的方法。尽管用于划分数据的一般方法是 可能的,但是将以特定的方式使用的用于特定数据结构的最优划分技术可以完全取决于所 涉及的算法和数据结构。例如,如果数据结构支持随机存取,那么可以是这样的情况可以将其内容以粗 粒度划分并依赖于提供对数据的0(1)访问一即用以检索元素的恒定时间访问一的索 引器。此数据的分割对于数组和对于数据结构——例如Microsoft .NET Framework IList<T>s (Microsoft . NET 框架 I 列表 <T>s) (Microsoft Corporation (微软公司) 的商标)——可以非常有效,且甚至可以以改善空间局部性的方式来划分数据。替换地,可 以是这样的情况索引器并不真正是0(1)且存在更有效的数据访问方法。例如,考虑实现 列表接口的树,但是对于每一次访问,要求0(log η)遍历以定位所期望的节点。鉴于此遍 历成本,可以寻找替代的访问方法。对于比如树和XML文档等非线性数据结构,进行树的初始横向划分可以导致更好 的访问时间和更少的开销。粗分割可以导致更多的工作集页面。对于充满指针的密集数据 结构,局部性可以呈现为大的益处,所以用户可能希望使用更细粒度的方法来分割数据结 构内部的元素。一些问题可以受益于非常具体的数据-阻塞结构。例如,高斯消去法和JPEG解码 要求同时对输入的特定部分进行访问。这种要求改变了局部性影响算法的性能的方式,且 可能要求算法专用的数据划分技术。最坏情形可能是在通用处理架构将需要使用对其同步访问的单个线性计数 器的上下文中,数据结构缺乏对随机存取的支持。这适用于例如任何Microsoft . NET Framework IEnumerable<T> (Microsoft: . NET 框架 I 可枚举 < >),且严重地限制可扩缩性。与具体的策略无关,随着时间的过去,可以开发更好的算法,且可能希望允许它们 被插入到处理架构中并用于驱动划分。因此,对数据并行性系统的可定制部分进行划分是有帮助的。在此讨论的一些实 施方式提供对可插入划分算法的特定但深入彻底的支持。一些实施方式还在允许可插入划 分的接口中提供特定功能,例如,诸如用于确定数据元素是否可以通过顺序位置来访问的 规程、用于提供用来辅助数据划分的提示的规程和用于追踪执行挂起以促进并行数据的更 好的动态划分的规程。现在将参考例如在图中示出的那些实施方式等示例性实施方式,且在此将使用专 用的语言来描述示例性实施方式。但是,相关领域的技术人员和具有本发明内容的所有权 的人应想到的、在此所示出的特征的改变和进一步的修改和在此所示出的原理的附加应用 应被认为是在权利要求的范围内。在本发明内容中阐明术语的含义,所以应仔细留心这些阐明来阅读权利要求。给 出具体的示例,但是相关领域的技术人员将理解,其他示例还可以落在所使用的术语的含 义内且落在一个或多个权利要求的范围内。术语在这里并不必定具有它们在一般的用法 中、在特定行业的用法中或在特定字典或字典集中具有的相同含义。附图标记可以与各种措辞一起使用,以帮助示出术语的广度。从给定文本片段中省去参考数字并不必定意味着 图的内容没有被该文本所讨论。发明人主张并行使他们对其自己的词典学的权利。在此, 在具体实施方式
中和/或在申请文件中的其他地方,术语可以被显式地或隐式地定义。在此所使用的“并行数据,,是容许数据并行性的数据。并行数据集因此涉及可以 被并行处理的多个数据元素。在给定的配置中,例如,例如数组、树、或列表等数据结构可以 包括并行数据。程序常常含有非并行数据——即一般不容许数据并行性的数据——的个体 片段。含有在文字处理器中正被查看的单个文件的文件名的字符串将是示例。术语“数据” 在此包括并行数据和非并行数据两者,除非另外指出。“计算机系统”可以包括,例如一个或多个服务器、主板、处理节点、个人计算机(便 携式的或非便携式的)、个人数字助理、蜂窝式或移动电话和/或提供至少部分地由指令控 制的一个或多个处理器的设备。指令可以是以在存储器和/或专用电路中的软件的形式。 具体地,尽管可以出现许多实施方式在服务器计算机上运行的情况,但是其他实施方式可 以在其他计算设备上运行,且任何一个或多个这样的设备可以是给定实施方式的一部分。“多线程计算机系统”是支持多个执行线程的计算机系统。线程可以并行运行、顺 序运行或以并行执行(例如,多处理)和顺序执行(例如,时间分片)的组合的方式来运 行。已经以各种配置设计多线程环境。执行线程可以并行运行,或线程可以被组织为并行 执行但实际上轮流按顺序执行。可以例如通过在多处理环境中在不同的核心上运行不同的 线程、通过在单个处理器核心上将不同的线程进行时间分片、或通过时间分片和多处理器 线程化的某种组合来实现多线程。可以例如通过内核的线程调度程序、通过用户-空间信 号、或通过用户-空间和内核操作的组合来发起线程上下文切换。例如,线程可以轮流对共 享数据进行操作,或每一个线程可以对其自己的数据进行操作。“逻辑处理器”或“处理器”是单个独立硬件线程。例如,每核心运行两个线程的超 线程四核芯片具有八个逻辑处理器。处理器可以是通用的,或它们可以被定制为专用的用 途,例如图形处理、信号处理、浮点算术处理、加密、I/O处理等。“多处理器”计算机系统是具有多个逻辑处理器的计算机系统。多处理器环境以各 种配置出现。在给定的配置中,所有的处理器可以在功能上相同,然而在另一配置中,一些 处理器可以由于具有不同的硬件功能、不同的软件指派或两者而不同于其他处理器。取决 于配置,处理器可在单个总线上彼此紧密地耦合,或它们可以松散地耦合。在一些配置中, 处理器共享中央存储器,在一些配置中,它们各自具有它们自己的本地存储器,而在一些配 置中,存在共享存储器和本地存储器两者。如在此所使用的涉及数据结构的术语仅仅如它们的表达限定词那样具体。例如, 没有进一步限定,术语“列表”包括链接列表和使用数组实现的列表两者。无论何时对数据划分或其他数据结构作出参考,应理解,与简单地存在于纸上相 反,数据结构例如按程序员的意愿中或作为线上的瞬时信号来配置计算机可读存储器。操作环境参考图1,用于实施方式的操作环境100可以包括,例如计算机系统102,其可以是 多线程化的或不是多线程化的,且可以是多处理器或不是多处理器。人类用户104可以通 过使用屏幕、键盘和其他外围设备106与计算机系统102或与一实施方式中的另一计算机 系统交互。在一些实施方式中,存储设备和/或联网设备可以被认为是外围装备。本身可以是多线程的或不是多线程的且可以是多处理的或不是多处理的其他计算机系统(未示 出),可以经由例如网络接口装备使用至网络108的一条或多条连接来与计算机系统102或 与另一系统实施方式交互。计算机系统102包括至少一个逻辑处理器110。类似于其他合适的系统,计算机系 统102也包括一个或多个存储器112。存储器112可以是易失性的、非易失性的、固定在适 当的位置的、可移动的、磁的、光的和/或是其他类型的。具体地,当被插入或以其他方式被 安装时,例如CD、DVD、记忆棒或其他可移动非易失性存储器介质等经配置的介质114可以 在功能上变成计算机系统102的一部分,从而使得其内容可访问以供处理器110使用。可 移动的经配置的介质114是存储器112的示例。存储器112的其他示例包括内置式RAM、 ROM、硬盘和不能被用户104容易地移除的其他存储设备。介质114配置有可由处理器110执行的指令116。介质114还配置有通过执行指 令116来创建、修改、引用和/或以其他方式使用的数据118。指令和数据形成被设计用于 处理并行数据的代码120的部分。例如,代码120可以被应用程序122和/或被操作系统 1 调用。数据118可以包括含有并行数据130的数据结构,数据结构中的一些可以由数据 划分1 来组织,数据划分126中的每一个具有专用的组织结构128。指令116和数据118配置它们驻留在其中的存储器112/介质114 ;当该存储器是 给定计算机系统的功能部分时,指令116和数据118还配置该计算机系统。为了清晰示出, 存储器112在图1中以单个框来示出,但是应理解,存储器可以具有不同的物理类型,且在 诸图中示出的代码120、并行数据130和其他数据118、应用程序122和其他项可以部分地 或完全地驻留在一个或多个存储器112中,由此配置那些存储器。在给定的操作环境中,计算机系统102或另一计算机系统可以运行一个或多个应 用程序122,可以运行操作系统124,且可以使用现在已知的或在将来所形成的任何网络接 口装备。具体地,应用程序122可以被嵌入。并行数据130可能是现行的或可能正等待从 另一位置进行检索。上面未明确命名的其他软件和/或硬件132还可以存在于给定的配置 中。操作环境可以包括一个或多个多线程计算机系统或非多线程计算机系统。这些计 算机系统可以被群集、客户端服务器网络化和/或对等网络化。一些操作环境包括独立的 (非网络化的)计算机系统。用于一些实施方式的合适操作环境中的一些包括Microsoft .NET 环境 (Microsoft Corporation的商标)。具体地,期望一些操作环境包括目前被称为对.NET Framework (· NET框架)的并行扩展(Parallel Extensions :PFX)的软件以覆盖例如 Parallel LINQ(并行 LINQ :PLINQ)或 Task Parallel Library (任务并行库TPL)等数据 并行组件,从而允许将定制划分提供器包括在用于公共数据类型的并行扩展自身中、包括 在.NET Framework(例如用于像XML文档之类的其他数据类型)中、以及包括在终端开发 者代码中。一些合适操作环境包括Java :环境(Sun Microsystems (太阳微系统),Inc. 的商标),且一些合适操作环境包括利用例如C++或C-Siarp等语言的环境。
现在转到图1到图5,一些实施方式包括配置有数据划分接口 202和数据划分实现 204的计算机系统。在下面更详细地讨论这些组件。
一些实施方式包括经配置的计算机可读存储介质114,其是存储器112的示例。存 储器112可以包括盘(磁盘、光盘或其他),RAM,EEPROM或其他ROM和/或其他可配置存储 器。通用存储器112可以是可移动的或不可移动的且可以是易失性的或非易失性的,通用 存储器112可以被配置成使用以从可移动介质114和/或例如网络连接等另一源读出的相 应数据118和指令116的形式的组件——例如数据划分接口 202和数据划分实现204—— 的实施方式,以便由此形成经配置的存储器112的形式的经配置的介质,该经配置的存储 器能够使计算机系统以在此公开的类型不可知方式执行数据划分方法步骤并提供数据划 分能力。图1到图5因而有助于示出经配置的存储介质实施方式和方法实施方式以及系统 实施方式。在一些实施方式中,将存在可与一个或多个处理器110和存储器112操作地通信 的外围装备,例如人类用户I/O设备(屏幕、键盘、鼠标、话筒、扬声器、运动传感器等等)。 然而,实施方式还可以被深深地嵌入在系统中,以使得人类用户104不能直接地与该实施 方式交互。在一些实施方式中,例如,计算机系统中将存在使用诸如分组交换网络接口卡、无 线收发机或电话网络接口的组件来提供对网络108的访问的联网接口装备。然而,实施方 式还可以通过直接存储器存取、可移动非易失性介质或其他信息存储-检索和/或传送方 法来进行通信,或计算机系统中的实施方式可以在不与其他计算机系统通信的情况下操作。正如图2中所示出,计算机系统102可以配置有数据划分接口 202和数据划分实 现204。含有数据元素210的数据分区208还存在于所示出的配置中。数据分区208被定 义在数据划分1 中。数据划分1 可以被视为数据分区208的集合、被视为用于产生数据 分区208的集合的方案或两者,这取决于结构图或程序图是否最好地适应上下文。线程206 可以使用数据划分实现中的例程,以尝试访问给定的数据分区208的个体数据元素210。由 访问尝试返回的结果212可以包括数据元素210、状态代码或两者。正如图3所示出,数据划分接口的一些实施方式包括一个或多个“过程导引”。过 程导引可以被实现为方法签名、类型签名、过程规范、方法声明等等。过程导引提供诸如函 数或其他软件例程的名称、例程所预期的参数和值(如果例程有任何返回的话)等信息。图3示出数据划分接口 202的若干可能的过程导引300。创建划分过程导引302 定义与尝试创建其中数据元素210被指派到数据分区208的数据划分126的一个或多个例 程的接口。获得数据元素过程导引304定义与尝试从数据分区208移除数据元素210以供 处理的一个或多个例程的接口。支持次序位置过程导引310定义与尝试通过标识个体数据 元素210在数据集内部的相应次序位置来提供指示是否可访问个体数据元素210的结果的 一个或多个例程的接口。支持动态划分过程导引312定义与尝试提供指示给定的数据划分 126是否支持添加和/或移除数据分区208、和/或在将数据元素210初始指派到数据分区 208之后在数据分区208之间移除数据元素210的结果的一个或多个例程的接口。通知阻 塞进入过程导引320和匹配通知阻塞退出过程导引322定义与尝试在用于处理并行数据 130的代码120中提供工作器线程206的执行状态(阻塞的/未阻塞的)的一个或多个例 程的接口。图3还示出在数据划分接口 202内部的若干接口。可包括或传送划分辅助值308的划分辅助接口 306尝试提供用于创建数据划分126的提示或导向。获取当前分区接口 314尝试提供当前数据划分126。个体数据分区接口 316尝试提供对数据划分126中的数 据分区208的访问。获取下一数据元素接口 318尝试从数据划分中的数据分区获得数据元 素和更新用于遍历数据元素以轮流获取每一数据元素的状态变量。接口 306、314、316、318中的任一个或全部可以含有过程导引300。实际上,接口 306、314、316、318的给定实施方式可以包括变量和/或一个或多个过程导引。同样地,在一 些实施方式中,可使用变量来作为过程导引302、304、310、312、320、322的补充或替代。然 而,通过诸如Clharp或Java等语言,使数据划分接口 202保持免于关于任何特定数据划 分组织结构128的假设在一些情况下通过使用过程导引而非使用其他方法可能是最容易 实现的。图4示出实现数据划分接口 202中存在的操作的数据划分实现204的可能的过程 主体400中的一些。给定的数据划分接口 202可以具有一个以上的相应数据划分实现204, 这是因为数据划分126的组织结构1 在数据划分接口 202中是未被指定的但是在数据划 分实现204的例程中是专用的。创建划分过程主体402实现尝试创建其中数据元素210被 指派到数据分区208的数据划分126的例程。获得数据元素过程主体404实现尝试从数据 分区208移除数据元素210以供处理的例程。支持次序位置过程主体410实现尝试通过标 识个体数据元素210在数据集内部的相应次序位置来提供指示是否可以访问个体数据元 素210的结果的例程。支持动态划分过程主体412实现尝试提供指示给定数据划分1 是 否支持添加数据分区208和/或在将数据元素210初始指派到数据分区208之后在数据分 区208之间移除数据元素210的结果的例程。通知阻塞进入过程主体420和匹配通知阻塞 退出过程主体422实现常识在用于处理并行数据130的代码120中提供工作器线程206的 执行状态(阻塞的/未阻塞的)的例程。通知阻塞过程主体420、422共同作为重划分机制424的示例,通过重划分机制 424,允许线程206可以准予其他线程处理先前被指派到允许线程的数据元素210。当允许 线程例如在I/O调用上即将阻塞时或当允许线程即将被终止时,可以赋予这样的准许。图4还示出数据划分实现204内部的若干接口实现。划分辅助实现406尝试提供 用于创建数据划分126的提示或指导。获取当前分区实现414尝试提供当前的数据划分 126。个体数据分区实现416尝试提供对数据划分126中的数据分区208的访问。获取下 一数据元素实现318尝试从数据划分的数据分区获得数据元素,且如果成功的话,则更新 用于遍历数据元素以轮流获取每一个数据元素的状态变量。图5示出具有应用程序122、用于处理并行数据的代码120、用于划分的并行数据 130和处理结果212的配置。在一种实施方式中,代码120包括并行处理库,例如用于.NET 并行处理支持库的Microsoft Parallel Extensions (微软并行扩展)中的一个,例如,按 本文中的教导合适地修改的Microsoft Parallel LINQ(微软并行LINQ :PLINQ)库或Task Parallel Library (任务并行库TPL)。在所示出的配置中,用于处理并行数据的代码120 包括动态划分代码502,但是应理解,并不是所有实施方式都支持动态划分。动态划分代码 是一种类型的划分器代码504;其他类型的划分器代码504可以创建数据划分,但是这样做 而不支持动态划分。
在一些实施方式中,并行处理代码120向应用程序122询问数据分区208,然后,处理应用程序提供进程数据130,由此产生计算结果212。尽管图5清楚地示出由并行处理代 码120返回的结果212,但应理解,其他软件,尤其是应用程序122,还一般地产生计算结果。 的确,由并行处理代码120返回的结果212可以被传递到应用程序122中的例程,其将该结 果212 (或基于该结果212的另一结果)传递到应用程序120的另一部分,由此产生应用程 序122的结果部分。在一些情况下,应用程序122向代码120完全地指定将被使用的数据划分126。 在一些情况下,通过向代码120提供划分辅助值308,应用程序122把将被使用的数据划分 126部分地指定给代码120。在一些情况下,应用程序122既不提供完全划分也不提供划分 辅助值,且将使用的数据划分126的细节完全留给代码120。并不是图中示出的每一项都需要存在于每一种实施方式中。尽管在此在文本和示 图中通过特定示例示出一些可能性,但是实施方式可以偏离这些示例。举例来说,示例的具 体的特征可以被省略、被重命名、被不同地分组、被重复、被以硬件和/或软件不同地实例 化,或是示例中的两个或更多个中出现的特征的混合。在一个位置示出的功能性还可以在 一些实施方式中以不同的位置提供。方法概览图6以流程图600示出一些方法实施方式。在一个给定的实施方式中,方法的零 个或更多个所示出的步骤可以被重复,也许带有要操作的不同参数或数据。实施方式中的 步骤还可以以与图中安排的从上到下的次序不同的次序进行。各步骤可以连续地、以部分 重叠的方式或完全地并行地执行。其中流程图600被遍历以指示在方法期间执行的步骤的 次序可以在方法的一种执行和方法的另一执行之间变化。流程图遍历次序还可以在一种方 法实施方式和另一方法实施方式之间变化。步骤还可以被省略、被组合、被重命名、被再分 组或以其他方式偏离所示出的流程,只要所执行的方法是可操作的并符合至少一项权利要 求。在数据划分接口获得步骤602期间,软件开发者(或代表开发者起作用的代码) 获得数据划分接口 202。通过包括含有实现数据划分接口 202的代码的文件、通过链接这样 的文件、通过加载这样的文件、或通过用于将软件能力引入环境或引入特定程序中的任何 机制,可以完成获得步骤602。开发者被理解为特定的类型的用户104;终端用户还被认为 是用户104。在过程导引获得步骤604期间,开发者或环境获得过程导引300。过程导引获得步 骤604可以与接口获得步骤602 —致,但是还应理解,通过获得602数据划分接口 202,可以 在一些情况中由此获得604若干过程导引300。在数据划分实现关联步骤606期间,数据划分实现204与数据划分接口 202相关 联。可通过对类进行实例化、通过链接、通过设置例程的地址指针或通过用于使过程主体 400与过程导引300相关联以使得对过程导引的调用向过程主体传递控制(且在一些情况 下还可传递参数)的任何其他机制来完成关联步骤606。在过程主体关联步骤608期间,过程主体400与过程导引300相关联。给定的过 程导引300可与在系统中的不同的位置的不同过程主体400关联608。过程主体关联步骤 608可以与实现关联步骤606 —致,但是还应理解,通过关联606数据划分实现204,可以在 一些情况下由此关联608若干过程主体400。
在数据划分接口过程调用步骤610期间,数据划分接口 202中具有过程导引300 的过程被调用。调用步骤610可以使用向例程传递控制的机制来完成,且可以包括向例程 传递参数。在可以由调用步骤610引起的创建数据划分尝试步骤612期间,作出创建数据划 分1 的尝试。尝试步骤612可以包括调用数据划分实现204过程主体400,例如创建划分 过程主体402。在可以由调用步骤610引起的获得数据元素尝试步骤614期间,作出获得数据元 素210的尝试。获得哪一元素取决于数据分区208的实现和当前的内容。如果要移除特定 元素,那么可以在步骤614指定搜索准则。获得数据元素尝试步骤614返回被获得的元素 (如果元素被获得),且可以返回状态代码。尝试步骤614可以包括调用数据划分实现204 过程主体400,例如获得数据元素过程主体404。在可以由调用步骤610引起的配置支持次序位置步骤616期间,软件被配置为调 用将指示数据划分是否支持基于数据元素的次序位置访问数据元素的数据划分实现指令。 次序位置可以是相对于给定数据分区、相对于数据划分中的所有数据分区、相对于存储器 地址、或相对于一些其他基础。配置步骤616可以包括配置对数据划分实现204过程主体 400——例如支持次序位置过程主体410——的调用。在可以由调用步骤610引起的配置支持动态划分步骤618期间,软件被配置为调 用将指示数据划分是否支持动态改变的数据划分实现指令,动态改变例如数据分区的添 加、或在进行中将对不同的数据分区重新分配数据元素。配置步骤618可以包括配置对数 据划分实现204过程主体400——例如支持动态划分过程主体412——的调用。在可以由调用步骤610引起的使用获取当前分区步骤620期间,软件被配置为获 得当前的数据划分126。使用步骤620可以包括对数据划分实现204过程主体400——例 如获取当前分区实现414中的过程主体——的调用。在可以由调用步骤610引起的使用个体数据分区步骤622期间,软件被配置为 访问数据划分126中的数据分区。使用步骤622可以包括对数据划分实现204过程主体 400——例如个体数据分区实现416中的过程主体——的调用。在可以由调用步骤610引起的使用获取下一数据元素步骤拟4期间,软件被配置 为从数据划分126的数据分区获得数据元素。使用步骤6M可以包括对数据划分实现204 过程主体400——例如获取下一数据元素实现418中的过程主体——的调用。在可以由调用步骤610引起的使用通知阻塞过程步骤拟6期间,软件被配置为调 用数据划分实现指令,数据划分实现指令将帮助动态划分代码120来声明由阻塞线程206 所表示的数据块中任何尚未被处理的元素里的一些或全部并将它们供给其他线程,由此促 进负载平衡的数据划分126。使用步骤拟4可以包括对数据划分实现204过程主体400—— 例如通知阻塞过程主体420、422中的一个——的调用。在可以由调用步骤610引起的使用划分辅助接口步骤6 期间,软件可以提供例 如具有至少一个划分辅助值308的代码120,以帮助数据划分126的创建(或在一些情况 下,动态调整)。使用步骤6 可以包括对数据划分实现204过程主体400——例如划分辅 助实现406中的过程主体一的调用。在执行步骤630期间,数据划分实现204中的指令116由一个或多个处理器110执行。在定义步骤632期间,使用例如Clharp或Java等支持类的语言来定义类构造ο示例代码记住迄今所提供的关于系统、方法和操作环境的信息,下面讨论用于示例实施方 式的程序代码。实施方式不限于在此提供的程序代码,且给定的实施方式可以包括附加程 序代码、不同的程序代码、用不同的代码编程语言编写的代码、和/或偏离于所提供的示例 的其他方式。在示例代码之后回头参考示例代码继续讨论各种实施方式。示例包括三个新的接口,且使用C-Siarp作为编程语言public interface IPartitionableCollection<T>{IPartitionedCollection<T>GetInitialPartitions(int p,bool needsOrdinalPosition);bool SupportsTrackingOrdinalPositions{get ;}bool SupportsDynamicPartitioning{get ;}}public interface IPartitionedCollection<T>{IPartition<T>[]CurrentPartitions {get ;}IPartition<T>AddDynamicPartition();void RemoveDynamicPartition(IPartition<T>p);}public interface IPartition<T>{bool MoveNext(ref T elem);bool MoveNext(ref T elem, ref int index);bool TrackingOrdinalPositions{get ;}}在应用程序122内,例如,数据结构实现IPartitionableCollection<T> (I可划分集合<T>)以指示其具有定制划分算法。数据结构返回表示划分操作的 结果的IPartitionedCollectionCDd经划分集合<T>)对象;随后,所返回的 对象可以用于访问所得到的分区。如果支持动态划分——如由在查询时返回 真的SupportsDynamicPartitioning(支持动态划分)所指示的,则所返回的 IPartitionedCollection<T>对象还可以用于添加新的动态分区或移除现有分区。实现还 可以在helper(助手)类里,即它不需要由含有数据的数据结构来实现。例如,如果用户具 有数据结构GroceryShoppingList (杂货购物单),那么,GroceryShoppingList可以实现 IPartitionableCollection<T>,或者 GroceryShoppingListPartitioner (杂货购物单划 分器)可以实现 IPartitionableCollection<T> 且可被传递给GroceryShoppingList 以便 划分。注意,IPartition<T> (I 分区 <T>)非常类似于 IEnumerator<T> (I 计数器 <T>),且 事实上在合理的实现中可以是同一个,尽管此示例使用分离的接口来削减多余的接口方法 调用。举例来说,后面跟随了 Current (当前)的传统IEnumeratoKT〉. MoveNext (I计数器<T>.下移)变成了对IPartition<T>. MoveNext的单个调用。在一种变体中,调用GetFirstElement (获得第一元素)过程以获取分区的第一数 据元素,且调用GetNextElement (获得下一元素)过程以轮流获取每一个接下来的数据元ο在一个示例中,代码调用可划分集合上的GethitialPartitions (获得初始分 区),可划分集合提供经划分的集合,代码可以从该经划分的集合访问数组中的所有当前分 区。变体使用GetFirstPartition和GetNextPartition过程贯穿数据划分进行迭代。在另一变化中,代替上面所示出的公共接口而使用基类,且代替一个或多个接口 方法调用而使用单个虚拟方法调用。当代码120——例如像PLINQ或TPL的引擎——需要划分这样的含有并行数据130 的结构时,代码 120 在 IPartitionableCollection<T> 上调用 GetInitialPartitions0 该 调用传递作为参数的所期望分区数量P以及是否应跟踪次序位置的指示。所得到的经划分 的对象包含CurrentPartitions (当前分区)数组中的ρ个分区。数据分区208可以由数 量、句柄、字符串或数据划分代码所选择的其他标识符来标识。许多划分技术可以平凡地支持对次序位置的访问,但是对于那些不支持这种访问 的技术,SupportsI^rackingOrdinalPositions (支持跟踪次序位置)将返回假(意味着集 合完全不明白次序排序),且替代的策略可以用于指派索引。一种方法提供默认值,在该默 认值下,所有分区在IPartitionedCollectionCD上访问相同的共享int (整型)计数器bool MoveNext(ref T elem, ref int index){MyPartitionedCollection<T>mpc =...;if(...具有更多···){elem=···下一元素…;index = Interlocked. Increment(refmpc. m_sharedPrivateIndex);}return false ;}如果 GeWnitialPartitions 被调用且 needsOrdinalPosition (需要次序位置)为真,则可使用此默认值,然而底层集合其自己对SupportsI^rackingOrdinalPositions返 回假。
作为提供器的简单的示例,考虑对列表<T>起作用的划分提供器class PartitionabIeList<T> IParalIeIPartitionableCollection<T>{ private IList〈T>m—list ;public PartitionabIeList<T>(IList<T>list){m—list = list ;}public IPartitionedCollection<T>GetInitialPartitions ( int p,bool needsOrdinalPosition){ return new PartitionedList〈T>(m—list,p);
}public bool SupportsTrackingOrdinalPositions{get{return true ;}}public bool SupportsDynamicPartitioning{get{returnfalse ;}}class PartitionedList:IPartitionedCollection<T> {private List〈IPartition〈T>>m—parts ;internal PartitionedList(IList〈T>list,int p){int stride = list. Count/p ;m—parts = new List〈IPartition〈T>> ();for (int i = O ;i < ρ ;i++)m—parts[i] = new ListPartition〈T> (list,stride*i,Math. Min (stride* (i+1),data. Length);}public IPartition<T>[]CurrentPartitions {get {return m—parts· ToArray() ;}}public IPartition<T>AddDynamicPartition() {thrownewNotSupportedException () ;}}class ListPartition<T>: IPartition<T> {private IList〈T>m—list ;private int m—curr ;private int m—to ;internal ListPartition(IList〈T>list, int from, intto) {m—list = list ;m—curr = from ;m—to = to ;}public bool MoveNext(ref T elem,ref int index){if (m—curr < m—to) {elem = m—list[m—curr];index = m—curr ;m—curr++ ;}return true ;}public bool TrackingOrdinalPositions{get{return
true;}}}}具体地,可以对以下公共数据类型使用各种箱外(out-of-the-box)内部提供器 IList<T>、IEnumerable<T> 和数组。其他 Microsoft. NET Framework 提供器将也许变成用 于XML文档、数据集(DataSets)等等的公共数据划分提供器。采用其他数据类型的API可 以默认采用非常高效的技术,例如PLINQ的AsParallel (作为并行)、TPL的R)rEach (对每——小、绝绝I 乂 寸寸。一般地,期望由初始分区所返回的所有分区加上任何随后动态添加(经由 IPartitionedCollection<T> 的 AddDynamicPartition (添力口动态分区))当中的不变量将 是以下情形由所有分区208枚举(直到关于它们的MoveNext (下移)返回假)的所有元 素210的并将是底层集合中保持的完全数据集。同样地,期望交集将为空。这还涉及动态 的添加和移除,以使得动态地添加新的分区或移除现有分区不允许两个分区枚举器看到相 同的元素。如果原始集合含有两个相同的对象,出于此划分的目的,它们被认为是不同的元ο对于动态划分,考虑与列表有关的示例代码。在小心地选择ρ时、在致力于处理那 些P个块的工作是均勻时、以及在对代码的执行存在很少的外部的影响时,例如在正消耗 资源的相同的机器上运行的其他应用程序时,将以上元素分割成P个类似大小的块的朴素 策略(naive Strategy)可以起作用。当不是这种情况时,负载不平衡会成为问题,例如一些 分区可以远比其他分区更快地从MoveNext返回假。因此,巧妙的实现可以例如在分区208 之间共享在IPartitionedCollectionCD其自己中的状态,以便在各次迭代上得到负载平 衡。此外,如果用户发现ρ的初始大小是错误的——例如由于处理分区之后线程206 阻塞——那么支持动态添加的经划分的集合允许一些系统(例如PLINQ或TPL)添加新的 分区208。任何合适的同步技术可以用于保护数据结构中用于进行处理的部分,包括上述的 相同的负载平衡机制。在稍后的点,例如一旦上述线程解除阻塞,如果那些附加动态分区不 再被视为对于最优性能来说是必要的,那么可以移除这些附加动态分区。在一些实施方式中,动态划分代码502包括线程阻塞提示机制,包括尝试阻止工 作器线程206中的负载平衡受到工作器线程中的长期阻塞的负面影响的通知阻塞过程主 体420、422和响应划分器代码504。例如,假设特定划分器代码504已经在代码120中提供PFX运行时库,且具有被表 示为P1、P2、P3、P4的大小几乎相等的四个数据分区208。假设PFX已经开始使用这四个工 作器线程206在这些分区上执行。还假设了下列三个阶段的假定执行简档。阶段1是T = Oms到T = 50ms。假设不存在阻塞,且假设分区中的每一个都正好 得到半程处理,也就是说,在阶段1期间,每一分区中的数据元素210的一半被处理。阶段2是T = 50ms到T = 100ms。第一工作器线程做出阻塞操作系统调用(例 如,文件读操作),该阻塞操作系统调用将保持阻塞该线程50ms。其他三个工作器线程206 保持照常处理。在此阶段结束时,分区P2、P3和P4将已经被相对应的工作器线程完全处 理。
阶段3是T = IOOms到T = 150ms。现在,第一工作器线程已经被解除阻塞(即, 返回文件读调用),第一工作器线程保持处理分区P1。由于当第一工作器线程被阻塞时处 理完成了半程,因此处理将从其离开之处继续,且因此正好用了 50ms来完成分区P1,在此 示例中这又标志着并行数据的处理的完成。现在考虑在此示例中的CPU利用简档。在阶段1期间,我们在所有四个逻辑处理 器110上已经得到100%的利用率,因为所有工作器线程206都在运行。在阶段2期间,一 个线程被阻塞且三个线程保持运行,因此利用率为75%。在阶段3期间,只有一个线程具有 实际工作剩余,因此这最后IOOms期间利用率降低到25%。不平衡的原因是,当第一工作器线程206不能够做任何实际工作时,以及当它已 经将数据中的一些传递给其他线程以加速工作时,该线程时常保持对分区Pi的绝对占有。 举例来说,通过在四个线程中均勻地分割剩余的工作而不是将所有工作都留给第一线程, 阶段3可在四分之一的时间内(也就是说在12. 5ms而非50ms内)就完成最后的工作。—些实施方式在划分器代码504中提供重划分机制424,通过重划分机制424,当 允许线程进入阻塞时,例如以上示例中的第一工作器线程等线程可以允许其他线程访问允 许线程的当前分区的剩余部分。然后,其他工作器线程可以夺取或被给予允许线程的分区 208的部分以便处理。
在一种实施方式中,IPartition (I分区)接口获取两个新的方法,当PFX运行时探 测到工作器线程将要进入阻塞时和当其被解除阻塞时,PFX运行时将调用这两种新的方法。 在一种变化中,这两个方法可以合并成单个方法。该方法过程导引300可以被写成如下Interface IPartition{…void NotifyBlockingEntry ();void NotifyBlockingExitO ;}相对应的过程主体420、422可发送信号、设置标记或以其他方式向其他线程告知 当前位于被指派给即将阻塞的允许线程的数据分区中的数据元素的可用性。这些通知由数 据划分器代码504处理,以使得动态划分逻辑可以声明由此IPartition实例代表的数据 块的任何还未被处理的元素210,并将它们潜在地作为新的IPartition对象而给予其他线 程。这种共享允许只持续到从PFX作出匹配NotifyBlockingExitO (通知阻塞退出0)调 用,在此之后IPartition. MoveNext () (I分区.下移())将继续照常工作,除了以下情形之 外如果该分区208的任何元素210被分发其他线程,则在解阻之后,此分区的原主(允许 线程)将从不接收来自MoveNext ()(下移())的那些元素。
回头参考示例代码,现在继续方法、系统和经配置的介质实施方式的讨论。一些实施方式提供可以由软件开发者用于配置并行数据130的划分的方法。 方法包括获得作为一组的数据划分接口 202(例如IPartitionableCollection<T>、 IPartitionedCollection<T>和IPartition<T>)或提供相似功能性的另外某组其他接口 的步骤602。具体地,所述方法包括获得604用于调用创建数据划分1 的过程的至少一个过程导引300和获得604用于调用从由数据划分定义的数据分区208获得数据元素210的 过程的至少一个过程导引300。例如,“过程”可以被编码为函数或编码为空过程。数据划分126具有在数据划分接口 202中保留为未被指定的组织结构128。例如, 组织结构1 可以调用列表、树、或其他数据结构以容纳数据元素,且组织结构1 可以将 数据元素条、数据元素块、数据元素域、或数据元素的某一其他组织调用到分区中。但是含 有数据元素210的具体的数据结构以及用于将元素210分割成分区中的具体方法都不需要 在数据划分接口 202中指定。这些实施方式的方法还包括将数据划分接口 202与数据划分实现204关联606, 例如 PartitionableListCD (可划分列表 <T>)、PartitionedList (经划分列表)和 ListPartitionCD (列表分区<Τ>)。具体地,方法包括将实现数据划分126的创建的至少 一个过程主体400与实现从数据分区208获得数据元素210的至少一个过程主体400关联 608。数据划分126的组织结构,包括容纳数据元素的数据结构,以及用于在分区之间分割 数据元素的规则或启发,在数据划分实现204中是专用的。一些方法进一步包括配置616软件以调用数据划分实现指令,例如 IPartitionableCollection<T>. SupportsTrackingOrdinalPosition(I 可戈Ll 分集合 <T>. 支持跟踪次序位置),以指示数据划分1 是否支持基于数据元素的初始位置对数据元素 210的访问。一些方法进一步包括配置618软件以调用数据划分实现指令,例如 IPartitionableCollection<T>. SupportsDynamicPartitioning(I 可戈Ll分集合 <T>.支持 动态划分),以指示数据划分是否支持动态划分。一些方法包括配置例如动态划分代码502 等软件以调用执行动态划分以促进负载平衡的数据划分实现指令。一些方法进一步包括配置软件以使用6 划分辅助接口 306来将至少一个划分辅 助值308传送到数据划分实现指令,例如划分器代码504。划分辅助值308的一些示例包 括处理时间对数据元素分布的数量;优选的划分方案;要避免的划分方案;通过重划分机 制4M提供的阻塞的/解除阻塞的线程状态;在没有任何参数化的情况下,可能的数据元素 处理特性(每元素的固定成本、{线性地,按指数规律地}x{增加,下降}、无规律的...)的 枚举;以及处理特性的参数化描述(例如,“与X的上限和Y的下限不成规律”)。具体地,应用程序122或操作系统124中的软件可以被配置为将下列划分辅助值 中的至少一个传送到数据划分实现指令指示数据元素的处理时间与数据元素的数量如何 相关的处理时间分布值、标识特定划分方案,例如域划分、条划分或块划分,的划分方法值。一些方法包括定义632用于实现具体的数据划分组织结构,例如 ListPartition<T>,的类的构造器。一些实施方式向计算机系统102提供被组织在异类分区(例如,根据多个组织结 构128)中的并行数据130。该系统包括配置成至少有可执行指令116的至少一个存储器 112和配置成执行用于数据划分的指令的至少一部分的至少一个逻辑处理器110 ;—些系 统包括多个逻辑处理器。系统还包括数据划分接口 202,数据划分接口 202配置存储器并被设计为调用用 于创建数据划分的过程和调用用于从数据分区获得数据元素的过程。数据划分126具有在 数据划分接口中是未指定的组织结构128。
一些系统还包括单个数据划分实现204。其他系统在存储器中包括两个或更多个 数据划分实现204,然而数据划分实现204中的每一个与相同的数据划分接口 202 —致并与 之相关联。第一数据划分实现204包括实现第一数据划分126的创建的指令和实现从第一 数据划分的数据分区208获得数据元素210的指令。第一数据划分具有在第一数据划分实 现中是专用的第一组织结构128。同样地,第二数据划分实现204包括实现第二数据划分 126的创建的指令和实现从第二数据划分的数据分区208获得数据元素210的指令。第二 数据划分具有在第二数据划分实现中是专用的且还不同于第一组织结构的第二组织结构 128。例如,第一组织结构可以是成条的,而第二组织结构是成块的,但是两个数据分区都使 用相同的接口 202来创建。在一些系统中,数据划分接口 202包括支持次序位置过程导引310,例 如 IPartitionableCollection<T>. SupportsTrackingOrdinalPositions,支持次序 位置过程导引310用于调用数据划分实现204指令116,例如ListPartitionCD. TrackingOrdinalPositions ()(列表分区<T>.跟踪次序位置0),数据划分实现204指令 116指示数据划分1 是否支持基于数据元素的初始位置对数据分区208的数据元素210 的访问。在一些系统中,数据划分接口 202包括支持动态划分过程导引312,例如 IPartitionableCollection<T>. SupportsDynamicPartitioning() (I 可戈Ll分集合 <T>.支 持动态划分0),支持动态划分过程导引312用于调用数据划分实现204指令116,例如 PartitionedList. AddDynamicPartition()(经划分列表.添加动态分区0),数据划分实 现204指令116指示数据划分1 是否支持以将数据分区208添加到数据划分126中的先 前创建的数据分区组的形式的动态划分。在一些系统中,数据划分接口 202包括用于获得当前数据划分的接口定义,例 如含有获取当前分区属性的获取当前分区接口 314,例如IPartitionedCollection. CurrentPartitions[] (I经划分集合.当前分区[]))。“接口定义”可以是例如Clharp公 共接口或具有公共属性的类,或其在另一编程语言中可以是相似的构造。在一些系统中,数据划分接口 202包括用于获得当前的数据划分的接口定义,例 如含有个体数据分区属性的获取当前分区接口 316,例如IPartitionCD。在一些系统中,数据划分接口 202包括用于获得当前数据划分的接口定义, 例如含有获取下一数据元素属性的获取下一数据元素接口 318,例如IPartitionCD. MoveNext () (I分区<T>.下移())方法中的一种。经配置的介质一些实施方式提供配置有计算机数据和计算机指令(例如数据118和指令116)的 存储介质,计算机指令用于执行提供正如上面所讨论的阻塞-束缚(blocking-bounding) 语义学的方法。所配置的存储介质可以例如是存储器112,且具体地可以是可移动存储介质 114,例如CD、DVD或闪存。一些实施方式提供配置有计算机数据和用于划分数据的计算机指令的存储介质 114,该方法包括将数据划分实现与数据划分接口进行关联606,数据划分实现被设计为 实现数据划分的创建和实现从数据划分的数据分区获得数据元素,数据划分具有在数据划 分实现中是专用的且在数据划分接口中是未指定的组织结构;以及执行630数据划分实现的指令,用于创建数据划分。在一些实施方式中,所述方法包括在第一次运行应用程序时执行630数据划分 实现的指令以从数据元素的集合创建第一数据划分;以及在第二次运行应用程序时执行数 据划分实现的指令以从数据元素的集合创建第二数据划分。两个数据划分不同,因为数据 元素中的至少一个在第一数据划分中被指派到与在第二数据划分中不同的数据分区。艮口, 相同的数据可以在不同的执行运行上被不同地划分。在一些实施方式中,执行数据划分实现的指令来创建数据划分的步骤将数据元素 指派到数据分区。如果被指派到给定数据分区的数据元素的数量随后下降至预定阀值,那 么计算机指令将至少一个其他数据元素指派到给定数据分区。即,在一些实施方式中,动态 划分代码502操作用于帮助分区208在它们中间内部地进行负载平衡。具体地,如果预定 阀值为零,那么MoveNext ()将失败,且内部负载平衡将在随后把数据元素210移动到空的 分区208中。在一些实施方式中,执行数据划分实现的指令以创建数据划分的步骤将数据元素 指派到数据分区,且处理开始。具体地,从分区208获得数据元素210。随后,创建附加数据 分区208并向其指派数据元素210。即,在先前创建的分区208已处于使用中之后,新的分 区208被创建并被填充。一般地说,存在至少两个种类的动态划分(a)在现有的分区中移动数据元素,和 (b)创建新的分区和将数据元素移入它们中。当数据元素从一个数据分区被重新指派到另 一数据分区时,一些实施方式执行类型(a)动态划分。还未被指派到线程的数据元素池仍 然是数据分区208。一些实施方式执行类型(b)动态划分,且一些实施方式执行两种类型的 动态划分。在一些实施方式中,方法包括执行数据划分实现的指令以接收用于数据划分的至 少一个划分辅助值308。例如,代码120中的PFX库可以向应用程序122给出当划分数据 130时可以使用的一个或多个提示,或应用程序122可以将提示值308提供到代码120,这 取决于划分器代码504所驻留的地方。在一些实施方式中,方法包括执行指令,例如通知阻塞过程主体420、422或 实现重划分机制424的一些其他代码,通过重划分机制424,允许线程206可以准许 其他线程许可处理先前被指派到允许线程的数据元素210。在一些实施方式中,线程 阻塞提示将以数据划分接口(例如,IPartition)为目标,而不是划分器接口(例如, IPartitionableCollection),或最低限度地,阻塞提示与特定数据划分实例相关联。在一 些实施方式中,提示值308被提供用于配置特定划分器接口,例如,以便共享的库块划分器 可以很好地与比如单调递增分发一起起作用。更一般地,在图6中阐释的或以其他方式在此教导的任何方法步骤可以用于帮助 配置存储介质,以便由此形成经配置的介质实施方式。Mrk正如在此所描述,一些实施方式提供各种工具和技术以促进对数据进行划分以进 行并行处理。尽管在此清楚地将特定的实施方式阐述和描述为方法、经配置的介质或系统,但 应明白,对一种类型的实施方式的讨论还一般地扩展到其他实施方式类型。举例来说,结合图6的方法的描述还帮助描述经配置的介质以及像结合图1到图5所描述的那些系统的系 统的操作。不规定来自一种实施方式的限制必定施加于另一种。具体地,诸方法不必定限 于在讨论系统时所呈现的数据结构和排列。 贯穿全文已经通过附图标记来参考诸图。在图或文本中,在与给定附图标记关联 的措辞中的任何明显的不一致性应被理解成仅仅是拓宽了通过该标记所引用的内容的范围。
在此所使用的术语例如“一”和“所述”包含所指示的项或步骤中的一个或多个在 内。具体地,在权利要求中,对项的引用一般地意指存在至少一个这样的项,且对步骤的引 用意指执行该步骤的至少一个实例。标题仅是出于方便;可以在其标题指示主题的小节之外找到关于给定主题的信 息。所提交的所有权利要求是本说明书的部分。尽管已经在图中示出并在上面描述示例性的实施方式,但本领域普通技术人员应 明白,可以在不偏离权利要求中所阐述的原理和概念的前提下做出众多修改。尽管已经用 对结构特征特征和/或方法论动作来说专用的语言描述了本主题,但应理解,在所附权利 要求中界定的本主题不必限于上面所描述的具体特征或动作。不必在每一种实施方式中呈 现或使用在给定的定义或示例中标识的每一手段和方面。相反,在实现权利要求时,所描述 的具体特征和动作是作为供考虑的示例而公开的。在法律所允许最大范围内,在权利要求的等效物的意义和范围之内的所有改变都 被包含在它们的范围内。
权利要求
1.一种可以由软件开发者用来配置对并行数据的划分的方法,所述方法包括以下步骤获得(60 数据划分接口(20 ,S卩,获得(604)用于调用用来创建数据划分的过程的 至少一个过程导引(300)的过程,以及获得(604)用于调用用来从数据分区获得数据元素 的过程的至少一个过程导引,所述数据划分具有在所述数据划分接口中未指定的组织结构 (128);以及将数据划分实现(204)与所述数据划分接口进行关联(606),S卩,将实现数据划分 (126)的创建的至少一个过程主体(400)与实现从数据分区(208)获得数据元素QlO)的 至少一个过程主体进行关联(608),所述数据划分的组织结构在所述数据划分实现中是专 用的。
2.如权利要求1所述的方法,进一步包括下列步骤中的至少之一配置(616)软件以调用指示数据划分是否支持基于数据元素的次序位置访问所述数 据元素的数据划分实现指令(116);配置(618)软件以调用指示数据划分是否支持动态划分的数据划分实现指令(116); 配置软件以调用(610)执行动态划分以促进负载平衡的数据划分实现指令; 配置软件以将至少一个划分辅助值(308)传送给数据划分实现指令。
3.如权利要求2所述的方法,其特征在于,所述软件被配置为将下列划分辅助值(308) 中的至少之一传送给所述数据划分实现指令指示数据元素的处理时间与数据元素的数量 如何相关的处理时间分布值、标识特定划分方案的划分方法值。
4.如权利要求1所述的方法,其特征在于,所述方法包括定义(632)用于实现专用的数 据划分组织结构的类的构造器。
5.一种具有在异类分区中的并行数据的计算机系统(102),所述系统包括 至少一个存储器(112),其配置有可执行指令(116);至少一个逻辑处理器(110),其被配置为执行用于数据划分的指令的至少一部分; 数据划分接口 002),其配置存储器并被设计为调用用于创建数据划分(126)的过程 和调用用于从数据分区(208)获得数据元素O10)的过程,所述数据划分具有在所述数据 划分接口中未指定的组织结构(128);第一数据划分实现004),其配置所述存储器并与所述数据划分接口相关联,S卩,实现 第一数据划分的创建的指令和实现从所述第一数据划分的数据分区获得数据元素的指令, 所述第一数据划分具有在所述第一数据划分实现中是专用的第一组织结构;以及第二数据划分实现(204),其配置所述存储器并与所述数据划分接口相关联,即,实现 第二数据划分的创建的指令和实现从所述第二数据划分的数据分区获得数据元素的指令, 所述第二数据划分具有在所述第二数据划分实现中是专用的且不同于所述第一组织结构 的第二组织结构。
6.如权利要求5所述的系统,其特征在于,所述数据划分接口包括支持次序位置过程 导引(310),所述支持次序位置过程导引(310)用于调用指示数据划分是否支持基于数据 分区的数据元素的次序位置访问所述数据元素的数据划分实现指令。
7.如权利要求5所述的系统,其特征在于,所述数据划分接口包括支持动态划分过程 导引(312),所述支持动态划分过程导引(312)用于调用指示数据划分是否支持以下各项中的至少之一的数据划分实现指令将数据分区添加到先前在数据划分中创建的数据分区 组、从先前在数据划分中创建的数据分区组移除数据分区。
8.如权利要求5所述的系统,其特征在于,所述系统包括由接口(314)定义配置的存储 器,所述接口(314)定义提供用于获得当前数据划分的获取当前分区属性。
9.如权利要求5所述的系统,其特征在于,所述系统包括由接口(316)定义配置的存储 器,所述接口(316)定义提供用于访问数据划分的数据分区的个体数据分区属性。
10.如权利要求5所述的系统,其特征在于,所述系统包括由接口(318)定义配置的存 储器,所述接口(318)定义提供用于从数据划分的数据分区获得数据元素的获取下一数据 元素属性。
11.一种配置有计算机数据(118)和用于划分数据的计算机指令(116)的存储介质 (114),所述方法包括以下步骤将数据划分实现(204)与数据划分接口(20 进行关联(606),所述数据划分实现被 设计为实现数据划分(126)的创建和实现从所述数据划分的数据分区(208)获得数据元素 O10),所述数据划分具有在所述数据划分实现中是专用的且在所述数据划分接口中未指 定的组织结构(128);以及执行(630)所述数据划分实现的指令,用于创建数据划分。
12.如权利要求11所述的经配置的介质,其特征在于,所述方法包括在第一次运行应 用程序时执行(630)所述数据划分实现的指令以从数据元素的集合创建第一数据划分;以 及在第二次运行所述应用程序时执行(630)所述数据划分实现的指令以从所述数据元素 的集合创建第二数据划分,并且其中,所述数据划分(126)不同,因为所述数据元素中的至 少之一在所述第一数据划分中被指派到与在所述第二数据划分中不同的数据分区。
13.如权利要求11所述的经配置的存储介质,其特征在于,所述执行(630)数据划分 实现的指令来创建数据划分的步骤将数据元素指派到数据分区,其中,被指派到给定数据 分区(126)的数据元素(210)的数量下降至预定阀值,且响应于所述下降,所述计算机指令 (116)将至少一个其他数据元素指派到所述给定数据分区。
14.如权利要求11所述的经配置的存储介质,其特征在于,所述执行(630)数据划分实 现的指令来创建数据划分的步骤将数据元素指派到数据分区,并且其中,在数据元素已经 被指派到至少一个其他数据分区且已经从所述至少一个其他数据分区获得数据元素之后, 附加数据分区(208)被创建并被指派数据元素。
15.如权利要求11所述的经配置的介质,其特征在于,所述方法包括执行(630)指令, 通过所述执行(630)指令,允许线程(206)可以准许其他线程(206)来处理先前被指派到 所述允许线程的数据元素010)。
全文摘要
数据划分接口提供用于创建数据分区来并行处理数据元素以及获得要处理的数据元素而无须指定数据划分的组织结构的过程导引。与数据划分接口关联的数据划分实现提供用于实现接口过程的操作,且还可以提供用于促进负载平衡的动态划分。
文档编号G06F9/38GK102057353SQ200980121350
公开日2011年5月11日 申请日期2009年5月1日 优先权日2008年6月4日
发明者H·伊尔蒂兹, I·奥斯特罗夫斯基, J·达菲, S·托布 申请人:微软公司