专利名称:多核/线程工作组计算调度器的制作方法
技术领域:
要求保护的主题一般地涉及计算资源的分配,更具体地说,涉及用于调度多核处 理系统中的数据和任务并行负载的技术。
背景技术:
计算系统的调度可涉及针对数据并行或任务并行或这两者的某种组合构建的作 业。数据并行作业或数据并行负载是其中可由多个单元(例如但不限于处理器或处理核 心)并行操作数据的计算。此类处理的一个示例由操纵视频数据的图形处理单元(GPU)执 行,在操纵视频数据中,将位图分成区域并且可以同时操作每个区域。任务并行负载是其中 多个执行单元针对一组数据并行地独立地执行不同任务的计算。此类任务的一个示例是过 滤数据,其中一组数据通过一个过滤器并且结果通过第二过滤器。
发明内容
提供了多种技术,包括生成第一命令队列以便排队到计算设备的命令;将命令 发布到所述第一命令队列,其中所述命令包括多个工作组;将数据结构与所述命令关联,所 述数据结构标识了所述多个工作组、与所述命令对应的保留大小、存储工作组的数目的计 数器以及存储待处理工作组的数目的计数器;由多个执行单元中的每个执行单元保留所述 多个工作组的不同N维范围,其中所述N维范围对应于所述保留大小;由所述多个执行单元 中的每个执行单元处理对应的N维范围;将所述存储待处理工作组的数目的计数器递减每 个执行单元已处理的工作组的数目;重复保留、处理和递减步骤,直到所述存储待处理工作 组的数目的计数器小于或等于值“0” ;以及当所述存储待处理工作组的数目的计数器小于 或等于值“ 0 ”时,发出信号以指示所述命令完成。本概要并非旨在全面地说明要求保护的主题,而是旨在简单地概述与其相关的某 些功能。通过参考下图以及详细的说明,要求保护的主题的其他系统、方法、功能、特性以及 优点对于本领域的技术人员而言将是显而易见的或将变得显而易见。
当结合附图阅读下面对所披露的实施例的详细说明时,可以更好地理解要求保护 的主题,这些附图是图1是可以实现要求保护的主题的计算系统体系结构的一个示例;图2是图1中首先介绍的中央处理单元的示例的方块图;图3是根据要求保护的主题的可用于实现命令队列的命令描述符存储器对象的 示例;图4是示出主机、命令队列、多个处理核心以及它们之间的关系的示例的方块图;图5是示出计数器块、N维范围(NDR)命令、任务、处理核心以及它们之间的关系 的示例的方块图6是示出主机控制过程的示例的流程图;图7是示出可用于实现要求保护的主题的执行命令过程的示例的流程图;以及图8是示出实现要求保护的主题的一个方面的命令完成过程的示例的流程图。
具体实施例方式提供了多种技术,其中执行命令包含有效地执行和平衡命令(包括数据或任务并 行处理要求)的工作负载所需的信息。每个命令都包括与要执行的命令内的工作组总数、 待计算工作组数目、已处理工作组数目、一次处理的工作组数目(保留大小)、要在命令中 处理的执行线程数目以及已看到命令的执行线程数目对应的信息。执行单元处理一个或多个命令队列中的命令。执行单元可以是任何执行命令的计 算设备,包括但不限于处理核心、线程或跨网络的计算系统。每个执行单元管理所分配队列 内的当前位置。一旦可在队列上提供命令,参与执行命令的每个单元自动将命令的剩余工 作组计数器递减工作组保留大小并保留工作组范围内相应数目的工作组以便处理。一旦执 行单元执行了所请求的工作组,该单元将尝试保留更多工作组。此操作将继续,直到已处理 所有工作组。处理了所有工作组之后,每个执行单元递增已处理工作组计数器。例如,如果 特定执行单元一次处理十(10)个工作组,处理了三(3)次,然后确定已处理所有工作组,则 该执行单元将已处理工作组计数器递增三十(30)。将已处理工作组计数器递增到待执行工 作组计数器中存储的值的单元将发出命令完成信号。每个访问命令的执行单元还标记已看到工作组计数器。一旦已处理工作组计数器 等于带执行工作组计数器并且已看到工作组计数器等于执行单元数目,便可删除或覆盖命 令队列上的命令。本领域的技术人员将理解,本发明的各个方面可以体现为系统、方法或计算机程 序产品。因此,本发明的各个方面可以采取完全硬件实施例、完全软件实施例(包括固件、 驻留软件、微代码等)或同时包含在此被统称为“电路”、“模块”或“系统”的硬件和软件方 面的实施例的形式。此外,本发明的各个方面可以采取在一个或多个内合计算机可读程序 代码的计算机可读介质中体现的计算机程序产品的形式。根据要求保护的主题的一个实施例涉及用于有效地排队数据并行和任务并行作 业的程序化方法。此处所用的术语“程序化方法”被定义为目前执行的一个或多个过程步 骤;或者备选地被定义为在未来某个时刻执行的一个或多个过程步骤。术语“程序化方法” 预计了三种备选形式。第一,程序化方法包括目前执行的过程步骤。第二,程序化方法包括 承载计算机指令的计算机可读介质,所述计算机指令在被计算机执行时,将执行一个或多 个过程步骤。最后,程序化方法包括通过软件、硬件、固件或它们的任意组合进行编程以执 行一个或多个过程步骤的计算机系统。将理解,术语“程序化方法”不应被构想为同时具有 一个以上的备选形式,而是应被构想为一种备选形式,其中在任意给定时刻都只存在多个 备选形式中的一个。可以使用一个或多个计算机可读介质的任意组合。所述计算机可读介质可以是计 算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以例如是(但不限于) 电、磁、光、电磁、红外线或半导体系统、装置或设备,或者是上述各项的任意适当组合。计算 机可读存储介质的更具体的实例(非穷举列表)包括以下各项具有一条或多条连线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦写可编程只 读存储器(EPR0M或闪存)、光纤、便携式光盘只读存储器(CD-ROM)、光存储设备、磁存储设 备或上述各项的任意适当组合。在本文档的上下文中,计算机可读存储介质可以是任何可 以包含或存储由指令执行系统、装置或设备使用或与所述指令执行系统、装置或设备结合 的程序的有形介质。计算机可读信号介质可以例如包括位于基带中或作为载波一部分的其中包含计 算机可读程序代码的传播数据信号。此类传播信号可以采取各种形式中的任意形式,包括 但不限于电磁、光或它们的任意适当组合。计算机可读信号介质可以是计算机可读存储介 质以外的任何计算机可读介质,并且可以传送、传播或传输由指令执行系统、装置或设备使 用或与所述指令执行系统、装置或设备结合的程序。计算机可读介质上承载的程序代码可以使用任意适当的介质进行传输,所述介质 包括但不限于无线、有线、光缆、射频等或上述各项的任意适当组合。用于执行本发明的各个方面的操作的计算机程序代码可以通过一种或多种编程 语言的任意组合进行编写,所述编程语言包括诸如Java、Smaltalk, C++之类的面向对象的 编程语言以及诸如“C”编程语言之类的传统过程编程语言。所述程序代码可以完全地在 用户计算机上执行、部分地在用户计算机上执行、作为独立式软件包执行、部分地在用户计 算机上和部分地在远程计算机上执行,或完全地在远程计算机或服务器上执行。在后一种 情况下,所述远程计算机可以通过包括局域网(LAN)或广域网(WAN)的任意类型的网络与 用户计算机相连,也可以与外部计算机连接(例如,使用因特网服务提供商通过因特网连 接)。下面参考根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图 和/或方块图对本发明的各个方面进行了描述。应该理解,所述流程图和/或方块图中的每 个方块,以及所述流程图和/或方块图中的方块的组合可以通过计算机程序指令实现。这 些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理 器以生成机器,从而使所述指令在通过所述计算机或其他可编程数据处理装置的处理器执 行时,能够创建用于实现所述流程图和/或方块图中的一个或多个方块中指定的功能/操 作的装置。这些计算机程序指令还可以存储在可引导计算机、其他可编程数据处理装置或其 他设备按照特定方式运行的计算机可读介质中,以便存储在所述计算机可读介质中的指令 生成包括用于实现所述流程图和/或方块图中的一个或多个方块中指定的功能/操作的指 令的制品。所述计算机程序指令还可以加载到计算机、其他可编程数据处理装置或其他设备 上以使一系列操作步骤在所述计算机、其他可编程装置或其他设备上执行以生成计算机实 现的过程,以便在所述计算机或其他可编程装置上执行的指令提供用于实现所述流程图和 /或方块图中的一个或多个方块中指定的功能/操作的过程。如发明者在此认识到的,诸如Cell宽带引擎体系结构(CBEA)之类的体系结构旨 在提供灵活性,但是也存在缺点,因为调度模型并未内置于硬件中。对于作为软件功能提供 的调度而言,为了与硬件调度器竞争,性能是非常重要的问题。转到附图,图1是可以实现要求保护的主题的计算系统体系结构100的一个示例。客户机系统102包括中央处理单元(CPU) 104。CPU 104可以包括多个处理器(未示出), 每个处理器可以包括多个处理核心(参考图2)。计算领域中的技术人员应该理解CPU 104 可能具有的许多不同的配置。客户机系统102和处理器104与监视器106、键盘108以及鼠标110相连,这些元 件共同促进与计算系统100以及客户机系统102的人工交互。客户机系统102还包括与 CPU 104相连的数据存储组件112,数据存储组件112可以结合到CPU 104中,即作为内部 设备,也可以借助各种公共可用的连接设备(诸如但不限于通用串行总线(USB)端口(未 示出))从外部与CPU 104相连。数据存储装置112被示为存储操作系统114,操作系统114 控制客户机系统112、实现要求保护的主题的命令排队系统(CQS)116的实例的操作。下面 将结合图2-8更详细地说明与CQS 116关联的功能。客户机系统102和CPU 104与局域网(LAN) 102相连,局域网(LAN) 102还与服务 器计算机122相连。尽管在该示例中,CPU 104和服务器122通过LAN 102可通信地相连, 但是它们还可以通过诸如但不限于因特网(未示出)之类的任意数量的通信介质相连。此 外,应指出的是,存在许多可实现要求保护的主题的可能计算系统配置,其中计算系统100 仅是一个简单的示例。图2是图1中首先介绍的CPU 104的配置示例的方块图。CPU 104包括处理器130, 处理器130包括N个执行单元,所述N个执行单元在此示例中为处理核心,S卩,核心0131、 核心1132,依此类推直到核心N 133。处理器130的确切处理核心数并不重要,无论数量为 何,要求保护的主题都可等同地工作。应指出的是,除了可能是附加处理器的处理器130之 外,为了简单起见,仅示出一个处理器。说明书通篇使用核心131-133作为根据要求保护的 主题调度的执行单元的示例。如上所述,执行单元可以是任何执行命令的设备,其中包括但 不限于处理核心、CPU、线程,甚至完整的计算系统。处理器130与数据总线140可通信地相连,数据总线140在核心131-133和存储 器控制器142以及输入/输出(I/O)控制器146之间提供通信路径。存储器控制器142负 责控制客户机系统102(图1)的存储设备144(图1),例如数据存储装置112。I/O控制器 负责控制诸如监视器106 (图1)、键盘108 (图1)和鼠标110(图1)之类的I/O设备148。 本领域的技术人员应理解,图2是典型CPU的非常简单的图示,典型CPU将包括许多其他为 了简单而未示出的组件。图3是根据要求保护的主题的可用于实现命令队列的命令描述符存储器对 象(CDMO)的示例。CDMO 150包括标题部分152,此部分仅示出对象200的名称,即 “CommandDescriptorObject”;属性部分154,此部分包含与CDMO 150关联的存储器元素或 属性;以及方法部分156,此部分包括可以与CDMO 150结合执行的功能或方法。应指出的 是,所述属性和方法仅用于例示。可使用其他和/或不同属性和方法来实现要求保护的主 题。属性部分154包括“cdoID (命令描述符对象ID) ”属性158、“W0rkGr0up (工作组)” 属性 160、“atomicWGRemaning (剩余原子工作组)”属性 162、“atomicWGProcessed (已处理 原子工作组)”属性 164、“reservationSize (保留大小)”属性 166、“executionUnits (执 行单元),,属性168和"atomicUnitsSeen (所见原子单元),,属性170。CdoID属性158是包含对CDMO 150的特定实例的引用的⑶ObjectID类型的变量。对象150的每个实例针对属性158都具有唯一的值,从而允许唯一地标识每个实例。 WorkGroup属性160是存储CDM0150的特定实例所引用的相应命令中要计算的工作组总数 的整数类型的变量。AtomicffGRemaning属性162是存储待处理工作组的数目的整数类型的变量。在相 应命令上开始处理之前,属性162存储的值等于属性160的值。一旦在相应命令上开始处 理,属性162的值就等于尚待分配给核心进行处理的工作组数目。一旦处理完成,属性162 的值便被设为小于或等于“0”。如下面结合图7更详细地说明的,递减属性162以使属性值 小于或等于“0”的执行单元知道剩余的工作组是要针对相应命令处理的最后工作组,因此, 可能需要处理不包含工作组的不完整集合。AtomicffGProcessed属性164是存储相应命令的已完成处理的工作组数目的整数 类型变量。在相应命令上开始处理之前,属性164存储的值等于“O”或NULL。一旦处理完 成,属性164的值便等于属性160的值,指示已完成处理每个原始分配的工作组。还使用属 性164,以便递增属性164的执行单元发出已完成所有工作组的信号。应指出的是,在一个 备选实施例中,可以颠倒与属性162和164关联的功能,以便可以使用属性164发出需要继 续处理工作组的信号以及使用162确定已完成所有工作组。ReservationSize属性166是存储一次应向每个核心分配的工作组的数目的 整数类型变量。当然,当命令接近完成时,待处理工作组的数目可能小于属性166的值。 ExecutionUnits属性168是存储预期看到(即,请求工作组以便处理)特定命令的执行单 元数目的整数类型变量。AtomicUnitsSeen属性170是存储已看到命令(或者是因为特定 线程已处理与命令关联的工作组,或者是因为当线程做好处理准备时已分配所有工作组) 的执行线程的数目的整数类型变量。CDMO 150的方法部分156包括两种示例性功能或方法。为了简单起见,仅示出两 种方法。编程领域中的技术人员应该理解,诸如对象150之类的对象通常将包括许多其他 方法,其中包括但不限于constructor (构造器),destructor (取消构造器)以及设置和获 取特定属性的值的方法。例如,将在“确定集合大小”方块312和“存在剩余工作组?,,方块316期间调用 “getValues”方法172,将在下面结合图7更详细地说明这两个方块。调用方法172来检索 CDMO 150的实例中存储的属性的值。在该示例中,使用一个参数“ValueStruCture”调用 方法172,此参数是包括属性154的存储空间的CDOValueStructure类型的变量。例如,在“递增已完成工作组数”方块322调用“update⑶0”方法174,将在下面结 合图7更详细地说明此方块。调用方法174以更新相应组件的属性158、160、162、164、166、 168和170。在该示例中,使用如上所述的一个参数“ValueStruCture”调用方法174,此参 数是包括属性154的存储空间的CDOValueStructure类型的变量。应该理解,CDMO 150只是可用于实现要求保护的主题的存储器对象的一个示例。 可以使用具有更少、更多和/或不同属性和方法的其他存储器对象。此外,除了使用对象 150外,还可以使用许多其他方法实现要求保护的主题的功能和数据存储。例如,可以借助 计算机程序结合关系数据库来实现要求保护的主题。图4是示出主机202、命令队列204、核心-0210,核心-1211、核心-2212、核 心-3213的示例以及它们之间的各种关系示例的方块图。应指出的是,命令队列204是循环的。主机202可以是任何将命令发布到队列的命令执行设备(多个),所述设备包括但不限 于客户机系统102 (图1)、服务器122 (图1)、处理核心、执行线程等。核心210-213可以是 诸如核心130-133 (图2)之类的与主机202关联的处理核心。如果假设主机202为客户机 系统102,则可将命令队列204存储在与CPU 104(图1和2)关联的数据存储装置112(图 1)或易失性存储器(未示出)上。命令队列204被示为包含若干队列元素(QE),具体而言是QE_1 221、QE_2 222、 QE_3 223、QE_4 224、QE_5 225、QE_6 226、QE_7 227 和 QE_8 228。与 QE 221-228 关联的 阴影表示各种可能的状态,其中QE 221和222表示已完成的命令,QE 223-225表示当前不 需要处理但是所有执行单元无法看到的命令。QE 226-228表示命令队列204中的空的或 可用的队列空位。命令队列204内的空间229只是表示当前未处理,但是由于核心_2 212 已经过它们,因此可以被假设为已完成的其他QE。在这种情况下,核心210、211和213尚未 看到由空间229表示的QE。尽管相对于与空间229关联的QE完成了处理,但是在被核心 210、211和213 “看到”之前,无法使用新命令覆盖所述QE。这防止了核心210、211和213 尝试访问已被覆盖并且因此存储预期不同信息的QE。在该示例中,主机202指向下一可用队列元素空位QE_6 226。核心-0210和核 心-1 211被示为指向QE_3 223或正在执行与QE_3 223关联的命令,核心-2 222被示为 执行与QE_5 225关联的命令,以及核心-3 213被示为执行与QE_4 224关联的命令。下面 将结合图5-8更详细地说明各种指针的含义以及命令队列204中存储的命令的执行。应指出的是,NDR是包括多维工作组/工作项的命令。NDR(尽管与特定命令关联) 可以全部包含在诸如QE 221-228之类的单个QE内,但这不是必须的。QE包含命令,所述命 令可以是但不限于NDR、任务或队列大小调整指示。所披露的技术还提供将具有多个工作组 的单个命令置于多个QE中,使得命令在多个处理组之间交织(参阅图5)。图4的图示可被 视为只包括一个处理组的简化示例。图5是从不同于图4的命令队列204的角度示出命令队列230的示例的方块图。具 体而言,命令队列230被示为分成N维范围(NDR)命令和任务命令。换言之,被指定为包括 多个工作组的命令被分成一个或多个N维范围。一个特定命令被分为两个NDR :NDR_A1 231 和NDR_A2 232。NDR_A1 231和NDR_A2 232都表示单个命令,因此共享计数器块CB_1241。 一个命令在命令队列230中具有两个表项,以允许在队列230中处理组之间交织命令。在 图5中,由核心131-133表示的处理组处理奇数表项,处理组250处理偶数表项。这种职责 划分有助于减轻对共享任务计数器块的竞争。在该示例中,将单个命令分为两个表项NDR_ Al 231和NDR_A2232使得两个处理组都能执行该命令。另一命令也被分为两个NDR :NDR_ Bl 236和NDR_B2 237。此外,任务命令可以被视为包含一(1)个工作组的NDR。还示出了与相应命令关联的单个任务,即,任务_A 233、任务_B 234和任务_C 235。每个任务233-235都与相应的QE关联。采用计数器块(CB,具体地说,CB_1 241、CB_2 242、CB_3 243、CB_4 244和CB_5 245)来跟踪命令的执行,其中每个块对应于相关的NDR。 在该示例中,CB_1 241跟踪与NDR 231和232关联的命令的执行,CB_5 245跟踪与NDR 236 和237关联的命令的执行。图5中还包括处理核心131-133 (图2)以及与处理组250关联的其他核心,从核 心_N+1 134到核心_2N 135。处理组250可以是CPU 104(图1和2)或诸如与CPU 104可通信地耦合的服务器122 (图2)之类的其他计算设备中的其他处理器。尽管示出了两(2) 个处理组,但是处理组的数目不受限制。处理组可以包括处理器核心、线程或甚至跨网络的 系统。处理器分组可依赖于诸如性能和/或位置或元素之类的因素。在该示例中,核心_0 131执行NDR_A1 231,核心_N 133执行任务_々233,以及核心134和135处理NDR_A2 232。 下面将结合图6和7更详细地说明与计数器块、NDR、任务和处理核心关联的处理。图6是示出主机控制过程280的示例的流程图。在该示例中,与过程280关联的 逻辑存储在数据存储装置112 (图1)上并在CPU 104(图1和2)上与CQS 116(图1) 一起 执行。处理280从“开始主机流”方块282开始并立即继续到“接收命令”方块284。在方块284,过程280接收要在命令队列上发布的命令,出于以下示例的目的,所 述命令队列为命令队列230。可以从各种源传送命令,所述源包括但不限于该示例中在客户 机系统102上执行的OS 114(图1)和任何应用(未示出)及实用程序(未示出)。此外, 可以从诸如服务器122之类的远程源传送命令。在“2个空位可用? ”方块286,过程280判 定命令队列230是否具有至少两(2)个可用空位。为了避免中止命令队列主机(出于此示 例的目的,所述命令队列主机为主机202 (图4)),每当可用于输入新命令的表项少于两(2) 个时,将调整命令队列230的大小。通过预先查看,主机202可以判定命令队列230是否具 有足够的空间来容纳新命令而不强制阻止下一次排队。如果在接收到排队新命令的请求时可用块少于两(2)个,则过程280继续到“创建 新队列”方块288,将在此创建新的更大的队列(未示出)。如果命令队列230上至少有两 个位置可用,则可以使用其中一个位置排队在方块284接收的命令,留下一个空间以防阻 止下一接收的命令。在“添加大小调整命令”方块290,插入大小调整命令和执行单元访问新队列所需 的信息作为当前队列中的最后剩余位置。通过此方式,命令队列过程(参阅过程200,图7) 可以收到通知并采取必要的步骤来使用新队列(参阅310,图7)。为了在下面的说明中保 持连续性,新队列仍被称为命令队列230。一旦发现在方块290插入了大小调整命令,或者 如果在方块286,过程280判定至少有两(2)个队列位置可用,则过程280继续到“将命令 添加到队列”方块292。在方块292,在方块284接收的命令被添加为新队列中的第一表项 (通过方块290)或被插入当前命令队列230 (通过方块286)。在“递增指针”方块294,过 程300将指针从主机202递增到下一可用QE。最后,通过异步中断298停止过程280,所述中断将控制传递到“结束主机控制”方 块299,在此方块,过程280完成。通常,在OS 114 (图1)或过程280为其一部分的CQS 116 自身停止时生成中断298。在名义操作期间,过程280连续遍历方块284、286、288、290、292 和294,在收到命令时处理所述命令。图7是示出可用于实现要求保护的主题的执行命令过程300的示例的流程图。在 该示例中,与过程300关联的逻辑存储在数据存储装置112(图1)上并在CPU 104(图1和 2)上与CQS 116(图1) 一起执行。过程300从“开始执行命令”方块302开始并立即继续到“等待工作”方块304。 在方块304,过程300处于挂起状态,等待CQS 116发出的指示诸如命令队列204(图4)或 230(图5)之类的命令队列上具有一个或多个命令的信号。为了进行下面的说明,将使用 命令队列230。用于通知诸如核心131-135(图5)之类的执行单元和过程300命令可用的机制可随系统配置和工作负荷而变化。热轮询下一可用命令的状态针对不大量消耗资源轮 询的系统提供了较高的效率。例如,SPU单元可以对包含下一要处理的命令的命令队列230 的表项执行原子轮询。在轮询消耗宝贵计算周期的CPU上,可以使用条件变量。一旦收到 命令位于队列230上的信号,过程300便继续到“取回命令”方块306,在此方块上,从命令 队列230中表示下一可用命令的位置检索第一命令。与命令相关的信息(参阅CDM0150,图 3)存储在诸如CB 241-245 (图5)之类的计数器块中。在“大小调整命令”方块308,过程300判定在方块306取回的命令是否表示已调 整命令队列230的大小(参阅过程280,图6)的指示。如果是,则过程300继续到“处理大 小调整”方块310,在此方块,执行处理以使用新的或调整大小后的队列而非旧的队列(参 阅图6)。过程300然后返回到方块306,从新的队列取回下一命令并如上文所述继续处理。如果在方块308期间,过程300判定下一要执行的命令不指示调整大小后的命令 队列230,则控制继续到“确定集合大小”方块312,在方块312,过程300确定相应命令的 已配置工作组大小(参阅CDMO 150的166,图3)。当然,所述命令可以是任务,所述任务 可被视为只有一(1)个工作组并且保留大小为一(1)。在“递减工作组(WG)集合大小”方 块314,与在方块306取回的命令的执行关联的每个执行单元递减存储该命令内仍需处理 的工作组数目的变量(参阅⑶0 150的162,图3)。出于此示例的目的,使用了执行单元 131-135(图2和5)。每个执行单元131-135自动执行方块314,以便在另一单元访问和递 减变量之前通过一个单元完全更新变量。所递减的值为相应执行单元131-135提供了要由 该特定单元执行的特定命令内的NSR范围的基值。通过这种方式,每个执行单元可以在主 机介入最少的情况下,控制其执行NDR中的工作组的数目。换言之,在执行单元之间划分命 令,以便每个执行单元根据需要请求工作并且完全能够获知何时继续到下一命令。在“剩余工作组? ”方块316,过程300判定是否存在任何待处理的工作组(在当前 执行单元已执行操作之后),即作为方块314的操作的结果,变量162的值是否等于或小于 0。如果属性等于或小于0并且其绝对值也小于reservationSize 166 (图3)的绝对值,则 执行单元具有命令的最后要处理的工作组并且可能是不完整集合。在这种情况下,过程300 继续到“处理部分工作组”方块320,在此方块,处理在方块314检索的基础范围所标识的剩 余工作组。如果属性162等于或小于0并且其绝对值大于或等于reservationSize 166 (图 3)的绝对值,则执行单元获知已处理所有工作组并继续到方块320,但是不处理工作组。如果在方块316,属性162被确定为大于0,则过程300继续到“处理工作组项”方 块318。在方块318,相应的执行单元131-133负责执行从方块314中确定的NDR的基础范 围开始的保留大小的工作组。过程300然后返回到方块314,在此方块,如上文所述继续处 理。在“递增已完成工作组数”方块322,每个执行单元将指示已完成工作组总数的变 量(参阅164,图3)自动递增特定执行单元131-135根据在遍历方块314、316、318和320 期间在方块306接收的命令而处理的工作组数目。在“已完成工作组=总数? ”方块324,每个执行单元判定完成的工作组数目(参 阅164,图3)是否等于命令中的工作组数目(参阅160,图3)。如果等于,则相应的执行单 元131-133继续到“发信号通知完成”方块326。在方块326,执行单元131-135发出信号 通知CQS 116已处理所有与命令关联的工作组。通过此方式,只有完成命令的执行单元才发出信号通知CQS 116,从而避免重复信号。除了上述处理,每个操作命令队列230的执行单元131-135还执行“将命令标记为 已看到”方块328,在方块328,每个执行单元131-135递增跟踪已看到特定命令的执行单 元的数目的变量(参阅170,图3)。要指出的是,执行单元并非一定要实际处理特定命令才 能看到该命令,例如,如果分配给特定命令的线程数目(参阅168,图3)超过完成该命令实 际所需的单元数目,也能看到该命令。一旦在方块328将命令标记为已看到,每个执行单元 133-135就返回到方块304并如上文所述继续处理。最后,通过异步中断338停止过程300,异步中断338将控制传递到“结束执行命 令”方块339,在此方块,过程300完成。通常,在OS 114(图1)或过程300为其一部分的 CQS 116自身停止时生成中断338。在名义操作中,过程300连续遍历方块302、304、306、 308、310、312、314、316、318、320、322、324、326 和 328,在收到命令时处理所述命令。图8是示出实现要求保护的主题的一个方面的命令完成过程350的示例的流程 图。在该示例中,与过程350关联的逻辑存储在数据存储装置112 (图1)上并在CPU 104 (图 1和2)上与CQS 116(图1) 一起执行。过程350从“开始命令完成”方块352开始并立即继续到“等待工作”方块354。在 方块354,过程350处于暂停状态,等待指示已执行命令的信号(参阅326,图7)。一旦收到信号,过程350便继续到“过程执行完成? ”方块356。在方块356,过程 350判定在方块350针对其接收到信号的命令是否表示命令完成。如果否,则过程350继续 到“过程大小调整完成? ”方块358,在此方块,过程350判定方块354中接收的信号是否表 示已完成命令队列230的大小调整的指示。具体而言,判定每个执行单元是否已看到大小 调整命令并切换到调整大小后的队列。如上结合图6所述,命令队列230包括命令并可能 包括已执行命令队列230的大小调整的指示。如果所有适当执行单元都已看到大小调整命 令,则过程350继续到“删除旧队列”方块360,在此方块,删除已被调整大小后的队列替换 的队列。如果过程350在方块356判定收到的信号表示已完成的命令,则控制继续到“发布 完成”方块362,在此方块,通知CQS 116相应的执行单元已完成命令。在“将队列表项(QE) 标记为完成”方块364,过程350将相应队列表项标记有相应执行单元已完成命令的指示。一旦在方块326将命令队列230中的相应表项标记为完成,或者已相对于方块358 和360完成处理,过程350便返回到方块354等待另一信号并如上文所述继续处理。最后, 通过异步中断368停止过程350,异步中断368将控制传递到“结束命令完成”方块369,在 此方块,过程350完成。通常,在OS 114(图1)或过程350为其一部分的CQS 116自身停 止时生成中断368。在名义操作中,过程350连续遍历方块352、354、356、358、360、362和 364,在收到命令时处理所述命令。此处使用的术语只是为了描述特定的实施例并且并非旨在限制本发明。如此处所 使用的,单数形式“一”、“一个”和“该”旨在同样包括复数形式,除非上下文明确地另有所 指。还将理解,当在此说明书中使用时,术语“包括”和/或“包含”指定了声明的特征、整 数、步骤、操作、元素和/或组件的存在,但是并不排除一个或多个其他特征、整数、步骤、操 作、元素、组件和/或其组的存在或增加。以下的权利要求中的对应结构、材料、操作以及所有装置或步骤加功能元素的等同物,旨在包括任何用于与在权利要求中具体指出的其它元素相组合地执行该功能的结 构、材料或操作。所给出的对本发明的描述其目的在于示意和描述,并非是穷尽性的,也并 非是要把本发明限定到所表述的形式。对于所属技术领域的普通技术人员来说,在不偏离 本发明范围和精神的情况下,显然可以作出许多修改和变型。对实施例的选择和说明,是为 了最好地解释本发明的原理和实际应用,使所属技术领域的普通技术人员能够明了,本发 明可以有适合所要的特定用途的具有各种改变的各种实施方式。 附图中的流程图和方块图示出了根据本发明的各种实施例的系统、方法和计算机 程序产品的可能实现方式的体系结构、功能和操作。在此方面,流程图或方块图中的每个方 块都可表示包括用于实现指定逻辑功能(多个)的一个或多个可执行指令的模块、段或代 码部分。还应指出的是,在某些备选实现方式中,方块中注明的功能可以不按照附图中注明 的顺序执行。例如,连续示出的两个方块可实际上基本同时执行,或者所述方块有时按照相 反的顺序执行,具体取决于所涉及的功能。还应指出的是,方块图和/或流程图中的每个方 块以及方块图和/或流程图中的方块的组合可以由执行指定功能或操作的基于专用硬件 的系统实现,或者由专用硬件和计算机指令的组合实现。
权利要求
1.一种方法,包括生成第一命令队列以便排队到计算设备的命令; 将命令发布到所述第一命令队列,其中所述命令包括多个工作组; 将数据结构与所述命令关联,所述数据结构标识了所述多个工作组、与所述命令对应 的保留大小、存储工作组的数目的计数器以及存储待处理工作组的数目的计数器;由多个执行单元中的每个执行单元保留所述多个工作组的不同N维范围,其中所述N 维范围对应于所述保留大小;由所述多个执行单元中的每个执行单元处理对应的N维范围;将所述存储待处理工作组的数目的计数器递减每个执行单元已处理的工作组的数目;重复保留、处理和递减步骤,直到所述存储待处理工作组的数目的计数器小于或等于 值“0”;以及当所述存储待处理工作组的数目的计数器小于或等于值“0”时,发出信号以指示所述 命令完成。
2.如权利要求1中所述的方法,还包括由所述多个执行单元中的一个执行单元检测所述存储待处理工作组的数目的计数器 小于或等于值“0”以及检测所述存储待处理工作组的数目的计数器的绝对值小于或等于所 述保留大小的绝对值;其中仅由所述一个执行单元执行发出信号。
3.如权利要求1中所述的方法,其中所述数据结构还包括存储预期看到所述命令的执 行单元的数目的计数器以及存储已看到所述命令的执行单元的数目的计数器,所述方法还 包括当所述存储待处理工作组的数目的计数器小于或等于“0”并且所述存储已看到所述 命令的执行单元的数目的计数器等于所述存储预期看到所述命令的执行单元的数目的计 数器时,从所述第一命令队列释放与所述命令对应的表项。
4.如权利要求1中所述的方法,其中所述多个执行单元中的每个执行单元是任何执行 命令的计算设备,其中包括处理核心、处理器、处理线程和完整的计算系统。
5.如权利要求1中所述的方法,还包括判定所述命令队列中是否存在两个可用空位来输入入站命令; 如果判定所述命令队列中存在至少两个可用空位来输入所述入站命令,则使所述入站 命令进入所述命令队列;以及如果判定所述第一命令队列中不存在至少两个可用空位来输入所述入站命令,则创建 第二命令队列;以及使用所述第二命令队列替代所述第一命令队列。
6.如权利要求5中所述的方法,所述替代包括 在所述第一队列中输入队列大小调整指示; 使所述入站命令进入所述第二命令队列;以及当在执行所述第一队列中的命令的过程中检测到所述队列大小调整指示时,使用所述 第二队列替换所述第一队列。
7.如权利要求6中所述的方法,还包括一旦所述替代完成,则删除所述第一队列。
8.一种装置,包括 处理器;与所述处理器相连的物理存储器; 多个执行单元;以及存储在所述存储器上并在所述处理器上执行的逻辑,所述逻辑用于执行以下操作 生成第一命令队列以便排队到所述执行单元的命令; 将命令发布到所述第一命令队列,其中所述命令包括多个工作组; 将数据结构与所述命令关联,所述数据结构标识了所述多个工作组、与所述命令对应 的保留大小、存储工作组的数目的计数器、存储待处理工作组的数目的计数器,以及存储已 处理工作组的数目的计数器;由所述多个执行单元中的每个执行单元保留所述多个工作组的不同N维范围,其中所 述N维范围对应于所述保留大小;由所述多个执行单元中的每个执行单元处理对应的N维范围;将所述存储待处理工作组的数目的计数器递减每个执行单元已保留的工作组的数目;将所述存储已处理工作组的数目的计数器递增每个执行单元已处理的工作组的数目;重复保留、处理和递减操作,直到所述存储待处理工作组的数目的计数器小于或等于 值“0”;以及当所述存储已处理工作组的数目的计数器等于所述存储工作组的数目的计数器时,发 出信号以指示所述命令完成。
9.如权利要求8中所述的装置,所述逻辑还包括用于执行以下操作的逻辑由所述多个执行单元中的一个执行单元检测所述存储待处理工作组的数目的计数器 小于或等于值“0”以及检测所述存储待处理工作组的数目的计数器的绝对值小于或等于所 述保留大小的绝对值;以及由所述一个执行单元处理任何剩余工作组。
10.如权利要求8中所述的装置,其中所述数据结构还包括存储预期看到所述命令的 执行单元的数目的计数器以及存储已看到所述命令的执行单元的数目的计数器,所述逻辑 还包括用于执行以下操作的逻辑当所述存储已处理工作组的数目的计数器等于所述存储 工作组的数目的计数器并且所述存储已看到所述命令的执行单元的数目的计数器等于所 述存储预期看到所述命令的执行单元的数目的计数器时,从所述第一命令队列释放与所述 命令对应的表项。
11.如权利要求8中所述的装置,其中所述多个执行单元中的每个执行单元是任何执 行命令的计算设备,其中包括处理核心、处理器、处理线程和完整的计算系统。
12.如权利要求8中所述的装置,所述逻辑还包括用于执行以下操作的逻辑 判定所述命令队列中是否存在两个可用空位来输入入站命令;如果判定所述命令队列中存在至少两个可用空位来输入所述入站命令,则使所述入站 命令进入所述命令队列;以及如果判定所述第一命令队列中不存在至少两个可用空位来输入所述入站命令,则创建第二命令队列;以及使用所述第二命令队列替代所述第一命令队列。
13.如权利要求12中所述的装置,用于替代的逻辑包括用于执行以下操作的逻辑 在所述第一队列中输入队列大小调整指示;使所述入站命令进入所述第二命令队列;以及当在执行所述第一队列中的命令的过程中检测到所述队列大小调整指示时,使用所述 第二队列替换所述第一队列。
14.如权利要求13中所述的装置,还包括一旦所述替代完成,则删除所述第一队列。
15.一种计算机编程产品,包括物理存储器;存储在所述存储器上以在处理器上执行 从而实现权利要求1至7中所述的任一方法的任何步骤的逻辑。
全文摘要
本发明涉及一种多核/线程工作组计算调度器。执行单元处理一个或多个命令队列中的命令。一旦可在队列上提供命令,参与执行命令的每个单元自动将命令的剩余工作组计数器递减工作组保留大小并处理工作组范围内相应数目的工作组。处理了范围内的所有工作组之后,执行单元递增已处理工作组计数器。将已处理工作组计数器递增到待执行工作组计数器中存储的值的单元发出命令完成信号。每个访问命令的执行单元还标记所看到工作组计数器。一旦已处理工作组计数器等于待执行工作组计数器并且所看到工作组计数器等于执行单元数,可删除或覆盖所述命令队列上的命令。
文档编号G06F9/38GK102004630SQ201010268679
公开日2011年4月6日 申请日期2010年8月30日 优先权日2009年8月31日
发明者B·D·瓦特, B·G·亚历山大, G·H·比洛斯, J·马德鲁加 申请人:国际商业机器公司