带有动态数量工作者的并行查询引擎的制作方法

文档序号:6354426阅读:139来源:国知局
专利名称:带有动态数量工作者的并行查询引擎的制作方法
技术领域
本发明涉及工作流技术,尤其涉及工作流管理技术。
背景技术
计算机和计算系统已经影响了现代生活的几乎每个方面。计算机通常在工作、休 闲、保健、运输、娱乐、家政管理等中都有涉猎。近来计算技术的发展包括在单个机器上使用多个处理器或核。通常,多个核可以 在同一个半导体管芯上实现,或者至少封装在同一芯片封装中。为了高效地利用多核系统, 已经开发了编程技术来在各核之间拆分计算工作。数据并行声明性编程模型使得开发者容 易构建在诸如多核机器或群集等并行系统上执行的程序。数据并行操作通常将输入序列拆 分成某一数量的分区,随后在单个工作者上处理每一分区(即,线程在单核上执行)。开发 者通过将运算符(过滤器、投影、聚集等)组合到查询中来在数据并行声明性编程模型中编 写程序。确定应该创建多少工作者常常是困难的,因为同一时刻在机器上可能正在进行其 他计算。在先前的解决方案中,中间数据并行操作结果被表示为一组分区。每一分区是可 以独立于其他分区处理的序列,并且因此不同的分区可以在不同的计算核上处理。每一查 询运算符的输入是固定数量的输入分区,并且其输出是同一固定数量的输出分区。运算符 通常用特定运算来包装每一输入分区(例如,过滤运算符将用过滤运算来包装每一分区, 映射运算符用映射运算,等等)。在该模型中,在数据并行查询评估期间,并行工作者的数量是固定的,所以可能未 最优地使用机器上的计算资源。工作者的数量默认地与机器上的处理器的数量相等。如果 处理器中的一个在发起查询时是繁忙的,则一个分区的处理会停止直到处理器变为可用。在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实 施例。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施例的一个示例性技 术领域。

发明内容
—个实施例涉及一种可以在包括多个处理核的计算环境中实践的方法。该方法 包括划分包括多个元素的序列的查询执行工作的动作。该方法包括(a)工作者核从工作 队列请求工作;(b)作为响应,工作者核从工作队列接收任务(该任务是可复制序列处理任 务,包括两个不同的步骤在调度器队列上调度任务的副本并处理序列);(C)工作者核通 过以下动作来处理任务创建任务的复制品并将任务的复制品放在工作队列上,并且开始 处理序列。对一个或多个其他工作者核重复动作(a)-(c)。对一个或多个其他工作者核的 动作(b)通过接收因不同的工作者核早先执行动作(C)而放置在任务队列上的一个或多个 任务复制品来执行。提供本发明内容是为了以简化的形式介绍将在以下具体实施方式
中进一步描述的一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨 在用于帮助确定所要求保护的主题的范围。另外的特征和优点将在以下的描述中阐述,并且部分可从该描述中显而易见,或 者可以从此处的教示实践中习得。本发明的特征和优点可以通过在所附权利要求中特别指 出的手段和组合来实现并获取。本发明的特征将从以下描述和所附权利要求书中变得完全 显而易见,或者可通过如下所述对本发明的实践而获知。


为了描述能够获得上述和其它优点和特征的方式,将通过参考附图中示出的各具 体实施例来呈现对以上简述的主题的更为具体的描述。应该理解,这些附图仅描绘了各典 型实施例,因此其不应被认为是对范围的限制,各实施例将通过使用附图用附加特征和细 节来描述并解释,在附图中图IA示出在多核系统中处理懒惰(lazy)序列;图IB示出在多核系统中处理懒惰序列;图IC示出在多核系统中处理懒惰序列;图2示出用于在多核系统中处理输入的流程图;以及图3示出处理工作序列的方法。
具体实施例方式可以实现各实施例来在动态数量的工作者核上执行数据并行查询。核是可以在任 何给定时刻运行单个线程的一个处理器硬件。它可以通过运行若干不同的线程来实现多任 务,但在任何给定时刻,只有单个线程在核上执行指令。工作者线程是在单个核上执行的程 序的顺序部分。程序可以包括可以相对于彼此并发地运行的多个线程。任务是要执行的工 作单元。要完成的任务被保存在工作队列上。在以下示例中,存在其角色是从工作队列中 拉取任务并执行它们的若干线程。查询评估以在由工作者核执行时为另一工作者核调度另一任务的单个任务开始, 并且作为该任务的一部分,第一工作者核开始执行查询。如果并且当另一核变得可用时,第 二工作者核执行另一任务并调度第三任务,并且帮助第一工作者执行查询。这可以继续直 到完成了查询或者已经调度了所有可能的工作者核。此处描述的某些实施例包括表示允许动态数量的工作者(线程或核)的中间查询 结果。可以实现一种用于将单个输入流划分成动态数量的流的方案。可以对动态数量的流 执行数据并行操作。可以实现一种用于将动态数量的流合并成单个输出流的方案。参考图1A,并且如此处所使用的,懒惰序列114是存储在计算机上的表示一序列 的子例程,其中第一次调用该子例程计算并返回该序列的第一个元素116-1,第二次调用 该子例程返回该序列的第二个元素116-2,第i次调用该子例程返回该序列的第i个元素 116-i,以此类推。如果子例程被调用并且在序列中没有更多的元素,则子例程返回特殊信 号而非值。懒惰锁定序列是受锁保护的懒惰序列,从而多个线程可以从序列中拉取元素。当 线程想要从懒惰锁定序列中移除元素时,它执行这些步骤捕获懒惰序列上的锁(如果锁由另一线程所持有,则等待直到锁被释放);调用懒惰序列子例程,并且存储所返回的元 素;释放锁。通常,对(逻辑)序列(可以被表示为懒惰序列)中的每一元素执行某一昂贵操 作是有用的。对每一元素执行昂贵操作在此处被称为“处理”该序列。实现各实施例来处 理多个线程上的序列,从而使得对不同元素的操作在不同的线程上执行。此外,各实施例可 以确保用于处理序列的线程数量基于机器多繁忙来自动地调节。现在参考图1A,示出了一个示例。图IA概括地示出多核系统102。一般而言,应 用程序104将使用调度器106来将任务(此处被概括地称为110并具体地由110加上后缀 指示符来表示)添加到工作队列108。工作队列是存储需要完成的工作单元(即,‘任务’) 的数据结构。如上所述,应用程序104可以添加任务,其中每一任务可以由处理器核,诸如 多核系统102的处理器核112-1、112-2、112-3或112-4(可以被概括地称为112并具体地 由其后缀指示符来表示)从队列中获得。当核112空闲或已经完成其他工作时,核112-1、 112-2、112-3或112-4中的每一个可以轮询队列108来寻找工作。此处的各实施例可以涉及 工作线程,其中每一工作者线程在一个计算硬件核112上运行并且不断地从工作队列108 中移除任务110并执行它们。各实施例可以实现可复制序列处理任务从而可以分配动态数量的核112来在核 112变为可用时处理序列。可复制序列处理任务是在并行硬件上处理序列114的一种有效 方式。多核系统102的硬件还可以执行其他操作。例如,某些核112可能正在处理序列114 而其他核正在执行其他工作。可复制序列处理任务用于处理由序列处理任务锁定的懒惰锁 定序列,包括两个不同的步骤(1)在调度器队列上调度本身的副本;以及O)开始从懒惰 锁定序列中移除元素并如先前结合懒惰序列子例程的所解释的来处理它们。现在示出一示例,假定第一核112-1是可用于处理序列114的唯一核。任务110_1 在工作队列上并且是用于处理懒惰序列114的可复制序列处理任务,从而它包括以下步 骤⑴在调度器队列上调度本身的副本;以及⑵开始从懒惰序列114中移除元素并处理 它们。当第一核112-1轮询工作队列108时,将会发现任务110-1。第一核112-1处理任务 110-1导致任务110-1如图IB中所示那样被复制,从而创建任务110-2。具体地,图IB示 出作为任务110-1的复制品的任务110-2,这意味着它包括以下步骤(1)在调度器队列上 调度本身的副本;以及⑵开始从懒惰序列114中移除元素并处理它们。第一核112-1处 理任务110-1还导致第一核112-1开始使用如上所述的子例程来处理序列114的元素。因 此,如果这是第一次使用子例程,则第一核112-1将开始处理元素116-1。如图IA所示,其他核112-2、112-3和112_4各自正在执行其他工作并且因此不可 用于参与到处理序列114中。然而,图IB示出第二核112-2可能完成处理其他工作,并且作 为结果轮询工作队列108来发现新的工作。第二核112-2发现可复制序列处理任务110-2, 该任务如上所述包括以下步骤⑴在调度器队列上调度本身的副本;以及⑵开始从懒惰 序列114中移除元素并处理它们。第二核112-2处理任务110-2导致创建任务110-2的复 制品,在图IC中被示为可复制序列处理任务110-3,并且第二核112-2开始处理懒惰序列 114。具体地,在第一核112-1移除了序列的最近一个元素之后,第二核112-2将开始处理 序列的下一元素。因此,如果第一核当前正在处理元素116-1,则第二核112-2将使用如上 所述的子例程,导致处理元素116-2。
如图IC所示,该过程可以在第三核112-3变为空闲时重复,并且因此处理任务 110-3导致将任务110-3的复制品添加到工作队列108并且第三核112-3开始处理懒惰序 列114上的元素。这可以继续直到所有可能的核正在处理懒惰序列和/或直到完全处理了 懒惰序列114,诸如已经处理了所有元素116并返回特殊信号。随后可以移除工作队列108 上的任何其余可复制序列处理任务从而使得可以执行来自工作队列108的其他任务。随后合并处理懒惰序列114所涉及的核112中的每一个执行工作的结果来形成最 终结果。该设计便于使用适当数量的线程来处理序列114( S卩,对序列114中的每一元素 116执行某种计算)。如果机器繁忙并且调度器中只有单个核112可用,则该核将处理整个 序列114。另一方面,如果在处理序列的同时更多的核112变为可用,则那些核112将加入 序列处理(通过从工作队列108中拾取复制品任务110中的一个)。中间查询结果被表示为可以在运行时动态地添加更多分区的经划分的集合。在典 型的工作调度器中,多个工作者核从一个或多个工作队列中拉取任务描述。值得注意的是, 可以实现其中多个工作队列108可以被相同的核集合使用来支持带有不同优先级的任务、 对任务分组以最大化局部性等的各实施例。现在使用C#代码示例来说明其他细节和示例。以下是中间查询结果的表示public interface IDynamicPartitions<T>{IEnumerator<T>GetPartition();}
public interface IDynamicPartitions<T> { IEnumerator<T> GetPartition();
}IDynamicPartitionsCD结果集合可以由动态数量的工作者核消费。为了将另一 工作者核添加到执行,调用GetPartitionO,并且所返回的IEnumeratorCD被分配为要由 该工作者核消费。这一约束对查询执行的所有部分都有影响,诸如图2所示1.划分(202) IEnumerable<T> => IDynamicPartitions<T>2.查询运算符实现(204) :IDynamicPartitions<T> => IDynamicPartitions<U>3.合并 Q06)不同的变体,一个示例是 IDynamicPartitions<T> = > IEnumerable<T>现在示出划分、查询运算符实现和合并中的每一个的更多细节。划分动作将一个序列作为输入200,例如被表示为IEnumerable<T>或T的数组。 例如,数组T可以是懒惰序列114。划分动作动态地将序列拆分成多个序列,如划分输入202 处所示。在一个简单的划分实现中,只要工作者核(例如,核112)准备好处理另一元素 (例如,元素116),它就获得锁并从输入序列中移除一个元素。由于元素是按需而非预先分 配到各分区的,因此在计算的整个过程中可以容易地添加工作者核。或者,每一次工作者需要更多工作时它可以从源中移除整个元素组块,从而降低 同步开销。例如,在较不频繁地获得锁的情况下,降低了同步开销。
查询运算符在图2的204处示出。不同的数据并行运算符也必须按照支持动态添 加的工作者核的方式来实现。例如,过滤运算208将GetPartitions ()实现为以下C#代码
权利要求
1.一种在包括多个处理器核的计算环境中划分包括多个元素的序列的查询执行工作 的方法,所述方法包括(a)工作者核从工作队列请求工作;(b)作为响应,所述工作者核从所述工作队列接收任务,所述任务是包括两个不同的步 骤的可复制序列处理任务,包括在所述调度器队列上调度所述任务的副本的子任务以及处 理序列的子任务;(c)所述工作者核通过以下动作来处理所述任务创建所述任务的复制品并将所述任务的复制品放在所述工作队列上,其中所述任务的 复制品是包括两个不同的步骤的可复制序列处理任务,包括在所述调度器队列上调度所述 任务的复制品的副本的子任务以及处理序列的子任务;以及开始处理所述序列;以及(d)对一个或多个其他工作者核重复动作(a)-(c),其中对所述一个或多个其他工作 者核的动作(b)通过接收因一个或多个不同的工作者核早先执行动作(c)而放置在所述任 务队列上的一个或多个任务复制品来执行。
2.如权利要求1所述的方法,其特征在于,开始处理所述序列包括请求并处理所述序 列中尚未由另一工作者核处理的或不是另一工作者核正在处理的单个元素。
3.如权利要求1所述的方法,其特征在于,开始处理所述序列包括请求并处理所述序 列的预定数量的元素从而降低同步开销,所述元素尚未由另一工作者核处理或不是另一工 作者核正在处理的。
4.如权利要求1所述的方法,其特征在于,所述序列是懒惰序列。
5.如权利要求1所述的方法,其特征在于,所述序列是懒惰锁定序列。
6.如权利要求1所述的方法,其特征在于,还包括合并所述工作者核处理所述序列的 结果。
7.如权利要求6所述的方法,其特征在于,合并所述结果包括按照保留序列元素的次 序的方式来合并所述结果。
8.一种在计算环境中用于划分包括多个元素的序列的查询执行工作的系统,所述系统 包括多个处理器核;耦合到所述多个处理器核的计算机存储器,其中所述计算机存储器包括在由所述多个 处理器核中的一个或多个执行时导致发生以下动作的计算机可执行指令(a)工作者核从工作队列请求工作;(b)作为响应,所述工作者核从所述工作队列接收任务,所述任务是包括两个不同的步 骤的可复制序列处理任务,包括在所述调度器队列上调度所述任务的副本的子任务以及处 理序列的子任务;(c)所述工作者核通过以下动作来处理所述任务创建所述任务的复制品并将所述任务的复制品放在所述工作队列上,其中所述任务的 复制品是包括两个不同的步骤的可复制序列处理任务,包括在所述调度器队列上调度所述 任务的复制品的副本的子任务以及处理序列的子任务;以及开始处理所述序列;以及(d)对一个或多个其他工作者核重复动作(a)-(c),其中对所述一个或多个其他工作 者核的动作(b)通过接收因一个或多个不同的工作者核早先执行动作(c)而放置在所述任 务队列上的一个或多个任务复制品来执行。
9.如权利要求8所述的系统,其特征在于,开始处理所述序列包括请求并处理所述序 列中尚未由另一工作者核处理的或不是另一工作者核正在处理的单个元素。
10.如权利要求8所述的系统,其特征在于,开始处理所述序列包括请求并处理所述序 列的预定数量的元素从而降低同步开销,所述元素尚未由另一工作者核处理或不是另一工 作者核正在处理的。
11.如权利要求8所述的系统,其特征在于,所述序列是懒惰序列。
12.如权利要求8所述的系统,其特征在于,所述序列是懒惰锁定序列。
13.如权利要求8所述的系统,其特征在于,还包括合并所述工作者核处理所述序列的 结果。
14.如权利要求13所述的系统,其特征在于,合并所述结果包括按照保留序列元素的 次序的方式来合并所述结果。
15.一种在包括多个处理器核的计算环境中的物理非瞬态计算机可读介质,所述物理 非瞬态计算机可读介质包括其上存储的在由一个或多个计算机处理器核执行时使得所述 一个或多个处理器核执行以下动作的计算机可执行指令(a)工作者核从工作队列请求工作;(b)作为响应,所述工作者核从所述工作队列接收任务,所述任务是包括两个不同的步 骤的可复制序列处理任务,包括在所述调度器队列上调度所述任务的副本的子任务以及处 理序列的子任务;(c)所述工作者核通过以下动作来处理所述任务创建所述任务的复制品并将所述任务的复制品放在所述工作队列上,其中所述任务的 复制品是包括两个不同的步骤的可复制序列处理任务,包括在所述调度器队列上调度所述 任务的复制品的副本的子任务以及处理序列的子任务;以及通过调用返回所述序列的一个或多个元素的子例程来处理所述序列的一个或多个元 素来开始处理所述序列,其中所述子例程的后续调用返回所述序列中尚未响应于调用所述 子例程返回的一个或多个接下来的逻辑元素;(d)对一个或多个其他工作者核重复动作(a)-(c),其中对所述一个或多个其他工作 者核的动作(b)通过接收因一个或多个不同的工作者核早先执行动作(c)而放置在所述任 务队列上的一个或多个任务复制品来执行,并且其中动作(c)通过所述一个或多个其他核 调用所述子例程以便接收所述序列中尚未被处理的在逻辑上接着要处理的元素来执行;以 及合并所述工作者核对所述序列的处理的结果。
16.如权利要求15所述的计算机可读介质,其特征在于,开始处理所述序列包括请求 并处理所述序列中尚未由另一工作者核处理的或不是另一工作者核正在处理的单个元素。
17.如权利要求15所述的计算机可读介质,其特征在于,开始处理所述序列包括请求 并处理所述序列的预定数量的元素从而降低同步开销,所述元素尚未由另一工作者核处理 或不是另一工作者核正在处理的。
18.如权利要求15所述的计算机可读介质,其特征在于,所述序列是懒惰序列。
19.如权利要求15所述的计算机可读介质,其特征在于,所述序列是懒惰锁定序列。
20.如权利要求15所述的计算机可读介质,其特征在于,合并所述结果包括按照保留 序列元素的次序的方式来合并所述结果。
全文摘要
本发明描述了一种带有动态数量工作者的并行查询引擎。划分包括多个元素的序列的查询执行工作。一种方法包括工作者核从工作队列请求工作。作为响应,工作者核从工作队列接收任务。该任务是可复制序列处理任务,包括两个不同的步骤在调度器队列上调度该任务的副本并处理序列。工作者核通过以下动作来处理任务创建任务的复制品并将任务的复制品放在工作队列上,并且开始处理序列。对一个或多个其他工作者核重复各动作,其中从工作队列接收任务通过接收由不同的工作者核创建任务的复制品并将任务的复制品放在工作队列上的较早执行而放置在任务队列上的一个或多个任务复制品来执行。
文档编号G06F9/46GK102135901SQ20111003738
公开日2011年7月27日 申请日期2011年1月27日 优先权日2010年1月27日
发明者I·奥斯特罗夫斯基, J·J·达菲, S·H·托布 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1